java实现app签到功能

本文实例为大家分享了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<String, Object> 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<String, Object> 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, Object> 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<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;
  }

效果如下:

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

(0)

相关推荐

  • Android简单实现app每月签到功能

    本文实例为大家分享了Android实现app每月签到功能的具体代码,供大家参考,具体内容如下 先上一张效果图: 其中这些签到的效果图是在网上找的,然后重要用到的控件就是 GridvVew 了, 代码很简单,只有3个代码文件: MainActivity.class 文件 package zhanghuan.cn.checkdesign; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import

  • Android可签到日历控件的实现方法

    最近在公司的功能需求中,需要实现可以签到的日历,签到后在签到过的日期做标志.本功能参考了网上一些大神的日历控件,在此基础上进行修改,已满足本公司的需求,现已完成,记录一下. 布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_wi

  • Android基于AccessibilityService制作的钉钉自动签到程序代码

    前两天公司开始宣布要使用阿里钉钉来签到啦!!!~~这就意味着,我必须老老实实每天按时签到上班下班了,这真是一个悲伤的消息,可是!!!!那么机智(lan)的我,怎么可能就这么屈服!!!阿里钉钉签到,说到底不就是手机软件签到吗?我就是干移动开发的,做一个小应用每天自动签到不就行了:) 说干就干,首先分析一下,阿里钉钉的签到流程: 打开阿里钉钉->广告页停留2S左右->进入主页->点击"工作"tab->点击"签到"模块->进入签到页面(可能会

  • Android积分签到上移消失动画效果

    还记得以前在某云的时候,有次需求是一个积分签到,要求点击签到按钮然后有一个动画效果,比如+30积分然后慢慢往上移动在消失.那会不会做就想着改下需求,直接去掉了动画效果,而今时隔很久又遇到同样的问题,比较蛋疼的是我清楚记得当时做过这个功能,但是自己没有做出来,当然现在做还是不会.自己当年省写的代码含泪也要补上.这次吸取教训,实现这个效果. 大致思路:动画部分,由一个垂直的平移和一个透明度变化的两个动画组成.然后通过AnimationSet将两个动画添加到集合,然后开始播放动画. 更新UI部分,用的

  • Android实现带签到赢积分功能的日历

    Android实现点击签到按钮直接签到,弹出dialog,先上效果图 demo是利用gridview实现的,现附上布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent&qu

  • java实现app签到功能

    本文实例为大家分享了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 @R

  • java redis 实现简单的用户签到功能

    业务需求是用户每天只能签到一次,而且签到后用户增加积分,所以把用户每次签到时放到redis 缓存里面,然后每天凌晨时再清除缓存,大概简单思想是这样的 直接看代码吧如下 @Transactional @Override public void signIn(Integer memberId) throws BizException { if(memberId==null){ throw new BizException(ErrorCode.BIZ_EXCEPTION.getErrcode(), "

  • Android项目实战之百度地图地点签到功能

    前言:先写个简单的地点签到功能,如果日后有时间细写的话,会更加好好研究一下百度地图api,做更多逻辑判断. 这里主要是调用百度地图中的场景定位中的签到场景.通过官方文档进行api集成.通过GPS的定位功能,获取地理位置,时间,用户名进行存储.之后通过日历显示历史签到记录. 效果图: /**百度地图sdk**/ implementation files('libs/BaiduLBS_Android.jar') /**日历选择器**/ implementation 'com.prolificinte

  • Python利用Selenium实现网站自动签到功能

    目录 什么是Selenium 前情提要 准备工作 代码及讲解 点击登录 点击跳过弹窗 小结 什么是Selenium 先带领大家学习下Selenium的基本概念吧. Selenium主要用于web应用程序的自动化测试,但并不局限于此,它还支持所有基于web的管理任务自动化. 它的特点如下: 开源,免费 多浏览器支持:Firefox.Chrome.IE等 多平台支持:Linux.Windows.Mac 多语言支持:Java.Python.Ruby.C#.JavaScript.C++ 对web页面有良

  • 使用Jquery实现每日签到功能

    一直想做一个签到功能,但是百度了都没有自己想要的,所以就借着网上搜到的素材然后整合自己之前写的插件layerModel自己整合了一个,大家娱乐娱乐就好! calendar.js var calUtil = { getDaysInmonth : function(iMonth, iYear){ var dPrevDate = new Date(iYear, iMonth, 0); return dPrevDate.getDate(); }, bulidCal : function(iYear, i

  • Android开发微信APP支付功能的要点小结

    基本概念 包名值得是你APP的包,在创建工程时候设置的,需要在微信支付平台上面设置. 签名指的是你生成APK时候所用的签名文件的md5,去掉:全部小写,需要在微信支付平台上面设置. 调试阶段,签名文件可以使用调试用的debug.keystore,签名可以直接在eclipse上面查看,或者用工具查看 ,安装打开输入包名即可查看. 发布的时候一定需要在微信支付平台上面设置成发布用的签名值. 官方的Demo里面的内容并不是全是必须的,甚至只需要有libammsdk.jar就够了,AndroidMani

  • 微信小程序实现签到功能

    本文实例为大家分享了微信小程序实现签到功能的具体代码,供大家参考,具体内容如下 效果图: 今天是16号,所以显示已签到,渲染页面时请求后台传的参数为这月签到的日期 如:["16", "14"] 点击签到执行 calendarSign sign.wxml <!--index.wxml--> <view class="calendar"> <view class='bcfff'> <view class=&q

  • PHP使用redis位图bitMap 实现签到功能

    一.需求 记录用户签到,查询用户签到 二.技术方案 1.使用mysql(max_time字段为连续签到天数) 思路: (1)用户签到,插入一条记录,根据create_time查询昨日是否签到,有签到则max_time在原基础+1,否则,max_time=0 (2)检测签到,根据user_id.create_time查询记录是否存在,不存在则表示未签到 2.使用redis位图功能 思路: (1)每个用户每个月单独一条redis记录,如00101010101010,从左往右代表01-31天(每月有几

  • 微信小程序本地存储实现每日签到、连续签到功能

    昨天在看自己写的小程序项目,无意中打开了CSDN APP,突然间觉得,我去,如果在小程序中加个"签到"功能,岂不美哉!(好吧,其实是买的书昨天没到货,然后闲着无事,就想起了大明湖畔的"签到") 但是吧,又不想写和服务器交互的,本着"简单点"的原则,我想起了曾经的挚爱-- 本地存储 . 先说说相关注意吧: 其一就是 storage中只能存放字符串! 我去,昨晚大部分时间都是在搞这个.以前一直认为存放的是对象,兴致勃勃写完发现点击以后出现了"

随机推荐