[普通]网站每日签到功能设计 hibernate数据层框架

作者(passion) 阅读(985次) 评论(0) 分类( web前端)

表设计

CREATE TABLE `t_user_sign` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '签到表id',
  `user_id` bigint(20) DEFAULT NULL COMMENT '签到者id',
  `signcount` int(11) DEFAULT '0' COMMENT '连续签到次数',
  `count` int(11) DEFAULT '0' COMMENT '签到次数',
  `lastModifyTime` datetime DEFAULT NULL COMMENT '最后修改时间',
  `signHistoy` varchar(500) DEFAULT NULL COMMENT '签到历史时间 以逗号隔开',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;


1:代码功能实现 

public static void sign(Long user_id) {
t_user_sign tus = signByUserId(user_id, error);
if (error.code < 0) {
return;
}
// 以前没签到 第一次签到
if (tus == null && error.code > 0) {
error.clear();
t_user_sign tUserSign = new t_user_sign();
tUserSign.count = 1;
tUserSign.signcount = 1;
tUserSign.lastModifyTime = new Date();
tUserSign.user_id = user_id;
DateUtil.dateToString1(new Date());
tUserSign.signHistoy = DateUtil.dateToString1(new Date());
try {
tUserSign.save();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
Logger.info("增加用户签到表的时候 出现错误 :" + e.getMessage());
return;
}
error.msg = "第一次签到";
error.code = 1;
//有签到过,再次签到  
} else {
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = DateUtil.strToDate(sdf.format(date) + " 00:00:01");
Date date2 = DateUtil.strToDate(sdf.format(date) + " 23:59:58");
// 业务方法判断最后签到时间 是否在当天
if (date1.before(tus.lastModifyTime)
&& tus.lastModifyTime.before(date2)) {
error.msg = "今天已经签到";
error.code = 1;
return;
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DATE, -1);
Date beforeDate1 = DateUtil
.strToDate(sdf.format(calendar.getTime()) + " 00:00:01");
// 非连续签到
if (tus.lastModifyTime.before(beforeDate1)) {
tus.signcount=1;
tus.count+=1;
tus.lastModifyTime=new Date();
tus.signHistoy+=","+sdf.format(new Date());
String hql=" update t_user_sign t set t.signcount=?, t.count=? ,t.lastModifyTime=? ,t.signHistoy=? where t.user_id=?";
EntityManager em = JPA.em();
Query query = em.createQuery(hql);
query.setParameter(1,tus.signcount);
query.setParameter(2, tus.count);
query.setParameter(3, tus.lastModifyTime);
query.setParameter(4, tus.signHistoy);
query.setParameter(5, user_id);
int row = 0;
try {
row = query.executeUpdate();
} catch (Exception e) {
Logger.error("非连续:用户签名出现错误" + e.getMessage());
return;
}
               if(row<1){
              error.msg = "非连续:用户签名更新失败!";
error.code=-3;
return;
               }
                error.msg = "今天签到成功";
error.code = 1;
           //连续签到
} else {
tus.signcount+=1;
tus.count+=1;
tus.lastModifyTime=new Date();
tus.signHistoy+=","+sdf.format(new Date());
String hql=" update t_user_sign t set t.signcount=?, t.count=? ,t.lastModifyTime=? ,t.signHistoy=? where t.user_id=?";
EntityManager em = JPA.em();
Query query = em.createQuery(hql);
query.setParameter(1,tus.signcount);
query.setParameter(2, tus.count);
query.setParameter(3, tus.lastModifyTime);
query.setParameter(4, tus.signHistoy);
query.setParameter(5, user_id);
int row = 0;
try {
row = query.executeUpdate();
} catch (Exception e) {
Logger.error("连续:用户签名出现错误" + e.getMessage());
return;
}
               if(row<1){
return;
               }
}
}
}


« 上一篇:wifi共享上网(至尊版wifi)
« 下一篇:ASP.NET附加数据库文件的方式,如何发布到IIS7而不导致SQLServer出错
在这里写下您精彩的评论
  • 微信

  • QQ

  • 支付宝

返回首页
返回首页 img
返回顶部~
返回顶部 img