| 
					
				 | 
			
			
				@@ -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; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -299,7 +301,7 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (CollectionUtils.isNotEmpty(svipList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 userVip.setVipType(EVipType.SVIP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Optional<VipCardRecord> first = svipList.stream().filter(o -> o.getEndTime() == null).findFirst(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                Optional<VipCardRecord> first = svipList.stream().filter(o -> o.getEndTime() == null && o.getType()==PeriodEnum.PERPETUAL).findFirst(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (first.isPresent()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     userVip.setVipType(EVipType.PERMANENT_SVIP); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } else { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -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天消息推送 
			 |