|  | @@ -376,9 +376,14 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 | 
	
		
			
				|  |  |          List<VipCardRecord> vipCardRecordList = this.lambdaQuery()
 | 
	
		
			
				|  |  |                  .eq(VipCardRecord::getClientType, addVipCardRecord.getClientType())
 | 
	
		
			
				|  |  |                  .eq(VipCardRecord::getUserId, addVipCardRecord.getUserId())
 | 
	
		
			
				|  |  | -                .ge(VipCardRecord::getEndTime, new Date())
 | 
	
		
			
				|  |  | +//                .ge(VipCardRecord::getEndTime, new Date())
 | 
	
		
			
				|  |  |                  .eq(VipCardRecord::getEfficientFlag, true)
 | 
	
		
			
				|  |  | -                .list();
 | 
	
		
			
				|  |  | +                .list()
 | 
	
		
			
				|  |  | +                .stream()
 | 
	
		
			
				|  |  | +                .filter(n -> n.getEndTime() == null || n.getEndTime().after(new Date()))
 | 
	
		
			
				|  |  | +                .sorted(Comparator.comparing(VipCardRecord::getStartTime))
 | 
	
		
			
				|  |  | +                .collect(Collectors.toList());
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          EVipType addVipType = addVipCardRecord.getVipType();
 | 
	
		
			
				|  |  |          List<VipCardRecord> perpetualRecords = vipCardRecordList.stream()
 | 
	
	
		
			
				|  | @@ -388,7 +393,8 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 | 
	
		
			
				|  |  |              throw new BizException("已经是永久会员");
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        Date startTime = new Date();
 | 
	
		
			
				|  |  | +        Date now = new Date();
 | 
	
		
			
				|  |  | +        Date startTime = now;
 | 
	
		
			
				|  |  |          // 没有会员信息
 | 
	
		
			
				|  |  |          if (vipCardRecordList.isEmpty()) {
 | 
	
		
			
				|  |  |              PeriodEnum period = addVipCardRecord.getType();
 | 
	
	
		
			
				|  | @@ -405,39 +411,39 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 | 
	
		
			
				|  |  |              return;
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -        // 存在会员信息
 | 
	
		
			
				|  |  | +        // 找到插入数据的位置
 | 
	
		
			
				|  |  |          int index = 0;
 | 
	
		
			
				|  |  | -        for (int i = 0; i < vipCardRecordList.size(); i++) {
 | 
	
		
			
				|  |  | -            VipCardRecord vipCardRecord = vipCardRecordList.get(i);
 | 
	
		
			
				|  |  | -            if (vipCardRecord.getVipType().equals(addVipType)) {
 | 
	
		
			
				|  |  | -                index = i;
 | 
	
		
			
				|  |  | -                startTime = vipCardRecord.getEndTime();
 | 
	
		
			
				|  |  | +        if (addVipType.equals(EVipType.VIP)) { // vip 放到最后
 | 
	
		
			
				|  |  | +            index = vipCardRecordList.size();
 | 
	
		
			
				|  |  | +            startTime = vipCardRecordList.stream().map(VipCardRecord::getEndTime).max(Date::compareTo).get();
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        if (addVipType.equals(EVipType.SVIP)) { //放到VIP的前面
 | 
	
		
			
				|  |  | +            index = (int) vipCardRecordList.stream().filter(n -> EVipType.SVIP.equals(n.getVipType())).count();
 | 
	
		
			
				|  |  | +            if (index > 0) {
 | 
	
		
			
				|  |  | +                startTime = vipCardRecordList.stream().filter(n -> EVipType.SVIP.equals(n.getVipType())).map(VipCardRecord::getEndTime).max(Date::compareTo).get();
 | 
	
		
			
				|  |  |              }
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  |          Date endDate = plusDate(startTime, addVipCardRecord.getType(), Long.valueOf(addVipCardRecord.getTimes()));
 | 
	
		
			
				|  |  | +        VipCardRecord newRecord = JSON.parseObject(JSON.toJSONString(addVipCardRecord), VipCardRecord.class);
 | 
	
		
			
				|  |  | +        newRecord.setSourceType(SourceTypeEnum.BACKEND_GIVE);
 | 
	
		
			
				|  |  | +        newRecord.setStatus(EVipRecordStatus.ADD);
 | 
	
		
			
				|  |  | +        newRecord.setStartTime(startTime);
 | 
	
		
			
				|  |  | +        newRecord.setEndTime(endDate);
 | 
	
		
			
				|  |  | +        newRecord.setDisplayFlag(true);
 | 
	
		
			
				|  |  | +        newRecord.setEfficientFlag(true);
 | 
	
		
			
				|  |  | +        save(newRecord);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |          // 平移时间
 | 
	
		
			
				|  |  |          long plusMills = endDate == null ? 0L : (endDate.getTime() - startTime.getTime());
 | 
	
		
			
				|  |  |          for (int i = 0; i < vipCardRecordList.size(); i++) {
 | 
	
		
			
				|  |  | -            if (index == i) {
 | 
	
		
			
				|  |  | -                VipCardRecord addRecord = JSON.parseObject(JSON.toJSONString(addVipCardRecord), VipCardRecord.class);
 | 
	
		
			
				|  |  | -                addRecord.setSourceType(SourceTypeEnum.BACKEND_GIVE);
 | 
	
		
			
				|  |  | -                addRecord.setStatus(EVipRecordStatus.ADD);
 | 
	
		
			
				|  |  | -                addRecord.setStartTime(startTime);
 | 
	
		
			
				|  |  | -                addRecord.setEndTime(endDate);
 | 
	
		
			
				|  |  | -                addRecord.setDisplayFlag(true);
 | 
	
		
			
				|  |  | -                addRecord.setEfficientFlag(true);
 | 
	
		
			
				|  |  | -                save(addRecord);
 | 
	
		
			
				|  |  | -            }
 | 
	
		
			
				|  |  | -
 | 
	
		
			
				|  |  | -            if (i > index) {
 | 
	
		
			
				|  |  | -                VipCardRecord vipCardRecord = vipCardRecordList.get(i);
 | 
	
		
			
				|  |  | +            VipCardRecord vipCardRecord = vipCardRecordList.get(i);
 | 
	
		
			
				|  |  | +            if (i >= index) {
 | 
	
		
			
				|  |  |                  Long refId = null;
 | 
	
		
			
				|  |  |                  if (plusMills > 0L) {
 | 
	
		
			
				|  |  |                      VipCardRecord addRecord = JSON.parseObject(JSON.toJSONString(vipCardRecord), VipCardRecord.class);
 | 
	
		
			
				|  |  |                      addRecord.setStatus(EVipRecordStatus.UPDATE);
 | 
	
		
			
				|  |  | -                    addRecord.setStartTime(new Date(vipCardRecord.getStartTime().getTime() - plusMills));
 | 
	
		
			
				|  |  | -                    addRecord.setEndTime(new Date(vipCardRecord.getEndTime().getTime() - plusMills));
 | 
	
		
			
				|  |  | +                    addRecord.setStartTime(new Date(Math.max(vipCardRecord.getStartTime().getTime(), now.getTime()) + plusMills));
 | 
	
		
			
				|  |  | +                    addRecord.setEndTime(new Date(vipCardRecord.getEndTime().getTime() + plusMills));
 | 
	
		
			
				|  |  |                      addRecord.setDisplayFlag(false);
 | 
	
		
			
				|  |  |                      addRecord.setEfficientFlag(true);
 | 
	
		
			
				|  |  |                      save(addRecord);
 |