Parcourir la source

Merge branch 'feature/0712_vip' of http://git.dayaedu.com/yonge/cooleshow into feature/0712_vip

刘俊驰 il y a 1 an
Parent
commit
5617ccffd8

+ 31 - 25
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/VipCardRecordServiceImpl.java

@@ -402,9 +402,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()
@@ -414,7 +419,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();
@@ -431,39 +437,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);