浏览代码

获取最近过期的专辑

zouxuan 1 周之前
父节点
当前提交
30b5d00744

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

@@ -911,23 +911,26 @@ public class UserTenantAlbumRecordServiceImpl extends ServiceImpl<UserTenantAlbu
     @Override
     public UserTenantAlbumRecordWrapper.LastUserTenantAlbumRecord last(Long userId,Long albumId) {
         //获取最近有效期最近的一条记录,(没过期)
-        UserTenantAlbumRecord record = this.lambdaQuery()
+        List<UserTenantAlbumRecord> albumRecords = this.lambdaQuery()
                 .eq(UserTenantAlbumRecord::getUserId, userId)
                 .eq(UserTenantAlbumRecord::getEfficientFlag, true)
-                .eq(albumId != null, UserTenantAlbumRecord::getTenantAlbumId, albumId)
-                .orderByAsc(UserTenantAlbumRecord::getEndTime)
-                .orderByAsc(UserTenantAlbumRecord::getId)
-                .last("limit 1")
-                .one();
+                .eq(albumId != null, UserTenantAlbumRecord::getTenantAlbumId, albumId).list();
         UserTenantAlbumRecordWrapper.LastUserTenantAlbumRecord lastUserTenantAlbumRecord = new UserTenantAlbumRecordWrapper.LastUserTenantAlbumRecord();
         Long tenantAlbumId = null;
         Date endTime = null;
-        if (record != null) {
+        if (CollectionUtils.isNotEmpty(albumRecords)) {
+            //按专辑编号分组,然后找出截止时间最大的记录
+            Map<Long, UserTenantAlbumRecord> recordMap = albumRecords.stream()
+                    .collect(Collectors.toMap(UserTenantAlbumRecord::getTenantAlbumId,
+                            Function.identity(), (o, n) -> o.getEndTime().after(n.getEndTime()) ? o : n));
+            //找出截止时间最小的记录
+            UserTenantAlbumRecord record = recordMap.values().stream()
+                    .min(Comparator.comparing(UserTenantAlbumRecord::getEndTime)).get();
             tenantAlbumId = record.getTenantAlbumId();
             endTime = record.getEndTime();
         }else {
             //获取最近一条记录已过期的记录
-            record = this.lambdaQuery()
+            UserTenantAlbumRecord record = this.lambdaQuery()
                     .eq(UserTenantAlbumRecord::getUserId, userId)
                     .eq(UserTenantAlbumRecord::getEfficientFlag, false)
                     .eq(albumId != null, UserTenantAlbumRecord::getTenantAlbumId, albumId)