要代码这个分肯定不够。不过思路可以说下。
创新互联公司成立于2013年,我们提供高端重庆网站建设、成都网站制作公司、成都网站设计公司、网站定制、成都营销网站建设、小程序制作、微信公众号开发、seo优化服务,提供专业营销思路、内容策划、视觉设计、程序开发来完成项目落地,为成都围栏护栏企业提供源源不断的流量和订单咨询。
1、提供一个二维码生成接口,为保证时效性和安全性,二维码应该是后台生成,并带有时间戳。
2、点击二维码重新从后台获取新的二维码。
3、二维码的内容有很多种,根据不同的客户端(用户用什么签到)载体来进行确定,比如用微信扫一扫签到,则二维码内容肯定是URL。
4、签到即调用后台接口,将扫到的码内容传到后台进行匹配校验。
1.定义bean
public class Checkin {
private String optsn;//流水号
private String userid;//积分
private String addpoint;//一次添加值
private String curpoint;//当前积分
private String efftime;//生效时间
private String expirytime;//失效时间
private String type;//是否签到
private String remark; //备注 经验获取方式(初始化,一次签到成功、连续签到成功)
//省略get、set
}
2.设置初始化时静态数据
public class StaticUtil {
public static String CONFIG = "积分获取规则";
public static String POINTACQSTATICCONFIG = "pointrule";
public static String POINTACQINIT = "初始化";
public static String POINTCHECKIN = "一次签到";
public static String POINTCHECKINS = "连续签到";
}
3.实现类
public class checkinService{
/**
* 实现签到
* 一次签到: 签到成功, 将签到状态修改成功
*
* @param userPoint
* @return
*/
public ReturnValueDomainString add(Checkin checkin ) {
ReturnValueDomainString ret = new ReturnValueDomainString();
try {
StringBuffer sql = new StringBuffer(
"INSERT INTO tb_userpoint (……)");
sql.append(" VALUES (……)");
//生成流水号
logger.info("签到成功SQL"+sql.toString());
this.jdbcTemplate.update(sql.toString(), answer);
//签到,增加积分
String addpoint = jdbcTemplate.queryForObject(" select * from AA a ,BB b " +"where a.type='"+StaticUtil.POINTCONFIG+"' and b.attrname='"+StaticUtil.POINTCHECKIN+"' ", new HashMapString,String(), String.class);
sql.setLength(0);
Checkin checkin= new Checkin ();
this.jdbcTemplate.update(sql.toString(),uptrace);
//修改个人的积分值
this.jdbcTemplate.update(" update tb_aqzw_usermessage set point=point+:addpoint where userid=:userid", uptrace);
/**
* 下面的sql, 如果是执行条数为 1条, 如果不是执行条数 为0 条
*/
MapString,String checkinmap = new HashMapString,String();
ataskmap.put("questionid", answer.getQuestionid());
sql.setLength(0);
sql.append(" update tb_checkin set type='1', expirytime=now() where 条件");
// logger.info("--"+sql.toString());
this.jdbcTemplate.update(sql.toString(), ataskmap);
} catch (Exception e) {
logger.error("签到失败:" + e.getMessage());
return ret.setFail("签到失败,请联系管理员");
}
return ret.setSuccess("签到成功!");
}
}
注: 伪代码,只提供参考!!
签到的时候,把这7天的签到记录查出来,只要全部都签到了,就再加25积分
不过循环遍历时候要判断是不是一天内重复的记录
最后统计少了一条签到记录就不算
sql大概可以这么统计吧,查询七天内的签到记录以签到时间的年月日格式分组(不太懂mysql,大概意思意思)
select count(1) from xxxxxxx where signin_time= date_add(now(), interval 6 day) group by date_format(signi_time,'%Y%m%d');
把签到信息存到一个签到表里,签到表关联用户ID,有签到日期,每天的签到就是一条记录,积分挂在用户信息表中,再来个积分日志表,积分发生变动就记录进去,比如获得积分或花了积分了。积分等级想复杂点了就来个积分等级表,里面存的是规则,想简单了就在积分余额字段后面再加个字段标记当前积分等级,甚至在前端当场计算都行
Java 的JDBC,如果你不使用面向对象技术的话。(Hibernate, Myba...
Jsp 页面上的 JSTL
HTML页面上的知识 ,css javascript jQuery
如果使用框架的话,还有相应的框架技术