Browse Source

Merge branch 'test_saas_hgw' into master_saas

hgw 3 years ago
parent
commit
df5a9eeb4f
21 changed files with 545 additions and 34 deletions
  1. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserTenantDao.java
  2. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EmployeeDto.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Employee.java
  4. 85 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserTenant.java
  5. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomMemberVo.java
  6. 56 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/vo/SysUserTenantVo.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ImLiveBroadcastRoomService.java
  8. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysUserTenantService.java
  9. 39 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  10. 47 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java
  11. 48 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserTenantServiceImpl.java
  12. 30 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java
  13. 3 0
      mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMapper.xml
  14. 18 10
      mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMemberMapper.xml
  15. 37 0
      mec-biz/src/main/resources/config/mybatis/SysUserTenantMapper.xml
  16. 6 0
      mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml
  17. 1 0
      mec-im/src/main/java/com/ym/controller/LiveRoomController.java
  18. 42 7
      mec-im/src/main/java/com/ym/pojo/RecordNotifyOutput.java
  19. 8 2
      mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java
  20. 2 4
      mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java
  21. 29 0
      mec-web/src/main/java/com/ym/mec/web/controller/SysUserTenantController.java

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysUserTenantDao.java

@@ -0,0 +1,23 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ym.mec.biz.dal.entity.SysUserTenant;
+import com.ym.mec.biz.dal.vo.SysUserTenantVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 平台用户与机构关系表(SysUserTenant)表数据库访问层
+ *
+ * @author hgw
+ * @since 2022-03-02 11:09:34
+ */
+public interface SysUserTenantDao extends BaseMapper<SysUserTenant> {
+
+    int insertBatch(@Param("entities") List<SysUserTenant> entities);
+
+    List<SysUserTenantVo> queryUserTenant(@Param("userId") Integer userId);
+
+}
+

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EmployeeDto.java

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.vo.SysUserTenantVo;
+import com.ym.mec.biz.dal.vo.TenantInfoPageVo;
 import com.ym.mec.common.enums.UserGenderEnum;
 import io.swagger.annotations.ApiModelProperty;
 
@@ -77,6 +79,8 @@ public class EmployeeDto {
     @ApiModelProperty(value = "岗位管理范围",required = false)
     private String postDeptIds;
 
+    private List<SysUserTenantVo> userTenantList;
+
     public String getPositionNames() {
         return positionNames;
     }
@@ -252,4 +256,12 @@ public class EmployeeDto {
     public void setDeptId(Integer deptId) {
         this.deptId = deptId;
     }
+
+    public List<SysUserTenantVo> getUserTenantList() {
+        return userTenantList;
+    }
+
+    public void setUserTenantList(List<SysUserTenantVo> userTenantList) {
+        this.userTenantList = userTenantList;
+    }
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Employee.java

@@ -92,6 +92,9 @@ public class Employee extends SysUser {
 	@ApiModelProperty(value = "职位id列表",required = false)
 	private List<Integer> positionIds;
 
+	@ApiModelProperty(value = "机构id列表")
+	private List<Integer> tenantIds;
+
 	private String contactAddress;
 
 	private String postalCode;
@@ -292,4 +295,12 @@ public class Employee extends SysUser {
 	public void setDeptId(Integer deptId) {
 		this.deptId = deptId;
 	}
+
+    public List<Integer> getTenantIds() {
+        return tenantIds;
+    }
+
+    public void setTenantIds(List<Integer> tenantIds) {
+        this.tenantIds = tenantIds;
+    }
 }

+ 85 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysUserTenant.java

@@ -0,0 +1,85 @@
+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;
+
+/**
+ * 平台用户与机构关系表(SysUserTenant)表实体类
+ *
+ * @author hgw
+ * @since 2022-03-02 11:09:34
+ */
+@ApiModel(value = "sys_user_tenant-平台用户与机构关系表")
+public class SysUserTenant implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Integer id;
+
+    @TableField("user_id_")
+    @ApiModelProperty(value = "用户id")
+    private Integer userId;
+
+    @TableField("tenant_id_")
+    @ApiModelProperty(value = "机构id")
+    private Integer tenantId;
+
+    @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 Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    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;
+    }
+
+}
+

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/ImLiveBroadcastRoomMemberVo.java

@@ -11,6 +11,12 @@ import java.util.Date;
  */
 public class ImLiveBroadcastRoomMemberVo implements java.io.Serializable {
 
+    @ApiModelProperty(value = "房间编号")
+    private String roomUid;
+
+    @ApiModelProperty(value = "房间标题")
+    private String roomTitle;
+
     @ApiModelProperty(value = "学生编号")
     private Integer studentId;
 
@@ -77,4 +83,20 @@ public class ImLiveBroadcastRoomMemberVo implements java.io.Serializable {
     public void setTotalViewTime(Integer totalViewTime) {
         this.totalViewTime = totalViewTime;
     }
+
+    public String getRoomUid() {
+        return roomUid;
+    }
+
+    public void setRoomUid(String roomUid) {
+        this.roomUid = roomUid;
+    }
+
+    public String getRoomTitle() {
+        return roomTitle;
+    }
+
+    public void setRoomTitle(String roomTitle) {
+        this.roomTitle = roomTitle;
+    }
 }

+ 56 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/SysUserTenantVo.java

@@ -0,0 +1,56 @@
+package com.ym.mec.biz.dal.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+
+/**
+ * @author hgw
+ * Created by 2022-03-02
+ */
+public class SysUserTenantVo implements Serializable {
+
+    @ApiModelProperty(value = "关系表id")
+    private Integer id;
+
+    @ApiModelProperty(value = "机构id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "机构id")
+    private Integer tenantId;
+
+    @ApiModelProperty(value = "机构名称")
+    private String tenantName;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getTenantId() {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId) {
+        this.tenantId = tenantId;
+    }
+
+    public String getTenantName() {
+        return tenantName;
+    }
+
+    public void setTenantName(String tenantName) {
+        this.tenantName = tenantName;
+    }
+}

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

@@ -47,7 +47,7 @@ public interface ImLiveBroadcastRoomService extends IService<ImLiveBroadcastRoom
 
     void createLiveRoom();
 
-    void test();
+    String test(String roomUid, Integer userId);
 
     /**
     * @description: 分享直播链接

+ 25 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysUserTenantService.java

@@ -0,0 +1,25 @@
+package com.ym.mec.biz.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ym.mec.biz.dal.dao.SysUserTenantDao;
+import com.ym.mec.biz.dal.entity.SysUserTenant;
+import com.ym.mec.biz.dal.vo.SysUserTenantVo;
+
+import java.util.List;
+
+/**
+ * 平台用户与机构关系表(SysUserTenant)表服务接口
+ *
+ * @author hgw
+ * @since 2022-03-02 11:09:34
+ */
+public interface SysUserTenantService extends IService<SysUserTenant> {
+
+    SysUserTenantDao getDao();
+
+    List<SysUserTenantVo> queryUserTenant(Integer userId);
+
+    void deleteByUserId(Integer userId);
+
+}
+

+ 39 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -7,10 +7,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.EmployeeDto;
 import com.ym.mec.biz.dal.dto.EmployeeLevelDto;
-import com.ym.mec.biz.dal.entity.Employee;
-import com.ym.mec.biz.dal.entity.Organization;
-import com.ym.mec.biz.dal.entity.SysUserCashAccount;
-import com.ym.mec.biz.dal.entity.TenantInfo;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.EmployeeOperateEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.ParamEnum;
@@ -31,6 +28,7 @@ import com.ym.mec.im.entity.GroupModel;
 import com.ym.mec.util.collection.MapUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.security.authentication.LockedException;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
@@ -76,6 +74,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
     private SysEmployeePositionService employeePositionService;
     @Autowired
     private SysEmployeePositionDao employeePositionDao;
+    @Autowired
+    private SysUserTenantService sysUserTenantService;
 
     @Override
     public BaseDAO<Integer, Employee> getDAO() {
@@ -138,11 +138,38 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
         if (user != null) {
             employee.setAvatar(user.getAvatar());
         }
-
+        //添加平台用户和机构的关系
+        addUserTenant(employee.getTenantIds(), tenantId, employee.getId());
         //添加到OA
         oaUserService.addOaUser(employee);
     }
 
+    /**
+     * 添加平台用户和机构的关系
+     *
+     * @param tenantIds    机构id集合
+     * @param userTenantId 用户当前机构id
+     * @param userId       用户id
+     */
+    private void addUserTenant(List<Integer> tenantIds, Integer userTenantId, Integer userId) {
+        if (Objects.nonNull(userTenantId) && userTenantId == -1) {
+            if (CollectionUtils.isEmpty(tenantIds)) {
+                throw new BizException("平台账号必须指定一个机构!");
+            }
+            Date now = new Date();
+            tenantIds.forEach(t -> {
+                SysUserTenant userTenant = new SysUserTenant();
+                userTenant.setUserId(userId);
+                userTenant.setTenantId(t);
+                userTenant.setCreatedTime(now);
+                try {
+                    sysUserTenantService.save(userTenant);
+                } catch (DuplicateKeyException ignored) {
+                }
+            });
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateEmployee(Employee employee) {
@@ -193,6 +220,9 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
             tenantInfo.setUpdatedBy(sysUser.getId());
             tenantInfoService.updateById(tenantInfo);
         }
+        //更新用户与机构的关系
+        sysUserTenantService.deleteByUserId(employee.getId());
+        addUserTenant(employee.getTenantIds(), employee.getTenantId(), employee.getId());
 
         //更新OA信息
         oaUserService.updateOaUser(employee);
@@ -226,6 +256,10 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee> impl
                 }
                 List<Integer> organIds = Arrays.stream(employeeDto.getOrganIdStr().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toList());
                 allOrganIds.addAll(organIds);
+                //平台账户查询所拥有的机构
+                if(Objects.nonNull(queryInfo.getTenantId()) && queryInfo.getTenantId() == -1){
+                    employeeDto.setUserTenantList(sysUserTenantService.queryUserTenant(employeeDto.getId()));
+                }
             }
             if (!CollectionUtils.isEmpty(allOrganIds)) {
                 List<Organization> allOrgans = organizationDao.findOrgans(allOrganIds);

+ 47 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImLiveBroadcastRoomServiceImpl.java

@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ImLiveBroadcastRoomDao;
@@ -140,6 +141,7 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     public PageInfo<ImLiveBroadcastRoomVo> queryPage(Map<String, Object> param) {
         Page<ImLiveBroadcastRoomVo> pageInfo = PageUtil.getPageInfo(param);
         pageInfo.setDesc("a.created_time_");
+        param.put("tenantId",TenantContextHolder.getTenantId());
         IPage<ImLiveBroadcastRoomVo> page = baseMapper.queryPage(pageInfo, param);
         return PageUtil.pageInfo(page);
     }
@@ -298,6 +300,9 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
      */
     @Override
     public void quitRoom(List<ImUserState> userState) {
+        if (CollectionUtils.isEmpty(userState)) {
+            return;
+        }
         userState.forEach(user -> {
             log.info("quitRoom>>>> {}", JSONObject.toJSONString(user));
             if (StringUtils.isBlank(user.getStatus()) || user.getStatus().equals("0")) {
@@ -447,12 +452,13 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         //关闭直播
         RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString()));
         RoomSpeakerInfo roomSpeakerInfo = speakerCache.get();
-
-        if (Objects.nonNull(roomSpeakerInfo.getWhetherVideo()) && roomSpeakerInfo.getWhetherVideo() == 0) {
+        boolean stateFlag = Objects.nonNull(roomSpeakerInfo.getState()) && roomSpeakerInfo.getState() == 0;
+        if (Objects.nonNull(roomSpeakerInfo.getWhetherVideo()) && roomSpeakerInfo.getWhetherVideo() == 0
+                && stateFlag) {
             //停止录制视频
             imFeignService.stopRecord(roomUid);
         }
-        if (Objects.nonNull(roomSpeakerInfo.getState()) && roomSpeakerInfo.getState() == 0) {
+        if (stateFlag) {
             roomSpeakerInfo.setState(1);
             //计算时长
             int minutesBetween = getMinutesBetween(roomSpeakerInfo.getStartLiveTime(), new Date());
@@ -562,8 +568,42 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
     /**
      * 测试
      */
-    public void test() {
+    public String test(String roomUid, Integer userId) {
+        String result = "roomUid: " + roomUid + "  userId : " + userId + "  ";
+        //点赞
+        Object like = redissonClient.getBucket(LIVE_ROOM_LIKE.replace(ROOM_UID, roomUid)).get();
+        if (Objects.isNull(like)) {
+            like = 0;
+        }
+        //0用户数量
+        RList<Object> list = redissonClient.getList(LIVE_ROOM_USER_LIST.replace(ROOM_UID, roomUid));
+        int size = list.size();
+        //0累计总用户数量
+        int totalLook = redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid)).size();
+        result = result + " 点赞数量:" + like + "  用户数量:" + size + "  累计总用户数量:" + totalLook + ">>>>>>>>>>>>";
 
+        //获取用户信息
+        RBucket<RoomSpeakerInfo> speakerCache = redissonClient.getBucket(LIVE_SPEAKER_INFO.replace(USER_ID, userId.toString()));
+        if (speakerCache.isExists()) {
+            RoomSpeakerInfo roomSpeakerInfo = speakerCache.get();
+            result = result + "  主讲人信息:" + "createRoomTime :" + DateUtil.dateToString(roomSpeakerInfo.getCreateRoomTime(), DateUtil.EXPANDED_DATE_TIME_FORMAT) +
+                    "joinRoomTime :" + DateUtil.dateToString(roomSpeakerInfo.getJoinRoomTime(), DateUtil.EXPANDED_DATE_TIME_FORMAT) +
+                    ",roomUid:" + roomSpeakerInfo.getRoomUid() + ",speakerId:" + roomSpeakerInfo.getSpeakerId() + ",speakerName:" + roomSpeakerInfo.getSpeakerName() +
+                    ",tenantId:" + roomSpeakerInfo.getTenantId() + " ,totalLiveTime:" + roomSpeakerInfo.getTotalLiveTime() + ", whetherVideo:" + roomSpeakerInfo.getWhetherVideo()
+                    + ">>>>>>>>>>>>";
+        } else {
+            result = result + "  主讲人信息:" + "主讲人信息不存在" + ">>>>>>>>>>>>";
+        }
+
+        //获取总用户信息
+        RMap<Integer, RoomUserInfoVo> roomTotalUser = redissonClient.getMap(LIVE_ROOM_TOTAL_USER_LIST.replace(ROOM_UID, roomUid));
+        if (roomTotalUser.isExists()) {
+            List<RoomUserInfoVo> collect = new ArrayList<>(roomTotalUser.values());
+            result = result + "  总人员信息:" + JSONObject.toJSONString(collect);
+        } else {
+            result = result + "  总人员信息:" + "总人员信息不存在" + ">>>>>>>>>>>>";
+        }
+        return result;
     }
 
     @Override
@@ -633,10 +673,13 @@ public class ImLiveBroadcastRoomServiceImpl extends ServiceImpl<ImLiveBroadcastR
         //房间创建时间
         private Date createRoomTime;
         //进入房间时间
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
         private Date joinRoomTime;
         //开始直播时间
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
         private Date startLiveTime;
         //退出房间时间
+        @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
         private Date exitRoomTime;
         //总直播时间
         private Integer totalLiveTime = 0;

+ 48 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysUserTenantServiceImpl.java

@@ -0,0 +1,48 @@
+package com.ym.mec.biz.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ym.mec.biz.dal.dao.SysUserTenantDao;
+import com.ym.mec.biz.dal.entity.SysUserTenant;
+import com.ym.mec.biz.dal.vo.SysUserTenantVo;
+import com.ym.mec.biz.service.SysUserTenantService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * 平台用户与机构关系表(SysUserTenant)表服务实现类
+ *
+ * @author hgw
+ * @since 2022-03-02 11:09:34
+ */
+@Service("sysUserTenantService")
+public class SysUserTenantServiceImpl extends ServiceImpl<SysUserTenantDao, SysUserTenant> implements SysUserTenantService {
+
+    private final static Logger log = LoggerFactory.getLogger(SysUserTenantServiceImpl.class);
+
+    @Override
+    public SysUserTenantDao getDao() {
+        return this.baseMapper;
+    }
+
+    @Override
+    public List<SysUserTenantVo> queryUserTenant(Integer userId) {
+        return baseMapper.queryUserTenant(userId);
+    }
+
+    /**
+     * 根据用户id删除用户与机构关系
+     *
+     * @param userId 用户id
+     */
+    @Override
+    public void deleteByUserId(Integer userId) {
+        baseMapper.delete(new QueryWrapper<SysUserTenant>().eq("user_id_", userId));
+    }
+
+}
+

+ 30 - 1
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantInfoServiceImpl.java

@@ -18,6 +18,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.entity.TenantContractRecord.TenantContractRecordEnum;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.vo.PlatformServePageVo;
+import com.ym.mec.biz.dal.vo.SysUserTenantVo;
 import com.ym.mec.biz.dal.vo.TenantInfoPageVo;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.exception.BizException;
@@ -119,6 +120,8 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
     private TenantContractRecordService tenantContractRecordService;
     @Autowired
     private TenantContractTemplateDao tenantContractTemplateDao;
+    @Autowired
+    private SysUserTenantService sysUserTenantService;
 
     @Value("${contract.baseDir:/var/pdf}")
     private String contractBaseDir;
@@ -182,6 +185,12 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
             preJoin.setState(1);
             tenantPreJoinService.updateById(preJoin);
         }
+        //添加人员机构关联关系
+        SysUserTenant userTenant = new SysUserTenant();
+        userTenant.setUserId(userId);
+        userTenant.setTenantId(tenantId);
+        userTenant.setCreatedTime(new Date());
+        sysUserTenantService.save(userTenant);
         //释放
         bucket.delete();
     }
@@ -514,6 +523,20 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
      */
     @Override
     public PageInfo<TenantInfoPageVo> queryPage(Map<String, Object> param) {
+        //获取当前登录用户
+        SysUser user = getUser();
+        if (Objects.nonNull(user.getIsSuperAdmin()) && user.getTenantId() == -1) {
+            //不是超级管理员 但是 是平台账号,则需要查询自己关联的机构有哪些
+            if (!user.getIsSuperAdmin()) {
+                List<SysUserTenantVo> sysUserTenantVos = sysUserTenantService.queryUserTenant(user.getId());
+                if (CollectionUtils.isNotEmpty(sysUserTenantVos)) {
+                    List<Integer> tenantIds = sysUserTenantVos.stream().map(SysUserTenantVo::getTenantId).collect(Collectors.toList());
+                    param.put("tenantIds", tenantIds);
+                } else {
+                    throw new BizException("您的账号暂无机构权限,请联系平台管理员配置");
+                }
+            }
+        }
         Page<TenantInfoPageVo> pageInfo = PageUtil.getPageInfo(param);
         pageInfo.setAsc("a.id_");
         return PageUtil.pageInfo(baseMapper.queryPage(pageInfo, param));
@@ -978,11 +1001,17 @@ public class TenantInfoServiceImpl extends ServiceImpl<TenantInfoDao, TenantInfo
 
     private Integer getUserId() {
         //修改机构基础信息
-        return Optional.ofNullable(sysUserFeignService.queryUserInfo())
+        return Optional.ofNullable(getUser())
                 .map(SysUser::getId)
                 .orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
     }
 
+    private SysUser getUser() {
+        //修改机构基础信息
+        return Optional.ofNullable(sysUserFeignService.queryUserInfo())
+                .orElseThrow(() -> new BizException("用户信息获取失败,请刷新页面或者重新登录!"));
+    }
+
     private void checkTsign(String code) {
         //校验营业信息
         SysUserTsign sysUserTsign = sysUserTsignService.queryByCardNo(code);

+ 3 - 0
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMapper.xml

@@ -69,6 +69,9 @@
                 OR a.`room_title_` LIKE CONCAT('%', #{param.search},'%')
                 )
             </if>
+            <if test="param.tenantId != null ">
+                AND a.tenant_id_ = #{param.tenantId}
+            </if>
             <if test="param.roomUid != null">
                 and a.room_uid_ = #{param.roomUid}
             </if>

+ 18 - 10
mec-biz/src/main/resources/config/mybatis/ImLiveBroadcastRoomMemberMapper.xml

@@ -25,18 +25,26 @@
     </insert>
 
     <select id="queryMemberPage" resultType="com.ym.mec.biz.dal.vo.ImLiveBroadcastRoomMemberVo">
-        select
-            a.user_id_ as studentId,
-            su.username_ as studentName,
-            su.phone_ as phone,
-            b.name_ as subName,
-            a.join_time_ as joinTime,
-            a.total_time_ as totalViewTime
+        select i.room_uid_ as roomUid,
+        i.room_title_ as roomTitle,
+        a.user_id_ as studentId,
+        su.username_ as studentName,
+        su.phone_ as phone,
+        b.name_ as subName,
+        a.join_time_ as joinTime,
+        a.total_time_ as totalViewTime
         from im_live_broadcast_room_member as a
-                 left join sys_user as su on su.id_ = a.user_id_
-                 left join student st on su.id_ = st.user_id_
-                 left join subject as b on st.subject_id_list_ = b.id_
+        left join im_live_broadcast_room as i on a.room_uid_ = i.room_uid_
+        left join sys_user as su on su.id_ = a.user_id_
+        left join student st on su.id_ = st.user_id_
+        left join subject as b on st.subject_id_list_ = b.id_
         where a.room_uid_ = #{param.roomUid}
+        <if test="param.search != null ">
+            AND (
+            a.room_uid_ LIKE CONCAT('%', #{param.search},'%')
+            OR i.room_title_ LIKE CONCAT('%', #{param.search},'%')
+            )
+        </if>
     </select>
 
 </mapper>

+ 37 - 0
mec-biz/src/main/resources/config/mybatis/SysUserTenantMapper.xml

@@ -0,0 +1,37 @@
+<?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.SysUserTenantDao">
+    <resultMap id="BaseResultMap" type="com.ym.mec.biz.dal.entity.SysUserTenant">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="user_id_" jdbcType="INTEGER" property="userId"/>
+        <result column="tenant_id_" jdbcType="INTEGER" property="tenantId"/>
+        <result column="created_by_" jdbcType="INTEGER" property="createdBy"/>
+        <result column="created_time_" jdbcType="TIMESTAMP" property="createdTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_
+        , user_id_, tenant_id_, created_by_, created_time_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.ym.mec.biz.dal.entity.SysUserTenant">
+        insert into sys_user_tenant(user_id_, tenant_id_, created_by_, created_time_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.userId}, #{entity.tenantId}, #{entity.createdBy}, #{entity.createdTime})
+        </foreach>
+    </insert>
+
+    <select id="queryUserTenant" resultType="com.ym.mec.biz.dal.vo.SysUserTenantVo">
+        select
+            a.id_ as id,
+            a.user_id_ as userId,
+            b.id_ as tenantId,
+            b.name_ as tenantName
+        from sys_user_tenant as a
+                 left join tenant_info as b on a.tenant_id_ = b.id_
+        where a.user_id_ = #{userId}
+    </select>
+
+</mapper>

+ 6 - 0
mec-biz/src/main/resources/config/mybatis/TenantInfoMapper.xml

@@ -116,6 +116,12 @@
                 OR a.`phone_` LIKE CONCAT('%', #{param.search},'%')
                 )
             </if>
+            <if test="param.tenantIds != null ">
+                AND a.id_ in
+                <foreach collection="param.tenantIds" item="tenantId" open="(" close=")" separator=",">
+                    #{tenantId}
+                </foreach>
+            </if>
             <if test="param.tenantId != null ">
                 AND a.`id_` = #{param.tenantId}
             </if>

+ 1 - 0
mec-im/src/main/java/com/ym/controller/LiveRoomController.java

@@ -47,6 +47,7 @@ public class LiveRoomController {
     @ApiOperation("录制结果回调")
     @RequestMapping(value = "/recordSync")
     public void recordSync(@RequestBody String body){
+        log.info("recordSync body:{}",body);
         RecordNotify recordNotify = JSONObject.parseObject(body, RecordNotify.class);
         liveRoomService.recordSync(recordNotify);
     }

+ 42 - 7
mec-im/src/main/java/com/ym/pojo/RecordNotifyOutput.java

@@ -10,13 +10,48 @@ public class RecordNotifyOutput {
     Long audioSample;
     //视频分辨率,如 640x480
     String videoResoulation;
+    //切片生成的录制文件大小
+    Integer fileSize;
+    //已上传到的第三方存储的 URL
+    String fileUrl;
 
-    @Override
-    public String toString() {
-        return "RecordNotifyOutput{" +
-                "fileName='" + fileName + '\'' +
-                ", audioSample=" + audioSample +
-                ", videoResoulation='" + videoResoulation + '\'' +
-                '}';
+    public String getFileName() {
+        return fileName;
+    }
+
+    public void setFileName(String fileName) {
+        this.fileName = fileName;
+    }
+
+    public Long getAudioSample() {
+        return audioSample;
+    }
+
+    public void setAudioSample(Long audioSample) {
+        this.audioSample = audioSample;
+    }
+
+    public String getVideoResoulation() {
+        return videoResoulation;
+    }
+
+    public void setVideoResoulation(String videoResoulation) {
+        this.videoResoulation = videoResoulation;
+    }
+
+    public Integer getFileSize() {
+        return fileSize;
+    }
+
+    public void setFileSize(Integer fileSize) {
+        this.fileSize = fileSize;
+    }
+
+    public String getFileUrl() {
+        return fileUrl;
+    }
+
+    public void setFileUrl(String fileUrl) {
+        this.fileUrl = fileUrl;
     }
 }

+ 8 - 2
mec-im/src/main/java/com/ym/service/Impl/LiveRoomServiceImpl.java

@@ -130,7 +130,6 @@ public class LiveRoomServiceImpl implements LiveRoomService {
         String body = paramJson.toJSONString();
         HttpURLConnection conn = httpHelper.createIMRtcPostHttpConnection("/rtc/record/stop.json", "application/json",roomId);
         httpHelper.setBodyParameter(body, conn);
-        httpHelper.returnResult(conn, body);
         RBucket<String> bucket = redissonClient.getBucket("sessionId:" + roomId);
         bucket.delete();
         log.info("结束录制直播 roomId :{},{}",roomId,httpHelper.returnResult(conn, body));
@@ -138,7 +137,14 @@ public class LiveRoomServiceImpl implements LiveRoomService {
 
     @Override
     public void recordSync(RecordNotify recordNotify) {
-        log.info("recordSync recordNotify:{}",recordNotify);
+        if(recordNotify.getCode().equals(200)){
+            if(recordNotify.getType() != null && recordNotify.getType() == 4){
+                // TODO 云端录制文件地址
+                String fileUrl = recordNotify.getOutput().getFileUrl();
+                String roomId = recordNotify.getRoomId();
+
+            }
+        }
     }
 
     public String getRoomSessionId(String roomId){

+ 2 - 4
mec-web/src/main/java/com/ym/mec/web/controller/ImLiveBroadcastRoomController.java

@@ -145,11 +145,9 @@ public class ImLiveBroadcastRoomController extends BaseController {
         return succeed();
     }
 
-
     @GetMapping("/test")
-    public HttpResponseResult test() {
-        imLiveBroadcastRoomService.test();
-        return succeed();
+    public HttpResponseResult test(String roomUid, Integer userId) {
+        return succeed(imLiveBroadcastRoomService.test(roomUid, userId));
     }
 
     @GetMapping("/shareGroup")

+ 29 - 0
mec-web/src/main/java/com/ym/mec/web/controller/SysUserTenantController.java

@@ -0,0 +1,29 @@
+package com.ym.mec.web.controller;
+
+
+import com.ym.mec.biz.dal.entity.SysUserTenant;
+import com.ym.mec.biz.service.SysUserTenantService;
+import org.springframework.web.bind.annotation.*;
+import com.ym.mec.common.controller.BaseController;
+import io.swagger.annotations.Api;
+
+import javax.annotation.Resource;
+
+/**
+ * 平台用户与机构关系表(SysUserTenant)表控制层
+ *
+ * @author hgw
+ * @since 2022-03-02 11:09:33
+ */
+@Api(tags = "平台用户与机构关系表")
+@RestController
+@RequestMapping("/sysUserTenant")
+public class SysUserTenantController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private SysUserTenantService sysUserTenantService;
+
+}
+