用java语言设计app签到功能

1.首先设计二张表,第一张表sign_calc记录用户连续签到次数,字段id,user_id,continue_days,第二张表sign_detail签到详情表id,user_id,sign_date。
2.app端用户点击签到接口controller如下:

/***
     * app签到接口
     * @author xuhaibo
     * @param accid
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/doSign")
    public JSONObject doSign(Integer accid) {
        JSONObject result = new JSONObject();
        Map data = new HashMap<>();
        if (!CinemaConstants.ACCID_MAP.contains(accid)) {
            Integer previousId = CinemaConstants.ACCID_MAP.put(accid, accid);
            if (previousId == null) {
                try {
                    /****
                     * 查询用户今日的签到
                     */
                    SignDetail signToday = signService.todayDetail(accid);//
                    System.out.println(signToday);
                    if (signToday == null) {//今天未签到 1:查询本月昨日签到情况
                        SignDetail signDetail_yesterday = signService.yesterdayDetail(accid);
                        SignCalc signCalcGet = signService.getSignCalc(accid);
                        if (signDetail_yesterday == null) {
                            SignDetail signDetail = new SignDetail();
                            signDetail.setUser_id(accid);
                            signDetail.setSign_date(new Date());
                            signService.addSignDetail(signDetail);
                            if (signCalcGet == null) {
                                SignCalc signCalc = new SignCalc();
                                signCalc.setUser_id(accid);
                                signCalc.setContinue_days(1);
                                signService.addSignCalc(signCalc);
                            } else {
                                SignCalc signCalc = new SignCalc();
                                signCalc.setUser_id(accid);
                                signCalc.setContinue_days(1);
                                signService.updateSignCalc(signCalc);
                            }
                            Integral integral = new Integral();
                            integral.setSourceId(0);
                            integral.setUserId(accid);
                            integral.setScore(CinemaConstants.INTEGRAL_TYPE_SIGN_SCORES);
                            integral.setCreateTime(new Date());
                            integral.setNote(CinemaConstants.INTEGRAL_TYPE_SIGN_DESCRIBE);
                            integral.setSourceType(CinemaConstants.INTEGRAL_TYPE_SIGN);
                            integralService.add(integral);
                            accountService.addIntegralByUserId(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_SCORES);
                            result.put(Constants.RESULT_CODE, "00");
                            data.put("data", "签到成功");
                        } else {//昨日已签到
                            SignDetail signDetail = new SignDetail();
                            SignCalc signCalc = new SignCalc();
                            signDetail.setUser_id(accid);
                            signDetail.setSign_date(new Date());
                            signService.addSignDetail(signDetail);
                            signCalc.setUser_id(accid);
                            signCalc.setContinue_days(signCalcGet.getContinue_days() + 1);
                            signService.updateSignCalc(signCalc);
                            Integral integral = new Integral();
                            integral.setUserId(accid);
                            integral.setSourceId(0);
                            integral.setScore(CinemaConstants.INTEGRAL_TYPE_SIGN_SCORES);
                            integral.setNote(CinemaConstants.INTEGRAL_TYPE_SIGN_DESCRIBE);
                            integral.setCreateTime(new Date());
                            integral.setSourceType(CinemaConstants.INTEGRAL_TYPE_SIGN);
                            integralService.add(integral);
                            accountService.addIntegralByUserId(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_SCORES);
                            result.put(Constants.RESULT_CODE, "00");
                            data.put("data", "签到成功");
                        }
                    } else {//当日已签到
                        result.put(Constants.RESULT_CODE, "-1");
                        data.put("data", "当日已签到");
                    }
                    result.put("data", data);
                } catch (Exception e) {
                    e.printStackTrace();
                    result.put(Constants.RESULT_CODE, "-1");
                    result.put("data", "服务器错误");
                }
                CinemaConstants.ACCID_MAP.remove(accid);
            } else {
                result.put(Constants.RESULT_CODE, "-1");
                result.put("data", "操作正在进行,请重试");
            }
        } else {
            result.put(Constants.RESULT_CODE, "-1");
            result.put("data", "操作正在进行,请重试");
        }
        return result;
    }

领取连续签到奖励接口:

/***
     * 领取连续签到奖励接口(7天,15天,30天)
     * @param accid
     * @param signType
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/getSignGift")
    public JSONObject getSeven(Integer accid, Integer signType) {
        Calendar a = Calendar.getInstance();
        a.set(Calendar.DATE, 1);//把日期设置为当月第一天
        a.roll(Calendar.DATE, -1);//日期回滚一天,也就是最后一天
        int maxDate = a.get(Calendar.DATE);
        System.out.print(maxDate);
        JSONObject result = new JSONObject();
        Map data = new HashMap<>();
        if (!CinemaConstants.ACCID_MAP.contains(accid)) {
            Integer previousId = CinemaConstants.ACCID_MAP.put(accid, accid);
            if (previousId == null) {
                try {
                    SignCalc signCalc = signService.getSignCalc(accid);
                    int signServen = integralService.signQuery(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_7);
                    int signFifteen = integralService.signQuery(accid,  CinemaConstants.INTEGRAL_TYPE_SIGN_15);
                    int signThirty = integralService.signQuery(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_30);
                    if (signServen==0&&signType == 7 && signCalc.getContinue_days() >= 7) {
                        Integral integral = new Integral();
                        integral.setUserId(accid);
                        integral.setNote(CinemaConstants.INTEGRAL_TYPE_SIGN_7_DESCRIBE);
                        integral.setScore(CinemaConstants.INTEGRAL_TYPE_SIGN_7_SCORES);
                        integral.setCreateTime(new Date());
                        integral.setSourceType(CinemaConstants.INTEGRAL_TYPE_SIGN_7);
                        integralService.add(integral);
                        accountService.addIntegralByUserId(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_7_SCORES);
                        result.put(Constants.RESULT_CODE, "00");
                        data.put("data", "领取成功");
                    } //
                    else if (signFifteen==0&&signType == 15 && signCalc.getContinue_days() >= 15) {
                        Integral integral = new Integral();
                        integral.setUserId(accid);
                        integral.setNote(CinemaConstants.INTEGRAL_TYPE_SIGN_15_DESCRIBE);
                        integral.setScore(CinemaConstants.INTEGRAL_TYPE_SIGN_15_SCORES);
                        integral.setCreateTime(new Date());
                        integral.setSourceType(CinemaConstants.INTEGRAL_TYPE_SIGN_15);
                        integralService.add(integral);
                        accountService.addIntegralByUserId(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_15_SCORES);
                        result.put(Constants.RESULT_CODE, "00");
                        data.put("data", "领取成功");
                    } else if (signThirty==0&&signType == 30 && signCalc.getContinue_days() >= maxDate) {
                        Integral integral = new Integral();
                        integral.setUserId(accid);
                        integral.setNote(CinemaConstants.INTEGRAL_TYPE_SIGN_30_DESCRIBE);
                        integral.setScore(CinemaConstants.INTEGRAL_TYPE_SIGN_30_SCORES);
                        integral.setCreateTime(new Date());
                        integral.setSourceType(CinemaConstants.INTEGRAL_TYPE_SIGN_30);
                        integralService.add(integral);
                        accountService.addIntegralByUserId(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_30_SCORES);
                        result.put(Constants.RESULT_CODE, "00");
                        data.put("data", "领取成功");
                    } else {
                        result.put(Constants.RESULT_CODE, "-1");
                        data.put("msg", "已领取或未到标");
                    }
                    result.put("data", data);
                } catch (Exception e) {
                    e.printStackTrace();
                    result.put(Constants.RESULT_CODE, "-1");
                    result.put("data", "服务器错误");
                }
                CinemaConstants.ACCID_MAP.remove(accid);
            } else {
                result.put(Constants.RESULT_CODE, "-1");
                result.put("data", "操作正在进行,请重试");
            }
        } else {
            result.put(Constants.RESULT_CODE, "-1");
            result.put("data", "操作正在进行,请重试");
        }
        return result;
    }

签到页面的接口:

/***
     * 签到页面app端接口
     * @param accid
     * @return
     */
    @RequestMapping(value = "/signGift")
    @ResponseBody
    public Map signGift(Integer accid) {
        HashMap result = new HashMap();
        JSONObject data = new JSONObject();
        String signDetail = "";
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        try {
            Account account = accountService.getAccount(accid);
            SignCalc signCalc = signService.getSignCalc(accid);
            List> list = signService.getDetailById(accid);
            System.out.println(list);
            String countDate = signService.countDate(accid);
            if (account == null) {
                result.put(Constants.RESULT_CODE, "-1");
                result.put("data", "没数据");
            } else {
                String[] strings = account.getAvatar().split(".png");
                data.put("nick_name", account.getNick_name());//昵称
                data.put("avatar", strings[0]);
                data.put("integral", account.getIntegral());//总积分
                data.put("count_date", countDate);//累计签到天数
                if (list.size() > 0) {
                    for (Map map : list) {
                        for (Map.Entry entry : map.entrySet()) {
                            String value = sdf.format(entry.getValue());
                            signDetail += value + ",";
                        }
                    }
                }
                int j = signDetail.lastIndexOf(",");
                signDetail = signDetail.substring(0, j);
                data.put("sign_date", signDetail);//签到明细
            }
            data.put("sign_today", true);
            int signServen = integralService.signQuery(accid,  CinemaConstants.INTEGRAL_TYPE_SIGN_7);
            if (signCalc.getContinue_days() < 7) {
                data.put("sign_seven", "0");//未达标
            } else if (signServen>0) {
                data.put("sign_seven", "2");//已领取
            } else {
                data.put("sign_seven", "1");//未领取
            }
            int signFifteen = integralService.signQuery(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_15);
            if (signCalc.getContinue_days() < 15) {
                data.put("sign_fifteen", "0");//未达标
            } else if (signFifteen > 0) {
                data.put("sign_fifteen", "2");//已领取
            } else {
                data.put("sign_fifteen", "1");//未领取
            }
            int signThirty = integralService.signQuery(accid, CinemaConstants.INTEGRAL_TYPE_SIGN_30);
            if (signCalc.getContinue_days() < 30 ) {
                data.put("sign_thirty", "0");//未达标
            } else if (signThirty>0) {
                data.put("sign_thirty", "2");//已领取
            } else {
                data.put("sign_thirty", "1");//未领取
            }
            result.put(Constants.RESULT_CODE, "00");
            result.put("data", data);
        } catch (Exception e) {
            e.printStackTrace();
            result.put(Constants.RESULT_CODE, "-1");
            result.put("data", "数据获取异常");
        }
        return result;
    }

效果如下:
用java语言设计app签到功能_第1张图片

你可能感兴趣的:(面试)