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