Browse Source

Merge remote-tracking branch 'origin/master_saas' into master_saas

zouxuan 3 years ago
parent
commit
622a262944

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImLiveRoomPurviewDao.java

@@ -0,0 +1,29 @@
+package com.ym.mec.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.ym.mec.biz.dal.entity.ImLiveRoomPurview;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 直播间的观看权限表(ImLiveRoomPurview)表数据库访问层
+ *
+ * @author hgw
+ * @since 2022-06-08 09:43:47
+ */
+public interface ImLiveRoomPurviewDao extends BaseMapper<ImLiveRoomPurview> {
+
+    int insertBatch(@Param("entities") List<ImLiveRoomPurview> entities);
+
+    <T> IPage<T> queryStudent(Page<T> page, @Param("param") Map<String, Object> param);
+
+    <T> IPage<T> selectRoomPurviewStudent(Page<T> page, @Param("param") Map<String, Object> param);
+
+    <T> IPage<T> selectRoomPurviewGroup(Page<T> page, @Param("param") Map<String, Object> param);
+
+}
+

+ 23 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImLiveBroadcastRoomDto.java

@@ -49,7 +49,7 @@ public class ImLiveBroadcastRoomDto implements Serializable {
     private RoomConfig roomConfig;
     private RoomConfig roomConfig;
 
 
     @NotBlank(message = "直播间类型不能为空")
     @NotBlank(message = "直播间类型不能为空")
-    @ApiModelProperty(value = "推广的直播间可见类型-全部可见、部分分部可见、部分合作单位可见")
+    @ApiModelProperty(value = "直播间可见类型-全部可见ALL / 分部可见ORGAN / 学校可见SCHOOL / 乐团可见TEAM / 群组可见GROUP / 学生可见STUDENT")
     private String popularizeType;
     private String popularizeType;
 
 
     @ApiModelProperty(value = "分部id-多个id逗号分割")
     @ApiModelProperty(value = "分部id-多个id逗号分割")
@@ -61,6 +61,12 @@ public class ImLiveBroadcastRoomDto implements Serializable {
     @ApiModelProperty(value = "乐团id,多个id逗号分割")
     @ApiModelProperty(value = "乐团id,多个id逗号分割")
     private String popularizeTeamIds;
     private String popularizeTeamIds;
 
 
+    @ApiModelProperty(value = "群组id,多个id逗号分割")
+    private String popularizeGroupIds;
+
+    @ApiModelProperty(value = "学生id,多个id逗号分割")
+    private String popularizeStudentIds;
+
     @ApiModel(value = "房间配置")
     @ApiModel(value = "房间配置")
     public static class RoomConfig implements Serializable {
     public static class RoomConfig implements Serializable {
 
 
@@ -215,5 +221,21 @@ public class ImLiveBroadcastRoomDto implements Serializable {
     public void setPopularizeTeamIds(String popularizeTeamIds) {
     public void setPopularizeTeamIds(String popularizeTeamIds) {
         this.popularizeTeamIds = popularizeTeamIds;
         this.popularizeTeamIds = popularizeTeamIds;
     }
     }
+
+    public String getPopularizeGroupIds() {
+        return popularizeGroupIds;
+    }
+
+    public void setPopularizeGroupIds(String popularizeGroupIds) {
+        this.popularizeGroupIds = popularizeGroupIds;
+    }
+
+    public String getPopularizeStudentIds() {
+        return popularizeStudentIds;
+    }
+
+    public void setPopularizeStudentIds(String popularizeStudentIds) {
+        this.popularizeStudentIds = popularizeStudentIds;
+    }
 }
 }
 
 

+ 0 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SysUserDto.java

@@ -2,8 +2,6 @@ package com.ym.mec.biz.dal.dto;
 
 
 import io.swagger.annotations.ApiModelProperty;
 import io.swagger.annotations.ApiModelProperty;
 
 
-import java.math.BigDecimal;
-
 public class SysUserDto {
 public class SysUserDto {
     @ApiModelProperty(value = "用户ID")
     @ApiModelProperty(value = "用户ID")
     private Long userId;
     private Long userId;

+ 3 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImLiveBroadcastRoom.java

@@ -1,6 +1,5 @@
 package com.ym.mec.biz.dal.entity;
 package com.ym.mec.biz.dal.entity;
 
 
-
 import java.util.Date;
 import java.util.Date;
 
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.IdType;
@@ -24,6 +23,8 @@ public class ImLiveBroadcastRoom implements Serializable {
     public static final String ORGAN = "ORGAN";
     public static final String ORGAN = "ORGAN";
     public static final String SCHOOL = "SCHOOL";
     public static final String SCHOOL = "SCHOOL";
     public static final String TEAM = "TEAM";
     public static final String TEAM = "TEAM";
+    public static final String GROUP = "GROUP";
+    public static final String STUDENT = "STUDENT";
 
 
     @TableId(value = "id_", type = IdType.AUTO)
     @TableId(value = "id_", type = IdType.AUTO)
     @ApiModelProperty(value = "主键")
     @ApiModelProperty(value = "主键")
@@ -78,7 +79,7 @@ public class ImLiveBroadcastRoom implements Serializable {
     private Integer popularize;
     private Integer popularize;
 
 
     @TableField("popularize_type_")
     @TableField("popularize_type_")
-    @ApiModelProperty(value = "推广的直播间可见类型-全部可见ALL、部分分部可见ORGAN、部分合作单位可见SCHOOL")
+    @ApiModelProperty(value = "直播间可见类型-全部可见ALL / 部分分部可见ORGAN / 部分合作单位可见SCHOOL / 乐团可见TEAM / 群组可见GROUP / 学生可见STUDENT")
     private String popularizeType;
     private String popularizeType;
 
 
     @TableField("popularize_org_ids_")
     @TableField("popularize_org_ids_")

+ 98 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImLiveRoomPurview.java

@@ -0,0 +1,98 @@
+package com.ym.mec.biz.dal.entity;
+
+
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+import java.io.Serializable;
+
+/**
+ * 直播间的观看权限表(ImLiveRoomPurview)表实体类
+ *
+ * @author hgw
+ * @since 2022-06-08 09:43:48
+ */
+@ApiModel(value = "im_live_room_purview-直播间的观看权限表")
+public class ImLiveRoomPurview implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("room_uid_")
+    @ApiModelProperty(value = "房间编号")
+    private String roomUid;
+
+    @TableField("biz_id_")
+    @ApiModelProperty(value = "业务id,如果类型是用户则是需要将VARCHAR类型转换为int再关联查询会更好")
+    private String bizId;
+
+    @TableField("type_")
+    @ApiModelProperty(value = "类型-STUDENT 学员  GROUP-群组")
+    private String type;
+
+    @TableField("created_by_")
+    @ApiModelProperty(value = "创建人")
+    private Integer createdBy;
+
+    @TableField("created_time_")
+    @ApiModelProperty(value = "创建时间")
+    private Date createdTime;
+
+    private static final long serialVersionUID = 1L;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getRoomUid() {
+        return roomUid;
+    }
+
+    public void setRoomUid(String roomUid) {
+        this.roomUid = roomUid;
+    }
+
+    public String getBizId() {
+        return bizId;
+    }
+
+    public void setBizId(String bizId) {
+        this.bizId = bizId;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public Integer getCreatedBy() {
+        return createdBy;
+    }
+
+    public void setCreatedBy(Integer createdBy) {
+        this.createdBy = createdBy;
+    }
+
+    public Date getCreatedTime() {
+        return createdTime;
+    }
+
+    public void setCreatedTime(Date createdTime) {
+        this.createdTime = createdTime;
+    }
+
+
+}
+

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java

@@ -29,9 +29,9 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
 
 
     ImLiveBroadcastRoomVo queryRoomInfo(String roomUid);
     ImLiveBroadcastRoomVo queryRoomInfo(String roomUid);
 
 
-    void add(ImLiveBroadcastRoomDto dto);
+    ImLiveBroadcastRoomVo add(ImLiveBroadcastRoomDto dto);
 
 
-    void update(ImLiveBroadcastRoomDto dto);
+    ImLiveBroadcastRoomVo update(ImLiveBroadcastRoomDto dto);
 
 
     void whetherChat(Integer id, Integer whetherChat);
     void whetherChat(Integer id, Integer whetherChat);
 
 

+ 86 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveRoomPurviewService.java

@@ -0,0 +1,86 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.dao.ImLiveRoomPurviewDao;
+import com.ym.mec.biz.dal.dto.SysUserDto;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.dal.entity.ImLiveRoomPurview;
+import com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo;
+import com.ym.mec.common.page.PageInfo;
+
+import java.util.Map;
+
+/**
+ * 直播间的观看权限表(ImLiveRoomPurview)表服务接口
+ *
+ * @author hgw
+ * @since 2022-06-08 09:43:48
+ */
+public interface ImLiveRoomPurviewService extends IService<ImLiveRoomPurview> {
+
+    ImLiveRoomPurviewDao getDao();
+
+    /**
+     * 添加观看权限数据
+     *
+     * @param ids     bizId
+     * @param roomUid 直播间UID
+     */
+    void add(String ids, String roomUid);
+
+    /**
+     * 删除观看权限数据
+     *
+     * @param ids     bizId
+     * @param roomUid 直播间UID
+     */
+    void delete(String ids, String roomUid);
+
+    /**
+     * 查询学员列表-观看权限
+     *
+     * @param param 参数
+     *              <p> - search 搜索关键字
+     *              <p> - subjectId 声部ID
+     *              <p> - roomUid 直播间UID
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    PageInfo<SysUserDto> queryStudent(Map<String, Object> param);
+
+    /**
+     * 查询群聊列表-观看权限
+     *
+     * @param param 参数
+     *              <p> - search 搜索关键字
+     *              <p> - roomUid 直播间UID
+     *              <p> - groupType 群类型
+     */
+    PageInfo<ImGroup> queryGroup(Map<String, Object> param);
+
+    /**
+     * 选择列表-观看权限-查询学员列表
+     *
+     * @param param 参数
+     *              <p> - search 搜索关键字
+     *              <p> - subjectId 声部ID
+     *              <p> - roomUid 直播间UID
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    PageInfo<SysUserDto> selectRoomPurviewStudent(Map<String, Object> param);
+
+    /**
+     * 选择-观看权限-群聊列表
+     *
+     * @param param 参数
+     *              <p> - search 搜索关键字
+     *              <p> - roomUid 直播间UID
+     *              <p> - groupType 群类型
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    PageInfo<ImGroup> selectRoomPurviewGroup(Map<String, Object> param);
+
+}
+

+ 83 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
@@ -86,6 +87,8 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     private ImLiveRoomBlackService imLiveRoomBlackService;
     private ImLiveRoomBlackService imLiveRoomBlackService;
     @Autowired
     @Autowired
     private EmployeeService employeeService;
     private EmployeeService employeeService;
+    @Autowired
+    private ImLiveRoomPurviewService imLiveRoomPurviewService;
 
 
     //待替换的变量
     //待替换的变量
     public static final String USER_ID = "${userId}";
     public static final String USER_ID = "${userId}";
@@ -227,6 +230,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
                 }
                 }
             }
             }
         }
         }
+        param.put("userId", sysUser.getId());
         IPage<ImLiveBroadcastRoomVo> page = baseMapper.queryPage(pageInfo, param);
         IPage<ImLiveBroadcastRoomVo> page = baseMapper.queryPage(pageInfo, param);
 
 
         // 查询预约人数
         // 查询预约人数
@@ -258,7 +262,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
      */
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public void add(ImLiveBroadcastRoomDto dto) {
+    public ImLiveBroadcastRoomVo add(ImLiveBroadcastRoomDto dto) {
         SysUser sysUser = getSysUser(dto.getSpeakerId());
         SysUser sysUser = getSysUser(dto.getSpeakerId());
         Date now = new Date();
         Date now = new Date();
         if (now.getTime() > dto.getLiveStartTime().getTime()) {
         if (now.getTime() > dto.getLiveStartTime().getTime()) {
@@ -275,6 +279,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         obj.setCreatedBy(getSysUser().getId());
         obj.setCreatedBy(getSysUser().getId());
         obj.setCreatedTime(now);
         obj.setCreatedTime(now);
         this.save(obj);
         this.save(obj);
+        return getImLiveBroadcastRoomVo(roomUid);
     }
     }
 
 
     /**
     /**
@@ -284,42 +289,104 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
      */
     @Override
     @Override
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
-    public void update(ImLiveBroadcastRoomDto dto) {
+    public ImLiveBroadcastRoomVo update(ImLiveBroadcastRoomDto dto) {
         Date now = new Date();
         Date now = new Date();
         Integer userId = getSysUser().getId();
         Integer userId = getSysUser().getId();
         ImLiveBroadcastRoom obj = this.getById(dto.getId());
         ImLiveBroadcastRoom obj = this.getById(dto.getId());
         obj.setUpdatedBy(userId);
         obj.setUpdatedBy(userId);
         obj.setUpdatedTime(now);
         obj.setUpdatedTime(now);
-        //如果直播已经则只能修改是否全员禁麦 和聊天功能
+        //如果直播已经开始则只能修改是否全员禁麦 和聊天功能
         if (obj.getLiveState() == 1) {
         if (obj.getLiveState() == 1) {
             obj.setRoomConfig(JSONObject.toJSONString(dto.getRoomConfig()));
             obj.setRoomConfig(JSONObject.toJSONString(dto.getRoomConfig()));
             this.updateById(obj);
             this.updateById(obj);
-            return;
+            return getImLiveBroadcastRoomVo(obj.getRoomUid());
         }
         }
         if (now.getTime() > dto.getLiveStartTime().getTime()) {
         if (now.getTime() > dto.getLiveStartTime().getTime()) {
             throw new BizException("设置的直播开始时间不能小于当前时间");
             throw new BizException("设置的直播开始时间不能小于当前时间");
         }
         }
-
+        //本次修改后的类型
         String popularizeType = dto.getPopularizeType();
         String popularizeType = dto.getPopularizeType();
+        BeanUtils.copyProperties(dto, obj);
+        //修改-删除直播可见权限部分数据
+        deleteRoomPurview(obj, popularizeType);
+        //添加直播间可见权限-只处理了群组和学生可是权限-其他的走原来的方式
+        insertGroupStudentPurview(dto, userId, obj.getRoomUid());
+
+        obj.setRoomConfig(JSONObject.toJSONString(dto.getRoomConfig()));
+        log.info("update room  >>>  :{}", JSONObject.toJSONString(obj));
+        this.updateById(obj);
+        return getImLiveBroadcastRoomVo(obj.getRoomUid());
+    }
+
+    //添加直播间可见权限-只处理了群组和学生可是权限
+    private void insertGroupStudentPurview(ImLiveBroadcastRoomDto dto, Integer userId, String roomUid) {
+        Date now = new Date();
+        if (WrapperUtil.checkStr(dto.getPopularizeType(), ImLiveBroadcastRoom.GROUP, ImLiveBroadcastRoom.STUDENT)) {
+            List<String> bizIdList = new ArrayList<>();
+            if (ImLiveBroadcastRoom.GROUP.equals(dto.getPopularizeType())) {
+                bizIdList = WrapperUtil.toList(dto.getPopularizeGroupIds());
+            }
+            if (ImLiveBroadcastRoom.STUDENT.equals(dto.getPopularizeType())) {
+                bizIdList = WrapperUtil.toList(dto.getPopularizeStudentIds());
+            }
+            if (CollectionUtils.isEmpty(bizIdList)) {
+                return;
+            }
+            List<ImLiveRoomPurview> collect = bizIdList.stream().map((id) -> {
+                ImLiveRoomPurview imLiveRoomPurview = new ImLiveRoomPurview();
+                imLiveRoomPurview.setRoomUid(roomUid);
+                imLiveRoomPurview.setBizId(id);
+                imLiveRoomPurview.setType(dto.getPopularizeType());
+                imLiveRoomPurview.setCreatedBy(userId);
+                imLiveRoomPurview.setCreatedTime(now);
+                return imLiveRoomPurview;
+            }).collect(Collectors.toList());
+            Lists.partition(collect, 50).forEach(list -> imLiveRoomPurviewService.saveBatch(list));
+        }
+    }
+
+    private void deleteRoomPurview(ImLiveBroadcastRoom obj, String popularizeType) {
+        LambdaQueryWrapper<ImLiveRoomPurview> queryWrapper = null;
         switch (popularizeType) {
         switch (popularizeType) {
             case ImLiveBroadcastRoom.ALL:
             case ImLiveBroadcastRoom.ALL:
-                dto.setPopularizeOrgIds(null);
-                dto.setPopularizeSchoolIds(null);
-                dto.setPopularizeTeamIds(null);
+                obj.setPopularizeOrgIds(null);
+                obj.setPopularizeSchoolIds(null);
+                obj.setPopularizeTeamIds(null);
+                //删除purview表的数据
+                queryWrapper = Wrappers.lambdaQuery();
                 break;
                 break;
             case ImLiveBroadcastRoom.ORGAN:
             case ImLiveBroadcastRoom.ORGAN:
-                dto.setPopularizeSchoolIds(null);
-                dto.setPopularizeTeamIds(null);
+                obj.setPopularizeSchoolIds(null);
+                obj.setPopularizeTeamIds(null);
+                //删除purview表中不等于分部的数据
+                queryWrapper = Wrappers.<ImLiveRoomPurview>lambdaQuery()
+                        .ne(ImLiveRoomPurview::getType, ImLiveBroadcastRoom.ORGAN);
                 break;
                 break;
             case ImLiveBroadcastRoom.SCHOOL:
             case ImLiveBroadcastRoom.SCHOOL:
-                dto.setPopularizeTeamIds(null);
+                obj.setPopularizeTeamIds(null);
+                //删除purview表中对应的数据
+                queryWrapper = Wrappers.<ImLiveRoomPurview>lambdaQuery()
+                        .in(ImLiveRoomPurview::getType, ImLiveBroadcastRoom.TEAM, ImLiveBroadcastRoom.GROUP,
+                                ImLiveBroadcastRoom.STUDENT);
+                break;
+            case ImLiveBroadcastRoom.TEAM:
+                queryWrapper = Wrappers.<ImLiveRoomPurview>lambdaQuery()
+                        .in(ImLiveRoomPurview::getType, ImLiveBroadcastRoom.SCHOOL, ImLiveBroadcastRoom.GROUP,
+                                ImLiveBroadcastRoom.STUDENT);
+                break;
+            case ImLiveBroadcastRoom.GROUP:
+                queryWrapper = Wrappers.<ImLiveRoomPurview>lambdaQuery()
+                        .ne(ImLiveRoomPurview::getType, ImLiveBroadcastRoom.GROUP);
+                break;
+            case ImLiveBroadcastRoom.STUDENT:
+                queryWrapper = Wrappers.<ImLiveRoomPurview>lambdaQuery()
+                        .ne(ImLiveRoomPurview::getType, ImLiveBroadcastRoom.STUDENT);
+            default:
                 break;
                 break;
         }
         }
-
-        BeanUtils.copyProperties(dto, obj);
-        obj.setRoomConfig(JSONObject.toJSONString(dto.getRoomConfig()));
-        log.info("update room  >>>  :{}", JSONObject.toJSONString(obj));
-        this.updateById(obj);
+        if (Objects.nonNull(queryWrapper)) {
+            imLiveRoomPurviewService.remove(queryWrapper.eq(ImLiveRoomPurview::getRoomUid, obj.getRoomUid()));
+        }
     }
     }
 
 
     /**
     /**

+ 185 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveRoomPurviewServiceImpl.java

@@ -0,0 +1,185 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.google.common.collect.Lists;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.ImLiveRoomPurviewDao;
+import com.ym.mec.biz.dal.dto.SysUserDto;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.dal.entity.ImLiveBroadcastRoom;
+import com.ym.mec.biz.dal.entity.ImLiveRoomPurview;
+import com.ym.mec.biz.service.EmployeeService;
+import com.ym.mec.biz.service.ImLiveBroadcastRoomService;
+import com.ym.mec.biz.service.ImLiveRoomPurviewService;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.PageUtil;
+import com.ym.mec.common.page.WrapperUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * 直播间的观看权限表(ImLiveRoomPurview)表服务实现类
+ *
+ * @author hgw
+ * @since 2022-06-08 09:43:48
+ */
+@Service("imLiveRoomPurviewService")
+public class ImLiveRoomPurviewServiceImpl extends ServiceImpl<ImLiveRoomPurviewDao, ImLiveRoomPurview> implements ImLiveRoomPurviewService {
+
+    private final static Logger log = LoggerFactory.getLogger(ImLiveRoomPurviewServiceImpl.class);
+
+    @Autowired
+    private EmployeeService employeeService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private ImLiveBroadcastRoomService imLiveBroadcastRoomService;
+
+    public ImLiveRoomPurviewDao getDao() {
+        return this.baseMapper;
+    }
+
+    /**
+     * 添加观看权限数据
+     *
+     * @param ids     bizId
+     * @param roomUid 直播间UID
+     */
+    @Override
+    public void add(String ids, String roomUid) {
+        Optional.ofNullable(roomUid).orElseThrow(() -> new BizException("房间uid不能为空"));
+        Optional.ofNullable(ids).orElseThrow(() -> new BizException("请选择要删除的数据"));
+        //查询房间类型
+        ImLiveBroadcastRoom room = imLiveBroadcastRoomService.getOne(Wrappers.<ImLiveBroadcastRoom>lambdaQuery()
+                .eq(ImLiveBroadcastRoom::getRoomUid, roomUid));
+        Date date = new Date();
+        Integer userId = getSysUser().getId();
+        List<String> strings = WrapperUtil.toList(ids);
+        List<ImLiveRoomPurview> collect = strings.stream().map(id -> {
+            ImLiveRoomPurview imLiveRoomPurview = new ImLiveRoomPurview();
+            imLiveRoomPurview.setRoomUid(roomUid);
+            imLiveRoomPurview.setBizId(id);
+            imLiveRoomPurview.setType(room.getPopularizeType());
+            imLiveRoomPurview.setCreatedBy(userId);
+            imLiveRoomPurview.setCreatedTime(date);
+            return imLiveRoomPurview;
+        }).collect(Collectors.toList());
+        Lists.partition(collect, 100).forEach(l -> baseMapper.insertBatch(l));
+    }
+
+    /**
+     * 删除观看权限数据
+     *
+     * @param ids     bizId
+     * @param roomUid 直播间UID
+     */
+    @Override
+    public void delete(String ids, String roomUid) {
+        Optional.ofNullable(roomUid).orElseThrow(() -> new BizException("房间uid不能为空"));
+        Optional.ofNullable(ids).orElseThrow(() -> new BizException("请选择要删除的数据"));
+        List<String> strings = WrapperUtil.toList(ids);
+        this.remove(Wrappers.<ImLiveRoomPurview>lambdaQuery()
+                .in(ImLiveRoomPurview::getBizId, strings)
+                .eq(ImLiveRoomPurview::getRoomUid, roomUid));
+    }
+
+    /**
+     * 查询学员列表-观看权限
+     *
+     * @param param 参数
+     *              <p> - search 搜索关键字
+     *              <p> - subjectId 声部ID
+     *              <p> - roomUid 直播间UID
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    @Override
+    public PageInfo<SysUserDto> queryStudent(Map<String, Object> param) {
+        WrapperUtil.toStr(param, "roomUid", "房间uid不能为空");
+        Page<SysUserDto> pageInfo = PageUtil.getPageInfo(param);
+        return PageUtil.pageInfo(baseMapper.queryStudent(pageInfo, param));
+    }
+
+    /**
+     * 查询群聊列表-观看权限
+     *
+     * @param param 参数
+     *              <p> - search 搜索关键字
+     *              <p> - roomUid 直播间UID
+     *              <p> - groupType 群类型
+     */
+    @Override
+    public PageInfo<ImGroup> queryGroup(Map<String, Object> param) {
+        WrapperUtil.toStr(param, "roomUid", "房间uid不能为空");
+        param.put("in", 1);
+        return getImGroupPageInfo(param);
+    }
+
+    /**
+     * 选择-观看权限-查询学员列表
+     *
+     * @param param 参数
+     *              <p> - search 搜索关键字
+     *              <p> - subjectId 声部ID
+     *              <p> - roomUid 直播间UID
+     *              <p> -page 页数
+     *              <p> -rows 每页数量
+     */
+    @Override
+    public PageInfo<SysUserDto> selectRoomPurviewStudent(Map<String, Object> param) {
+        WrapperUtil.toStr(param, "roomUid", "房间uid不能为空");
+        Page<SysUserDto> pageInfo = PageUtil.getPageInfo(param);
+        //查询当前登录人分部
+        SysUser sysUser = getSysUser();
+        //分部id
+        String organIds = null;
+        Employee employee = employeeService.get(sysUser.getId());
+        if (Objects.nonNull(employee) && Objects.nonNull(employee.getOrganIdList())) {
+            organIds = employee.getOrganIdList();
+        }
+        param.put("organId", organIds);
+        param.put("type", ImLiveBroadcastRoom.STUDENT);
+        return PageUtil.pageInfo(baseMapper.selectRoomPurviewStudent(pageInfo, param));
+    }
+
+    /**
+     * 选择-观看权限-群聊列表
+     *
+     * @param param 参数
+     *              <p> - search 搜索关键字
+     *              <p> - roomUid 直播间UID
+     *              <p> - groupType 群类型
+     */
+    @Override
+    public PageInfo<ImGroup> selectRoomPurviewGroup(Map<String, Object> param) {
+        WrapperUtil.toStr(param, "roomUid", "房间uid不能为空");
+        param.put("notIn", 1);
+        return getImGroupPageInfo(param);
+    }
+
+    private PageInfo<ImGroup> getImGroupPageInfo(Map<String, Object> param) {
+        //查询当前登录人分部
+        SysUser sysUser = getSysUser();
+        param.put("userId", sysUser.getId());
+        param.put("type", ImLiveBroadcastRoom.GROUP);
+        Page<ImGroup> pageInfo = PageUtil.getPageInfo(param);
+        return PageUtil.pageInfo(baseMapper.selectRoomPurviewGroup(pageInfo, param));
+    }
+
+    private SysUser getSysUser() {
+        //修改机构基础信息
+        return Optional.ofNullable(sysUserFeignService.queryUserInfo())
+                .orElseThrow(() -> new BizException("用户不存在."));
+    }
+}
+

+ 15 - 1
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMapper.xml

@@ -42,7 +42,7 @@
     </insert>
     </insert>
 
 
     <select id="queryPage" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo">
     <select id="queryPage" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo">
-        select a.id_ AS id,
+        select distinct a.id_ AS id,
         a.tenant_id_ AS tenantId,
         a.tenant_id_ AS tenantId,
         t.name_ AS tenantName,
         t.name_ AS tenantName,
         t.logo_ AS tenantLogo,
         t.logo_ AS tenantLogo,
@@ -84,6 +84,20 @@
             where popularize_type_ = 'SCHOOL'
             where popularize_type_ = 'SCHOOL'
             and INTE_ARRAY(a.popularize_school_ids_, #{param.schoolIds}) = 1
             and INTE_ARRAY(a.popularize_school_ids_, #{param.schoolIds}) = 1
         </if>
         </if>
+        <if test="param.userId != null">
+            union all
+            select distinct r.* from im_live_broadcast_room as r inner join
+            im_live_room_purview as a on r.room_uid_ = a.room_uid_
+            where
+            r.popularize_type_= 'GROUP'
+            and a.biz_id_ in (
+            select
+            distinct a.id_
+            from
+            im_group a
+            inner join im_group_member b on a.id_=b.im_group_id_
+            where b.user_id_ = #{param.userId})
+        </if>
         ) as a
         ) as a
         left join tenant_info AS t on a.tenant_id_ = t.id_
         left join tenant_info AS t on a.tenant_id_ = t.id_
         left join sys_user AS b on a.speaker_id_ = b.id_
         left join sys_user AS b on a.speaker_id_ = b.id_

+ 118 - 0
mec-biz/src/main/resources/config/mybatis/ImLiveRoomPurviewMapper.xml

@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.ImLiveRoomPurviewDao">
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.ImLiveRoomPurview">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="room_uid_" jdbcType="VARCHAR" property="roomUid"/>
+        <result column="biz_id_" jdbcType="VARCHAR" property="bizId"/>
+        <result column="type_" jdbcType="VARCHAR" property="type"/>
+        <result column="created_by_" jdbcType="INTEGER" property="createdBy"/>
+        <result column="created_time_" jdbcType="TIMESTAMP" property="createdTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_
+        , room_uid_, biz_id_, type_, created_by_, created_time_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.ym.mec.biz.dal.entity.ImLiveRoomPurview">
+        insert into im_live_room_purview(room_uid_, biz_id_, type_, created_by_, created_time_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.roomUid}, #{entity.bizId}, #{entity.type}, #{entity.createdBy}, #{entity.createdTime})
+        </foreach>
+    </insert>
+
+    <select id="queryStudent" parameterType="map" resultType="com.ym.mec.biz.dal.dto.SysUserDto">
+        SELECT
+            s.user_id_ as userId,
+            su.username_ as username,
+            su.phone_ as phone,
+            o.name_ as organName,
+            sb.name_ as subjectName
+        FROM (select CAST(biz_id_ AS SIGNED) as bizId, room_uid_ from im_live_room_purview where type_ = #{param.type}) a
+                 LEFT JOIN student s on a.bizId = s.user_id_
+                 LEFT JOIN sys_user su ON su.id_ = s.user_id_
+                 LEFT JOIN organization o ON o.id_ = su.organ_id_
+                 LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
+        where a.room_uid_ = #{param.roomUid}
+        <if test="param.subjectId != null">
+            AND s.subject_id_list_ = #{param.subjectId}
+        </if>
+        <if test="param.search != null ">
+            AND (
+            s.`user_id_` LIKE CONCAT('%', #{param.search},'%')
+            or su.phone_ like concat('%',#{query.search},'%')
+            or su.username_ like concat('%',#{query.search},'%')
+            )
+        </if>
+    </select>
+
+    <select id="selectRoomPurviewStudent" parameterType="map" resultType="com.ym.mec.biz.dal.dto.SysUserDto">
+        SELECT
+        s.user_id_ userId,
+        su.username_ username,
+        su.phone_ phone,
+        o.name_ organName,
+        sb.name_ subjectName
+        FROM student s
+        LEFT JOIN sys_user su ON su.id_ = s.user_id_
+        LEFT JOIN organization o ON o.id_ = su.organ_id_
+        LEFT JOIN `subject` sb ON sb.id_ = s.subject_id_list_
+        where
+        s.user_id_ not in(select CAST(biz_id_ AS SIGNED) from im_live_room_purview where room_uid_ = #{param.roomUid}
+        and type_ = #{param.type})
+        <if test="param.organId != null and param.organId != ''">
+            AND FIND_IN_SET(su.organ_id_,#{organId})
+        </if>
+        <if test="param.subjectId != null">
+            AND s.subject_id_list_ = #{param.subjectId}
+        </if>
+        <if test="param.search != null ">
+            AND (
+            s.`user_id_` LIKE CONCAT('%', #{param.search},'%')
+            or su.phone_ like concat('%',#{query.search},'%')
+            or su.username_ like concat('%',#{query.search},'%')
+            )
+        </if>
+
+    </select>
+
+    <resultMap type="com.ym.mec.biz.dal.entity.ImGroup" id="ImGroup">
+        <result column="id_" property="id" />
+        <result column="name_" property="name" />
+        <result column="introduce_" property="introduce" />
+        <result column="member_num_" property="memberNum" />
+        <result column="memo_" property="memo" />
+        <result column="tags_" property="tags" />
+        <result column="img_" property="img" />
+        <result column="type_" property="type" />
+        <result column="group_type_" property="groupType" />
+        <result column="create_time_" property="createTime" />
+        <result column="update_time_" property="updateTime" />
+        <result column="tenant_id_" property="tenantId"/>
+    </resultMap>
+
+    <select id="selectRoomPurviewGroup" parameterType="map" resultMap="ImGroup">
+        select distinct a.*
+        from im_group as a
+                 inner join im_group_member b on a.id_ = b.im_group_id_
+        where b.user_id_ = (param.userId)
+        and a.id_
+        <if test="param.notIn != null">
+          not in
+        </if>
+        <if test="param.in != null">
+            in
+        </if>
+              (select biz_id_ from im_live_room_purview where room_uid_ = #{param.roomUid} and type_ = #{param.type})
+        <if test="param.search != null and search != ''">
+            AND (a.name_ like concat('%',#{param.search},'%') or a..tags_ like concat('%',#{param.search},'%'))
+        </if>
+        <if test="param.groupType != null">
+            AND a.group_type_ = #{param.groupType}
+        </if>
+    </select>
+
+</mapper>

+ 21 - 1
mec-biz/src/main/resources/config/mybatis/ImLiveRoomReservationMapper.xml

@@ -24,7 +24,7 @@
     </insert>
     </insert>
 
 
     <select id="queryPageStudent" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo">
     <select id="queryPageStudent" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomVo">
-        select a.id_ AS id,
+        select distinct a.id_ AS id,
         a.tenant_id_ AS tenantId,
         a.tenant_id_ AS tenantId,
         t.name_ AS tenantName,
         t.name_ AS tenantName,
         t.logo_ AS tenantLogo,
         t.logo_ AS tenantLogo,
@@ -67,6 +67,26 @@
             where popularize_type_ = 'TEAM'
             where popularize_type_ = 'TEAM'
             and INTE_ARRAY(a.popularize_team_ids_, #{param.teamIds}) = 1
             and INTE_ARRAY(a.popularize_team_ids_, #{param.teamIds}) = 1
         </if>
         </if>
+        union all
+        select distinct r.* from im_live_broadcast_room as r inner join
+        im_live_room_purview as a on r.room_uid_ = a.room_uid_
+        where
+        r.popularize_type_= 'GROUP'
+        and a.biz_id_ in (
+        select
+        distinct a.id_
+        from
+        im_group a
+        inner join im_group_member b on a.id_=b.im_group_id_
+        where b.user_id_ = #{param.userId})
+        union all
+        select b.* from
+        (select
+        room_uid_ from im_live_room_purview where
+        CAST(biz_id_ AS SIGNED)  = #{param.userId}
+        and type_ = 'STUDENT') a
+        left join  im_live_broadcast_room b on a.room_uid_ = b.room_uid_
+        where b.popularize_type_ = 'STUDENT'
         ) as a
         ) as a
         left join tenant_info AS t on a.tenant_id_ = t.id_
         left join tenant_info AS t on a.tenant_id_ = t.id_
         left join sys_user AS b on a.speaker_id_ = b.id_
         left join sys_user AS b on a.speaker_id_ = b.id_

+ 5 - 6
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java

@@ -76,18 +76,17 @@ public class ImLiveBroadcastRoomController extends BaseController {
     @ApiOperation("创建直播间")
     @ApiOperation("创建直播间")
     @PostMapping("/add")
     @PostMapping("/add")
     @PreAuthorize("@pcs.hasPermissions('imLiveBroadcastRoom/add')")
     @PreAuthorize("@pcs.hasPermissions('imLiveBroadcastRoom/add')")
-    public HttpResponseResult<Object> add(@Valid @RequestBody ImLiveBroadcastRoomDto dto) {
-        imLiveBroadcastRoomService.add(dto);
+    public HttpResponseResult<ImLiveBroadcastRoomVo> add(@Valid @RequestBody ImLiveBroadcastRoomDto dto) {
+        ImLiveBroadcastRoomVo add = imLiveBroadcastRoomService.add(dto);
         //看是否需要马上创建房间
         //看是否需要马上创建房间
         CompletableFuture.runAsync(imLiveBroadcastRoomService::createLiveRoom);
         CompletableFuture.runAsync(imLiveBroadcastRoomService::createLiveRoom);
-        return succeed();
+        return succeed(add);
     }
     }
 
 
     @ApiOperation("修改直播间信息-已开播无法修改")
     @ApiOperation("修改直播间信息-已开播无法修改")
     @PostMapping("/update")
     @PostMapping("/update")
-    public HttpResponseResult<Object> update(@Valid @RequestBody ImLiveBroadcastRoomDto dto) {
-        imLiveBroadcastRoomService.update(dto);
-        return succeed();
+    public HttpResponseResult<ImLiveBroadcastRoomVo> update(@Valid @RequestBody ImLiveBroadcastRoomDto dto) {
+        return succeed(imLiveBroadcastRoomService.update(dto));
     }
     }
 
 
     /**
     /**

+ 114 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveRoomPurviewController.java

@@ -0,0 +1,114 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.biz.dal.dto.SysUserDto;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.service.ImLiveRoomPurviewService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 直播间的观看权限表(ImLiveRoomPurview)表控制层
+ *
+ * @author hgw
+ * @since 2022-06-08 09:43:47
+ */
+@RestController
+@RequestMapping("/imLiveRoomPurview")
+public class ImLiveRoomPurviewController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImLiveRoomPurviewService imLiveRoomPurviewService;
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ids", dataType = "String", value = "删除的id,学员id,群id, 逗号分开", required = true),
+            @ApiImplicitParam(name = "roomUid", dataType = "String", value = "直播间UID", required = true),
+    })
+    @ApiOperation("删除观看权限数据")
+    @GetMapping("/add")
+    @PreAuthorize("@pcs.hasPermissions('imLiveRoomPurview/add')")
+    public HttpResponseResult<Object> add(String ids, String roomUid) {
+        imLiveRoomPurviewService.add(ids, roomUid);
+        return succeed();
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "ids", dataType = "String", value = "删除的id,学员id,群id, 逗号分开", required = true),
+            @ApiImplicitParam(name = "roomUid", dataType = "String", value = "直播间UID", required = true),
+    })
+    @ApiOperation("删除观看权限数据")
+    @GetMapping("/delete")
+    @PreAuthorize("@pcs.hasPermissions('imLiveRoomPurview/delete')")
+    public HttpResponseResult<Object> delete(String ids, String roomUid) {
+        imLiveRoomPurviewService.delete(ids, roomUid);
+        return succeed();
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "模糊查询关键字"),
+            @ApiImplicitParam(name = "subjectId", dataType = "String", value = "声部ID"),
+            @ApiImplicitParam(name = "roomUid", dataType = "String", value = "直播间UID", required = true),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("查询当前直播间学员列表-观看权限")
+    @PostMapping("/queryStudent")
+    @PreAuthorize("@pcs.hasPermissions('imLiveRoomPurview/queryStudent')")
+    public HttpResponseResult<PageInfo<SysUserDto>> queryStudent(@RequestBody Map<String, Object> param) {
+        return succeed(imLiveRoomPurviewService.queryStudent(param));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "模糊查询关键字"),
+            @ApiImplicitParam(name = "groupType", dataType = "String", value = "群类型"),
+            @ApiImplicitParam(name = "roomUid", dataType = "String", value = "直播间UID", required = true),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("查询当前直播间群聊列表-观看权限")
+    @PostMapping("/queryGroup")
+    @PreAuthorize("@pcs.hasPermissions('imLiveRoomPurview/queryGroup')")
+    public HttpResponseResult<PageInfo<ImGroup>> queryGroup(@RequestBody Map<String, Object> param) {
+        return succeed(imLiveRoomPurviewService.queryGroup(param));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "模糊查询关键字"),
+            @ApiImplicitParam(name = "subjectId", dataType = "String", value = "声部ID"),
+            @ApiImplicitParam(name = "roomUid", dataType = "String", value = "直播间UID", required = true),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("选择列表-观看权限-学员列表")
+    @PostMapping("/selectRoomPurviewStudent")
+    @PreAuthorize("@pcs.hasPermissions('imLiveRoomPurview/selectRoomPurviewStudent')")
+    public HttpResponseResult<PageInfo<SysUserDto>> selectRoomPurviewStudent(@RequestBody Map<String, Object> param) {
+        return succeed(imLiveRoomPurviewService.selectRoomPurviewStudent(param));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "模糊查询关键字"),
+            @ApiImplicitParam(name = "groupType", dataType = "String", value = "群类型"),
+            @ApiImplicitParam(name = "roomUid", dataType = "String", value = "直播间UID", required = true),
+            @ApiImplicitParam(name = "page", dataType = "Integer", value = "页数"),
+            @ApiImplicitParam(name = "rows", dataType = "Integer", value = "每页数量"),
+    })
+    @ApiOperation("选择列表-观看权限-群聊列表")
+    @PostMapping("/selectRoomPurviewGroup")
+    @PreAuthorize("@pcs.hasPermissions('imLiveRoomPurview/selectRoomPurviewGroup')")
+    public HttpResponseResult<PageInfo<ImGroup>> selectRoomPurviewGroup(@RequestBody Map<String, Object> param) {
+        return succeed(imLiveRoomPurviewService.selectRoomPurviewGroup(param));
+    }
+
+}
+