|  | @@ -30,6 +30,8 @@ import com.yonge.cooleshow.biz.dal.dao.VipCardRecordDao;
 | 
	
		
			
				|  |  |  import org.springframework.transaction.annotation.Transactional;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  import java.time.LocalDate;
 | 
	
		
			
				|  |  | +import java.time.LocalDateTime;
 | 
	
		
			
				|  |  | +import java.time.LocalTime;
 | 
	
		
			
				|  |  |  import java.time.ZoneId;
 | 
	
		
			
				|  |  |  import java.util.*;
 | 
	
		
			
				|  |  |  import java.util.concurrent.CompletableFuture;
 | 
	
	
		
			
				|  | @@ -390,8 +392,7 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 | 
	
		
			
				|  |  |          // 没有会员信息
 | 
	
		
			
				|  |  |          if (vipCardRecordList.isEmpty()) {
 | 
	
		
			
				|  |  |              PeriodEnum period = addVipCardRecord.getType();
 | 
	
		
			
				|  |  | -            LocalDate startLocalDate = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 | 
	
		
			
				|  |  | -            Date endDate = plusDate(startLocalDate, period, Long.valueOf(addVipCardRecord.getTimes()));
 | 
	
		
			
				|  |  | +            Date endDate = plusDate(startTime, period, Long.valueOf(addVipCardRecord.getTimes()));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |              VipCardRecord addRecord = JSON.parseObject(JSON.toJSONString(addVipCardRecord), VipCardRecord.class);
 | 
	
		
			
				|  |  |              addRecord.setSourceType(SourceTypeEnum.BACKEND_GIVE);
 | 
	
	
		
			
				|  | @@ -414,8 +415,7 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        LocalDate startLocalDate = startTime.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
 | 
	
		
			
				|  |  | -        Date endDate = plusDate(startLocalDate, addVipCardRecord.getType(), Long.valueOf(addVipCardRecord.getTimes()));
 | 
	
		
			
				|  |  | +        Date endDate = plusDate(startTime, addVipCardRecord.getType(), Long.valueOf(addVipCardRecord.getTimes()));
 | 
	
		
			
				|  |  |          // 平移时间
 | 
	
		
			
				|  |  |          long plusMills = endDate == null ? 0L : (endDate.getTime() - startTime.getTime());
 | 
	
		
			
				|  |  |          for (int i = 0; i < vipCardRecordList.size(); i++) {
 | 
	
	
		
			
				|  | @@ -606,30 +606,38 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 | 
	
		
			
				|  |  |          this.save(vipCardRecord);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -    private Date plusDate(LocalDate start, PeriodEnum period, long times) {
 | 
	
		
			
				|  |  | -        LocalDate end = null;
 | 
	
		
			
				|  |  | +    private Date plusDate(Date start, PeriodEnum period, long times) {
 | 
	
		
			
				|  |  | +        Calendar calendar = Calendar.getInstance();
 | 
	
		
			
				|  |  | +        calendar.setTime(start);
 | 
	
		
			
				|  |  | +        calendar.set(Calendar.HOUR_OF_DAY, 23);
 | 
	
		
			
				|  |  | +        calendar.set(Calendar.MINUTE, 59);
 | 
	
		
			
				|  |  | +        calendar.set(Calendar.SECOND, 59);
 | 
	
		
			
				|  |  | +        calendar.set(Calendar.MILLISECOND, 0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        LocalDateTime localDateTimeMaxTime =  calendar.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
 | 
	
		
			
				|  |  | +        LocalDateTime end;
 | 
	
		
			
				|  |  |          switch (period) {
 | 
	
		
			
				|  |  |              case DAY:
 | 
	
		
			
				|  |  | -                end = start.minusDays(times);
 | 
	
		
			
				|  |  | +                end = localDateTimeMaxTime.plusDays(times);
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              case MONTH:
 | 
	
		
			
				|  |  | -                end = start.minusMonths(times);
 | 
	
		
			
				|  |  | +                end = localDateTimeMaxTime.plusMonths(times);
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              case QUARTERLY:
 | 
	
		
			
				|  |  | -                end = start.minusMonths(times * 3);
 | 
	
		
			
				|  |  | +                end = localDateTimeMaxTime.plusMonths(times * 3);
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              case YEAR_HALF:
 | 
	
		
			
				|  |  | -                end = start.minusMonths(times * 6);
 | 
	
		
			
				|  |  | +                end = localDateTimeMaxTime.plusMonths(times * 6);
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              case YEAR:
 | 
	
		
			
				|  |  | -                end = start.minusYears(times);
 | 
	
		
			
				|  |  | +                end = localDateTimeMaxTime.plusYears(times);
 | 
	
		
			
				|  |  |                  break;
 | 
	
		
			
				|  |  |              case PERPETUAL:
 | 
	
		
			
				|  |  |                  return null;
 | 
	
		
			
				|  |  |              default:
 | 
	
		
			
				|  |  |                  throw new BizException("不支持的扣减类型");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -        return Date.from(end.atStartOfDay(ZoneId.systemDefault()).toInstant());
 | 
	
		
			
				|  |  | +        return Date.from(end.atZone(ZoneId.systemDefault()).toInstant());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      // 发送会员到期3天消息推送
 |