表设计
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;
}
}
}
}
微信
支付宝