Bladeren bron

Merge remote-tracking branch 'origin/master'

weifanli 3 jaren geleden
bovenliggende
commit
bc17b5d062
20 gewijzigde bestanden met toevoegingen van 306 en 110 verwijderingen
  1. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/SysConfigConstant.java
  2. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupNoticeDao.java
  3. 29 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImGroupNoticeDto.java
  4. 12 12
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupNotice.java
  5. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveRoom.java
  6. 7 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupNoticeService.java
  7. 25 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java
  8. 27 4
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java
  9. 13 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupNoticeServiceImpl.java
  10. 55 41
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java
  11. 14 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupNoticeMapper.xml
  12. 6 5
      cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveRoomMapper.xml
  13. 5 2
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupMemberController.java
  14. 3 10
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupNoticeController.java
  15. 6 2
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImUserFriendController.java
  16. 7 3
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupMemberController.java
  17. 4 6
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupNoticeController.java
  18. 12 13
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java
  19. 36 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/LiveRoomController.java
  20. 19 2
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/LiveRoomVideoController.java

+ 10 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/constant/SysConfigConstant.java

@@ -41,4 +41,14 @@ public interface SysConfigConstant {
      */
     String DESTROY_EXPIRED_LIVE_ROOM_MINUTE = "destroy_expired_live_room_minute";
 
+    /**
+     * 陪练课提现手续费
+     */
+    String PRACTICE_SERVICE_FEE = "practice_service_fee";
+
+    /**
+     * 陪练课可选时长配置
+     */
+    String PRACTICE_TIMES_SETTING = "practice_times_setting";
+
 }

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupNoticeDao.java

@@ -1,10 +1,14 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.biz.dal.dto.ImGroupNoticeDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 群公告(ImGroupNotice)表数据库访问层
@@ -16,5 +20,6 @@ public interface ImGroupNoticeDao extends BaseMapper<ImGroupNotice> {
 
     int insertBatch(@Param("entities") List<ImGroupNotice> entities);
 
+    IPage<ImGroupNoticeDto> queryPage(Page<ImGroupNoticeDto> pageInfo, @Param("params") Map<String, Object> params);
 }
 

+ 29 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/ImGroupNoticeDto.java

@@ -0,0 +1,29 @@
+package com.yonge.cooleshow.biz.dal.dto;
+
+import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
+import io.swagger.annotations.ApiModelProperty;
+
+public class ImGroupNoticeDto extends ImGroupNotice {
+
+    @ApiModelProperty(value = "sys_user表username_", required = true)
+    private String username;
+
+    @ApiModelProperty(value = "用户头像", required = true)
+    private String avatar;
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+}

+ 12 - 12
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupNotice.java

@@ -40,13 +40,13 @@ public class ImGroupNotice implements Serializable {
     @ApiModelProperty(value = "内容")
     private String content;
 
-    @TableField("is_top_")
+    @TableField("top_flag_")
     @ApiModelProperty(value = "是否置顶")
-    private Boolean isTop = false;
+    private Boolean topFlag = false;
 
-    @TableField("is_sent_to_new_member_")
+    @TableField("sent_to_new_member_flag_")
     @ApiModelProperty(value = "是否发送给新人")
-    private Boolean isSentToNewMember = false;
+    private Boolean sentToNewMemberFlag = false;
 
     @TableField("del_flag_")
     @ApiModelProperty(value = "是否删除1是0否;")
@@ -96,20 +96,20 @@ public class ImGroupNotice implements Serializable {
         this.content = content;
     }
 
-    public Boolean getTop() {
-        return isTop;
+    public Boolean getTopFlag() {
+        return topFlag;
     }
 
-    public void setTop(Boolean top) {
-        isTop = top;
+    public void setTopFlag(Boolean topFlag) {
+        this.topFlag = topFlag;
     }
 
-    public Boolean getSentToNewMember() {
-        return isSentToNewMember;
+    public Boolean getSentToNewMemberFlag() {
+        return sentToNewMemberFlag;
     }
 
-    public void setSentToNewMember(Boolean sentToNewMember) {
-        isSentToNewMember = sentToNewMember;
+    public void setSentToNewMemberFlag(Boolean sentToNewMemberFlag) {
+        this.sentToNewMemberFlag = sentToNewMemberFlag;
     }
 
     public Boolean getDelFlag() {

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/LiveRoom.java

@@ -66,6 +66,10 @@ public class LiveRoom implements Serializable {
     @ApiModelProperty(value = "房间类型 live直播课  temp临时直播间")
     private String type;
 
+    @TableField("cover_pic_")
+    @ApiModelProperty(value = "封面图片")
+    private String coverPic;
+
     @TableField("created_by_")
     @ApiModelProperty(value = "创建人")
     private Long createdBy;
@@ -210,5 +214,12 @@ public class LiveRoom implements Serializable {
         this.updatedTime = updatedTime;
     }
 
+    public String getCoverPic() {
+        return coverPic;
+    }
+
+    public void setCoverPic(String coverPic) {
+        this.coverPic = coverPic;
+    }
 }
 

+ 7 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupNoticeService.java

@@ -1,8 +1,13 @@
 package com.yonge.cooleshow.biz.dal.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.ImGroupNoticeDao;
+import com.yonge.cooleshow.biz.dal.dto.ImGroupNoticeDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
+import com.yonge.cooleshow.common.page.PageInfo;
+
+import java.util.Map;
 
 /**
  * 群公告(ImGroupNotice)表服务接口
@@ -26,5 +31,7 @@ public interface ImGroupNoticeService extends IService<ImGroupNotice> {
     void modify(ImGroupNotice imGroupNotice);
 
     void del(Long noticeId);
+
+    PageInfo<ImGroupNoticeDto> queryPage(Map<String,Object> params);
 }
 

+ 25 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/LiveRoomService.java

@@ -6,6 +6,7 @@ import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
 import com.yonge.cooleshow.biz.dal.entity.RoomUserInfoCache;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 直播房间与课程的关系表表(LiveRoom)表服务接口
@@ -17,12 +18,34 @@ public interface LiveRoomService extends IService<LiveRoom> {
 
     LiveRoomDao getDao();
 
+    /**
+     * 定时任务创建直播间
+     */
     void createCourseLiveRoom();
 
-    void createTempLiveRoom(LiveRoom room);
-
+    /**
+     * 定时任务-清理过期的房间
+     */
+    void destroyExpiredLiveRoom();
+
+    /**
+     * 创建临时房间-直播间
+     */
+    void createTempLiveRoom(Map<String, Object> param);
+
+    /**
+     * 进入房间
+     *
+     * @param roomUid 房间uid
+     * @param userId  用户id 主讲人或者用户的id
+     */
     void joinRoom(String roomUid, Long userId);
 
+    /**
+     * 查询在观看直播的用户信息
+     *
+     * @param roomUid 直播间uid
+     */
     List<RoomUserInfoCache> queryRoomUserInfo(String roomUid);
 
 }

+ 27 - 4
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/CourseScheduleServiceImpl.java

@@ -6,9 +6,8 @@ import com.yonge.cooleshow.biz.dal.dao.CourseScheduleDao;
 import com.yonge.cooleshow.biz.dal.entity.CourseSchedule;
 import com.yonge.cooleshow.biz.dal.enums.CourseScheduleTypeEnum;
 import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
+import com.yonge.cooleshow.common.exception.BizException;
 import org.apache.commons.collections.CollectionUtils;
-import org.joda.time.LocalDate;
-import org.joda.time.LocalDateTime;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Service;
@@ -18,6 +17,7 @@ import org.springframework.validation.annotation.Validated;
 import javax.validation.Valid;
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 /**
  * 老师课程表(CourseSchedule)表服务实现类
@@ -37,6 +37,28 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
     }
 
     /**
+     * 根据老师id查询直播课程
+     */
+    public void queryCourseList(Long teacherId) {
+        List<CourseSchedule> list = this.list(new QueryWrapper<>(new CourseSchedule()).lambda()
+                .eq(CourseSchedule::getTeacherId, teacherId)
+        );
+        if (CollectionUtils.isEmpty(list)) {
+            throw new BizException("没有课程");
+        }
+    }
+
+    /**
+     * 根据课程id查询直播间信息
+     */
+    public void getCourseInfo(Long courseId) {
+        CourseSchedule course = this.getById(courseId);
+        if (Objects.isNull(course)) {
+            throw new BizException("该课程没有直播间");
+        }
+    }
+
+    /**
      * 查询这个时间段有没有被占用-校验课时
      *
      * @param teacherId 老师id
@@ -94,10 +116,11 @@ public class CourseScheduleServiceImpl extends ServiceImpl<CourseScheduleDao, Co
 
     /**
      * 课程日历
+     *
      * @param teacherId 老师id
-     * @param date 年月日 yyyy-MM-dd 都是1号
+     * @param date      年月日 yyyy-MM-dd 都是1号
      */
-    public void courseCalendar(Long teacherId,String date) {
+    public void courseCalendar(Long teacherId, String date) {
 
     }
 

+ 13 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupNoticeServiceImpl.java

@@ -1,14 +1,18 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
 import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
 import com.yonge.cooleshow.biz.dal.dao.ImGroupNoticeDao;
+import com.yonge.cooleshow.biz.dal.dto.ImGroupNoticeDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
 import com.yonge.cooleshow.biz.dal.service.ImGroupNoticeService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.exception.BizException;
+import com.yonge.cooleshow.common.page.PageInfo;
 import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
@@ -17,6 +21,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.Date;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -61,6 +66,13 @@ public class ImGroupNoticeServiceImpl extends ServiceImpl<ImGroupNoticeDao, ImGr
     }
 
     @Override
+    public PageInfo<ImGroupNoticeDto> queryPage(Map<String,Object> params) {
+        Page<ImGroupNoticeDto> pageInfo = PageUtil.getPageInfo(params);
+        pageInfo.setDesc("top_flag_","id_");
+        return PageUtil.pageInfo(baseMapper.queryPage(pageInfo,params));
+    }
+
+    @Override
     public void modify(ImGroupNotice imGroupNotice) {
         if(Objects.isNull(baseMapper.selectById(imGroupNotice.getId()))){
             throw new BizException("群公告不存在");
@@ -70,7 +82,7 @@ public class ImGroupNoticeServiceImpl extends ServiceImpl<ImGroupNoticeDao, ImGr
         imGroupNotice.setOperatorId(userId);
         imGroupNotice.setCreateTime(date);
         imGroupNotice.setUpdateTime(date);
-        baseMapper.insert(imGroupNotice);
+        baseMapper.updateById(imGroupNotice);
     }
 
     public Long checkAdmin(Long groupId){

+ 55 - 41
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/LiveRoomServiceImpl.java

@@ -14,6 +14,7 @@ import com.yonge.cooleshow.biz.dal.service.CourseScheduleService;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
 import com.yonge.cooleshow.biz.dal.service.SysConfigService;
 import com.yonge.cooleshow.biz.dal.support.IMHelper;
+import com.yonge.cooleshow.biz.dal.support.WrapperUtil;
 import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.toolset.utils.date.DateUtil;
 import org.apache.commons.collections.CollectionUtils;
@@ -29,7 +30,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.*;
 import java.util.concurrent.TimeUnit;
-import java.util.function.Function;
+import java.util.function.BiFunction;
 import java.util.stream.Collectors;
 
 import static com.yonge.cooleshow.biz.dal.constant.SysConfigConstant.DESTROY_EXPIRED_LIVE_ROOM_MINUTE;
@@ -65,15 +66,15 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     public static final String COOLESHOW = "COOLESHOW";
 
     //直播间累计用户信息-指只要进入到该房间的用户都要记录
-    public static final String LIVE_ROOM_TOTAL_USER_LIST = COOLESHOW + ":LIVE_ROOM_TOTAL_USER_LIST:" + ROOM_UID;
+    public static final String LIVE_ROOM_TOTAL_USER_LIST = String.join(":", COOLESHOW, "LIVE_ROOM_TOTAL_USER_LIST" + ROOM_UID);
     //用户当前对应的直播间Uid
-    public static final String LIVE_USER_ROOM = COOLESHOW + ":LIVE_ROOM_USER:" + USER_ID;
+    public static final String LIVE_USER_ROOM = String.join(":", COOLESHOW, "LIVE_ROOM_USER", USER_ID);
     //房间点赞数
-    public static final String LIVE_ROOM_LIKE = COOLESHOW + ":LIVE_ROOM_LIKE:" + ROOM_UID;
+    public static final String LIVE_ROOM_LIKE = String.join(":", COOLESHOW, "LIVE_ROOM_LIKE", ROOM_UID);
     //生成房间UID
-    public static Function<Long, String> GenRoomUid = (userId) -> COOLESHOW + "-" + userId + "-" + new Date().getTime();
+    public static BiFunction<Long, RoomTypeEnum, String> GenRoomUid = (userId, en) -> String.join("-", COOLESHOW, en.getCode(), userId.toString(), new Date().getTime() + "");
     //房间的信息
-    public static final String LIVE_ROOM_INFO = COOLESHOW + ":LIVE_ROOM_INFO:" + ROOM_UID;
+    public static final String LIVE_ROOM_INFO = String.join(":", COOLESHOW, "LIVE_ROOM_INFO", ROOM_UID);
 
     @Override
     public LiveRoomDao getDao() {
@@ -81,19 +82,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
     }
 
     /**
-     * 根据课程id查询直播间信息
-     */
-    public void getLiveRoomByCourseId(Long courseId) {
-        CourseSchedule course = courseScheduleService.getById(courseId);
-        if (Objects.isNull(course)) {
-            throw new BizException("该课程没有直播间");
-        }
-    }
-
-    /**
      * 定时任务创建直播间
      */
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void createCourseLiveRoom() {
         Date now = new Date();
         //查询房间提前创建的时间
@@ -120,31 +112,24 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
                 .filter(Objects::nonNull)
                 .collect(Collectors.toMap(CourseGroup::getId, CourseGroup::getName));
         //生成课程对应的房间
+        RoomTypeEnum en = RoomTypeEnum.LIVE;
         courseScheduleList.forEach(c -> {
             LiveRoom room = new LiveRoom();
             room.setCourseGroupId(c.getCourseGroupId());
             room.setCourseId(c.getId());
-            room.setRoomUid(GenRoomUid.apply(c.getTeacherId()));
+            room.setRoomUid(GenRoomUid.apply(c.getTeacherId(), en));
             room.setRoomTitle(titleMap.get(c.getCourseGroupId()));
             room.setSpeakerId(c.getTeacherId());
             room.setLiveStartTime(c.getStartTime());
             room.setLiveEndTime(c.getEndTime());
             room.setLiveState(0);
             room.setRoomState(0);
-            room.setType(RoomTypeEnum.LIVE.getCode());
+            room.setType(en.getCode());
             room.setCreatedBy(-2L);
             room.setCreatedTime(now);
             this.save(room);
-            try {
-                //生成主讲人信息
-                createRoomInfoCache(room);
-                //去融云创建房间
-                createLiveRoom(room.getRoomUid(), room.getRoomTitle());
-            } catch (Exception e) {
-                //为什么要删除,因为如果融云创建失败,那么就不会有房间了,需要删除
-                this.removeById(room.getId());
-                log.error("创建直播间失败", e.getCause());
-            }
+            //去融云创建房间及创建房间缓存信息
+            createLiveRoomInfo(room);
         });
 
     }
@@ -154,20 +139,47 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void createTempLiveRoom(LiveRoom room) {
+    public void createTempLiveRoom(Map<String, Object> param) {
+        String roomTitle = WrapperUtil.toStr(param, "roomTitle", "房间标题不能为空!");
+        String liveRemark = WrapperUtil.toStr(param, "liveRemark", "直播间描述不能为空!");
+        String coverPic = WrapperUtil.toStr(param, "coverPic", "直播间封面不能为空!");
         //查询主讲人信息
         SysUser sysUser = getSysUser();
-
-        room.setCourseGroupId(0L);
-        room.setCourseId(0L);
-        room.setType(RoomTypeEnum.TEMP.getCode());
-        room.setRoomUid(GenRoomUid.apply(sysUser.getId()));
+        Long id = sysUser.getId();
+        Date now = new Date();
+        RoomTypeEnum en = RoomTypeEnum.TEMP;
+        LiveRoom room = new LiveRoom();
+        room.setCourseGroupId(-1L);
+        room.setCourseId(-1L);
+        room.setRoomUid(GenRoomUid.apply(id, en));
+        room.setRoomTitle(roomTitle);
+        room.setLiveRemark(liveRemark);
+        room.setCoverPic(coverPic);
+        room.setSpeakerId(id);
+        room.setLiveStartTime(now);
+        room.setLiveState(0);
+        room.setRoomState(0);
+        room.setCreatedBy(id);
+        room.setCreatedTime(now);
+        room.setType(en.getCode());
         this.save(room);
         log.info("createTempLiveRoom>>>>>>room:{}", room.getRoomUid());
-        //生成主讲人信息到缓存
-        createRoomInfoCache(room, sysUser);
-        //去融云创建房间
-        createLiveRoom(room.getRoomUid(), room.getRoomTitle());
+        //去融云创建房间及创建房间缓存信息
+        createLiveRoomInfo(room);
+    }
+
+    /**
+     * 去融云创建房间及创建房间缓存信息-直播间
+     */
+    private void createLiveRoomInfo(LiveRoom room) {
+        try {
+            //生成主讲人信息
+            createRoomInfoCache(room);
+            //去融云创建房间
+            createLiveRoom(room.getRoomUid(), room.getRoomTitle());
+        } catch (Exception e) {
+            throw new BizException("创建直播间失败!", e.getCause());
+        }
     }
 
     //生成主讲人信息
@@ -231,8 +243,10 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         Date now = new Date();
         //查询已经开始并且没有删除及销毁的直播间
         List<LiveRoom> list = this.list(new QueryWrapper<LiveRoom>().lambda()
+                .eq(LiveRoom::getRoomState, 0)
+                .eq(LiveRoom::getLiveState, 1)
                 .eq(LiveRoom::getType, RoomTypeEnum.LIVE.getCode())
-                .ge(LiveRoom::getLiveEndTime, now));
+                .le(LiveRoom::getLiveEndTime, now));
         if (CollectionUtils.isEmpty(list)) {
             return;
         }
@@ -283,10 +297,11 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         } else {
             throw new BizException("房间不存在!");
         }
+        Date now = new Date();
         //进入房间的是主讲人
         if (roomInfo.getSpeakerId().equals(userId)) {
             roomInfo.setSpeakerState(0);
-            roomInfo.setJoinRoomTime(new Date());
+            roomInfo.setJoinRoomTime(now);
             roomInfoCache.set(roomInfo, 2L, TimeUnit.DAYS);
             return;
         }
@@ -296,7 +311,6 @@ public class LiveRoomServiceImpl extends ServiceImpl<LiveRoomDao, LiveRoom> impl
         RMap<Long, RoomUserInfoCache> roomTotalUser = redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid));
         //判断是否第一次进房间
         RoomUserInfoCache userInfo;
-        Date now = new Date();
         if (roomTotalUser.containsKey(userId)) {
             //多次进入更新动态进入时间
             userInfo = roomTotalUser.get(userId);

+ 14 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupNoticeMapper.xml

@@ -6,27 +6,36 @@
         <result column="group_id_" jdbcType="INTEGER" property="groupId"/>
         <result column="title_" jdbcType="VARCHAR" property="title"/>
         <result column="content_" jdbcType="VARCHAR" property="content"/>
-        <result column="is_top_" jdbcType="VARCHAR" property="isTop"/>
-        <result column="is_sent_to_new_member_" jdbcType="VARCHAR" property="isSentToNewMember"/>
+        <result column="top_flag_" property="topFlag"/>
+        <result column="sent_to_new_member_flag_" property="sentToNewMemberFlag"/>
         <result column="del_flag_" jdbcType="VARCHAR" property="delFlag"/>
         <result column="operator_id_" jdbcType="INTEGER" property="operatorId"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
     </resultMap>
+    <resultMap id="ImGroupNoticeDto" type="com.yonge.cooleshow.biz.dal.dto.ImGroupNoticeDto" extends="BaseResultMap">
+        <result property="avatar" column="avatar_"/>
+        <result property="username" column="username_"/>
+    </resultMap>
 
     <sql id="Base_Column_List">
-        id_, group_id_, title_, content_, is_top_, is_sent_to_new_member_, del_flag_, operator_id_, create_time_, update_time_
+        id_, group_id_, title_, content_, top_flag_, sent_to_new_member_flag_, del_flag_, operator_id_, create_time_, update_time_
     </sql>
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.yonge.cooleshow.biz.dal.entity.ImGroupNotice">
-        insert into im_group_notice(group_id_, title_, content_, is_top_, is_sent_to_new_member_, del_flag_,
+        insert into im_group_notice(group_id_, title_, content_, top_flag_, sent_to_new_member_flag_, del_flag_,
         operator_id_, create_time_, update_time_)
         values
         <foreach collection="entities" item="entity" separator=",">
-            (#{entity.groupId}, #{entity.title}, #{entity.content}, #{entity.isTop}, #{entity.isSentToNewMember},
+            (#{entity.groupId}, #{entity.title}, #{entity.content}, #{entity.topFlag}, #{entity.sentToNewMemberFlag},
             #{entity.delFlag}, #{entity.operatorId}, #{entity.createTime}, #{entity.updateTime})
         </foreach>
     </insert>
+    <select id="queryPage" resultMap="ImGroupNoticeDto">
+        SELECT gn.*,su.avatar_,su.real_name_ username_ FROM im_group_notice gn
+        LEFT JOIN sys_user su ON su.id_ = gn.operator_id_
+        WHERE gn.group_id_ = #{params.groupId}
+    </select>
 
 </mapper>

+ 6 - 5
cooleshow-user/user-biz/src/main/resources/config/mybatis/LiveRoomMapper.xml

@@ -18,24 +18,25 @@
         <result column="created_time_" jdbcType="TIMESTAMP" property="createdTime"/>
         <result column="updated_by_" jdbcType="INTEGER" property="updatedBy"/>
         <result column="updated_time_" jdbcType="TIMESTAMP" property="updatedTime"/>
+        <result column="cover_pic_" jdbcType="VARCHAR" property="coverPic"/>
     </resultMap>
 
     <sql id="Base_Column_List">
         id_
-        , course_group_id_, course_id_, speaker_id_, room_uid_, room_title_, live_start_time_, live_end_time_, live_remark_, live_state_, room_state_, type_, created_by_, created_time_, updated_by_, updated_time_
+        , course_group_id_, course_id_, speaker_id_, room_uid_, room_title_, live_start_time_, live_end_time_, live_remark_, live_state_, room_state_, type_, cover_pic_, created_by_, created_time_, updated_by_, updated_time_
     </sql>
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.yonge.cooleshow.biz.dal.entity.LiveRoom">
         insert into live_room(course_group_id_, course_id_, speaker_id_, room_uid_, room_title_, live_start_time_,
-        live_end_time_, live_remark_, live_state_, room_state_, type_, created_by_, created_time_, updated_by_,
-        updated_time_)
+        live_end_time_, live_remark_, live_state_, room_state_, type_, cover_pic_, created_by_, created_time_,
+        updated_by_, updated_time_)
         values
         <foreach collection="entities" item="entity" separator=",">
             (#{entity.courseGroupId}, #{entity.courseId}, #{entity.speakerId}, #{entity.roomUid}, #{entity.roomTitle},
             #{entity.liveStartTime}, #{entity.liveEndTime}, #{entity.liveRemark}, #{entity.liveState},
-            #{entity.roomState}, #{entity.type}, #{entity.createdBy}, #{entity.createdTime}, #{entity.updatedBy},
-            #{entity.updatedTime})
+            #{entity.roomState}, #{entity.type}, #{entity.coverPic}, #{entity.createdBy}, #{entity.createdTime},
+            #{entity.updatedBy}, #{entity.updatedTime})
         </foreach>
     </insert>
 

+ 5 - 2
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupMemberController.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.student.controller;
 
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
@@ -61,9 +62,11 @@ public class ImGroupMemberController extends BaseController {
         if(Objects.isNull(params.get("groupId"))){
             throw new BizException("参数校验失败");
         }
+        Object search = params.get("search");
         List<ImGroupMember> iPage = imGroupMemberService.getBaseMapper().selectList(Wrappers.<ImGroupMember>query().lambda()
-                .or(e->e.eq(ImGroupMember::getUserId, params.get("search"))
-                        .like(ImGroupMember::getNickname, params.get("search")))
+                .and(Objects.nonNull(search) && StringUtils.isNotEmpty(search.toString()),
+                        e->e.eq(ImGroupMember::getUserId, search).or()
+                        .like(ImGroupMember::getNickname, search))
                 .eq(ImGroupMember::getGroupId,params.get("groupId")).orderByDesc(ImGroupMember::getId));
         return succeed(iPage);
     }

+ 3 - 10
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupNoticeController.java

@@ -1,12 +1,9 @@
 package com.yonge.cooleshow.student.controller;
 
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.biz.dal.dto.ImGroupNoticeDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
 import com.yonge.cooleshow.biz.dal.service.ImGroupNoticeService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import com.yonge.cooleshow.common.page.PageInfo;
@@ -43,12 +40,8 @@ public class ImGroupNoticeController extends BaseController {
     })
     @ApiOperation("分页查询")
     @PostMapping(value = "/queryPage")
-    public HttpResponseResult<PageInfo<ImGroupNotice>> queryPage(@RequestBody Map<String,Object> params) throws Exception {
-        Page<ImGroupNotice> pageInfo = PageUtil.getPageInfo(params);
-        IPage<ImGroupNotice> iPage = imGroupNoticeService.getBaseMapper().selectPage(pageInfo, Wrappers.<ImGroupNotice>query().lambda()
-                .eq(ImGroupNotice::getGroupId,params.get("groupId"))
-                .orderByDesc(ImGroupNotice::getCreateTime));
-        return succeed(PageUtil.pageInfo(iPage));
+    public HttpResponseResult<PageInfo<ImGroupNoticeDto>> queryPage(@RequestBody Map<String,Object> params) throws Exception {
+        return succeed(imGroupNoticeService.queryPage(params));
     }
 }
 

+ 6 - 2
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImUserFriendController.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.student.controller;
 
 
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
@@ -14,6 +15,7 @@ import org.springframework.web.bind.annotation.*;
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * 用户通讯录表(ImUserFriend)表控制层
@@ -40,9 +42,11 @@ public class ImUserFriendController extends BaseController {
     @PostMapping(value = "/queryAll")
     public HttpResponseResult<List<ImUserFriend>> queryAll(@RequestBody Map<String,Object> params) throws Exception {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Object search = params.get("search");
         List<ImUserFriend> iPage = imUserFriendService.getBaseMapper().selectList(Wrappers.<ImUserFriend>query().lambda()
-                .or(e->e.eq(ImUserFriend::getFriendId, params.get("search"))
-                        .like(ImUserFriend::getFriendNickname, params.get("search")))
+                .and(Objects.nonNull(search) && StringUtils.isNotEmpty(search.toString()),
+                        e->e.eq(ImUserFriend::getFriendId, search).or()
+                        .like(ImUserFriend::getFriendNickname, search))
                 .eq(ImUserFriend::getUserId,sysUser.getId()).orderByDesc(ImUserFriend::getId));
         return succeed(iPage);
     }

+ 7 - 3
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupMemberController.java

@@ -1,6 +1,8 @@
 package com.yonge.cooleshow.teacher.controller;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
@@ -61,9 +63,11 @@ public class ImGroupMemberController extends BaseController {
         if(Objects.isNull(params.get("groupId"))){
             throw new BizException("参数校验失败");
         }
-        List<ImGroupMember> iPage = imGroupMemberService.getBaseMapper().selectList(Wrappers.<ImGroupMember>query().lambda()
-                .or(e->e.eq(ImGroupMember::getUserId, params.get("search"))
-                        .like(ImGroupMember::getNickname, params.get("search")))
+        Object search = params.get("search");
+        List<ImGroupMember> iPage = imGroupMemberService.list(new QueryWrapper<ImGroupMember>().lambda()
+                .and(Objects.nonNull(search) && StringUtils.isNotEmpty(search.toString()),e->e.
+                        eq(ImGroupMember::getUserId, search).or()
+                        .like(ImGroupMember::getNickname, search))
                 .eq(ImGroupMember::getGroupId,params.get("groupId")).orderByDesc(ImGroupMember::getId));
         return succeed(iPage);
     }

+ 4 - 6
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupNoticeController.java

@@ -4,6 +4,8 @@ package com.yonge.cooleshow.teacher.controller;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.biz.dal.dao.ImGroupNoticeDao;
+import com.yonge.cooleshow.biz.dal.dto.ImGroupNoticeDto;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
 import com.yonge.cooleshow.biz.dal.service.ImGroupNoticeService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
@@ -62,12 +64,8 @@ public class ImGroupNoticeController extends BaseController {
     })
     @ApiOperation("分页查询")
     @PostMapping(value = "/queryPage")
-    public HttpResponseResult<PageInfo<ImGroupNotice>> queryPage(@RequestBody Map<String,Object> params) throws Exception {
-        Page<ImGroupNotice> pageInfo = PageUtil.getPageInfo(params);
-        IPage<ImGroupNotice> iPage = imGroupNoticeService.getBaseMapper().selectPage(pageInfo, Wrappers.<ImGroupNotice>query().lambda()
-                .eq(ImGroupNotice::getGroupId,params.get("groupId"))
-                .orderByDesc(ImGroupNotice::getCreateTime));
-        return succeed(PageUtil.pageInfo(iPage));
+    public HttpResponseResult<PageInfo<ImGroupNoticeDto>> queryPage(@RequestBody Map<String,Object> params) throws Exception {
+        return succeed(imGroupNoticeService.queryPage(params));
     }
 }
 

+ 12 - 13
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java

@@ -1,26 +1,21 @@
 package com.yonge.cooleshow.teacher.controller;
 
 
-import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
 import com.yonge.cooleshow.auth.api.entity.SysUser;
-import com.yonge.cooleshow.biz.dal.entity.ImGroup;
-import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
-import com.yonge.cooleshow.biz.dal.support.PageUtil;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
-import com.yonge.cooleshow.common.page.PageInfo;
-import com.yonge.cooleshow.common.page.QueryInfo;
 import io.swagger.annotations.*;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * 用户通讯录表(ImUserFriend)表控制层
@@ -40,18 +35,22 @@ public class ImUserFriendController extends BaseController {
     @Resource
     private SysUserFeignService sysUserFeignService;
 
+    @SuppressWarnings("unchecked")//因为返回是集合,这里提示你集合内容较多排序可能回耗费性能
     @ApiImplicitParams({
             @ApiImplicitParam(name = "search", dataType = "String", value = "根据用户编号、昵称模糊查询")
     })
     @ApiOperation("获取通讯录成员列表")
     @PostMapping(value = "/queryAll")
-    public HttpResponseResult<List<ImUserFriend>> queryAll(@RequestBody Map<String,Object> params) throws Exception {
+    public HttpResponseResult<List<ImUserFriend>> queryAll(@RequestBody Map<String, Object> params) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        List<ImUserFriend> iPage = imUserFriendService.getBaseMapper().selectList(Wrappers.<ImUserFriend>query().lambda()
-                .or(e->e.eq(ImUserFriend::getFriendId, params.get("search"))
-                        .like(ImUserFriend::getFriendNickname, params.get("search")))
-                .eq(ImUserFriend::getUserId,sysUser.getId()).orderByDesc(ImUserFriend::getId));
-        return succeed(iPage);
+        Object search = params.get("search");
+        List<ImUserFriend> record = imUserFriendService.list(Wrappers.<ImUserFriend>query().lambda()
+                .eq(ImUserFriend::getUserId, sysUser.getId())
+                .and(Objects.nonNull(search) && StringUtils.isNotEmpty(search.toString()),
+                        e -> e.eq(ImUserFriend::getFriendId, search)
+                                .or().like(ImUserFriend::getFriendNickname, search))
+                .orderByDesc(ImUserFriend::getId));
+        return succeed(record);
     }
 
     @ApiOperation("获取好友详情")

+ 36 - 2
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/LiveRoomController.java

@@ -1,13 +1,17 @@
 package com.yonge.cooleshow.teacher.controller;
 
 
-import com.yonge.cooleshow.biz.dal.entity.LiveRoom;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomService;
-import org.springframework.web.bind.annotation.*;
 import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.util.Map;
 
 /**
  * 直播房间与课程的关系表表(LiveRoom)表控制层
@@ -25,5 +29,35 @@ public class LiveRoomController extends BaseController {
     @Resource
     private LiveRoomService liveRoomService;
 
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "roomTitle", dataType = "String", value = "房间标题"),
+            @ApiImplicitParam(name = "liveRemark", dataType = "String", value = "直播内容/最多200个字"),
+            @ApiImplicitParam(name = "coverPic", dataType = "String", value = "封面图片"),
+    })
+    @ApiOperation("创建临时房间-直播间")
+    @PostMapping("/createTempLiveRoom")
+    public HttpResponseResult<Object> createTempLiveRoom(@RequestBody Map<String, Object> param) {
+        liveRoomService.createTempLiveRoom(param);
+        return succeed();
+    }
+
+    @ApiOperation("进入房间")
+    @GetMapping(value = "/joinRoom")
+    public HttpResponseResult<Object> joinRoom(String roomUid, Long userId) {
+        liveRoomService.joinRoom(roomUid, userId);
+        return succeed();
+    }
+
+    @ApiOperation("定时任务-创建房间-直播间")
+    @GetMapping("/createCourseLiveRoom")
+    public void createCourseLiveRoom() {
+        liveRoomService.createCourseLiveRoom();
+    }
+
+    @ApiOperation("定时任务-销毁房间-直播间")
+    @GetMapping("/destroyExpiredLiveRoom")
+    public void destroyExpiredLiveRoom() {
+        liveRoomService.destroyExpiredLiveRoom();
+    }
 }
 

+ 19 - 2
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/LiveRoomVideoController.java

@@ -1,11 +1,17 @@
 package com.yonge.cooleshow.teacher.controller;
 
 
-import com.yonge.cooleshow.biz.dal.entity.LiveRoomVideo;
+import com.alibaba.fastjson.JSONObject;
+import com.yonge.cooleshow.biz.dal.entity.RecordNotify;
 import com.yonge.cooleshow.biz.dal.service.LiveRoomVideoService;
-import org.springframework.web.bind.annotation.*;
 import com.yonge.cooleshow.common.controller.BaseController;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
 
@@ -19,11 +25,22 @@ import javax.annotation.Resource;
 @RestController
 @RequestMapping("/liveRoomVideo")
 public class LiveRoomVideoController extends BaseController {
+
+    private final static Logger log = LoggerFactory.getLogger(LiveRoomVideoController.class);
+
     /**
      * 服务对象
      */
     @Resource
     private LiveRoomVideoService liveRoomVideoService;
 
+    @ApiOperation("录制结果回调")
+    @RequestMapping(value = "/recordSync")
+    public void recordSync(@RequestBody String body) {
+        log.info("recordSync body:{}", body);
+        RecordNotify recordNotify = JSONObject.parseObject(body, RecordNotify.class);
+        liveRoomVideoService.recordSync(recordNotify);
+    }
+
 }