shinnosuke
2026-09-30 60ebfde91e9c975f59df4d60a6cb5a7861958bd2
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/TSysLiveController.java
@@ -28,6 +28,7 @@
import java.time.LocalDateTime;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.Set;
/**
@@ -85,6 +86,7 @@
    @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)));
    }
@@ -96,27 +98,33 @@
    @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);
//        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));
    }
@@ -132,23 +140,25 @@
//        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);
//        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));
    }
@@ -160,8 +170,8 @@
    @GetMapping(value = "/getDetailById")
    public R<TSysLive> getDetailById(@RequestParam String id) {
        TSysLive sysLive = sysLiveService.getById(id);
        // 查询次数自增 使用数据库原子更新操作
        sysLive.setClickCount(sysLive.getClickCount()+1);
        // 查询次数自增(历史数据 click_count 可能为 NULL,需判空)
        sysLive.setClickCount(Objects.isNull(sysLive.getClickCount()) ? 1 : sysLive.getClickCount() + 1);
        sysLiveService.updateById(sysLive);
        // 如果是诊所
        Integer roleType = tokenService.getLoginUser().getUser().getRoleType();
@@ -184,8 +194,8 @@
        redisCache.deleteObject(Constants.SYS_LIVE_CLICK_COUNT+id);
        // 删除直播
        TSysLive sysLive = sysLiveService.getById(id);
        xiaoeUtils.deleteLive(sysLive.getGoslingLiveId());
//        TSysLive sysLive = sysLiveService.getById(id);
//        xiaoeUtils.deleteLive(sysLive.getGoslingLiveId());
        return R.ok(sysLiveService.removeById(id));
    }