您的位置:首页 > 其它

连续签到的功能

2014-11-21 18:06 232 查看
  项目中有个功能需求就是连续签到7天送A礼品,连续签到1个月送B礼品。

 这边写的代码跟大家分享下  

//连续签到送风尚币
List<Tduty> dutylist = tdutyManager.findRecordOrderByDate(memberid);
int count=1;
if(dutylist.size()>1){
for(int i= 0;i<dutylist.size()-1;i++){
int cha = DateUtil.compareDay(dutylist.get(i).getCreatetime(), dutylist.get(i+1).getCreatetime());
//时间差是否在一天之内
// Int hour = cha * 1.0 / (1000 * 60 * 60);
if(cha==1){//24小时内表明是连续
count++;
}else{
break;
}
}
}
int remainder = count%30;
if(remainder==0){//连续30天签到送风尚币
customerApiManager.addIntegralC22(tmember.getShopid(),
tmember.getShopname(), EnumUtil.Integraltype.MONTHSIGN.getValue(),
"连续一个月签到", tmember.getMemberid());
System.out.println("送A礼品");
}
if (remainder==7){//连续7天签到送风尚币
customerApiManager.addIntegralC22(tmember.getShopid(),
tmember.getShopname(), EnumUtil.Integraltype.SEVENDAYSSIGN.getValue(),
"连续7天签到", tmember.getMemberid());
System.out.println("送B礼品");
} //判断两天是否相差一天
/** 比较两个日期相差的天数 */
public static int compareDay(Date date1, Date date2) {
if (date1 == null || date2 == null)
return 0;

Calendar d1 = Calendar.getInstance();
d1.setTime(date1);
Calendar d2 = Calendar.getInstance();
d2.setTime(date2);
if (d1.after(d2)) {
java.util.Calendar swap = d1;
d1 = d2;
d2 = swap;
}
/*
* 经过上面的处理,保证d2在d1之后
* 下面这个days可能小于0,因为d2和d1可能不在同一年里,这样的话虽然d1的年份小,但其在一年中的"第几天"却可能比d2大。
*/
int days = d2.get(java.util.Calendar.DAY_OF_YEAR)
- d1.get(java.util.Calendar.DAY_OF_YEAR);
int y2 = d2.get(java.util.Calendar.YEAR);
if (d1.get(java.util.Calendar.YEAR) != y2) {// 如果不在同一年
d1 = (java.util.Calendar) d1.clone();
do {
days += d1.getActualMaximum(java.util.Calendar.DAY_OF_YEAR);
/*
* 给定此 Calendar 的时间值,返回指定日历字段可能拥有的最大值。 例如,在某些年份中,MONTH 字段的实际最大值是
* 12,而在希伯来日历系统的其他年份中,该字段的实际最大值是 13。 DAY_OF_YEAR:闰年366?
*/
d1.add(java.util.Calendar.YEAR, 1);
} while (d1.get(java.util.Calendar.YEAR) != y2);
}
return days;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: