浏览代码

Merge remote-tracking branch 'origin/master'

weifanli 3 年之前
父节点
当前提交
7e12e45e46
共有 22 个文件被更改,包括 632 次插入11 次删除
  1. 2 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupDao.java
  2. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupMemberAuditDao.java
  3. 5 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImUserFriendDao.java
  4. 13 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java
  5. 123 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupMemberAudit.java
  6. 22 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuditStatusEnum.java
  7. 20 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/ImGroupMemberAuditQueryInfo.java
  8. 37 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupMemberAuditService.java
  9. 1 1
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupMemberService.java
  10. 8 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java
  11. 4 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java
  12. 104 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberAuditServiceImpl.java
  13. 19 5
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberServiceImpl.java
  14. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
  15. 15 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java
  16. 10 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  17. 31 0
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMemberAuditMapper.xml
  18. 5 2
      cooleshow-user/user-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml
  19. 47 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupMemberAuditController.java
  20. 17 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupController.java
  21. 76 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupMemberAuditController.java
  22. 41 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java

+ 2 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupDao.java

@@ -16,5 +16,7 @@ public interface ImGroupDao extends BaseMapper<ImGroup> {
 
     int insertBatch(@Param("entities") List<ImGroup> entities);
 
+    ImGroup getLock(@Param("groupId") Long groupId);
+
 }
 

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImGroupMemberAuditDao.java

@@ -0,0 +1,20 @@
+package com.yonge.cooleshow.biz.dal.dao;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMemberAudit;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * (ImGroupMemberAudit)表数据库访问层
+ *
+ * @author zx
+ * @since 2022-03-22 17:18:51
+ */
+public interface ImGroupMemberAuditDao extends BaseMapper<ImGroupMemberAudit> {
+
+    int insertBatch(@Param("entities") List<ImGroupMemberAudit> entities);
+
+}
+

+ 5 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/ImUserFriendDao.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.entity.ImUserFriend;
+import com.yonge.cooleshow.common.page.QueryInfo;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * 用户通讯录表(ImUserFriend)表数据库访问层
@@ -16,5 +20,6 @@ public interface ImUserFriendDao extends BaseMapper<ImUserFriend> {
 
     int insertBatch(@Param("entities") List<ImUserFriend> entities);
 
+    <T> IPage<T> queryPage(Page<T> page, @Param("param") QueryInfo queryInfo);
 }
 

+ 13 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroup.java

@@ -49,12 +49,16 @@ public class ImGroup implements Serializable {
 
     @TableField("type_")
     @ApiModelProperty(value = "群类型:FAN粉丝群、COURSE课程群;")
-    private ImGroupType type;
+    private ImGroupType type = ImGroupType.FAN;
 
     @TableField("create_by_")
     @ApiModelProperty(value = "创建人")
     private Long createBy;
 
+    @TableField("auto_pass_flag_")
+    @ApiModelProperty(value = "是否自动通过审核")
+    private Boolean autoPassFlag = false;
+
     @TableField("create_time_")
     @ApiModelProperty(value = "创建时间;")
     private Date createTime;
@@ -83,6 +87,14 @@ public class ImGroup implements Serializable {
         }
     }
 
+    public Boolean getAutoPassFlag() {
+        return autoPassFlag;
+    }
+
+    public void setAutoPassFlag(Boolean autoPassFlag) {
+        this.autoPassFlag = autoPassFlag;
+    }
+
     public Long getCreateBy() {
         return createBy;
     }

+ 123 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupMemberAudit.java

@@ -0,0 +1,123 @@
+package com.yonge.cooleshow.biz.dal.entity;
+
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * (ImGroupMemberAudit)表实体类
+ *
+ * @author zx
+ * @since 2022-03-22 17:18:51
+ */
+@ApiModel(value = "im_group_member_audit-申请入群")
+public class ImGroupMemberAudit implements Serializable {
+    @TableId(value = "id_", type = IdType.AUTO)
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    @TableField("user_id_")
+    @ApiModelProperty(value = "用户编号")
+    private Long userId;
+
+    @TableField("role_type_")
+    @ApiModelProperty(value = "群角色TEACHER老师、STUDENT学生")
+    private ImGroupMember.ImGroupMemberRoleType roleType;
+
+    @TableField("group_id_")
+    @NotNull(message = "群编号不可为空")
+    @ApiModelProperty(value = "群组编号")
+    private Long groupId;
+
+    @TableField("desc_")
+    @NotNull(message = "申请原因不可为空")
+    @ApiModelProperty(value = "申请原因")
+    private String desc;
+
+    @TableField("audit_status_")
+    @ApiModelProperty(value = "审核状态")
+    private AuditStatusEnum auditStatus = AuditStatusEnum.AUDITING;
+
+    @TableField("create_time_")
+    @ApiModelProperty(value = "新增时间")
+    private Date createTime;
+
+    @TableField("update_time_")
+    @ApiModelProperty(value = "修改时间")
+    private Date updateTime;
+
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+    public Long getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Long userId) {
+        this.userId = userId;
+    }
+
+    public ImGroupMember.ImGroupMemberRoleType getRoleType() {
+        return roleType;
+    }
+
+    public void setRoleType(ImGroupMember.ImGroupMemberRoleType roleType) {
+        this.roleType = roleType;
+    }
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getDesc() {
+        return desc;
+    }
+
+    public void setDesc(String desc) {
+        this.desc = desc;
+    }
+
+    public AuditStatusEnum getAuditStatus() {
+        return auditStatus;
+    }
+
+    public void setAuditStatus(AuditStatusEnum auditStatus) {
+        this.auditStatus = auditStatus;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+}
+

+ 22 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/enums/AuditStatusEnum.java

@@ -0,0 +1,22 @@
+package com.yonge.cooleshow.biz.dal.enums;
+
+import com.yonge.cooleshow.common.enums.BaseEnum;
+
+public enum AuditStatusEnum implements BaseEnum<String,AuditStatusEnum> {
+    AUDITING("审核中"), REJECT("审核拒绝"), OPEN("审核通过");
+
+    private String msg;
+
+    AuditStatusEnum(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.name();
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+}

+ 20 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/queryInfo/ImGroupMemberAuditQueryInfo.java

@@ -0,0 +1,20 @@
+package com.yonge.cooleshow.biz.dal.queryInfo;
+
+import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class ImGroupMemberAuditQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "审核状态")
+    private AuditStatusEnum auditStatus = AuditStatusEnum.AUDITING;
+
+    public AuditStatusEnum getAuditStatus() {
+        return auditStatus;
+    }
+
+    public void setAuditStatus(AuditStatusEnum auditStatus) {
+        this.auditStatus = auditStatus;
+    }
+}

+ 37 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupMemberAuditService.java

@@ -0,0 +1,37 @@
+package com.yonge.cooleshow.biz.dal.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yonge.cooleshow.biz.dal.dao.ImGroupMemberAuditDao;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMemberAudit;
+import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
+
+/**
+ * (ImGroupMemberAudit)表服务接口
+ *
+ * @author zx
+ * @since 2022-03-22 17:18:51
+ */
+public interface ImGroupMemberAuditService extends IService<ImGroupMemberAudit> {
+
+    ImGroupMemberAuditDao getDao();
+
+    /**
+    * @description: 申请入群
+     * @param imGroupMemberAudit
+    * @return void
+    * @author zx
+    * @date 2022/3/22 17:34
+    */
+    void apply(ImGroupMemberAudit imGroupMemberAudit);
+
+    /**
+    * @description: 入群审核
+     * @param auditId
+     * @param auditStatus
+    * @return void
+    * @author zx
+    * @date 2022/3/22 19:58
+    */
+    void applyAudit(Long auditId, AuditStatusEnum auditStatus) throws Exception;
+}
+

+ 1 - 1
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupMemberService.java

@@ -36,7 +36,7 @@ public interface ImGroupMemberService extends IService<ImGroupMember> {
     * @author zx
     * @date 2022/3/22 15:59
     */
-    void addGroupMember(Long imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType);
+    void addGroupMember(Long imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception;
 
     /**
     * @description: 删除群成员

+ 8 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupService.java

@@ -30,5 +30,13 @@ public interface ImGroupService extends IService<ImGroup> {
     * @date 2022/3/22 11:17
     */
     void dismiss(Long groupId) throws Exception;
+
+    /**
+    * @description: 同步群成员数量
+     * @param groupId
+    * @author zx
+    * @date 2022/3/22 11:17
+    */
+    void syncGroupMemberNum(Long groupId) throws Exception;
 }
 

+ 4 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java

@@ -3,6 +3,8 @@ package com.yonge.cooleshow.biz.dal.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.yonge.cooleshow.biz.dal.dao.ImUserFriendDao;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.cooleshow.common.page.QueryInfo;
 
 /**
  * 用户通讯录表(ImUserFriend)表服务接口
@@ -13,5 +15,7 @@ import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 public interface ImUserFriendService extends IService<ImUserFriend> {
 
     ImUserFriendDao getDao();
+
+    PageInfo<ImUserFriend> queryPage(QueryInfo queryInfo);
 }
 

+ 104 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberAuditServiceImpl.java

@@ -0,0 +1,104 @@
+package com.yonge.cooleshow.biz.dal.service.impl;
+
+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.config.RongCloudConfig;
+import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
+import com.yonge.cooleshow.biz.dal.dao.ImGroupMemberAuditDao;
+import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
+import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
+import com.yonge.cooleshow.biz.dal.entity.ImGroup;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMemberAudit;
+import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
+import com.yonge.cooleshow.biz.dal.enums.AuthStatusEnum;
+import com.yonge.cooleshow.biz.dal.service.ImGroupMemberAuditService;
+import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
+import com.yonge.cooleshow.biz.dal.service.ImGroupService;
+import com.yonge.cooleshow.common.exception.BizException;
+import org.springframework.stereotype.Service;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * (ImGroupMemberAudit)表服务实现类
+ *
+ * @author zx
+ * @since 2022-03-22 17:18:51
+ */
+@Service("imGroupMemberAuditService")
+public class ImGroupMemberAuditServiceImpl extends ServiceImpl<ImGroupMemberAuditDao, ImGroupMemberAudit> implements ImGroupMemberAuditService {
+
+    private final static Logger log = LoggerFactory.getLogger(ImGroupMemberAuditServiceImpl.class);
+
+    @Resource
+    private ImGroupService imGroupService;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+    @Resource
+    private ImGroupMemberService imGroupMemberService;
+
+    @Override
+    public ImGroupMemberAuditDao getDao() {
+        return this.baseMapper;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void apply(ImGroupMemberAudit imGroupMemberAudit) {
+        Long groupId = imGroupMemberAudit.getGroupId();
+        ImGroup imGroup = imGroupService.getById(groupId);
+        if(Objects.isNull(imGroup)){
+            throw new BizException("群组信息不存在");
+        }
+        if(imGroup.getAutoPassFlag()){
+            imGroupMemberAudit.setAuditStatus(AuditStatusEnum.OPEN);
+        }else {
+            imGroupMemberAudit.setAuditStatus(AuditStatusEnum.AUDITING);
+        }
+        baseMapper.insert(imGroupMemberAudit);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void applyAudit(Long auditId, AuditStatusEnum auditStatus) throws Exception {
+        ImGroupMemberAudit imGroupMemberAudit = baseMapper.selectById(auditId);
+        if(Objects.isNull(imGroupMemberAudit)){
+            throw new BizException("审核信息不存在");
+        }
+        if(imGroupMemberAudit.getAuditStatus() != AuditStatusEnum.AUDITING){
+            throw new BizException("您已审核,请勿重复提交");
+        }
+        ImGroup imGroup = imGroupService.getById(imGroupMemberAudit.getGroupId());
+        if(Objects.isNull(imGroup)){
+            throw new BizException("群组信息不存在");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(!sysUser.getId().equals(imGroup.getCreateBy())){
+            throw new BizException("操作失败:您没有审核权限");
+        }
+        if(auditStatus == AuditStatusEnum.REJECT){
+
+        }else if(auditStatus == AuditStatusEnum.OPEN){
+            //加群
+            imGroupMemberService.addGroupMember(imGroup.getId(),
+                    imGroupMemberAudit.getUserId(),false,
+                    imGroupMemberAudit.getRoleType());
+            //同步群成员数量
+            imGroupService.syncGroupMemberNum(imGroup.getId());
+        }else {
+            throw new BizException("操作失败:审核状态异常");
+        }
+        imGroupMemberAudit.setAuditStatus(auditStatus);
+        imGroupMemberAudit.setUpdateTime(new Date());
+        baseMapper.updateById(imGroupMemberAudit);
+    }
+}
+

+ 19 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupMemberServiceImpl.java

@@ -1,23 +1,25 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yonge.cooleshow.biz.dal.config.RongCloudConfig;
 import com.yonge.cooleshow.biz.dal.dao.ImGroupMemberDao;
 import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
 import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
 import com.yonge.cooleshow.common.exception.BizException;
+import io.rong.models.Result;
+import io.rong.models.group.GroupMember;
+import io.rong.models.group.GroupModel;
 import org.apache.commons.collections.CollectionUtils;
-import org.springframework.stereotype.Service;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Set;
 
 /**
  * 群成员表(ImGroupMember)表服务实现类
@@ -49,10 +51,22 @@ public class ImGroupMemberServiceImpl extends ServiceImpl<ImGroupMemberDao, ImGr
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void addGroupMember(Long imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType){
+    public void addGroupMember(Long imGroupId, Long userId, Boolean isAdmin, ImGroupMember.ImGroupMemberRoleType roleType) throws Exception {
+        //加入融云群
+        GroupMember groupMember = new GroupMember(userId.toString(),imGroupId.toString(),null);
+        GroupMember[] groupMembers = new GroupMember[]{groupMember};
+        GroupModel groupModel = new GroupModel(imGroupId.toString(), 0);
+        groupModel.setMembers(groupMembers);
+        Result result = RongCloudConfig.rongCloud.group.join(groupModel);
+        if(!result.code.equals(200)){
+            log.error("加入群组失败:{}",result.errorMessage);
+            throw new BizException("加入群组失败:请联系管理员");
+        }
+        //记录群成员
         List<ImGroupMember> imGroupMembers = new ArrayList<>();
         BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(userId);
-        imGroupMembers.add(new ImGroupMember(imGroupId,userId,basicUserInfo.getRealName(),isAdmin,roleType));
+        String username = roleType== ImGroupMember.ImGroupMemberRoleType.TEACHER?basicUserInfo.getRealName():basicUserInfo.getUsername();
+        imGroupMembers.add(new ImGroupMember(imGroupId,userId,username,isAdmin,roleType));
         this.baseMapper.insertBatch(imGroupMembers);
     }
 

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java

@@ -1,5 +1,7 @@
 package com.yonge.cooleshow.biz.dal.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.yonge.cooleshow.biz.dal.config.RongCloudConfig;
 import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
@@ -101,5 +103,15 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         //删除群成员
         imGroupMemberService.delByGroupId(groupId);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void syncGroupMemberNum(Long groupId) throws Exception {
+        ImGroup imGroup = baseMapper.selectById(groupId);
+        Integer memberNum = imGroupMemberService.getBaseMapper().
+                selectCount(new QueryWrapper<ImGroupMember>().eq("im_group_id_",groupId));
+        imGroup.setMemberNum(memberNum);
+        baseMapper.updateById(imGroup);
+    }
 }
 

+ 15 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java

@@ -1,14 +1,23 @@
 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.biz.dal.dao.ImUserFriendDao;
 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.page.PageInfo;
+import com.yonge.cooleshow.common.page.QueryInfo;
+import com.yonge.toolset.utils.collection.MapUtil;
+import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * 用户通讯录表(ImUserFriend)表服务实现类
  *
@@ -25,5 +34,11 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
         return this.baseMapper;
     }
 
+    @Override
+    public PageInfo<ImUserFriend> queryPage(QueryInfo queryInfo) {
+        Page<ImUserFriend> pageInfo = PageUtil.getPage(queryInfo.getPage(),queryInfo.getRows());
+        return PageUtil.pageInfo(baseMapper.queryPage(pageInfo,queryInfo));
+    }
+
 }
 

+ 10 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMapper.xml

@@ -10,6 +10,7 @@
         <result column="img_" jdbcType="VARCHAR" property="img"/>
         <result column="type_" jdbcType="VARCHAR" property="type" typeHandler="com.yonge.cooleshow.common.dal.CustomEnumTypeHandler"/>
         <result column="create_by_" property="createBy"/>
+        <result column="auto_pass_flag_" property="autoPassFlag"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
     </resultMap>
@@ -24,20 +25,27 @@
             <if test="et.name != null">
                 name_ = #{et.name},
             </if>
+            <if test="et.autoPassFlag != null">
+                auto_pass_flag_ = #{et.autoPassFlag},
+            </if>
             introduce_ = #{et.introduce},
             memo_ = #{et.memo},
             update_time_ = NOW()
         </set>
         where id_ = #{et.id}
     </update>
+    <select id="getLock" resultMap="BaseResultMap">
+        SELECT * FROM im_group WHERE id_ = #{groupId} LIMIT 1 FOR UPDATE
+    </select>
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.yonge.cooleshow.biz.dal.entity.ImGroup">
-        INSERT INTO im_group(name_, introduce_, member_num_, memo_, img_, type_,create_by_, create_time_, update_time_)
+        INSERT INTO im_group(name_, introduce_, member_num_, memo_, img_, type_,create_by_,auto_pass_flag_, create_time_, update_time_)
         VALUES
         <foreach collection="entities" item="entity" separator=",">
             (#{entity.name}, #{entity.introduce}, #{entity.memberNum}, #{entity.memo}, #{entity.img},
-             #{entity.type,typeHandler=com.yonge.cooleshow.common.dal.CustomEnumTypeHandler},#{createBy}, NOW(), NOW())
+             #{entity.type,typeHandler=com.yonge.cooleshow.common.dal.CustomEnumTypeHandler},
+             #{entity.createBy},#{entity.autoPassFlag}, NOW(), NOW())
         </foreach>
     </insert>
 

+ 31 - 0
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImGroupMemberAuditMapper.xml

@@ -0,0 +1,31 @@
+<?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.yonge.cooleshow.biz.dal.dao.ImGroupMemberAuditDao">
+    <resultMap id="BaseResultMap" type="com.yonge.cooleshow.biz.dal.entity.ImGroupMemberAudit">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="user_id_" jdbcType="INTEGER" property="userId"/>
+        <result column="role_type_" jdbcType="VARCHAR" property="roleType" typeHandler="com.yonge.cooleshow.common.dal.CustomEnumTypeHandler"/>
+        <result column="group_id_" jdbcType="INTEGER" property="groupId"/>
+        <result column="desc_" jdbcType="VARCHAR" property="desc"/>
+        <result column="audit_status_" jdbcType="VARCHAR" property="auditStatus" typeHandler="com.yonge.cooleshow.common.dal.CustomEnumTypeHandler"/>
+        <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id_
+        , user_id_, role_type_, group_id_, desc_, audit_status_, create_time_, update_time_
+    </sql>
+
+    <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
+            parameterType="com.yonge.cooleshow.biz.dal.entity.ImGroupMemberAudit">
+        insert into im_group_member_audit(user_id_, role_type_, group_id_, desc_, audit_status_,
+        create_time_, update_time_)
+        values
+        <foreach collection="entities" item="entity" separator=",">
+            (#{entity.userId}, #{entity.roleType,typeHandler=com.yonge.cooleshow.common.dal.CustomEnumTypeHandler}, #{entity.groupId}, #{entity.desc},
+            #{entity.auditStatus,typeHandler=com.yonge.cooleshow.common.dal.CustomEnumTypeHandler}, NOW(), NOW())
+        </foreach>
+    </insert>
+
+</mapper>

+ 5 - 2
cooleshow-user/user-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml

@@ -18,12 +18,15 @@
 
     <insert id="insertBatch" keyColumn="id_" keyProperty="id" useGeneratedKeys="true"
             parameterType="com.yonge.cooleshow.biz.dal.entity.ImUserFriend">
-        insert into im_user_friend(user_id_, friend_id_, friend_nickname_, memo_, create_time_, update_time_)
-        values
+        INSERT INTO im_user_friend(user_id_, friend_id_, friend_nickname_, memo_, create_time_, update_time_)
+        VALUES
         <foreach collection="entities" item="entity" separator=",">
             (#{entity.userId}, #{entity.friendId}, #{entity.friendNickname}, #{entity.memo}, #{entity.createTime},
             #{entity.updateTime})
         </foreach>
     </insert>
+    <select id="queryPage">
+
+    </select>
 
 </mapper>

+ 47 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupMemberAuditController.java

@@ -0,0 +1,47 @@
+package com.yonge.cooleshow.student.controller;
+
+
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMemberAudit;
+import com.yonge.cooleshow.biz.dal.service.ImGroupMemberAuditService;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+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;
+import javax.validation.Valid;
+
+/**
+ * (ImGroupMemberAudit)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 17:18:51
+ */
+@Api(tags = "入群申请")
+@RestController
+@RequestMapping("/imGroupMemberAudit")
+public class ImGroupMemberAuditController extends BaseController {
+
+    @Resource
+    private ImGroupMemberAuditService imGroupMemberAuditService;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation("申请入群")
+    @PostMapping(value = "/apply")
+    public HttpResponseResult apply(@Valid @RequestBody ImGroupMemberAudit imGroupMemberAudit){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        imGroupMemberAudit.setRoleType(ImGroupMember.ImGroupMemberRoleType.STUDENT);
+        imGroupMemberAudit.setUserId(sysUser.getId());
+        imGroupMemberAuditService.apply(imGroupMemberAudit);
+        return succeed();
+    }
+}
+

+ 17 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupController.java

@@ -8,6 +8,7 @@ import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
 import com.yonge.cooleshow.common.controller.BaseController;
 import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.exception.BizException;
 import com.yonge.toolset.utils.validator.ValidationKit;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -20,6 +21,7 @@ import org.springframework.web.bind.annotation.RestController;
 import javax.annotation.Resource;
 import javax.validation.Valid;
 import java.util.HashSet;
+import java.util.Objects;
 import java.util.Set;
 
 /**
@@ -60,6 +62,21 @@ public class ImGroupController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation("获取群详情")
+    @PostMapping(value = "/getDetail")
+    public HttpResponseResult<ImGroup> getDetail(@RequestBody Long groupId) throws Exception {
+        if(Objects.isNull(groupId)){
+            throw new BizException("参数校验失败");
+        }
+        return succeed(imGroupService.getById(groupId));
+    }
+
+    @ApiOperation("分页查询")
+    @PostMapping(value = "/queryPage")
+    public HttpResponseResult<Boolean> queryPage(@Valid @RequestBody ImGroup imGroup) throws Exception {
+        return succeed(imGroupService.updateById(imGroup));
+    }
+
     @ApiOperation("修改群信息")
     @PostMapping(value = "/update")
     public HttpResponseResult<Boolean> update(@Valid @RequestBody ImGroup imGroup) throws Exception {

+ 76 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupMemberAuditController.java

@@ -0,0 +1,76 @@
+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.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupMemberAudit;
+import com.yonge.cooleshow.biz.dal.enums.AuditStatusEnum;
+import com.yonge.cooleshow.biz.dal.queryInfo.ImGroupMemberAuditQueryInfo;
+import com.yonge.cooleshow.biz.dal.service.ImGroupMemberAuditService;
+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.exception.BizException;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+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;
+import javax.validation.Valid;
+import java.util.Objects;
+
+/**
+ * (ImGroupMemberAudit)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 17:18:51
+ */
+@Api(tags = "入群申请")
+@RestController
+@RequestMapping("/imGroupMemberAudit")
+public class ImGroupMemberAuditController extends BaseController {
+
+    @Resource
+    private ImGroupMemberAuditService imGroupMemberAuditService;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation("申请入群")
+    @PostMapping(value = "/apply")
+    public HttpResponseResult apply(@Valid @RequestBody ImGroupMemberAudit imGroupMemberAudit) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        imGroupMemberAudit.setRoleType(ImGroupMember.ImGroupMemberRoleType.TEACHER);
+        imGroupMemberAudit.setUserId(sysUser.getId());
+        imGroupMemberAuditService.apply(imGroupMemberAudit);
+        return succeed();
+    }
+
+    @ApiOperation("申请入群审核")
+    @PostMapping(value = "/applyAudit")
+    public HttpResponseResult applyAudit(@RequestBody Long auditId, AuditStatusEnum auditStatus) throws Exception {
+        if(Objects.isNull(auditId) || Objects.isNull(auditStatus)){
+            throw new BizException("参数校验失败");
+        }
+        imGroupMemberAuditService.applyAudit(auditId,auditStatus);
+        return succeed();
+    }
+
+    @ApiOperation("申请入群列表")
+    @PostMapping(value = "/queryPage")
+    public HttpResponseResult<IPage<ImGroupMemberAudit>> queryPage(@Valid @RequestBody ImGroupMemberAuditQueryInfo queryInfo) throws Exception {
+        Page<ImGroupMemberAudit> pageInfo = PageUtil.getPage(queryInfo.getPage(),queryInfo.getRows());
+        IPage<ImGroupMemberAudit> page = imGroupMemberAuditService.page(pageInfo,
+                Wrappers.<ImGroupMemberAudit>query().lambda()
+                        .eq(ImGroupMemberAudit::getGroupId, queryInfo.getAuditStatus()));
+        return succeed(page);
+    }
+
+}
+

+ 41 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java

@@ -0,0 +1,41 @@
+package com.yonge.cooleshow.teacher.controller;
+
+
+import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
+import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
+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.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+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;
+
+/**
+ * 用户通讯录表(ImUserFriend)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 10:45:59
+ */
+@Api(tags = "用户通讯录表")
+@RestController
+@RequestMapping("/imUserFriend")
+public class ImUserFriendController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImUserFriendService imUserFriendService;
+
+    @ApiOperation("分页查询")
+    @PostMapping(value = "/queryPage")
+    public HttpResponseResult<PageInfo<ImUserFriend>> queryPage(@RequestBody QueryInfo queryInfo) throws Exception {
+        return succeed(imUserFriendService.queryPage(queryInfo));
+    }
+}
+