Explorar o código

Merge remote-tracking branch 'origin/master'

weifanli %!s(int64=3) %!d(string=hai) anos
pai
achega
5ef312192a
Modificáronse 19 ficheiros con 438 adicións e 140 borrados
  1. 2 2
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HolidaysFestivalsController.java
  2. 0 21
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java
  3. 0 29
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupMemberController.java
  4. 0 29
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupNoticeController.java
  5. 0 29
      cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImUserFriendController.java
  6. 12 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java
  7. 11 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/BasicUserInfo.java
  8. 20 17
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/entity/ImGroupNotice.java
  9. 13 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImGroupNoticeService.java
  10. 10 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/ImUserFriendService.java
  11. 60 0
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupNoticeServiceImpl.java
  12. 8 3
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImGroupServiceImpl.java
  13. 46 2
      cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/ImUserFriendServiceImpl.java
  14. 15 7
      cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  15. 52 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupController.java
  16. 54 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupNoticeController.java
  17. 60 0
      cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImUserFriendController.java
  18. 73 0
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupNoticeController.java
  19. 2 1
      cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java

+ 2 - 2
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/HolidaysFestivalsController.java

@@ -47,7 +47,7 @@ public class HolidaysFestivalsController extends BaseController {
 
 	@ApiOperation("新增节假日")
 	@ApiImplicitParam(name = "HolidaysFestivals", value = "节假日对象", required = false, dataType = "HolidaysFestivals", paramType = "body")
-	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@PostMapping(value = "/add", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 	@AuditLogAnnotation(operateName = "新增节假日", interfaceURL = "holidaysFestivals/add")
 	@PreAuthorize("@pcs.hasPermissions('holidaysFestivals/add')")
 	public Object add(@RequestBody HolidaysFestivals holidaysFestivals) {
@@ -76,7 +76,7 @@ public class HolidaysFestivalsController extends BaseController {
 
 	@ApiOperation("更新节假日")
 	@ApiImplicitParam(name = "HolidaysFestivals", value = "节假日对象", required = false, dataType = "HolidaysFestivals", paramType = "body")
-	@PostMapping(value = "/update", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+	@PostMapping(value = "/update", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 	@AuditLogAnnotation(operateName = "更新节假日", interfaceURL = "holidaysFestivals/update")
 	@PreAuthorize("@pcs.hasPermissions('holidaysFestivals/update')")
 	public Object update(HolidaysFestivals holidaysFestivals) {

+ 0 - 21
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupController.java

@@ -1,21 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-
-import com.yonge.cooleshow.common.controller.BaseController;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * 即时通讯群组(ImGroup)表控制层
- *
- * @author zx
- * @since 2022-03-22 10:45:56
- */
-@Api(tags = "即时通讯群组")
-@RestController
-@RequestMapping("/imGroup")
-public class ImGroupController extends BaseController {
-
-}
-

+ 0 - 29
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupMemberController.java

@@ -1,29 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-
-import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * 群成员表(ImGroupMember)表控制层
- *
- * @author zx
- * @since 2022-03-22 10:45:57
- */
-@Api(tags = "群成员表")
-@RestController
-@RequestMapping("/imGroupMember")
-public class ImGroupMemberController extends BaseController {
-    /**
-     * 服务对象
-     */
-    @Resource
-    private ImGroupMemberService imGroupMemberService;
-
-}
-

+ 0 - 29
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImGroupNoticeController.java

@@ -1,29 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-
-import com.yonge.cooleshow.biz.dal.service.ImGroupNoticeService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import io.swagger.annotations.Api;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.annotation.Resource;
-
-/**
- * 群公告(ImGroupNotice)表控制层
- *
- * @author zx
- * @since 2022-03-22 10:45:58
- */
-@Api(tags = "群公告")
-@RestController
-@RequestMapping("/imGroupNotice")
-public class ImGroupNoticeController extends BaseController {
-    /**
-     * 服务对象
-     */
-    @Resource
-    private ImGroupNoticeService imGroupNoticeService;
-
-}
-

+ 0 - 29
cooleshow-user/user-admin/src/main/java/com/yonge/cooleshow/admin/controller/ImUserFriendController.java

@@ -1,29 +0,0 @@
-package com.yonge.cooleshow.admin.controller;
-
-
-import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
-import com.yonge.cooleshow.common.controller.BaseController;
-import io.swagger.annotations.Api;
-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;
-
-}
-

+ 12 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dao/TeacherDao.java

@@ -1,6 +1,7 @@
 package com.yonge.cooleshow.biz.dal.dao;
 
 import java.util.List;
+import java.util.Set;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -37,6 +38,7 @@ public interface TeacherDao extends BaseMapper<Teacher> {
      * @updateTime 2022/3/22 11:06
      */
     void updatetSetDetail(@Param("param") TeacherSetReq setReq, @Param("id") Long id);
+
     /**
     * @description: 获取用户基本信息
      * @param userId
@@ -45,6 +47,16 @@ public interface TeacherDao extends BaseMapper<Teacher> {
     * @date 2022/3/22 13:52
     */
     BasicUserInfo getBasicUserInfo(@Param("userId") Long userId);
+
+    /**
+     * @description: 获取用户基本信息
+     * @param studentIds
+     * @return com.yonge.cooleshow.biz.dal.dto.BasicUserInfo
+     * @author zx
+     * @date 2022/3/22 13:52
+     */
+    List<BasicUserInfo> findBasicUserInfo(@Param("studentIds") Set<Long> studentIds);
+
     /***
      * 查询老师详情
      * @author liweifan

+ 11 - 0
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/dto/BasicUserInfo.java

@@ -17,6 +17,17 @@ public class BasicUserInfo {
     @ApiModelProperty(value = "sys_user表real_name_", required = true)
     private String realName;
 
+    @ApiModelProperty(value = "用户头像", required = true)
+    private String avatar;
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
     public Long getUserId() {
         return userId;
     }

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

@@ -1,15 +1,16 @@
 package com.yonge.cooleshow.biz.dal.entity;
 
 
-import java.util.Date;
-
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
-import com.baomidou.mybatisplus.annotation.TableId;
 
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
 import java.io.Serializable;
+import java.util.Date;
 
 /**
  * 群公告(ImGroupNotice)表实体类
@@ -20,32 +21,36 @@ import java.io.Serializable;
 @ApiModel(value = "im_group_notice-群公告")
 public class ImGroupNotice implements Serializable {
     @TableId(value = "id_", type = IdType.AUTO)
+    @NotNull(message = "公告编号不可为空")
     @ApiModelProperty(value = "主键;")
     private Long id;
 
-    @TableField("groupId")
+    @TableField("group_id_")
+    @NotNull(message = "群编号不可为空")
     @ApiModelProperty(value = "群编号;")
     private Long groupId;
 
     @TableField("title_")
+    @NotBlank(message = "公告标题不可为空")
     @ApiModelProperty(value = "标题")
     private String title;
 
     @TableField("content_")
+    @NotBlank(message = "公告内容不可为空")
     @ApiModelProperty(value = "内容")
     private String content;
 
     @TableField("is_top_")
     @ApiModelProperty(value = "是否置顶")
-    private Object isTop;
+    private Boolean isTop = false;
 
     @TableField("is_sent_to_new_member_")
     @ApiModelProperty(value = "是否发送给新人")
-    private Object isSentToNewMember;
+    private Boolean isSentToNewMember = false;
 
     @TableField("del_flag_")
     @ApiModelProperty(value = "是否删除1是0否;")
-    private Object delFlag;
+    private Boolean delFlag = false;
 
     @TableField("operator_id_")
     @ApiModelProperty(value = "操作人")
@@ -59,7 +64,6 @@ public class ImGroupNotice implements Serializable {
     @ApiModelProperty(value = "修改时间;")
     private Date updateTime;
 
-
     public Long getId() {
         return id;
     }
@@ -92,27 +96,27 @@ public class ImGroupNotice implements Serializable {
         this.content = content;
     }
 
-    public Object getIsTop() {
+    public Boolean getTop() {
         return isTop;
     }
 
-    public void setIsTop(Object isTop) {
-        this.isTop = isTop;
+    public void setTop(Boolean top) {
+        isTop = top;
     }
 
-    public Object getIsSentToNewMember() {
+    public Boolean getSentToNewMember() {
         return isSentToNewMember;
     }
 
-    public void setIsSentToNewMember(Object isSentToNewMember) {
-        this.isSentToNewMember = isSentToNewMember;
+    public void setSentToNewMember(Boolean sentToNewMember) {
+        isSentToNewMember = sentToNewMember;
     }
 
-    public Object getDelFlag() {
+    public Boolean getDelFlag() {
         return delFlag;
     }
 
-    public void setDelFlag(Object delFlag) {
+    public void setDelFlag(Boolean delFlag) {
         this.delFlag = delFlag;
     }
 
@@ -139,6 +143,5 @@ public class ImGroupNotice implements Serializable {
     public void setUpdateTime(Date updateTime) {
         this.updateTime = updateTime;
     }
-
 }
 

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

@@ -13,5 +13,18 @@ import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
 public interface ImGroupNoticeService extends IService<ImGroupNotice> {
 
     ImGroupNoticeDao getDao();
+
+    /**
+    * @description: 新增群公告
+     * @param imGroupNotice
+    * @return java.lang.Boolean
+    * @author zx
+    * @date 2022/3/24 10:57
+    */
+    void create(ImGroupNotice imGroupNotice);
+
+    void modify(ImGroupNotice imGroupNotice);
+
+    void del(Long noticeId);
 }
 

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

@@ -7,6 +7,7 @@ import com.yonge.cooleshow.common.page.PageInfo;
 import com.yonge.cooleshow.common.page.QueryInfo;
 
 import java.util.Map;
+import java.util.Set;
 
 /**
  * 用户通讯录表(ImUserFriend)表服务接口
@@ -18,5 +19,14 @@ public interface ImUserFriendService extends IService<ImUserFriend> {
 
     ImUserFriendDao getDao();
 
+    /**
+    * @description: 保存用户通讯录
+     * @param teacherId
+     * @param studentIds
+    * @return void
+    * @author zx
+    * @date 2022/3/24 10:06
+    */
+    void saveUserFriend(Long teacherId, Set<Long> studentIds);
 }
 

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

@@ -1,13 +1,23 @@
 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.dao.ImGroupDao;
 import com.yonge.cooleshow.biz.dal.dao.ImGroupNoticeDao;
+import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
 import com.yonge.cooleshow.biz.dal.service.ImGroupNoticeService;
+import com.yonge.cooleshow.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;
 
 /**
  * 群公告(ImGroupNotice)表服务实现类
@@ -20,10 +30,60 @@ public class ImGroupNoticeServiceImpl extends ServiceImpl<ImGroupNoticeDao, ImGr
 
     private final static Logger log = LoggerFactory.getLogger(ImGroupNoticeServiceImpl.class);
 
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+    @Resource
+    private ImGroupDao imGroupDao;
+
     @Override
     public ImGroupNoticeDao getDao() {
         return this.baseMapper;
     }
 
+    @Override
+    public void create(ImGroupNotice imGroupNotice) {
+        Long userId = this.checkAdmin(imGroupNotice.getGroupId());
+        Date date = new Date();
+        imGroupNotice.setOperatorId(userId);
+        imGroupNotice.setCreateTime(date);
+        imGroupNotice.setUpdateTime(date);
+        baseMapper.insert(imGroupNotice);
+    }
+
+    @Override
+    public void del(Long noticeId) {
+        ImGroupNotice imGroupNotice = baseMapper.selectById(noticeId);
+        if(Objects.isNull(imGroupNotice)){
+            throw new BizException("群公告不存在");
+        }
+        this.checkAdmin(imGroupNotice.getGroupId());
+        baseMapper.deleteById(noticeId);
+    }
+
+    @Override
+    public void modify(ImGroupNotice imGroupNotice) {
+        if(Objects.isNull(baseMapper.selectById(imGroupNotice.getId()))){
+            throw new BizException("群公告不存在");
+        }
+        Long userId = this.checkAdmin(imGroupNotice.getGroupId());
+        Date date = new Date();
+        imGroupNotice.setOperatorId(userId);
+        imGroupNotice.setCreateTime(date);
+        imGroupNotice.setUpdateTime(date);
+        baseMapper.insert(imGroupNotice);
+    }
+
+    public Long checkAdmin(Long groupId){
+        ImGroup imGroup = imGroupDao.selectById(groupId);
+        if(Objects.isNull(imGroup)){
+            throw new BizException("群信息不存在");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(!Objects.equals(sysUser.getId(),imGroup.getCreateBy())){
+            throw new BizException("您没有操作权限");
+        }
+        return sysUser.getId();
+    }
+
 }
 

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

@@ -9,9 +9,12 @@ import com.yonge.cooleshow.biz.dal.config.RongCloudConfig;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleStudentPaymentDao;
 import com.yonge.cooleshow.biz.dal.dao.CourseScheduleTeacherSalaryDao;
 import com.yonge.cooleshow.biz.dal.dao.ImGroupDao;
+import com.yonge.cooleshow.biz.dal.dao.TeacherDao;
+import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 import com.yonge.cooleshow.biz.dal.entity.CourseGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroup;
 import com.yonge.cooleshow.biz.dal.entity.ImGroupMember;
+import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 import com.yonge.cooleshow.biz.dal.service.CourseGroupService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupMemberService;
 import com.yonge.cooleshow.biz.dal.service.ImGroupService;
@@ -30,6 +33,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 即时通讯群组(ImGroup)表服务实现类
@@ -92,9 +96,10 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
             return;
         }
         Date now = new Date();
+        Long teacherId = courseGroup.getTeacherId();
         //创建群聊
         ImGroup imGroup = new ImGroup();
-        imGroup.setCreateBy(courseGroup.getTeacherId());
+        imGroup.setCreateBy(teacherId);
         imGroup.setAutoPassFlag(false);
         imGroup.setMemberNum(studentIds.size() + 1);
         imGroup.setName(courseGroup.getName());
@@ -103,8 +108,8 @@ public class ImGroupServiceImpl extends ServiceImpl<ImGroupDao, ImGroup> impleme
         imGroup.setUpdateTime(now);
         this.baseMapper.insert(imGroup);
         Long imGroupId = imGroup.getId();
-        //处理通讯录
-
+        //保存老师学员关联的通讯录
+        imUserFriendService.saveUserFriend(teacherId,studentIds);
         //处理本地群成员列表
         List<GroupMember> groupMembers = imGroupMemberService.initGroupMember(imGroupId, imGroup.getCreateBy(), true, ImGroupMember.ImGroupMemberRoleType.TEACHER);
         groupMembers.addAll(imGroupMemberService.initGroupMembers(imGroupId,studentIds,ImGroupMember.ImGroupMemberRoleType.STUDENT));

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

@@ -3,20 +3,25 @@ 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.dao.TeacherDao;
+import com.yonge.cooleshow.biz.dal.dto.BasicUserInfo;
 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.CollectionUtils;
 import org.apache.commons.collections.MapUtils;
 import org.springframework.stereotype.Service;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.springframework.transaction.annotation.Transactional;
 
-import java.util.HashMap;
-import java.util.Map;
+import javax.annotation.Resource;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 用户通讯录表(ImUserFriend)表服务实现类
@@ -29,10 +34,49 @@ public class ImUserFriendServiceImpl extends ServiceImpl<ImUserFriendDao, ImUser
 
     private final static Logger log = LoggerFactory.getLogger(ImUserFriendServiceImpl.class);
 
+    @Resource
+    private TeacherDao teacherDao;
     @Override
     public ImUserFriendDao getDao() {
         return this.baseMapper;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveUserFriend(Long teacherId, Set<Long> studentIds) {
+        Date now = new Date();
+        //老师添加学员联系人
+        List<ImUserFriend> imUserFriends = new ArrayList<>();
+        BasicUserInfo basicUserInfo = teacherDao.getBasicUserInfo(teacherId);
+        List<BasicUserInfo> basicUserInfoList = teacherDao.findBasicUserInfo(studentIds);
+        basicUserInfoList.add(basicUserInfo);
+        Map<Long, List<BasicUserInfo>> basicUserInfoMap = basicUserInfoList.stream().collect(Collectors.groupingBy(BasicUserInfo::getUserId));
+        for(Long studentId : studentIds){
+            //老师关联学员
+            ImUserFriend teacherFriend = new ImUserFriend();
+            //学员关联老师
+            ImUserFriend studentFriend = new ImUserFriend();
+            List<BasicUserInfo> basicUserInfos = basicUserInfoMap.get(studentId);
+            if(CollectionUtils.isNotEmpty(basicUserInfos)){
+                BasicUserInfo info = basicUserInfos.get(0);
+                teacherFriend.setFriendAvatar(info.getAvatar());
+                teacherFriend.setFriendNickname(info.getUsername());
+                studentFriend.setFriendAvatar(info.getAvatar());
+                studentFriend.setFriendNickname(info.getRealName());
+            }
+            teacherFriend.setFriendId(studentId);
+            teacherFriend.setUserId(teacherId);
+            teacherFriend.setCreateTime(now);
+            teacherFriend.setUpdateTime(now);
+
+            studentFriend.setFriendId(teacherId);
+            studentFriend.setUserId(studentId);
+            studentFriend.setCreateTime(now);
+            studentFriend.setUpdateTime(now);
+            imUserFriends.add(teacherFriend);
+            imUserFriends.add(studentFriend);
+        }
+    }
+
 }
 

+ 15 - 7
cooleshow-user/user-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -102,13 +102,21 @@
         WHERE id_ = #{id}
     </update>
 
-    <resultMap id="BasicUserInfo" type="com.yonge.cooleshow.biz.dal.dto.BasicUserInfo">
-        <result property="userId" column="user_id_"/>
-        <result property="username" column="username_"/>
-        <result property="realName" column="real_name_"/>
-    </resultMap>
-    <select id="getBasicUserInfo" resultMap="BasicUserInfo">
-		SELECT id_ user_id_,username_,real_name_ FROM sys_user WHERE id_ = #{userId} LIMIT 1
+	<resultMap id="BasicUserInfo" type="com.yonge.cooleshow.biz.dal.dto.BasicUserInfo">
+		<result property="userId" column="user_id_"/>
+		<result property="username" column="username_"/>
+		<result property="realName" column="real_name_"/>
+		<result property="avatar" column="avatar_"/>
+	</resultMap>
+	<select id="getBasicUserInfo" resultMap="BasicUserInfo">
+		SELECT id_ user_id_,username_,real_name_,avatar_ FROM sys_user WHERE id_ = #{userId} LIMIT 1
+	</select>
+	<select id="findBasicUserInfo" resultMap="BasicUserInfo">
+		SELECT id_ user_id_,username_,real_name_,avatar_ FROM sys_user
+		WHERE id_ IN
+		<foreach collection="studentIds" open="(" close=")" separator="," item="userId">
+			#{userId}
+		</foreach>
 	</select>
 
     <select id="detail" resultType="com.yonge.cooleshow.biz.dal.vo.TeacherVo">

+ 52 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupController.java

@@ -0,0 +1,52 @@
+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.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.page.PageInfo;
+import io.swagger.annotations.*;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.Map;
+
+/**
+ * 即时通讯群组(ImGroup)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 10:45:56
+ */
+@Api(tags = "即时通讯群组")
+@RestController
+@RequestMapping("/imGroup")
+public class ImGroupController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImGroupService imGroupService;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation("获取群详情")
+    @PostMapping(value = "/getDetail/{groupId}")
+    public HttpResponseResult<ImGroup> getDetail(@ApiParam(value = "群编号", required = true) @PathVariable("groupId") Long groupId) throws Exception {
+        return succeed(imGroupService.getById(groupId));
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "根据群名称、编号、简介模糊查询"),
+    })
+    @ApiOperation("分页查询")
+    @PostMapping(value = "/queryPage")
+    public HttpResponseResult<PageInfo<ImGroup>> queryPage(@RequestBody Map<String,Object> params) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        params.put("userId",sysUser.getId());
+        return succeed(imGroupService.queryPage(params));
+    }
+}
+

+ 54 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImGroupNoticeController.java

@@ -0,0 +1,54 @@
+package com.yonge.cooleshow.student.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
+import com.yonge.cooleshow.biz.dal.service.ImGroupNoticeService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.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 java.util.Map;
+
+/**
+ * 群公告(ImGroupNotice)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 10:45:58
+ */
+@Api(tags = "群公告")
+@RestController
+@RequestMapping("/imGroupNotice")
+public class ImGroupNoticeController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImGroupNoticeService imGroupNoticeService;
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "groupId", dataType = "Long", value = "群编号",required = true)
+    })
+    @ApiOperation("分页查询")
+    @PostMapping(value = "/queryPage")
+    public HttpResponseResult<PageInfo<ImGroupNotice>> queryPage(@RequestBody Map<String,Object> params) throws Exception {
+        Page<ImGroupNotice> pageInfo = PageUtil.getPageInfo(params);
+        IPage<ImGroupNotice> iPage = imGroupNoticeService.getBaseMapper().selectPage(pageInfo, Wrappers.<ImGroupNotice>query().lambda()
+                .eq(ImGroupNotice::getGroupId,params.get("groupId"))
+                .orderByDesc(ImGroupNotice::getCreateTime));
+        return succeed(PageUtil.pageInfo(iPage));
+    }
+}
+

+ 60 - 0
cooleshow-user/user-student/src/main/java/com/yonge/cooleshow/student/controller/ImUserFriendController.java

@@ -0,0 +1,60 @@
+package com.yonge.cooleshow.student.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.auth.api.client.SysUserFeignService;
+import com.yonge.cooleshow.auth.api.entity.SysUser;
+import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
+import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.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 java.util.Map;
+
+/**
+ * 用户通讯录表(ImUserFriend)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 10:45:59
+ */
+@Api(tags = "用户通讯录表")
+@RestController
+@RequestMapping("/imUserFriend")
+public class ImUserFriendController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImUserFriendService imUserFriendService;
+    @Resource
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "search", dataType = "String", value = "根据用户编号、昵称模糊查询")
+    })
+    @ApiOperation("分页查询")
+    @PostMapping(value = "/queryPage")
+    public HttpResponseResult<PageInfo<ImUserFriend>> queryPage(@RequestBody Map<String,Object> params) throws Exception {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        Page<ImUserFriend> pageInfo = PageUtil.getPageInfo(params);
+        IPage<ImUserFriend> iPage = imUserFriendService.getBaseMapper().selectPage(pageInfo, Wrappers.<ImUserFriend>query().lambda()
+                .or(e->e.eq(ImUserFriend::getFriendId, params.get("search"))
+                        .like(ImUserFriend::getFriendNickname, params.get("search")))
+                .eq(ImUserFriend::getUserId,sysUser.getId()).orderByDesc(ImUserFriend::getCreateTime));
+        return succeed(PageUtil.pageInfo(iPage));
+    }
+}
+

+ 73 - 0
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImGroupNoticeController.java

@@ -0,0 +1,73 @@
+package com.yonge.cooleshow.teacher.controller;
+
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yonge.cooleshow.biz.dal.entity.ImGroupNotice;
+import com.yonge.cooleshow.biz.dal.service.ImGroupNoticeService;
+import com.yonge.cooleshow.biz.dal.support.PageUtil;
+import com.yonge.cooleshow.common.controller.BaseController;
+import com.yonge.cooleshow.common.entity.HttpResponseResult;
+import com.yonge.cooleshow.common.page.PageInfo;
+import com.yonge.toolset.utils.validator.ValidationKit;
+import io.swagger.annotations.*;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import java.util.Map;
+
+/**
+ * 群公告(ImGroupNotice)表控制层
+ *
+ * @author zx
+ * @since 2022-03-22 10:45:58
+ */
+@Api(tags = "群公告")
+@RestController
+@RequestMapping("/imGroupNotice")
+public class ImGroupNoticeController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private ImGroupNoticeService imGroupNoticeService;
+
+    @ApiOperation("新增群公告")
+    @PostMapping(value = "/create")
+    public HttpResponseResult<Boolean> create(@Valid @RequestBody ImGroupNotice imGroupNotice, BindingResult bindingResult){
+        ValidationKit.ignoreFields(bindingResult,"id");
+        imGroupNoticeService.create(imGroupNotice);
+        return succeed();
+    }
+
+    @ApiOperation("删除群公告")
+    @PostMapping(value = "/del/{noticeId}")
+    public HttpResponseResult<Boolean> del(@ApiParam(value = "群公告编号", required = true) @PathVariable("noticeId") Long noticeId){
+        imGroupNoticeService.del(noticeId);
+        return succeed();
+    }
+
+    @ApiOperation("修改群公告")
+    @PostMapping(value = "/update")
+    public HttpResponseResult<Boolean> modify(@Valid @RequestBody ImGroupNotice imGroupNotice){
+        imGroupNoticeService.modify(imGroupNotice);
+        return succeed();
+    }
+
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "groupId", dataType = "Long", value = "群编号",required = true)
+    })
+    @ApiOperation("分页查询")
+    @PostMapping(value = "/queryPage")
+    public HttpResponseResult<PageInfo<ImGroupNotice>> queryPage(@RequestBody Map<String,Object> params) throws Exception {
+        Page<ImGroupNotice> pageInfo = PageUtil.getPageInfo(params);
+        IPage<ImGroupNotice> iPage = imGroupNoticeService.getBaseMapper().selectPage(pageInfo, Wrappers.<ImGroupNotice>query().lambda()
+                .eq(ImGroupNotice::getGroupId,params.get("groupId"))
+                .orderByDesc(ImGroupNotice::getCreateTime));
+        return succeed(PageUtil.pageInfo(iPage));
+    }
+}
+

+ 2 - 1
cooleshow-user/user-teacher/src/main/java/com/yonge/cooleshow/teacher/controller/ImUserFriendController.java

@@ -6,6 +6,7 @@ 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.ImGroupNotice;
 import com.yonge.cooleshow.biz.dal.entity.ImUserFriend;
 import com.yonge.cooleshow.biz.dal.service.ImUserFriendService;
 import com.yonge.cooleshow.biz.dal.support.PageUtil;
@@ -54,7 +55,7 @@ public class ImUserFriendController extends BaseController {
         IPage<ImUserFriend> iPage = imUserFriendService.getBaseMapper().selectPage(pageInfo, Wrappers.<ImUserFriend>query().lambda()
                 .or(e->e.eq(ImUserFriend::getFriendId, params.get("search"))
                         .like(ImUserFriend::getFriendNickname, params.get("search")))
-                .eq(ImUserFriend::getUserId,sysUser.getId()));
+                .eq(ImUserFriend::getUserId,sysUser.getId()).orderByDesc(ImUserFriend::getCreateTime));
         return succeed(PageUtil.pageInfo(iPage));
     }
 }