ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/business/MerLiveController.java
@@ -5,19 +5,14 @@ import com.ruoyi.goods.domain.dto.XiaoeLiveDto; import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import com.ruoyi.goods.service.biz.XiaoeLiveService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; import java.util.List; @@ -33,15 +28,16 @@ @RequestMapping("/mer/live") public class MerLiveController { private final XiaoeLiveService xiaoeLiveService; /** * 直播首页分页列表 * * @param dto * @return */ @ApiOperation("直播首页分页列表") @PostMapping("/page") public R<Page<XiaoeLiveVo>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { public R<Page<XiaoeLiveVoV2>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { return R.ok(xiaoeLiveService.getLivePage(dto)); } @@ -66,15 +62,16 @@ public R<Boolean> appointment(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { return R.ok(xiaoeLiveService.appointment(id)); } /** * 我的直播 * * @param dto * @return */ @ApiOperation("我的直播") @PostMapping("/mine") public R<Page<XiaoeLiveVo>> minePage(@Valid @RequestBody XiaoeLiveQueryDto dto) { public R<Page<XiaoeLiveVoV2>> minePage(@Valid @RequestBody XiaoeLiveQueryDto dto) { return R.ok(xiaoeLiveService.getMineLivePage(dto)); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/management/MgtLiveController.java
@@ -5,20 +5,13 @@ import com.ruoyi.goods.domain.dto.XiaoeLiveDto; import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import com.ruoyi.goods.service.biz.XiaoeLiveService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -32,25 +25,28 @@ @RequiredArgsConstructor public class MgtLiveController { private final XiaoeLiveService xiaoeLiveService; /** * 直播分页列表 * * @param dto * @return */ @ApiOperation("直播分页列表") @PostMapping("/page") public R<Page<XiaoeLiveVo>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { public R<Page<XiaoeLiveVoV2>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { return R.ok(xiaoeLiveService.getMgtLivePage(dto)); } /** * 直播详情 * * @param id * @return */ @ApiOperation("直播详情") @GetMapping("/detail/{id}") public R<XiaoeLiveDetailVOV2> detail(@ApiParam(name = "id",value = "直播id", required = true) @PathVariable("id") String id) { public R<XiaoeLiveDetailVOV2> detail(@ApiParam(name = "id", value = "直播id", required = true) @PathVariable("id") String id) { return R.ok(xiaoeLiveService.getLiveDetail(id)); } /** ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/miniapp/AppLiveController.java
@@ -3,19 +3,14 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import com.ruoyi.goods.service.biz.XiaoeLiveService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; @@ -30,14 +25,16 @@ @RequestMapping("/app/live") public class AppLiveController { private final XiaoeLiveService xiaoeLiveService; /** * 直播首页分页列表 * * @param dto * @return */ @ApiOperation("直播首页分页列表") @PostMapping("/page") public R<Page<XiaoeLiveVo>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { public R<Page<XiaoeLiveVoV2>> page(@Valid @RequestBody XiaoeLiveQueryDto dto) { return R.ok(xiaoeLiveService.getLivePage(dto)); } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/staff/StaffLiveController.java
@@ -3,7 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.domain.R; import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import com.ruoyi.goods.service.biz.XiaoeLiveService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -25,15 +25,16 @@ @RequiredArgsConstructor public class StaffLiveController { private final XiaoeLiveService xiaoeLiveService; /** * 员工端直播列表 * * @param dto * @return */ @ApiOperation("直播列表") @PostMapping("/page") public R<Page<XiaoeLiveVo>> minePage(@Valid @RequestBody XiaoeLiveQueryDto dto) { public R<Page<XiaoeLiveVoV2>> minePage(@Valid @RequestBody XiaoeLiveQueryDto dto) { return R.ok(xiaoeLiveService.getStaffLivePage(dto)); } } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/dto/XiaoeLiveQueryDto.java
@@ -1,8 +1,11 @@ package com.ruoyi.goods.domain.dto; import com.alibaba.fastjson2.annotation.JSONField; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; /** * @author mitao @@ -29,13 +32,17 @@ @ApiModelProperty(value = "页码,表示第几页,从1开始;默认1") private Integer page; @ApiModelProperty(value = "每页条数,最大50条;默认10") private Integer pageSize; @ApiModelProperty("门店id") private Long shopId; @ApiModelProperty("直播类型 1:平台直播 2:商家直播") private Integer liveType; @ApiModelProperty("课程分组id数组") @JSONField(name = "tags") private List<String> tags; } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/service/biz/XiaoeLiveService.java
@@ -16,6 +16,7 @@ import com.ruoyi.goods.domain.pojo.live.XiaoeLiveRecord; import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import com.ruoyi.goods.service.live.IXiaoeLiveAppointmentService; import com.ruoyi.goods.service.live.IXiaoeLiveRecordService; import com.ruoyi.goods.utils.XiaoeUtils; @@ -29,13 +30,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import java.util.Arrays; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.*; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @@ -52,17 +47,19 @@ private final RedisService redisService; private final RemoteConfigService remoteConfigService; private final RemoteShopService remoteShopService; /** * 直播首页分页列表 * * @param dto * @return */ public Page<XiaoeLiveVo> getLivePage(XiaoeLiveQueryDto dto) { public Page<XiaoeLiveVoV2> getLivePage(XiaoeLiveQueryDto dto) { //当前登录用户id Long userId = SecurityUtils.getUserId(); Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); dto.setTags(Arrays.asList("20275808", "20275805", "20275707", "20249173", "2406002")); Page<XiaoeLiveVoV2> livePageList = xiaoeUtils.getLivePageListV2(dto); if (CollectionUtil.isEmpty(livePageList.getRecords())) { return new Page<>(); } @@ -71,18 +68,18 @@ .gt(XiaoeLiveAppointment::getAliveStartAt, DateUtils.getNowDate()).eq(XiaoeLiveAppointment::getUserId, userId).list(); Map<String, XiaoeLiveAppointment> appointmentMap = appointments.stream().collect(Collectors.toMap(XiaoeLiveAppointment::getLiveId, appointment -> appointment)); // 处理直播数据 List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream() List<XiaoeLiveVoV2> filteredRecords = livePageList.getRecords().stream() .filter(item -> !item.getAliveState().equals(2)) // 过滤直播状态为已结束的记录 .peek(item -> { // 查找对应的预约记录 XiaoeLiveAppointment appointment = appointmentMap.get(item.getId()); // 如果预约记录存在且直播状态为未开始,则设置状态为已预约 if (item.getAliveState().equals(0) && appointment != null) { item.setAppointmentState(1); // 设置为已预约 } }) .sorted(Comparator.comparing(XiaoeLiveVo::getAliveState).reversed()) // 按照直播状态排序 .sorted(Comparator.comparing(XiaoeLiveVoV2::getAliveState).reversed()) // 按照直播状态排序 .collect(Collectors.toList()); //根据直播类型过滤平台和店铺直播 if (Objects.nonNull(dto.getLiveType())) { @@ -164,15 +161,16 @@ } return true; } /** * 我的直播 * * @param dto * @return */ public Page<XiaoeLiveVo> getMineLivePage(XiaoeLiveQueryDto dto) { public Page<XiaoeLiveVoV2> getMineLivePage(XiaoeLiveQueryDto dto) { Long userId = SecurityUtils.getUserId(); Page<XiaoeLiveVo> page = new Page<>(); Page<XiaoeLiveVoV2> page = new Page<>(); ShopRelUserVo shopRelUserVo = remoteShopService.getShopByUserId(userId).getData(); if (Objects.isNull(shopRelUserVo)) { return page; @@ -181,17 +179,19 @@ if (CollectionUtil.isEmpty(xiaoeLiveRecordList)) { return page; } Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); dto.setTags(Arrays.asList("20275808", "20275805", "20275707", "20249173", "2406002")); Page<XiaoeLiveVoV2> livePageList = xiaoeUtils.getLivePageListV2(dto); if (CollectionUtil.isEmpty(livePageList.getRecords())) { return page; } //当前商家创建的直播 Set<String> liveIdSet = xiaoeLiveRecordList.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toSet()); //过滤数据 List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream() List<XiaoeLiveVoV2> filteredRecords = livePageList.getRecords().stream() .filter(item -> liveIdSet.contains(item.getId()) && !item.getAliveState().equals(2)) // 按照直播状态排序 .sorted(Comparator.comparing(XiaoeLiveVo::getAliveState).reversed()).collect(Collectors.toList()); .sorted(Comparator.comparing(XiaoeLiveVoV2::getAliveState).reversed()).collect(Collectors.toList()); livePageList.setRecords(filteredRecords); return livePageList; } @@ -268,14 +268,16 @@ } return xiaoeUtils.editLive(dto); } /** * 管理后台直播分页列表 * * @param dto * @return */ public Page<XiaoeLiveVo> getMgtLivePage(XiaoeLiveQueryDto dto) { Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); public Page<XiaoeLiveVoV2> getMgtLivePage(XiaoeLiveQueryDto dto) { dto.setTags(Arrays.asList("20275808", "20275805", "20275707", "20249173", "2406002")); Page<XiaoeLiveVoV2> livePageList = xiaoeUtils.getLivePageListV2(dto); Long shopId = dto.getShopId(); if (Objects.nonNull(shopId)) { List<XiaoeLiveRecord> xiaoeLiveRecords = xiaoeLiveRecordService.getListByShopId(shopId); @@ -283,7 +285,7 @@ return new Page<>(); } List<String> liveIdList = xiaoeLiveRecords.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toList()); List<XiaoeLiveVo> filteredList = livePageList.getRecords().stream().filter(item -> liveIdList.contains(item.getId())).collect(Collectors.toList()); List<XiaoeLiveVoV2> filteredList = livePageList.getRecords().stream().filter(item -> liveIdList.contains(item.getId())).collect(Collectors.toList()); livePageList.setRecords(filteredList); } List<XiaoeLiveRecord> shopRecordList = xiaoeLiveRecordService.lambdaQuery().eq(XiaoeLiveRecord::getType, 2).list(); @@ -308,26 +310,28 @@ xiaoeLiveRecordService.lambdaUpdate().eq(XiaoeLiveRecord::getLiveId, id).remove(); } } /** * 员工端直播列表 * * @param dto * @return */ public Page<XiaoeLiveVo> getStaffLivePage(XiaoeLiveQueryDto dto) { Page<XiaoeLiveVo> page = new Page<>(); public Page<XiaoeLiveVoV2> getStaffLivePage(XiaoeLiveQueryDto dto) { Page<XiaoeLiveVoV2> page = new Page<>(); List<XiaoeLiveRecord> xiaoeLiveRecordList = xiaoeLiveRecordService.getMgtRecord(); if (CollectionUtil.isEmpty(xiaoeLiveRecordList)) { return page; } Page<XiaoeLiveVo> livePageList = xiaoeUtils.getLivePageList(dto); dto.setTags(Arrays.asList("20275808", "20275805", "20275707", "20249173", "2406002")); Page<XiaoeLiveVoV2> livePageList = xiaoeUtils.getLivePageListV2(dto); if (CollectionUtil.isEmpty(livePageList.getRecords())) { return page; } //筛选平台创建的直播 Set<String> liveIdSet = xiaoeLiveRecordList.stream().map(XiaoeLiveRecord::getLiveId).collect(Collectors.toSet()); //过滤数据 List<XiaoeLiveVo> filteredRecords = livePageList.getRecords().stream().filter(item -> liveIdSet.contains(item.getId()) && !item.getAliveState().equals(2)).collect(Collectors.toList()); List<XiaoeLiveVoV2> filteredRecords = livePageList.getRecords().stream().filter(item -> liveIdSet.contains(item.getId()) && !item.getAliveState().equals(2)).collect(Collectors.toList()); livePageList.setRecords(filteredRecords); return livePageList; } ruoyi-modules/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/XiaoeUtils.java
@@ -13,12 +13,7 @@ import com.ruoyi.goods.domain.dto.XiaoeCourseQueryDto; import com.ruoyi.goods.domain.dto.XiaoeLiveDto; import com.ruoyi.goods.domain.dto.XiaoeLiveQueryDto; import com.ruoyi.goods.domain.vo.XiaoeCourseChapterVO; import com.ruoyi.goods.domain.vo.XiaoeCourseGroupVO; import com.ruoyi.goods.domain.vo.XiaoeCourseVO; import com.ruoyi.goods.domain.vo.XiaoeLiveDetailVOV2; import com.ruoyi.goods.domain.vo.XiaoeLiveVo; import com.ruoyi.goods.domain.vo.XiaoeLiveVoV2; import com.ruoyi.goods.domain.vo.*; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; @@ -28,11 +23,7 @@ import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; import java.util.concurrent.TimeUnit; /** @@ -187,6 +178,7 @@ postParams.put("page_size", dto.getPageSize()); postParams.put("access_token", getAccessToken()); postParams.put("zb_start_at_min", DateUtil.format(DateUtils.getTodayStartTime(), DatePattern.NORM_DATETIME_PATTERN)); postParams.put("tag_ids", dto.getTags()); String post = HttpUtil.post(LIVE_PAGE_LIST_V2, JSONObject.toJSONString(postParams)); Page<XiaoeLiveVoV2> xiaoeLiveVOPage = new Page<>(); if (StringUtils.isNotBlank(post)) {