java设计按月每天签到_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 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;

}

效果如下:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244935.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c语言第四版课后答案第三章3.4,算法与数据结构C语言版课后习题答案(机械工业出版社)第3,4章 习题参考答案...

第3章栈和队列一、基础知识题3.1 有五个数依次进栈&#xff1a;1&#xff0c;2&#xff0c;3&#xff0c;4&#xff0c;5。在各种出栈的序列中&#xff0c;以3&#xff0c;4先出的序列有哪几个。(&#xff13;在&#xff14;之前出栈)。【解答】34215 &#xff0c;34251&#x…

python面向对象三大基本特性_python面向对象之三大特性

继承 先看个简单的例子了解一下继承。class Animal: #父类 def __init__(self, name, age, department): self.namename self.ageage self.departmentdepartmentdefrunning(self):print(‘%s可以奔跑&#xff01;‘%self.name)class Cat(Animal): #括号里放要继承的父类 def __…

用python做透视表_用Python实现数据的透视表的方法

用Python实现数据的透视表的方法来源&#xff1a;中文源码网 浏览&#xff1a; 次 日期&#xff1a;2019年11月5日【下载文档: 用Python实现数据的透视表的方法.txt 】(友情提示:右键点上行txt文档名->目标另存为)用Python实现数据的透视表的方法在处理数据时&#x…

c语言编程用进退法求搜索区间代码,用c对函数进行优化的问题

//多维无约束优化软件设计#include #include #include double det1e-5; //计算精度double det11e-3; //梯度判断精度double ak3e-3; //搜索步长double dx1e-4; //梯度计算步长/*目标函数(n维)入口参数&#xff1a;x &#xff1a;n维数组&#xff0c;自变量返回值 &#xff1a;函…

python关闭指定浏览器页面_Python自动关闭浏览器关闭网页的方法

在py编辑窗口中输入代码&#xff1a; from selenium.webdriver.chrome.options import Options from selenium import webdriver __browser_url rC:\Users\Administrator\AppData\Roaming\360se6\Application\360se.exe chrome_options Options() chrome_options.binary_loca…

ubuntu 安装kde桌面_在Ubuntu 20.04系统上安装KDE Plasma Desktop的方法

本文介绍在Ubuntu 20.04系统上安装KDE Plasma Desktop的方法。Plasma Desktop是KDE创建的一种流行且功能强大的桌面环境&#xff0c;主要用于Linux系统。KDE Plasma的当前版本是5&#xff0c;它是KDE Plasma 4的后续版本&#xff0c;旨在帮助您以高效的方式完成工作。当Plasma强…

c语言将字母的acsaii,C语言上机实验 答案

《C语言上机实验 答案》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《C语言上机实验 答案(31页珍藏版)》请在装配图网上搜索。1、实验一 上机操作初步(2学时)一、实验方式&#xff1a;一人一机二、实验目的&#xff1a;1、熟悉VC语言的上机环境及上机操作过程。2、了…

python怎么调用列表_Python中列表的使用

python中的列表与java中的数组非常类似&#xff0c;但使用方法比java中数组简单很多&#xff0c;python中的数据类型不需要显示声明&#xff0c;但在使用时必须赋值&#xff0c;列表元素下标从0开始 初始化列表&#xff08;初始化一个包含五个元素的列表和一个空列表&#xff0…

videowriter最小的编码格式_cv2.VideoWriter() 指定写入视频帧编码格式

今天用opencv保存的视频文件超级大&#xff0c;被小伙伴们嘲笑&#xff0c;哈哈&#xff0c;原来是视频帧编码格式导致的&#xff0c;这里记录下常用的保存视频编码格式。编码参数&#xff1a;cv2.VideoWriter_fourcc(‘I‘,‘4‘,‘2‘,‘0‘)---未压缩的YUV颜色编码&#xff…

C语言和JAVA可以互相转换吗,求助大神!!!JAVA转换成C语言

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//此处不要看&#xff0c;c应该内置了这个函数&#xff0c;不需要自定义Array.prototype.remove function(val) {var index this.indexOf(val);if (index > -1) {this.splice(index,1);}};//名称:获取当天上班的人//参数&…

windows消息队列C语言,08年计算机二级C语言辅导:vc操作微软消息队列的方法

定义IMSMQQueuePtr qDest; // Represents Destination QueueIMSMQQueueInfoPtr qInfo; //Represents an open instance of the destination queueIMSMQQueueInfoPtr qRead;IMSMQMessagePtr qMsg; //Represents the message初始化qDest NULL;CoInitialize(NULL);try{qInfo.Crea…

jwt重放攻击_【干货分享】基于JWT的Token认证机制及安全问题

一步一步教你基于JWT的Token认证机制实现&#xff0c;以及如何防范XSS攻击、Replay攻击和中间人攻击。文章目录一、几种常用的认证机制1.1 HTTP Basic AuthHTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password&#xff0c;简言之&#xff0c;Basic Auth…

jquery find 找到frame select_简述jQuery

jQuery 是一个高效、精简并且功能丰富的 JavaScript 工具库。它提供的 API 易于使用且兼容众多浏览器&#xff0c;这让诸如 HTML 文档遍历和操作、事件处理、动画和 Ajax 操作更加简单。一、获取元素jQuery的核心设计思想就是获取元素&#xff0c;然后对其操作&#xff1b;因此…

求中位数中回文数之和C语言,一些算法题及答案

1. 两数之和给定一个整数数组 nums 和一个目标值 target&#xff0c;请你在该数组中找出和为目标值的那 两个 整数&#xff0c;并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是&#xff0c;你不能重复利用这个数组中同样的元素。示例:给定 nums [2, 7, 11, 1…

自然哲学的数学原理_物理起源点,牛顿《自然哲学的数学原理》

1687年 英国艾萨克牛顿(Sir Isaac Newton&#xff0c;1643—1727)&#xff0c;英国物理学家、数学家、天文学家、自然哲学家和炼金术士。1687年他发表《自然哲学的数 学原理》&#xff0c;阐述了万有引力和三大运动定律&#xff0c;奠定了此后三个世纪里力学和天文学的基础&…

如何将另外一个表里的数据与联动_跨境电商(亚马逊)后台财务数据包

亚马逊后台的财务数据包是刚进这个行业的财务人员最希望能了解熟悉的&#xff0c;这块也是相对于国内财务比较有难度的内容&#xff0c;主要难点是亚马逊平台是新的东西&#xff0c;国内财务对规则&#xff0c;费用内容&#xff0c;流程都比较懵&#xff0c;另外就是各项资料都…

java和python混合编程_浅谈C++与Java混合编程

在学习编程的过程中&#xff0c;我觉得不止要获得课本的知识&#xff0c;更多的是通过学习技术知识提高解决问题的能力&#xff0c;这样我们才能走在最前方&#xff0c;更多Java学习&#xff0c;请登陆疯狂java官网。现实的情况是&#xff0c;真实的项目中&#xff0c;通常是涉…

无法在源表中获得一组稳定的行_行输出变压器的结构、符号及电路分析

行输出变压器又称逆程变压器、回扫变压器&#xff0c;俗称行输出&#xff0c;它是电视机、显示器中的一个重要变压器。1.行输出变压器结构行输出变压器的全部绕组和高压整流管均密封在其中&#xff0c;底部引出各个绕组的引脚&#xff0c;高压输出采用高压引线直接送至显像管的…

c语言中bluetooth函数,C语言中的低功耗蓝牙-使用Bluez创建GATT服务器

小编典典我得到了运行BlueZ 5.31的示例GATT服务器(截至本文的最新信息)&#xff1a;我的环境&#xff1a; 作为来宾OS(版本14.04 32位操作系统)的VagrantVirtual BoxUbuntu Trusty Tahr更新到linux内核3.19已安装的软件包&#xff1a;libglib2.0-dev libdbus-1-devlibudev-dev …

c++ map是有序还是无序的_c++ unorder_map的用法

1、unorder_map与map不同&#xff1a;map的KEY值是有序的&#xff0c;而unorder_map则是无序的&#xff1b;2、unorder_map自定义的KEY值时需要注意思下面两点&#xff1a; KEY为一个类时&#xff0c;需要重载符号&#xff1b; 需要自定义一个HASH类&#xff0c;至于为什么&…