Java实现简单的七日签到信息

  • 数据库设计
  • 接口controller层
  • 业务层Service
  • 效果图


数据库设计

首先创建一个表来存储用户签到信息

java程序的签到系统 java员工打卡签到代码_java

接口controller层

1、查询用户签到信息(前端用户展示第几天签到)

java程序的签到系统 java员工打卡签到代码_List_02


2、查看今日是否签到(前端用于签到按钮是否隐藏)

java程序的签到系统 java员工打卡签到代码_List_03


3、点击签到

java程序的签到系统 java员工打卡签到代码_后端_04

业务层Service

1、查询签到信息

@Override
    public int signMsg() {
        long uid = userToken.getUserId();
        List<SigninMsg> signMsg = msgMapper.selectList(new EntityWrapper<SigninMsg>()
                .eq("uid", uid)
                .orderBy("create_time").last("desc"));

        // 如果未有签到信息 从第一天开始签到
        if (signMsg.isEmpty()) {
            return 0;
        }
        // 获得最后一次签到的时间
        int day = signMsg.get(0).getTime();
        Date date = signMsg.get(0).getCreateTime();
        // 判断 如果上次签到时间与今日相差大于一天 。则掉签
        if (DateUtils.differentDaysByMillisecond(date, new Date()) > 1) {
            return 0;
        }
        // 签满七天则 从第一天重新开始
        if (day > 7) {
            return 0;
        }
        // 如果 相差时间不大于一天 且 未签满 七天 则续签
        return day;
    }

2、查看今日是否签到

@Override
    public int checkSignToday() {
        long uid = userToken.getUserId();

        List<SigninMsg> signs = msgMapper.selectList(new EntityWrapper<SigninMsg>()
                .eq("uid", uid));
        if (signs.isEmpty()) {
            return 0;
        }
        // 获得最后一次签到的时间
        Date date = signs.get(0).getCreateTime();
        if (DateUtils.greaterDate(new Date(), date)) return 0;

        return 1;
    }

3、点击签到

@Override
    @Transactional(rollbackFor = Exception.class)
    public int sign(int number, int day) {
        if (number > 10) {
            throw new CustomException("签到奖励不能超过10");
        }
        long uid = userToken.getUserId();

        List<SigninMsg> signMsg = msgMapper.selectList(new EntityWrapper<SigninMsg>()
                .eq("uid", uid).orderBy("create_time").last("desc"));
        // 如果没有签到信息 从第一天开始签到
        if (signMsg.isEmpty()) {
            SigninMsg msg = new SigninMsg();
            msg.setTime(Constant.USER_ON_LINE);
            msg.setUid(uid);
            msg.setCreateTime(new Date());
            msgMapper.insert(msg);
            insertForceBill(uid, number, Constant.YLBillKey.SIGN_BILL, Constant.YLBillType.MAGIC);
            return day;
        }
        // 获得最后一次签到的时间
        Date date = signMsg.get(0).getCreateTime();
        // 判断今日是否签到过
        boolean flag = DateUtils.greaterDate(new Date(), date);

        if (!flag) throw new CustomException("未满签到时间");

        SigninMsg msg = new SigninMsg();
        msg.setUid(uid);
        msg.setTime(day);
        msg.setCreateTime(new Date());
        msgMapper.update(msg, new EntityWrapper<SigninMsg>().eq("uid", uid));
     
        return day;
    }

效果图

java程序的签到系统 java员工打卡签到代码_spring_05