近期负责的项目中有关于开通会员的功能。简单描述一下开通会员的流程:
调用第三方支付接口购买VIP成功后,修改订单相关信息,再远程调用订单信息表,根据已支付的订单,修改用户表中的会员的状态,和会员到期时间。
会员充值的工具类:
public class MemberTimeDate {
/**
* @param beginDate 会员开始的时间
* @param time 用户充值的月数
* @return map
*/
public static synchronized HashMap<String,Object> getVipTime2(Date beginDate, int time){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = new GregorianCalendar();
calendar.setTime(beginDate);
calendar.add(Calendar.MONTH, time);//time,是用户充值的月数
Date date = calendar.getTime();
String startDate=sdf.format(beginDate);
String endDate=sdf.format(date);
System.out.println("startDate: "+startDate+" ,"+"购买的会员月份为: "+time+" ,"+"endDate: "+endDate);
HashMap<String, Object> map = new HashMap<String,Object>();
map.put("startTime", beginDate);
map.put("endTime", date);
return map;
}
/**
* @param beginDate 会员开始的时间
* @param time 用户充值的月数
* @return date
*/
public static synchronized Date getVipTime(Date beginDate, int time){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar calendar = new GregorianCalendar();
calendar.setTime(beginDate);
calendar.add(Calendar.MONTH, time);//time,是用户充值的月数
Date date = calendar.getTime();
String startDate=sdf.format(beginDate);
String endDate=sdf.format(date);
System.out.println("startDate: "+startDate+" ,"+"购买的会员月份为: "+time+" ,"+"endDate: "+endDate);
return date;
}
}
在购买VIP成功后,要判断该用户当前是否为会员:
1、如果用户之前没有充值过会员,就根据现在的系统时间,往后加相应的时长。
2、如果会员已过期,就根据现在的系统时间,往后加相应的时长。
3、如果用户已经是会员,需要获取之前的截止日期,再加上对应的月数作为最终的截止日期。
部分逻辑处理:
//获取订单中开通会员的时间
Integer time = isBuyMemberOrder.getPackageTime();
UserAll userAll = baseMapper.selectById(userId);
Date memberOutTime = userAll.getMemberOutTime();
Date date = new Date();
//开通会员
if (memberOutTime == null){
Date vipTime = MemberTimeDate.getVipTime(date, time);
userAll.setMemberOutTime(vipTime);
}
//如果当前时间比会员时间晚,会员过期
else if (date.after(memberOutTime)){
Date vipTime = MemberTimeDate.getVipTime(date, time);
userAll.setMemberOutTime(vipTime);
}
//在原会员时间基础上添加
else if (!date.after(memberOutTime)){
Date vipTime = MemberTimeDate.getVipTime(memberOutTime, time);
userAll.setMemberOutTime(vipTime);
}
//修改会员状态
int update = baseMapper.updateById(userAll);
功能设计的很简单,中间或许也存在着不足。希望可以得到大家的指导和建议。
参考原创博客: