本文实例为大家分享了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 JSON  doSign(Integer accid) {
    JSON  result = new JSON ();
    Map<String,  > 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 JSON  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);
    JSON  result = new JSON ();
    Map<String,  > 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<String,  > signGift(Integer accid) {
    HashMap result = new HashMap();
    JSON  data = new JSON ();
    String signDetail = \"\";
    SimpleDateFormat sdf = new SimpleDateFormat(\"yyyy-MM-dd\");
    try {
      Account account = accountService.getAccount(accid);
      SignCalc signCalc = signService.getSignCalc(accid);
      List<Map<String, String>> 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<String, String> map : list) {
            for (Map.Entry<String, String> 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;
  }

效果如下:

\"\"

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

收藏 打印