fix(live): 修复小程序养生列表查不到内容的问题
- TSysLiveMapper.xml: pageListApp 去掉无条件的 end_time > NOW() 过滤,可见性只由 disabled 控制,时间仅用于计算 liveStatus;默认排序改为 create_time DESC
- TSysLiveServiceImpl: pageListApp 补 start_time/end_time 判空,避免整个列表接口 500
- TSysLiveController(applet): appointmentPush 对无开始时间的内容只记录预约、不排定时任务
验证:本地 applet 启动后 /t-sys-live/pageList 由 0 条变为 3 条;视频(无时间)/直播(未开始)/直播(已结束)/已删除 四类边界逐条验证通过。
注:未包含小程序前端「观看」按钮的分流逻辑(mp4 走 maxVideo、网页链接走 liveView),线上仍有 3 条网页链接类型内容点击后无法播放。
| | |
| | | redisCache.setCacheSet(Constants.LIVE_APPOINTMENT_PUSH + id, appointmentPush); |
| | | |
| | | TSysLive sysLive = sysLiveService.getById(id); |
| | | Map<String, ? extends Object> maps = |
| | | new ImmutableMap.Builder<String, String>(). |
| | | put("id", sysLive.getId()) |
| | | .build(); |
| | | QuartzManager.addJob( |
| | | LivePushJob.class, |
| | | (LivePushJob.name+sysLive.getId()).toUpperCase(), |
| | | TimeJobType.LIVE_PUSH, |
| | | DateUtils.localDateTimeToDate(sysLive.getStartTime().minusHours(1)), |
| | | maps |
| | | ); |
| | | // 录播视频等没有开始时间的内容无法推算提醒时间,只记录预约、不排定时任务 |
| | | if (Objects.nonNull(sysLive) && Objects.nonNull(sysLive.getStartTime())) { |
| | | Map<String, ? extends Object> maps = |
| | | new ImmutableMap.Builder<String, String>(). |
| | | put("id", sysLive.getId()) |
| | | .build(); |
| | | QuartzManager.addJob( |
| | | LivePushJob.class, |
| | | (LivePushJob.name + sysLive.getId()).toUpperCase(), |
| | | TimeJobType.LIVE_PUSH, |
| | | DateUtils.localDateTimeToDate(sysLive.getStartTime().minusHours(1)), |
| | | maps |
| | | ); |
| | | } |
| | | |
| | | return R.ok(); |
| | | } |
| | |
| | | if (CollectionUtils.isEmpty(list)){ |
| | | return pageInfo; |
| | | } |
| | | // 判断状态 |
| | | // 判断状态(视频等内容可能没有开始/结束时间,需要判空,否则整个列表接口会 500) |
| | | LocalDateTime now = LocalDateTime.now(); |
| | | for (TSysLiveVO sysLive : list) { |
| | | if(sysLive.getStartTime().isAfter(LocalDateTime.now())){ |
| | | LocalDateTime startTime = sysLive.getStartTime(); |
| | | LocalDateTime endTime = sysLive.getEndTime(); |
| | | if(Objects.nonNull(startTime) && startTime.isAfter(now)){ |
| | | sysLive.setLiveStatus(1); |
| | | } |
| | | if(sysLive.getStartTime().isBefore(LocalDateTime.now()) && sysLive.getEndTime().isAfter(LocalDateTime.now())){ |
| | | if(Objects.nonNull(startTime) && Objects.nonNull(endTime) |
| | | && startTime.isBefore(now) && endTime.isAfter(now)){ |
| | | sysLive.setLiveStatus(2); |
| | | } |
| | | if(sysLive.getEndTime().isBefore(LocalDateTime.now())){ |
| | | if(Objects.nonNull(endTime) && endTime.isBefore(now)){ |
| | | sysLive.setLiveStatus(3); |
| | | } |
| | | if(StringUtils.hasLength(query.getAppUserId())){ |
| | |
| | | AND date_format(start_time,'%y%m%d %H%i%s') <= date_format(NOW(),'%y%m%d %H%i%s') |
| | | AND date_format(end_time,'%y%m%d %H%i%s') >= date_format(NOW(),'%y%m%d %H%i%s') |
| | | </if> |
| | | AND date_format(end_time,'%y%m%d %H%i%s') > date_format(NOW(),'%y%m%d %H%i%s') |
| | | <!-- |
| | | 说明:这里原先有一句无条件的时间过滤 AND end_time > NOW(),导致已结束的直播和录播视频(往往没有开始/结束时间) |
| | | 在小程序里永远查不到(与后台列表的规则也不一致)。可见性统一交给 disabled 控制,时间只用于计算 liveStatus, |
| | | 前端再用 liveStatus 区分「未开始/已开始/已结束」。 |
| | | --> |
| | | AND disabled = ${@com.ruoyi.common.enums.DisabledEnum@NO.getCode()} |
| | | </where> |
| | | <if test="query.liveStatus == null"> |
| | | ORDER BY start_time |
| | | ORDER BY create_time DESC |
| | | </if> |
| | | <if test="query.liveStatus != null"> |
| | | ORDER BY create_time DESC |