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

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

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

数据库设计

首先创建一个表来存储用户签到信息
在这里插入图片描述

接口controller层

1、查询用户签到信息(前端用户展示第几天签到)
在这里插入图片描述
2、查看今日是否签到(前端用于签到按钮是否隐藏)
Java实现简单的七日签到信息_第1张图片
3、点击签到
Java实现简单的七日签到信息_第2张图片

业务层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实现简单的七日签到信息_第3张图片

你可能感兴趣的:(Java)