Przeglądaj źródła

Merge branch 'feature/0712_vip' into online

yuanliang 10 miesięcy temu
rodzic
commit
1c16f21711

+ 10 - 8
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/StudentServiceImpl.java

@@ -136,14 +136,16 @@ public class StudentServiceImpl extends ServiceImpl<StudentDao, Student> impleme
     @Override
     public StudentVo detail(Long userId) {
         StudentVo detail = baseMapper.detail(userId);
-        VipCardRecordWrapper.UserVip userVip = vipCardRecordService.userVipInfo(userId, ClientEnum.STUDENT);
-        detail.setUserVip(userVip);
-        detail.setVipType(EUserVipType.NORMAL);
-        List<VipCardRecordWrapper.UserVipInfo> userVipInfos = vipCardRecordService.queryUserVipInfo(Collections.singletonList(userId), ClientEnum.STUDENT.getCode());
-        Map<Long, VipCardRecordWrapper.UserVipInfo> curVipMap = userVipInfos.stream().collect(Collectors.toMap(VipCardRecordWrapper.UserVipInfo::getUserId, Function.identity()));
-        VipCardRecordWrapper.UserVipInfo vipType = curVipMap.getOrDefault(userId, new VipCardRecordWrapper.UserVipInfo());
-        detail.setMembershipEndTime(vipType.getCurrentVipSvipEndTime());
-        detail.setVipType(vipType.getCurrentVipType());
+        if (detail != null) {
+            VipCardRecordWrapper.UserVip userVip = vipCardRecordService.userVipInfo(userId, ClientEnum.STUDENT);
+            detail.setUserVip(userVip);
+            detail.setVipType(EUserVipType.NORMAL);
+            List<VipCardRecordWrapper.UserVipInfo> userVipInfos = vipCardRecordService.queryUserVipInfo(Collections.singletonList(userId), ClientEnum.STUDENT.getCode());
+            Map<Long, VipCardRecordWrapper.UserVipInfo> curVipMap = userVipInfos.stream().collect(Collectors.toMap(VipCardRecordWrapper.UserVipInfo::getUserId, Function.identity()));
+            VipCardRecordWrapper.UserVipInfo vipType = curVipMap.getOrDefault(userId, new VipCardRecordWrapper.UserVipInfo());
+            detail.setMembershipEndTime(vipType.getCurrentVipSvipEndTime());
+            detail.setVipType(vipType.getCurrentVipType());
+        }
         return detail;
     }
 

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

@@ -597,7 +597,17 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
 
     @Override
     public List<VipCardRecordWrapper.UserVipInfo> queryUserVipInfo(List<Long> userIdList, String clientType) {
-        return baseMapper.queryUserVipInfo(userIdList, clientType);
+        List<VipCardRecordWrapper.UserVipInfo> userVipInfos = baseMapper.queryUserVipInfo(userIdList, clientType);
+        Set<Long> userIds = new HashSet<>();
+        List<VipCardRecordWrapper.UserVipInfo> newUserVipInfos = new ArrayList<>();
+        for (VipCardRecordWrapper.UserVipInfo userVipInfo : userVipInfos) {
+            if (userIds.contains(userVipInfo.getUserId())) {
+                continue;
+            }
+            newUserVipInfos.add(userVipInfo);
+            userIds.add(userVipInfo.getUserId());
+        }
+        return newUserVipInfos;
     }
 
 
@@ -787,10 +797,11 @@ public class VipCardRecordServiceImpl extends ServiceImpl<VipCardRecordDao, VipC
                     newRecord.setStartTime(new Date(newRecord.getStartTime().getTime() - deductMills));
                     giveFlag = true;
                 } else {
-                    endDeductMills = vipCardRecord.getStartTime().getTime() - lastEndUnPereutalDate.getTime();
+                    endDeductMills = vipCardRecord.getStartTime().getTime() - (lastEndUnPereutalDate.getTime() +1000);
                     newRecord.setStartTime(new Date(newRecord.getStartTime().getTime() - endDeductMills));
                 }
                 newRecord.setEndTime(new Date(newRecord.getEndTime().getTime() - endDeductMills));
+                lastEndUnPereutalDate = newRecord.getEndTime();
                 save(newRecord);
                 Long refId = newRecord.getId();
 

+ 26 - 11
cooleshow-user/user-biz/src/main/resources/config/mybatis/VipCardRecordMapper.xml

@@ -81,10 +81,18 @@
             <include refid="baseColumns"/>,
             u.phone_ as phone
         from (
-            select any_value(id_) id_
-            from (
-            select * from vip_card_record where efficient_flag_ = 1 and end_time_ &gt;= now() and end_time_ &lt; DATE_ADD(now(),INTERVAL 3 DAY) order by end_time_ desc
-            ) t group by t.user_id_,t.client_type_,t.vip_type_
+        select
+        any_value(id_) id_
+        , max(if(vip_type_ = 'VIP', end_time_, null))  vipEndTime
+        , max(if(vip_type_ = 'SVIP', end_time_, null)) svipEndTime
+        from (select id_,user_id_,client_type_,vip_type_,end_time_
+        from vip_card_record
+        where efficient_flag_ = 1
+        and end_time_ > now()
+        having 1
+        order by end_time_ desc) t
+        group by t.user_id_, t.client_type_, t.vip_type_
+        having (DATE_ADD(now(), INTERVAL 3 DAY) > vipEndTime or DATE_ADD(now(), INTERVAL 3 DAY) > svipEndTime)
         ) a
         left join vip_card_record t on a.id_ = t.id_
         left join sys_user u on t.user_id_ = u.id_
@@ -97,16 +105,22 @@
             <include refid="baseColumns"/>,
             u.phone_ as phone
         from (
-            select any_value(id_) id_
-            from (
-            select * from vip_card_record where efficient_flag_ = 1 order by end_time_ desc
-            ) t group by t.user_id_,t.client_type_,t.vip_type_
+            select
+            any_value(id_) id_
+            ,user_id_
+            , max(if(vip_type_ = 'VIP', end_time_, null))  vipEndTime
+            , max(if(vip_type_ = 'SVIP', end_time_, null)) svipEndTime
+            from (select id_,user_id_,client_type_,vip_type_,end_time_
+            from vip_card_record
+            where efficient_flag_ = 1
+            and msg_status_ in (0,1)
+            having 1
+            order by end_time_ desc) t
+            group by t.user_id_, t.client_type_, t.vip_type_
+            having ( now() > vipEndTime or now()> svipEndTime)
         ) a
         left join vip_card_record t on a.id_ = t.id_
         left join sys_user u on t.user_id_ = u.id_
-        where t.efficient_flag_ = 1
-        and t.end_time_ &lt;= now()
-        and msg_status_ in (0,1)
         order by end_time_ desc
     </select>
 
@@ -161,5 +175,6 @@
         and t.efficient_flag_ = 1
         group by t.user_id_) m
         left join vip_card_record vcr on m.userId = vcr.user_id_ and vcr.end_time_ > now() and now() >= vcr.start_time_ and efficient_flag_ = 1 and vcr.client_type_ = #{clientType}
+        order by vcr.end_time_ desc
     </select>
 </mapper>