| | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.redis.RedisCache; |
| | | import com.ruoyi.common.enums.BusinessType; |
| | | import com.ruoyi.common.utils.DateUtils; |
| | | import com.ruoyi.common.utils.SecurityUtils; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.system.dto.XiaoeLiveDTO; |
| | | import com.ruoyi.system.model.TSysEducationalInfo; |
| | | import com.ruoyi.system.model.TSysLive; |
| | | import com.ruoyi.system.model.TSysProductIntroduction; |
| | | import com.ruoyi.system.query.TSysLiveQuery; |
| | | import com.ruoyi.system.service.TSysLiveService; |
| | | import com.ruoyi.system.utils.util.XiaoeUtils; |
| | | import com.ruoyi.system.vo.TSysLiveVO; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | |
| | | import java.time.LocalDateTime; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | |
| | | private final TSysLiveService sysLiveService; |
| | | private final TokenService tokenService; |
| | | private final RedisCache redisCache; |
| | | private final XiaoeUtils xiaoeUtils; |
| | | @Autowired |
| | | public TSysLiveController(TSysLiveService sysLiveService, TokenService tokenService, RedisCache redisCache) { |
| | | public TSysLiveController(TSysLiveService sysLiveService, TokenService tokenService, RedisCache redisCache, XiaoeUtils xiaoeUtils) { |
| | | this.sysLiveService = sysLiveService; |
| | | this.tokenService = tokenService; |
| | | this.redisCache = redisCache; |
| | | this.xiaoeUtils = xiaoeUtils; |
| | | } |
| | | |
| | | /** |
| | |
| | | public R<List<TSysLive>> list() { |
| | | return R.ok(sysLiveService.list(Wrappers.lambdaQuery(TSysLive.class).orderByDesc(TSysLive::getCreateTime))); |
| | | } |
| | | /** |
| | | * 获取直播管理管理列表 |
| | | */ |
| | | @ApiOperation(value = "获取直播管理列表-banner使用") |
| | | @PostMapping(value = "/listBanner") |
| | | public R<List<TSysLive>> listBanner() { |
| | | return R.ok(sysLiveService.list(Wrappers.lambdaQuery(TSysLive.class) |
| | | .gt(TSysLive::getEndTime, LocalDateTime.now()) |
| | | .orderByDesc(TSysLive::getCreateTime))); |
| | | } |
| | | |
| | | /** |
| | | * 添加直播管理管理 |
| | |
| | | @PostMapping(value = "/add") |
| | | public R<Boolean> add(@Validated @RequestBody TSysLive dto) { |
| | | // 直播开始时间无法小于当前时间 |
| | | if (dto.getStartTime().isBefore(LocalDateTime.now())) { |
| | | if (Objects.nonNull(dto.getStartTime()) && dto.getStartTime().isBefore(LocalDateTime.now())) { |
| | | return R.fail("直播开始时间无法小于当前时间"); |
| | | } |
| | | // 计算结束时间 |
| | | dto.setEndTime(dto.getStartTime().plusMinutes(dto.getExpectedDuration())); |
| | | if(Objects.nonNull(dto.getStartTime()) && Objects.nonNull(dto.getExpectedDuration())){ |
| | | dto.setEndTime(dto.getStartTime().plusMinutes(dto.getExpectedDuration())); |
| | | } |
| | | // 点击次数默认 0,避免后续自增时 NPE |
| | | if (Objects.isNull(dto.getClickCount())) { |
| | | dto.setClickCount(0); |
| | | } |
| | | |
| | | // 创建小鹅通直播 |
| | | // XiaoeLiveDTO xiaoeLiveDTO = new XiaoeLiveDTO(); |
| | | // xiaoeLiveDTO.setTitle(dto.getLiveTitle()); |
| | | // xiaoeLiveDTO.setSummary(dto.getLiveIntroduction()); |
| | | // xiaoeLiveDTO.setZbStartAt(DateUtils.localDateTimeToString(dto.getStartTime())); |
| | | // xiaoeLiveDTO.setZbStopAt(dto.getExpectedDuration()); |
| | | // // 直播类型 0-语音,1-录播直播,2-推流直播,默认为0-语音直播 |
| | | // xiaoeLiveDTO.setAliveType(2); |
| | | // xiaoeLiveDTO.setAliveMode(dto.getLiveMode()==1?0:1); |
| | | // xiaoeLiveDTO.setUserId(dto.getLiveLecturer()); |
| | | // xiaoeLiveDTO.setPaymentType(dto.getLiveType()==1?1:3); |
| | | // xiaoeLiveDTO.setResourcePassword(dto.getResourcePassword()); |
| | | // xiaoeLiveDTO.setDescrb(dto.getLiveDetail()); |
| | | // String goslingLiveId = xiaoeUtils.addLive(xiaoeLiveDTO); |
| | | // dto.setGoslingLiveId(goslingLiveId); |
| | | |
| | | return R.ok(sysLiveService.save(dto)); |
| | | } |
| | | |
| | |
| | | // if (dto.getStartTime().isBefore(LocalDateTime.now())) { |
| | | // return R.fail("直播已开始,无法编辑"); |
| | | // } |
| | | // 计算结束时间 |
| | | dto.setEndTime(dto.getStartTime().plusMinutes(dto.getExpectedDuration())); |
| | | // 计算结束时间(视频类型没有开始时间和预计时长,必须判空,否则编辑接口会 500) |
| | | if (Objects.nonNull(dto.getStartTime()) && Objects.nonNull(dto.getExpectedDuration())) { |
| | | dto.setEndTime(dto.getStartTime().plusMinutes(dto.getExpectedDuration())); |
| | | } |
| | | |
| | | // 编辑小鹅通直播 |
| | | // XiaoeLiveDTO xiaoeLiveDTO = new XiaoeLiveDTO(); |
| | | // xiaoeLiveDTO.setTitle(dto.getLiveTitle()); |
| | | // xiaoeLiveDTO.setSummary(dto.getLiveIntroduction()); |
| | | // xiaoeLiveDTO.setZbStartAt(DateUtils.localDateTimeToString(dto.getStartTime())); |
| | | // xiaoeLiveDTO.setZbStopAt(dto.getExpectedDuration()); |
| | | // // 直播类型 0-语音,1-录播直播,2-推流直播,默认为0-语音直播 |
| | | // xiaoeLiveDTO.setAliveType(2); |
| | | // xiaoeLiveDTO.setAliveMode(dto.getLiveMode()==1?0:1); |
| | | // xiaoeLiveDTO.setUserId(dto.getLiveLecturer()); |
| | | // xiaoeLiveDTO.setPaymentType(dto.getLiveType()==1?1:3); |
| | | // xiaoeLiveDTO.setResourcePassword(dto.getResourcePassword()); |
| | | // xiaoeLiveDTO.setDescrb(dto.getLiveDetail()); |
| | | // xiaoeUtils.editLive(xiaoeLiveDTO); |
| | | |
| | | return R.ok(sysLiveService.updateById(dto)); |
| | | } |
| | | |
| | |
| | | @GetMapping(value = "/getDetailById") |
| | | public R<TSysLive> getDetailById(@RequestParam String id) { |
| | | TSysLive sysLive = sysLiveService.getById(id); |
| | | // 查询次数自增 使用数据库原子更新操作 |
| | | sysLiveService.update( |
| | | Wrappers.<TSysLive>lambdaUpdate() |
| | | .setSql("click_count = click_count + 1") |
| | | .eq(TSysLive::getId, id) |
| | | ); |
| | | // 查询次数自增(历史数据 click_count 可能为 NULL,需判空) |
| | | sysLive.setClickCount(Objects.isNull(sysLive.getClickCount()) ? 1 : sysLive.getClickCount() + 1); |
| | | sysLiveService.updateById(sysLive); |
| | | // 如果是诊所 |
| | | Integer roleType = tokenService.getLoginUser().getUser().getRoleType(); |
| | | if(roleType == 5){ |
| | | Long userId = tokenService.getLoginUser().getUserId(); |
| | | Set<Long> clickCount = new HashSet<>(); |
| | | clickCount.add(userId); |
| | | redisCache.setCacheSet(Constants.SYS_LIVE_COUNT+id,clickCount); |
| | | redisCache.setCacheSet(Constants.SYS_LIVE_CLICK_COUNT+id,clickCount); |
| | | } |
| | | return R.ok(sysLive); |
| | | } |
| | |
| | | @ApiOperation(value = "删除直播管理") |
| | | @DeleteMapping(value = "/deleteById") |
| | | public R<Boolean> deleteById(@RequestParam String id) { |
| | | redisCache.deleteObject(Constants.SYS_LIVE_CLICK_COUNT+id); |
| | | |
| | | // 删除直播 |
| | | // TSysLive sysLive = sysLiveService.getById(id); |
| | | // xiaoeUtils.deleteLive(sysLive.getGoslingLiveId()); |
| | | |
| | | return R.ok(sysLiveService.removeById(id)); |
| | | } |
| | | |
| | |
| | | @ApiOperation(value = "批量删除直播管理") |
| | | @DeleteMapping(value = "/deleteByIds") |
| | | public R<Boolean> deleteByIds(@RequestBody List<String> ids) { |
| | | for (String id : ids) { |
| | | redisCache.deleteObject(Constants.SYS_LIVE_CLICK_COUNT+id); |
| | | } |
| | | return R.ok(sysLiveService.removeByIds(ids)); |
| | | } |
| | | |