浏览代码

Merge remote-tracking branch 'origin/master'

Joburgess 4 年之前
父节点
当前提交
902f135d78
共有 69 个文件被更改,包括 2801 次插入594 次删除
  1. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 31 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupDao.java
  3. 21 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupMemberDao.java
  4. 14 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupNoticeDao.java
  5. 24 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImUserFriendDao.java
  6. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloseMusicGroupDto.java
  7. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImGroupMemberDto.java
  8. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImGroupNoticeDto.java
  9. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImUserFriendDto.java
  10. 123 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroup.java
  11. 102 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMember.java
  12. 91 86
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupNotice.java
  13. 101 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImUserFriend.java
  14. 6 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderStudentDetail.java
  15. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MusicGroupStatusEnum.java
  16. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SporadicChargeTypeEnum.java
  17. 0 26
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/GroupNoticeQueryInfo.java
  18. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ImGroupNoticeQueryInfo.java
  19. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentPaymentOrderQueryInfo.java
  20. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  21. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java
  22. 61 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java
  23. 12 2
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupNoticeService.java
  24. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java
  25. 53 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImUserFriendService.java
  26. 14 12
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  27. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  28. 92 97
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  29. 101 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  30. 30 21
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  31. 5 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  32. 11 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  33. 0 16
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  34. 12 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  35. 204 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  36. 36 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupNoticeServiceImpl.java
  37. 122 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  38. 84 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java
  39. 4 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  40. 79 28
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  41. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java
  42. 10 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OnlineMusicGroupServiceImpl.java
  43. 0 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  44. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  45. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  46. 41 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  47. 29 40
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  48. 14 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  49. 127 0
      mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  50. 139 0
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  51. 98 79
      mec-biz/src/main/resources/config/mybatis/ImGroupNoticeMapper.xml
  52. 108 0
      mec-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml
  53. 3 0
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  54. 2 1
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  55. 2 1
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  56. 17 13
      mec-client-api/src/main/java/com/ym/mec/im/ImFeignService.java
  57. 47 0
      mec-client-api/src/main/java/com/ym/mec/im/entity/GroupMember.java
  58. 71 0
      mec-client-api/src/main/java/com/ym/mec/im/entity/GroupModel.java
  59. 16 12
      mec-client-api/src/main/java/com/ym/mec/im/fallback/ImFeignServiceFallback.java
  60. 1 3
      mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImGroupModel.java
  61. 12 13
      mec-student/src/main/java/com/ym/mec/student/controller/CourseController.java
  62. 98 0
      mec-student/src/main/java/com/ym/mec/student/controller/ImGroupController.java
  63. 3 3
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java
  64. 132 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java
  65. 8 11
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  66. 143 0
      mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java
  67. 8 0
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  68. 12 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java
  69. 12 13
      mec-web/src/main/java/com/ym/mec/web/controller/education/ImGroupNoticeController.java

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -9,6 +9,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -1678,6 +1679,15 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<Map<String, Integer>> querySubCourseNumMap(@Param("classGroupId") Integer classGroupId);
 
     /**
+     * 获取班级剩余的课程类型和课程总时长
+     *
+     * @param classGroupId
+     * @return
+     * @author zouxuan
+     */
+    List<Map<String, BigDecimal>> querySubCourseTimeMap(@Param("classGroupId") Integer classGroupId);
+
+    /**
      * 获取所选班级最大剩余课时
      *
      * @param classGroupIds
@@ -1731,4 +1741,12 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @author zouxuan
      */
     int countStudentNoStartCourse(Map<String, Object> params);
+
+    /**
+     * 根据班级编号和课程编号获取课程列表
+     * @param classGroupId
+     * @param allLockCourseIds
+     * @return
+     */
+    List<CourseSchedule> findCoursesByClassGroupIdAndCourseIds(@Param("classGroupId") Long classGroupId, @Param("allLockCourseIds") List<Long> allLockCourseIds);
 }

+ 31 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupDao.java

@@ -0,0 +1,31 @@
+package com.ym.mec.biz.dal.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface ImGroupDao extends BaseDAO<Long, ImGroup> {
+
+	ImGroup getLocked(Long imGroupId);
+
+	/**
+	 * 查询用户所在的群列表
+	 * @param userId
+	 * @param search
+	 * @return
+	 */
+	List<ImGroup> queryByUserId(@Param("userId") Integer userId, @Param("search") String search);
+
+	/**
+	 * 查询群成员列表
+	 * @param imGroupId
+	 * @return
+	 */
+	List<ImGroupMemberDto> queryMemberById(Long imGroupId);
+
+	ImGroupMemberDto queryMember(@Param("imGroupId") Long imGroupId, @Param("userId") Integer userId);
+}

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupMemberDao.java

@@ -0,0 +1,21 @@
+package com.ym.mec.biz.dal.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.ym.mec.biz.dal.entity.ImGroupMember;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface ImGroupMemberDao extends BaseDAO<Long, ImGroupMember> {
+
+	int deleteByImGroupId(Long imGroupId);
+
+	int batchDelete(List<ImGroupMember> imGroupMemberList);
+
+	List<ImGroupMember> queryByImGroupIdAndUserId(@Param("imGroupIdList") String imGroupIdList, @Param("userIdList") String userIdList);
+	
+	int batchUpdate(List<ImGroupMember> imGroupMemberList);
+	
+	int batchInsert(List<ImGroupMember> imGroupMemberList);
+}

+ 14 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupNoticeDao.java

@@ -1,14 +1,22 @@
 package com.ym.mec.biz.dal.dao;
 
+import java.util.List;
+import java.util.Map;
+
+import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
 import com.ym.mec.biz.dal.entity.ImGroupNotice;
 import com.ym.mec.common.dal.BaseDAO;
 
 public interface ImGroupNoticeDao extends BaseDAO<Long, ImGroupNotice> {
 
-
-    /**
-     * 获取最新一条群公告
-     * @return
-     */
-    ImGroupNotice getNewNotice(Long groupId);
+	/**
+	 * 查询最新的群公告
+	 * @param imGroupId
+	 * @return
+	 */
+	ImGroupNoticeDto queryLatestNotice(Long imGroupId);
+	
+	List<ImGroupNoticeDto> queryForPage(Map<String, Object> params);
+	
+	int deleteByImGroupId(Long imGroupId);
 }

+ 24 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImUserFriendDao.java

@@ -0,0 +1,24 @@
+package com.ym.mec.biz.dal.dao;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+
+import com.ym.mec.biz.dal.dto.ImUserFriendDto;
+import com.ym.mec.biz.dal.entity.ImUserFriend;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface ImUserFriendDao extends BaseDAO<Long, ImUserFriend> {
+
+	ImUserFriend query(@Param("userId") Integer userId, @Param("friendId") Integer friendId);
+
+	/**
+	 * 根据条件查询指定用户的好友列表
+	 * @param userId 指定用户的编号
+	 * @param search 搜索条件
+	 * @return
+	 */
+	List<ImUserFriendDto> queryFriendListByUserId(@Param("userId") Integer userId, @Param("search") String search);
+
+	ImUserFriendDto queryFriendDetail(@Param("userId") Integer userId, @Param("friendUserId") Integer friendUserId);
+}

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CloseMusicGroupDto.java

@@ -0,0 +1,32 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Map;
+
+public class CloseMusicGroupDto {
+
+    @ApiModelProperty(value = "乐团id", required = true)
+    private String musicGroupId;
+
+
+    @ApiModelProperty(value = "用户退的金额", required = true)
+    private Map<Integer, BigDecimal> userReBack;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public Map<Integer, BigDecimal> getUserReBack() {
+        return userReBack;
+    }
+
+    public void setUserReBack(Map<Integer, BigDecimal> userReBack) {
+        this.userReBack = userReBack;
+    }
+}

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImGroupMemberDto.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ImGroupMember;
+
+public class ImGroupMemberDto extends ImGroupMember {
+
+	private SysUser user = new SysUser();
+
+	public SysUser getUser() {
+		return user;
+	}
+
+	public void setUser(SysUser user) {
+		this.user = user;
+	}
+}

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImGroupNoticeDto.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ImGroupNotice;
+
+public class ImGroupNoticeDto extends ImGroupNotice {
+
+	private SysUser user = new SysUser();
+
+	public SysUser getUser() {
+		return user;
+	}
+
+	public void setUser(SysUser user) {
+		this.user = user;
+	}
+}

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ImUserFriendDto.java

@@ -0,0 +1,18 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ImUserFriend;
+
+public class ImUserFriendDto extends ImUserFriend {
+
+	private SysUser friend = new SysUser();
+
+	public SysUser getFriend() {
+		return friend;
+	}
+
+	public void setFriend(SysUser friend) {
+		this.friend = friend;
+	}
+
+}

+ 123 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroup.java

@@ -0,0 +1,123 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(im_group):
+ */
+public class ImGroup {
+
+	/**  */
+	private Long id;
+	
+	/** 群名称 */
+	private String name;
+	
+	/** 群介绍 */
+	private String introduce;
+	
+	/** 群成员数 */
+	private Integer memberNum;
+	
+	/** 群备注 */
+	private String memo;
+	
+	/** 群标签 */
+	private String tags;
+	
+	private String img;
+	
+	private String type;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setName(String name){
+		this.name = name;
+	}
+	
+	public String getName(){
+		return this.name;
+	}
+			
+	public void setIntroduce(String introduce){
+		this.introduce = introduce;
+	}
+	
+	public String getIntroduce(){
+		return this.introduce;
+	}
+			
+	public void setMemberNum(Integer memberNum){
+		this.memberNum = memberNum;
+	}
+	
+	public Integer getMemberNum(){
+		return this.memberNum;
+	}
+			
+	public void setMemo(String memo){
+		this.memo = memo;
+	}
+	
+	public String getMemo(){
+		return this.memo;
+	}
+			
+	public void setTags(String tags){
+		this.tags = tags;
+	}
+	
+	public String getTags(){
+		return this.tags;
+	}
+			
+	public String getImg() {
+		return img;
+	}
+
+	public void setImg(String img) {
+		this.img = img;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public void setType(String type) {
+		this.type = type;
+	}
+
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 102 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupMember.java

@@ -0,0 +1,102 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(im_group_member):
+ */
+public class ImGroupMember {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Long imGroupId;
+	
+	/**  */
+	private Integer userId;
+	
+	private String nickname;
+	
+	/** 是否是管理员 */
+	private boolean isAdmin;
+	
+	/** 群角色 */
+	private String roleType;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setImGroupId(Long imGroupId){
+		this.imGroupId = imGroupId;
+	}
+	
+	public Long getImGroupId(){
+		return this.imGroupId;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public String getNickname() {
+		return nickname;
+	}
+
+	public void setNickname(String nickname) {
+		this.nickname = nickname;
+	}
+
+	public void setIsAdmin(boolean isAdmin){
+		this.isAdmin = isAdmin;
+	}
+	
+	public boolean getIsAdmin(){
+		return this.isAdmin;
+	}
+			
+	public void setRoleType(String roleType){
+		this.roleType = roleType;
+	}
+	
+	public String getRoleType(){
+		return this.roleType;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 91 - 86
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImGroupNotice.java

@@ -1,120 +1,125 @@
 package com.ym.mec.biz.dal.entity;
 
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-
-import java.util.Date;
+import org.apache.commons.lang3.builder.ToStringBuilder;
 
 /**
  * 对应数据库表(im_group_notice):
  */
 public class ImGroupNotice {
-	private Long id;
 
+	/**  */
+	private Long id;
+	
+	/**  */
 	private Long imGroupId;
-
-	private Long operatorId;
-
+	
+	/** 标题 */
 	private String title;
-
+	
+	/** 内容 */
 	private String content;
-
-	private String realName;
-
-	private String avatar;
-
-	private Integer isTop;
-
-	private Date createTime;
-
-	private Date updateTime;
-
-	private Integer delFlag = 0;
-
-	public String getRealName() {
-		return realName;
+	
+	/** 是否置顶 */
+	private boolean isTop;
+	
+	/** 是否发送给新人 */
+	private boolean isSentToNewMember;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	/**  */
+	private boolean delFlag;
+	
+	/** 操作人 */
+	private Long operatorId;
+	
+	public void setId(Long id){
+		this.id = id;
 	}
-
-	public void setRealName(String realName) {
-		this.realName = realName;
+	
+	public Long getId(){
+		return this.id;
 	}
-
-	public String getAvatar() {
-		return avatar;
+			
+	public void setImGroupId(Long imGroupId){
+		this.imGroupId = imGroupId;
 	}
-
-	public void setAvatar(String avatar) {
-		this.avatar = avatar;
+	
+	public Long getImGroupId(){
+		return this.imGroupId;
 	}
-
-	public Long getOperatorId() {
-		return operatorId;
+			
+	public void setTitle(String title){
+		this.title = title;
 	}
-
-	public void setOperatorId(Long operatorId) {
-		this.operatorId = operatorId;
+	
+	public String getTitle(){
+		return this.title;
 	}
-
-	public Long getId() {
-		return id;
+			
+	public void setContent(String content){
+		this.content = content;
 	}
-
-	public void setId(Long id) {
-		this.id = id;
+	
+	public String getContent(){
+		return this.content;
 	}
-
-	public Long getImGroupId() {
-		return imGroupId;
+			
+	public void setIsTop(boolean isTop){
+		this.isTop = isTop;
 	}
-
-	public void setImGroupId(Long imGroupId) {
-		this.imGroupId = imGroupId;
+	
+	public boolean isIsTop(){
+		return this.isTop;
 	}
-
-	public String getTitle() {
-		return title;
+			
+	public void setIsSentToNewMember(boolean isSentToNewMember){
+		this.isSentToNewMember = isSentToNewMember;
 	}
-
-	public void setTitle(String title) {
-		this.title = title;
+	
+	public boolean isIsSentToNewMember(){
+		return this.isSentToNewMember;
 	}
-
-	public String getContent() {
-		return content;
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
 	}
-
-	public void setContent(String content) {
-		this.content = content;
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
 	}
-
-	public Date getCreateTime() {
-		return createTime;
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
 	}
-
-	public void setCreateTime(Date createTime) {
-		this.createTime = createTime;
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
 	}
-
-	public Date getUpdateTime() {
-		return updateTime;
+			
+	public void setDelFlag(boolean delFlag){
+		this.delFlag = delFlag;
 	}
-
-	public void setUpdateTime(Date updateTime) {
-		this.updateTime = updateTime;
+	
+	public boolean isDelFlag(){
+		return this.delFlag;
 	}
-
-	public Integer getIsTop() {
-		return isTop;
+			
+	public void setOperatorId(Long operatorId){
+		this.operatorId = operatorId;
 	}
-
-	public void setIsTop(Integer isTop) {
-		this.isTop = isTop;
+	
+	public Long getOperatorId(){
+		return this.operatorId;
 	}
-
-	public Integer getDelFlag() {
-		return delFlag;
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
 	}
 
-	public void setDelFlag(Integer delFlag) {
-		this.delFlag = delFlag;
-	}
 }

+ 101 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ImUserFriend.java

@@ -0,0 +1,101 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(im_user_friend):
+ */
+public class ImUserFriend {
+
+	/**  */
+	private Long id;
+
+	/** 用户编号 */
+	private Integer userId;
+
+	/** 好友编号 */
+	private Integer friendId;
+
+	/** 好友昵称 */
+	private String friendNickname;
+	
+	private String memo;
+	
+	private String tags;
+
+	/**  */
+	private java.util.Date createTime;
+
+	/**  */
+	private java.util.Date updateTime;
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getId() {
+		return this.id;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Integer getUserId() {
+		return this.userId;
+	}
+
+	public void setFriendId(Integer friendId) {
+		this.friendId = friendId;
+	}
+
+	public Integer getFriendId() {
+		return this.friendId;
+	}
+
+	public void setFriendNickname(String friendNickname) {
+		this.friendNickname = friendNickname;
+	}
+
+	public String getFriendNickname() {
+		return this.friendNickname;
+	}
+
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
+	public String getTags() {
+		return tags;
+	}
+
+	public void setTags(String tags) {
+		this.tags = tags;
+	}
+
+	public java.util.Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(java.util.Date createTime) {
+		this.createTime = createTime;
+	}
+
+	public java.util.Date getUpdateTime() {
+		return updateTime;
+	}
+
+	public void setUpdateTime(java.util.Date updateTime) {
+		this.updateTime = updateTime;
+	}
+
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 6 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalenderStudentDetail.java

@@ -29,7 +29,7 @@ public class MusicGroupPaymentCalenderStudentDetail {
 	private String courseType;
 	
 	/** 课程时长 */
-	private Long courseTime;
+	private Integer courseTime;
 	
 	/** 班级编号 */
 	private Integer classGroupId;
@@ -99,11 +99,11 @@ public class MusicGroupPaymentCalenderStudentDetail {
 		return this.courseType;
 	}
 
-	public Long getCourseTime() {
+	public Integer getCourseTime() {
 		return courseTime;
 	}
 
-	public void setCourseTime(Long courseTime) {
+	public void setCourseTime(Integer courseTime) {
 		this.courseTime = courseTime;
 	}
 
@@ -143,6 +143,7 @@ public class MusicGroupPaymentCalenderStudentDetail {
 	public String toString() {
 		return "MusicGroupPaymentCalenderStudentDetail{" +
 				"userId=" + userId +
+				", courseOriginalPrice=" + courseOriginalPrice +
 				", courseCurrentPrice=" + courseCurrentPrice +
 				", courseType='" + courseType + '\'' +
 				", classGroupId=" + classGroupId +
@@ -155,6 +156,7 @@ public class MusicGroupPaymentCalenderStudentDetail {
 		if (o == null || getClass() != o.getClass()) return false;
 		MusicGroupPaymentCalenderStudentDetail that = (MusicGroupPaymentCalenderStudentDetail) o;
 		return userId.equals(that.userId) &&
+				courseOriginalPrice.equals(that.courseOriginalPrice) &&
 				courseCurrentPrice.equals(that.courseCurrentPrice) &&
 				courseType.equals(that.courseType) &&
 				classGroupId.equals(that.classGroupId);
@@ -162,6 +164,6 @@ public class MusicGroupPaymentCalenderStudentDetail {
 
 	@Override
 	public int hashCode() {
-		return Objects.hash(userId, courseCurrentPrice, courseType, classGroupId);
+		return Objects.hash(userId, courseOriginalPrice, courseCurrentPrice, courseType, classGroupId);
 	}
 }

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MusicGroupStatusEnum.java

@@ -6,7 +6,8 @@ public enum MusicGroupStatusEnum implements BaseEnum<String, MusicGroupStatusEnu
 	DRAFT("DRAFT", "草稿"), FEE_AUDIT("FEE_AUDIT","费用审核中"), AUDIT("AUDIT", "审核中"),
 	AUDIT_FAILED("AUDIT_FAILED", "审核失败"), APPLY("APPLY", "报名中"),
 	PAY("PAY", "缴费中"), PREPARE("PREPARE", "筹备中"),
-	PROGRESS("PROGRESS", "进行中"), CANCELED("CANCELED", "取消"), PAUSE("PAUSE", "暂停");
+	PROGRESS("PROGRESS", "进行中"), CANCELED("CANCELED", "取消"), PAUSE("PAUSE", "暂停"),
+	CLOSE("CLOSE", "关闭");
 
 	private String code;
 	private String msg;

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SporadicChargeTypeEnum.java

@@ -14,7 +14,8 @@ public enum SporadicChargeTypeEnum implements BaseEnum<Integer, SporadicChargeTy
     RECHARGE(9,"账户充值"),
     MUSIC_UPKEEP(10,"乐保服务"),
     OTHER(11,"其他"),
-    DOUBLE_ELEVEN2020(12,"2020双十一活动");
+    DOUBLE_ELEVEN2020(12,"2020双十一活动"),
+    HIGH_ONLINE_ACTIVITY(13,"网基课活动");
 
     private Integer code;
 

+ 0 - 26
mec-biz/src/main/java/com/ym/mec/biz/dal/page/GroupNoticeQueryInfo.java

@@ -1,26 +0,0 @@
-package com.ym.mec.biz.dal.page;
-
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.common.page.QueryInfo;
-
-public class GroupNoticeQueryInfo extends QueryInfo {
-    private Long groupId;
-
-    private YesOrNoEnum isTop;
-
-    public Long getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(Long groupId) {
-        this.groupId = groupId;
-    }
-
-    public YesOrNoEnum getIsTop() {
-        return isTop;
-    }
-
-    public void setIsTop(YesOrNoEnum isTop) {
-        this.isTop = isTop;
-    }
-}

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ImGroupNoticeQueryInfo.java

@@ -0,0 +1,16 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+public class ImGroupNoticeQueryInfo extends QueryInfo {
+    private Long groupId;
+
+    public Long getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(Long groupId) {
+        this.groupId = groupId;
+    }
+
+}

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentPaymentOrderQueryInfo.java

@@ -61,6 +61,10 @@ public class StudentPaymentOrderQueryInfo extends QueryInfo {
 
     private List<Integer> userIds;
 
+    //不包含淘气
+    @ApiModelProperty(value = "传时不包含淘气",required = false)
+    private Integer noneTqType;//TQ 1-不包含淘气
+
     private boolean isExport = false;
 
     public boolean getIsExport() {
@@ -214,4 +218,12 @@ public class StudentPaymentOrderQueryInfo extends QueryInfo {
     public void setLessBalancePaymentAmount(BigDecimal lessBalancePaymentAmount) {
         this.lessBalancePaymentAmount = lessBalancePaymentAmount;
     }
+
+    public Integer getNoneTqType() {
+        return noneTqType;
+    }
+
+    public void setNoneTqType(Integer noneTqType) {
+        this.noneTqType = noneTqType;
+    }
 }

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

@@ -543,5 +543,5 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param courseIds
      * @param classGroupStudents
      */
-    void spanGroupClassAdjustPass(Integer masterClassGroupId,List<Integer> studentIds,List<Long> courseIds,List<Map<Integer, String>> classGroupStudents);
+    void spanGroupClassAdjustPass(Integer masterClassGroupId,List<Integer> studentIds,List<Long> courseIds,List<Map<Integer, String>> classGroupStudents,List<Long> allLockCourseIds,String batchNo);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java

@@ -89,4 +89,14 @@ public interface ClassGroupStudentMapperService extends BaseService<Long, ClassG
      */
     void updateClassGroupStudents(Long classGroupId, Set<Integer> studentIds);
 
+    /**
+     * @describe 更新班级学员
+     * @author Joburgess
+     * @date 2020.11.04
+     * @param classGroupId:
+     * @param studentIds:
+     * @return void
+     */
+    void updateClassGroupStudents1(Long classGroupId, List<Integer> studentIds,List<Long> allLockCourseIds,String batchNo);
+
 }

+ 61 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java

@@ -0,0 +1,61 @@
+package com.ym.mec.biz.service;
+
+import java.util.List;
+import java.util.Map;
+
+import com.ym.mec.biz.dal.entity.ImGroupMember;
+import com.ym.mec.common.service.BaseService;
+
+public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
+
+	/**
+	 * 加入群组
+	 * @param imGroupId 群编号
+	 * @param userId 用户编号
+	 * @param roleType 角色类型
+	 * @param isAdmin 是否是管理员
+	 * @return
+	 */
+	boolean join(Long imGroupId, Integer userId, String roleType, boolean isAdmin);
+
+	/**
+	 * 批量加入群组
+	 * @param imGroupId 群组编号
+	 * @param userRoleMap key-用户编号  value-角色类型
+	 * @return
+	 */
+	boolean join(Long imGroupId, Map<Integer, String> userRoleMap);
+
+	/**
+	 * 指定用户退出群组
+	 * @param imGroupId 群组编号
+	 * @param userId 指定的用户编号
+	 * @return
+	 */
+	boolean quit(Long imGroupId, Integer userId);
+
+	/**
+	 * 退出指定群组
+	 * @param imGroupIdList 群组编号列表
+	 * @param userId 用户编号
+	 * @return
+	 */
+	boolean quit(List<Long> imGroupIdList, Integer userId);
+
+	/**
+	 * 用户批量退出群组
+	 * @param imGroupId 群组编号
+	 * @param userIdList 学生编号
+	 * @return
+	 */
+	boolean quit(Long imGroupId, List<Integer> userIdList);
+
+	/**
+	 * 修改角色类型
+	 * @param imGroupId 群组编号
+	 * @param userId 用户编号
+	 * @param roleType 角色类型
+	 * @return
+	 */
+	boolean updateRoleType(Long imGroupId, Integer userId, String roleType);
+}

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

@@ -1,9 +1,19 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
 import com.ym.mec.biz.dal.entity.ImGroupNotice;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 public interface ImGroupNoticeService extends BaseService<Long, ImGroupNotice> {
+	
+	PageInfo<ImGroupNoticeDto> queryPage(ImGroupNoticeQueryInfo queryInfo);
 
-    ImGroupNotice getNewNotice(Long groupId);
-}
+	/**
+	 * 查询最新的群公告
+	 * @param imGroupId
+	 * @return
+	 */
+	ImGroupNoticeDto queryLatestNotice(Long imGroupId);
+}

+ 54 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.service;
+
+import java.util.List;
+
+import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.common.service.BaseService;
+
+public interface ImGroupService extends BaseService<Long, ImGroup> {
+
+	/**
+	 * 创建群组
+	 * @param id 群编号
+	 * @param userId 创建人编号
+	 * @param name 群名称
+	 * @param introduce 群介绍
+	 * @param memo 群备注
+	 * @param tags 群标签
+	 * @param img 群图像
+	 * @param type 群类型
+	 * @return
+	 */
+	boolean create(Long id, Integer userId, String name, String introduce, String memo, String tags, String img, String type);
+
+	/**
+	 * 解散群组
+	 * @param imGroupId
+	 * @return
+	 */
+	boolean cancel(Long imGroupId);
+
+	/**
+	 * 查询用户所在的群列表
+	 * @param userId
+	 * @param search
+	 * @return
+	 */
+	List<ImGroup> queryByUserId(Integer userId, String search);
+
+	/**
+	 * 查询群成员列表
+	 * @param imGroupId
+	 * @return
+	 */
+	List<ImGroupMemberDto> queryMemberById(Long imGroupId);
+
+	/**
+	 * 查询指定用户在群众的信息
+	 * @param imGroupId 群编号
+	 * @param userId 指定的用户编号
+	 * @return
+	 */
+	ImGroupMemberDto queryMember(Long imGroupId, Integer userId);
+}

+ 53 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ImUserFriendService.java

@@ -0,0 +1,53 @@
+package com.ym.mec.biz.service;
+
+import java.util.List;
+
+import com.ym.mec.biz.dal.dto.ImUserFriendDto;
+import com.ym.mec.biz.dal.entity.ImUserFriend;
+import com.ym.mec.common.service.BaseService;
+
+public interface ImUserFriendService extends BaseService<Long, ImUserFriend> {
+
+	/**
+	 * 添加好友
+	 * @param userId 用户编号
+	 * @param friendUserId 好友编号
+	 * @param nickname 昵称
+	 * @param memo 备注
+	 * @return
+	 */
+	boolean addFriend(Integer userId, Integer friendUserId, String nickname, String memo);
+
+	/**
+	 * 删除好友
+	 * @param userId 用户编号
+	 * @param friendUserId 好友编号
+	 * @return
+	 */
+	boolean deleteFriend(Integer userId, Integer friendUserId);
+
+	/**
+	 * 修改好友昵称
+	 * @param userId 用户编号
+	 * @param friendUserId 好友编号
+	 * @param nickname 昵称
+	 * @return
+	 */
+	boolean updateFriendNickname(Integer userId, Integer friendUserId, String nickname);
+
+	/**
+	 * 根据条件查询指定用户的好友列表
+	 * @param userId 指定用户的编号
+	 * @param search 搜索条件
+	 * @return
+	 */
+	List<ImUserFriendDto> queryFriendListByUserId(Integer userId, String search);
+
+	/**
+	 * 查询当前用户的好友详情
+	 * @param userId 当前用户编号
+	 * @param friendUserId 好友编号
+	 * @return
+	 */
+	ImUserFriendDto queryFriendDetail(Integer userId, Integer friendUserId);
+}

+ 14 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -7,13 +7,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import com.ym.mec.biz.dal.dto.BasicUserDto;
-import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
-import com.ym.mec.biz.dal.dto.MusicCardDto;
-import com.ym.mec.biz.dal.dto.RegisterPayDto;
-import com.ym.mec.biz.dal.dto.SporadicPayDto;
-import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
-import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ApprovalStatus;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
@@ -77,7 +71,7 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @param musicGroupId 乐团编号
 	 */
 	boolean cancelMusicGroup(String musicGroupId);
-	
+
 	/**
 	 * 删除乐团
 	 * @param musicGroupId 乐团编号
@@ -120,7 +114,7 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * @return
 	 */
 	boolean applyQuitMusicGroup(String musicGroupId, String reason);
-	
+
 	/**
 	 * 取消退团
 	 * @param userId
@@ -320,9 +314,17 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 
 	/**
 	 * 给乐团添加报名学生
-	 * @param musicGroupId
-	 * @param registerIds
-	 * @return
+	 * @param musicGroupId 乐团id
+	 * @param registerIds 学员注册id
+	 * @return 添加学员记录
 	 */
 	List<StudentRegistration> addMusicGroupRegs(String musicGroupId,List<Long> registerIds);
+
+
+	/**
+	 * 关闭乐团
+	 * @param closeMusicGroupDto 乐团关闭信息
+	 * @return 关闭结果
+	 */
+	Boolean closeMusicGroup(CloseMusicGroupDto closeMusicGroupDto);
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java

@@ -328,4 +328,12 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      */
     List<StudentMusicGroupDto> queryStudentMusicGroupInfo(Integer userId);
 
+
+    /**
+     * 删除学生报名
+     * @param id
+     * @return
+     */
+    Boolean delReg(Long id);
+
 }

+ 92 - 97
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -131,7 +131,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     @Autowired
     private StudentRegistrationService studentRegistrationService;
     @Autowired
-    private ImFeignService imFeignService;
+    private ImGroupMemberService imGroupMemberService;
+    @Autowired
+    private ImGroupService imGroupService;
     @Autowired
     private CourseScheduleService courseScheduleService;
     @Autowired
@@ -476,7 +478,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 for (ClassGroup classGroup : classGroups) {
                     imGroupModelList.add(new ImGroupModel(classGroup.getId().toString(), null, classGroup.getName()));
                 }
-                imFeignService.groupBatchDismiss(imGroupModelList);
+                //imFeignService.groupBatchDismiss(imGroupModelList);
             }
 
             List<CourseSchedule> courseScheduleList = new ArrayList<>();
@@ -575,7 +577,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
 
             // 加入Im群组
-            batchAddImGroup(classGroupImGroupList);
+            //batchAddImGroup(classGroupImGroupList);
             classGroupTeacherMapperService.classGroupTeachersInsert(classGroupTeacherMapperList);
             // 检测新排课冲突
             courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, false);
@@ -1087,8 +1089,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         //5、加入班级群组
-        ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(userId.toString())};
-        imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+        imGroupMemberService.join(classGroup.getId().longValue(), userId, null, false);
 
         return classGroup;
     }
@@ -1234,8 +1235,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
 
             // 5、加入班级群组
-            ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentId.toString())};
-            imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+            imGroupMemberService.join(classGroup.getId().longValue(), studentId, null, false);
 
         }
 
@@ -1296,7 +1296,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //删除班级
         classGroupDao.delete(classGroupId);
         //删除im群组
-        imFeignService.groupQuit(new ImGroupModel(classGroupId.toString(), null, null));
+        imGroupService.cancel(classGroupId.longValue());
     }
 
     @Override
@@ -1318,7 +1318,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         //删除合奏班
         classGroupDao.delete(classGroupId);
         //删除im群组
-        imFeignService.groupQuit(new ImGroupModel(classGroupId.toString(), null, null));
+        imGroupService.cancel(classGroupId.longValue());
     }
 
     @Override
@@ -2209,8 +2209,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (byClassGroup != null && byClassGroup.size() > 0) {
             ClassGroupTeacherMapper groupTeacherMapper = byClassGroup.stream().filter(classGroupTeacherMapper -> classGroupTeacherMapper.getTeacherRole() == TeachTypeEnum.BISHOP).findFirst().get();
             if (groupTeacherMapper != null) {
-                ImGroupMember[] imGroupMembers = {new ImGroupMember(groupTeacherMapper.getUserId().toString())};
-                imFeignService.groupQuit(new ImGroupModel(classGroupId.toString(), imGroupMembers, classGroup.getName()));
+                imGroupMemberService.quit(classGroupId.longValue(), groupTeacherMapper.getUserId());
             }
         }
 
@@ -2219,12 +2218,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             //获取之前的班级老师
             Set<Integer> groupTeacher = classGroupDao.findGroupTeacher(classGroupId);
             groupTeacher.forEach(e -> {
-                ImGroupMember[] imGroupMembers = {new ImGroupMember(e.toString())};
-                imFeignService.groupQuit(new ImGroupModel(classGroupId.toString(), imGroupMembers, classGroup.getName()));
+            	imGroupMemberService.quit(classGroupId.longValue(), e);
             });
             newTeacherMapperList.forEach(e -> {
-                ImGroupMember[] imGroupMembers = {new ImGroupMember(e.getUserId().toString())};
-                imFeignService.groupJoin(new ImGroupModel(classGroupId.toString(), imGroupMembers, classGroup.getName()));
+                imGroupMemberService.join(classGroupId.longValue(), e.getUserId(), null, false);
             });
         }
         if (Objects.nonNull(classGroup4MixDtos.get(0).getCourseAddType()) && classGroup4MixDtos.get(0).getCourseAddType().equals("onlyUpdateTeacher")) {
@@ -2977,14 +2974,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             userIdList.addAll(userIds);
         }
 
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+        Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
         for (Integer userId : userIdList) {
             if (userId == null) continue;
-            imGroupMemberList.add(new ImGroupMember(userId.toString()));
+            
+            userRoleMap.put(userId, "");
         }
-        //创建IM群组
-        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-        imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+        
+        imGroupService.create(classGroup.getId().longValue(), musicGroup.getTeamTeacherId(), classGroup.getName(), musicGroup.getName(), musicGroup.getName(), musicGroup.getName(), null, "MUSIC");
+        imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
         return true;
     }
 
@@ -3022,7 +3020,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             ImGroupModel imGroupModel = new ImGroupModel(classGroupImGroupDto.getClassGroup().getId().toString(), imGroupMembers, classGroupImGroupDto.getClassGroup().getName());
             imGroupModelList.add(imGroupModel);
         }
-        imFeignService.groupBatchCreate(imGroupModelList);
+        //imFeignService.groupBatchCreate(imGroupModelList);
         return true;
     }
 
@@ -3494,7 +3492,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (noRepeatTeacherIds.size() != classGroupTeacherMapperList.size()) {
             throw new BizException("主教与助教存在冲突");
         }
-        //所选班级不能有未开始的临时合并课程
         List<Integer> classGroupIds = mergeClassSplitClassAffirmDto.getClassGroupIds();
         if (classGroupIds == null || classGroupIds.size() == 0) {
             throw new BizException("请填写班级信息");
@@ -3574,9 +3571,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     }
 
     @Override
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public List<MusicGroupPaymentCalenderStudentDetail> queryStudentPaymentCalenders(Integer masterClassGroupId,List<Map<Integer, String>> classGroupStudents,List<Integer> studentIds) {
-        //获取主班剩余时长
-        Map<String, Long> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseNumMap(masterClassGroupId));
+        //获取主班剩余课程时长
+        Map<String, BigDecimal> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseTimeMap(masterClassGroupId));
         if(masterMap.size() <= 0){
             throw new BizException("所选主班没有剩余课程,请重新选择");
         }
@@ -3611,13 +3609,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             if (unitPrice == null) {
                 throw new BizException("分部默认课程类型单价不存在,请设置");
             }
-            Long courseTime = masterMap.get(s);
+            BigDecimal courseTime = masterMap.get(s);
             //获取主班剩余课程价值,按分部默认单价计算
-            if(courseTime == 0l){
-                masterTotalPriceMap.put(s,BigDecimal.ZERO);
-            }
             //总价四舍五入取整
-            BigDecimal totalPrice = unitPrice.multiply(new BigDecimal(courseTime)).setScale(0, BigDecimal.ROUND_HALF_UP);
+            BigDecimal totalPrice = unitPrice.multiply(courseTime).setScale(0, BigDecimal.ROUND_HALF_UP);
             masterTotalPriceMap.put(s,totalPrice);
             //课程余额转移
             for (Integer studentId : studentCLassMap.keySet()) {
@@ -3643,7 +3638,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 //                    bigDecimal = bigDecimal.subtract(totalPrice);
                     surplusCourseFeeMap.put(studentId,bigDecimal.subtract(totalPrice));
                 }
-                calenderDto.setCourseTime(courseTime);
+                calenderDto.setCourseTime(courseTime.intValue());
                 calenderDto.setCourseType(s);
 
                 calenderDto.setPhone(phoneMaps.get(studentId));
@@ -3659,7 +3654,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     @Override
     public BigDecimal getMasterTotalPrice(Integer masterClassGroupId) {
         //获取主班剩余时长
-        Map<String, Long> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseNumMap(masterClassGroupId));
+        Map<String, BigDecimal> masterMap = MapUtil.convertIntegerMap(courseScheduleDao.querySubCourseTimeMap(masterClassGroupId));
         if(masterMap.size() <= 0){
             throw new BizException("所选主班没有剩余课程,请重新选择");
         }
@@ -3674,10 +3669,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             if (unitPrice == null) {
                 throw new BizException("分部默认课程类型单价不存在,请设置");
             }
-            Long courseTime = masterMap.get(s);
+            BigDecimal courseTime = masterMap.get(s);
             //获取主班剩余课程价值,按分部默认单价计算
             //总价四舍五入取整
-            BigDecimal totalPrice = unitPrice.multiply(new BigDecimal(courseTime)).setScale(0, BigDecimal.ROUND_HALF_UP);
+            BigDecimal totalPrice = unitPrice.multiply(courseTime).setScale(0, BigDecimal.ROUND_HALF_UP);
             masterTotalPrice = masterTotalPrice.add(totalPrice);
         }
         return masterTotalPrice;
@@ -3693,7 +3688,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     public void spanGroupMergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         //缴费项目
-        List<MusicGroupPaymentCalenderDto> paymentCalenderDtos = mergeClassSplitClassAffirmDto.getMusicGroupPaymentCalenderDtos();
+        MusicGroupPaymentCalenderDto paymentCalenderDto = mergeClassSplitClassAffirmDto.getMusicGroupPaymentCalenderDtos().get(0);
         //主班
         Integer masterClassGroupId = mergeClassSplitClassAffirmDto.getMasterClassGroupId();
         //学员列表
@@ -3703,6 +3698,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if(hasStudent){
             throw new BizException("操作失败: 主班包含部分已选学员");
         }
+        
         //学员列表
         List<Integer> classGroupIds = mergeClassSplitClassAffirmDto.getClassGroupIds();
         //班级和学员关联
@@ -3713,75 +3709,74 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 studentIds);
         //创建缴费项目
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(masterClassGroupId);
-        MusicGroupPaymentCalender.PaymentCalenderStatusEnum status = null;
-        StringBuffer batchNos = new StringBuffer();
-        List<String> batchNoList = new ArrayList<>();
-        if (paymentCalenderDtos != null && paymentCalenderDtos.size() > 0) {
-            BigDecimal masterTotalPrice = getMasterTotalPrice(masterClassGroupId);
-            //是否有需要审核的缴费项目
-            for (MusicGroupPaymentCalenderDto calenderDto : paymentCalenderDtos) {
-                //将学员加入新乐团、扣除原乐团剩余课程余额、补充到现有乐团
-                studentRegistrationService.insertStudent(calenderDto.getStudentIds(),calenderDto.getMusicGroupId(),musicGroup.getId(),masterTotalPrice);
-                calenderDto.setMusicGroupId(musicGroup.getId());
-                List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = calenderDto.getMusicGroupPaymentCalenderStudentDetails();
-                boolean containsAll = musicGroupPaymentCalenderStudentDetails.containsAll(calenderStudentDetails);
-                if(!containsAll){
-                    calenderDto.setStatus(AUDITING);
-                }else {
-                    calenderDto.setStatus(NO);
-                }
-                calenderDto.setPaymentType(SPAN_GROUP_CLASS_ADJUST);
-                //生成缴费项目
-                calenderDto.setMasterTotalPrice(masterTotalPrice);
-                musicGroupPaymentCalenderService.create(calenderDto);
-                if (batchNos.length() > 0) {
-                    batchNos.append(",");
-                }
-                batchNoList.add(calenderDto.getBatchNo());
-                batchNos.append(calenderDto.getBatchNo());
-                if (status == null || status != AUDITING) {
-                    if(!containsAll){
-                        status = AUDITING;
-                    }
-                }
-            }
-            //记录申请信息
-            MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = new MusicGroupStudentClassAdjust();
-            musicGroupStudentClassAdjust.setMasterClassGroupId(masterClassGroupId);
-            musicGroupStudentClassAdjust.setBatchNo(batchNos.toString());
-            musicGroupStudentClassAdjust.setMusicGroupId(musicGroup.getId());
-            musicGroupStudentClassAdjust.setOperatorId(sysUser.getId());
-            musicGroupStudentClassAdjust.setClassGroupIds(JSON.toJSONString(classGroupIds));
-            musicGroupStudentClassAdjust.setStudentIds(JSON.toJSONString(studentIds));
-            if (classGroupStudents != null && classGroupStudents.size() > 0) {
-                musicGroupStudentClassAdjust.setClassGroupStudents(JSON.toJSONString(mergeClassSplitClassAffirmDto.getClassGroupStudents()));
-            }
-            //获取需要删除的学员关联的课程
-            List<Long> courseIds = courseScheduleDao.queryStudentNotStartByClassIdsAndStudentIds(classGroupIds, studentIds);
-            musicGroupStudentClassAdjust.setSubLockCourseIds(JSON.toJSONString(courseIds));
-            //获取关联的学员缴费信息
-            List<Long> studentPaymentIds = courseScheduleStudentPaymentDao.queryStudentNotStartByClassIdsAndStudentIds(classGroupIds, studentIds);
-            musicGroupStudentClassAdjust.setStudentPaymentIds(JSON.toJSONString(studentPaymentIds));
-            //获取需要冻结的课程
-            classGroupIds.add(masterClassGroupId);
-            List<Long> allLockCourseIds = courseScheduleDao.queryStudentNotStartByClassIdsAndStudentIds(classGroupIds, null);
-            musicGroupStudentClassAdjust.setAllLockCourseIds(JSON.toJSONString(allLockCourseIds));
-            musicGroupStudentClassAdjustDao.insert(musicGroupStudentClassAdjust);
-            //没有需要审核的缴费项目
-            if (status == null) {
-                spanGroupClassAdjustPass(masterClassGroupId,studentIds,courseIds,classGroupStudents);
-            }else {
+        BigDecimal masterTotalPrice = getMasterTotalPrice(masterClassGroupId);
+        //是否有需要审核的缴费项目
+        //将学员加入新乐团、扣除原乐团剩余课程余额、补充到现有乐团
+        for (Map<Integer, String> classGroupStudent : classGroupStudents) {
+            Integer classGroupId = classGroupStudent.keySet().iterator().next();
+            studentRegistrationService.insertStudent(classGroupStudent.get(classGroupId),musicGroupDao.findByClassGroupId(classGroupId).getId(),musicGroup.getId(),masterTotalPrice);
+        }
+
+        paymentCalenderDto.setMusicGroupId(musicGroup.getId());
+        List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = paymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails();
+        boolean containsAll = musicGroupPaymentCalenderStudentDetails.containsAll(calenderStudentDetails);
+        if(!containsAll){
+            paymentCalenderDto.setStatus(AUDITING);
+        }else {
+            paymentCalenderDto.setStatus(NO);
+        }
+        paymentCalenderDto.setPayUserType(MusicGroupPaymentCalender.PayUserType.STUDENT);
+        paymentCalenderDto.setPaymentType(SPAN_GROUP_CLASS_ADJUST);
+        //生成缴费项目
+        paymentCalenderDto.setMasterTotalPrice(masterTotalPrice);
+        paymentCalenderDto.setStudentIds(StringUtils.join(studentIds,","));
+        musicGroupPaymentCalenderService.create(paymentCalenderDto);
+        //记录申请信息
+        MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = new MusicGroupStudentClassAdjust();
+        musicGroupStudentClassAdjust.setMasterClassGroupId(masterClassGroupId);
+        musicGroupStudentClassAdjust.setBatchNo(paymentCalenderDto.getBatchNo());
+        musicGroupStudentClassAdjust.setMusicGroupId(musicGroup.getId());
+        musicGroupStudentClassAdjust.setOperatorId(sysUser.getId());
+        musicGroupStudentClassAdjust.setClassGroupIds(JSON.toJSONString(classGroupIds));
+        musicGroupStudentClassAdjust.setStudentIds(JSON.toJSONString(studentIds));
+        if (classGroupStudents != null && classGroupStudents.size() > 0) {
+            musicGroupStudentClassAdjust.setClassGroupStudents(JSON.toJSONString(mergeClassSplitClassAffirmDto.getClassGroupStudents()));
+        }
+        //获取需要删除的学员关联的课程
+        List<Long> courseIds = courseScheduleDao.queryStudentNotStartByClassIdsAndStudentIds(classGroupIds, studentIds);
+        musicGroupStudentClassAdjust.setSubLockCourseIds(JSON.toJSONString(courseIds));
+        //获取关联的学员缴费信息
+        List<Long> studentPaymentIds = courseScheduleStudentPaymentDao.queryStudentNotStartByClassIdsAndStudentIds(classGroupIds, studentIds);
+        musicGroupStudentClassAdjust.setStudentPaymentIds(JSON.toJSONString(studentPaymentIds));
+        //获取需要冻结的课程
+        classGroupIds.add(masterClassGroupId);
+        //所选班级列表,是否包含已冻结的班级
+        List<ClassGroup> lockClassGroupIds = classGroupDao.findByClassGroupIds(classGroupIds, 1);
+        if (lockClassGroupIds != null && lockClassGroupIds.size() > 0) {
+            throw new BizException("所选班级包含审核中的学员班级调整申请");
+        }
+        //所选班级不能有未开始的临时合并课程
+        int courseNum = courseScheduleDao.findNoStartMasterCourseNum(classGroupIds);
+        if (courseNum > 0) {
+            throw new BizException("所选班级不能有未开始的临时合并课程");
+        }
+        List<Long> allLockCourseIds = courseScheduleDao.queryStudentNotStartByClassIdsAndStudentIds(classGroupIds, null);
+        musicGroupStudentClassAdjust.setAllLockCourseIds(JSON.toJSONString(allLockCourseIds));
+        musicGroupStudentClassAdjustDao.insert(musicGroupStudentClassAdjust);
+        //没有需要审核的缴费项目
+        if (paymentCalenderDto.getStatus() != AUDITING) {
+            spanGroupClassAdjustPass(masterClassGroupId,studentIds,courseIds,classGroupStudents,allLockCourseIds,paymentCalenderDto.getBatchNo());
+        }else {
 //                冻结班级
-                classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
+            classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
 //                冻结所选班级的课程
-                courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1);
-            }
+            courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1);
         }
     }
 
-    public void spanGroupClassAdjustPass(Integer masterClassGroupId,List<Integer> studentIds,List<Long> courseIds,List<Map<Integer, String>> classGroupStudents){
+    public void spanGroupClassAdjustPass(Integer masterClassGroupId,List<Integer> studentIds,List<Long> courseIds,List<Map<Integer, String>> classGroupStudents,List<Long> allLockCourseIds,String batchNo){
         //将学员加进班级未开始的课程,以及班级关联、加群
-        classGroupStudentMapperService.updateClassGroupStudents(masterClassGroupId.longValue(),new HashSet<>(studentIds));
+        classGroupStudentMapperService.updateClassGroupStudents1(masterClassGroupId.longValue(),studentIds,allLockCourseIds,batchNo);
         //删除学员课程
         courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, studentIds);
         //删除班级关联的学员

+ 101 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -5,6 +5,7 @@ import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Date;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -13,9 +14,6 @@ import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.*;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
@@ -23,7 +21,31 @@ import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
 import com.alibaba.fastjson.JSON;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
+import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.dao.OrganizationCourseUnitPriceSettingsDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.ClassGroupRelation;
+import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
+import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
+import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
+import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.service.ClassGroupRelationService;
 import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.ClassGroupStudentMapperService;
@@ -31,6 +53,7 @@ import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
 import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
+import com.ym.mec.biz.service.ImGroupMemberService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.biz.service.TeacherDefaultMusicGroupSalaryService;
 import com.ym.mec.common.dal.BaseDAO;
@@ -38,7 +61,8 @@ import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.im.ImFeignService;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
 
 @Service
@@ -58,7 +82,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
     @Autowired
     private ClassGroupRelationService classGroupRelationService;
     @Autowired
-    private ImFeignService imFeignService;
+    private ImGroupMemberService imGroupMemberService;
     @Autowired
     private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
     @Autowired
@@ -72,6 +96,8 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
     @Autowired
     private CourseScheduleDao courseScheduleDao;
     @Autowired
+    private OrganizationCourseUnitPriceSettingsDao organizationCourseUnitPriceSettingsDao;
+    @Autowired
     private ClassGroupDao classGroupDao;
     @Autowired
     private MusicGroupDao musicGroupDao;
@@ -164,9 +190,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         }
 
         //5、学生退出班级群组
-        ImGroupMember[] imGroupMembers = {new ImGroupMember(userId.toString())};
-        // 退出群组
-        imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+        imGroupMemberService.quit(classGroup.getId().longValue(), userId);
         return true;
     }
 
@@ -237,7 +261,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         //1、班级关系添加
         List<ClassGroupStudentMapper> classGroupStudentMappers = new ArrayList<>();
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+        Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
 
         ClassGroupRelation classGroupRelation = classGroupRelationService.findClassGroupRelation(classGroupId);
 
@@ -264,7 +288,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 studentRegistration.setClassGroupId(classGroupId);
                 studentRegistrationService.update(studentRegistration);
             }
-            imGroupMemberList.add(new ImGroupMember(userId.toString()));
+            userRoleMap.put(userId, "");
         }
         if (classGroupStudentMappers.size() > 0) {
             classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
@@ -340,8 +364,7 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         }
 
         //5、添加进IM群组
-        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-        imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+        imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 
         return true;
     }
@@ -509,24 +532,80 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         if (!CollectionUtils.isEmpty(removeStudentIds)) {
             courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, new ArrayList<>(removeStudentIds));
-            List<ImGroupMember> imGroupMemberList = new ArrayList<>();
-            for (Integer addStudentId : addStudentIds) {
-                imGroupMemberList.add(new ImGroupMember(addStudentId.toString()));
-            }
             //5、学生退出班级群组
-            ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-            imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+            imGroupMemberService.quit(classGroup.getId().longValue(), new ArrayList<Integer>(addStudentIds));
         }
 
         if (!CollectionUtils.isEmpty(addStudentIds)) {
             courseScheduleStudentPaymentService.createForMusicGroup(classGroup.getMusicGroupId(), classGroupNotStartCourse, new ArrayList<>(addStudentIds));
-            List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+            Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
             for (Integer addStudentId : addStudentIds) {
-                imGroupMemberList.add(new ImGroupMember(addStudentId.toString()));
+            	userRoleMap.put(addStudentId, "");
             }
             //5、添加进IM群组
-            ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-            imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+            imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateClassGroupStudents1(Long classGroupId, List<Integer> studentIds,List<Long> allLockCourseIds,String batchNo) {
+        ClassGroup classGroup = classGroupDao.lockClassGroup(classGroupId.intValue());
+        if (Objects.isNull(classGroup)) {
+            throw new BizException("班级信息错误");
+        }
+        List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
+        //获取冻结的课程列表
+        List<CourseSchedule> classGroupNotStartCourse = courseScheduleDao.findCoursesByClassGroupIdAndCourseIds(classGroupId,allLockCourseIds);
+
+        Date now = new Date();
+        List<ClassGroupStudentMapper> classGroupStudentMappers = new ArrayList<>();
+        //获取分布默认的课程类型单价
+        MusicGroup musicGroup = musicGroupDao.findByClassGroupId(classGroupId.intValue());
+        Map<String, BigDecimal> unitPriceMap = MapUtil.convertIntegerMap(organizationCourseUnitPriceSettingsDao.queryMapByOrganIdAndChargeTypeId(musicGroup.getChargeTypeId(), musicGroup.getOrganId()));
+
+        //生成班级关联
+        for (Integer studentId : studentIds) {
+            ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
+            classGroupStudentMapper.setMusicGroupId(classGroup.getMusicGroupId());
+            classGroupStudentMapper.setClassGroupId(classGroupId.intValue());
+            classGroupStudentMapper.setUserId(studentId);
+            classGroupStudentMapper.setCreateTime(now);
+            classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+            classGroupStudentMapper.setGroupType(GroupType.MUSIC);
+            classGroupStudentMappers.add(classGroupStudentMapper);
+            //生成课程关联
+            for (CourseSchedule courseSchedule : classGroupNotStartCourse) {
+                //获取课程时长
+                int minutesBetween = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+                BigDecimal multiply = unitPriceMap.get(courseSchedule.getType().getCode()).multiply(new BigDecimal(minutesBetween));
+                CourseScheduleStudentPayment cssp = new CourseScheduleStudentPayment();
+                cssp.setGroupType(courseSchedule.getGroupType());
+                cssp.setMusicGroupId(courseSchedule.getMusicGroupId());
+                cssp.setCourseScheduleId(courseSchedule.getId());
+                cssp.setClassGroupId(courseSchedule.getClassGroupId());
+                cssp.setBatchNo(batchNo);
+                cssp.setUserId(studentId);
+                cssp.setOriginalPrice(multiply);
+                cssp.setExpectPrice(multiply);
+                cssp.setActualPrice(BigDecimal.ZERO);
+                courseScheduleStudentPayments.add(cssp);
+            }
+        }
+        if (classGroupStudentMappers.size() > 0) {
+            classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
+        }
+        if (courseScheduleStudentPayments.size() > 0) {
+            courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
+        }
+        //修改班级人数
+        classGroupService.updateClassStudentNum(classGroupId.intValue(), classGroup.getStudentNum() + studentIds.size());
+
+        //添加进IM群组
+        Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
+        for (Integer studentId : studentIds) {
+        	userRoleMap.put(studentId, null);
         }
+        imGroupMemberService.join(classGroupId.longValue(), userRoleMap);
     }
 }

+ 30 - 21
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java

@@ -15,6 +15,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -41,7 +42,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     @Autowired
     private SysConfigDao sysConfigDao;
     @Autowired
-    private ImFeignService imFeignService;
+    private ImGroupMemberService imGroupMemberService;
     @Autowired
     private ClassGroupService classGroupService;
     @Autowired
@@ -66,32 +67,36 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         String classGroupIds = classGroupTeacherMapperList.stream().map(classGroupTeacherMapper -> classGroupTeacherMapper.getClassGroupId().toString()).collect(Collectors.joining(","));
         //老师加入群组
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+        List<Integer> userIdList = new ArrayList<>();
         List<ClassGroup> classGroups = classGroupService.findClassGroupByIds(classGroupIds);
 
         List<ClassGroupTeacherMapper> oldClassGroupTeacherMapper = classGroupTeacherMapperDao.getClassGroupTeacherMapper(classGroupTeacherMapperList, GroupType.MUSIC);
 
         for (ClassGroup classGroup : classGroups) {
-            imGroupMemberList.clear();
+            userIdList.clear();
             //原设置的老师删除群组
             for (ClassGroupTeacherMapper classGroupTeacherMapper : oldClassGroupTeacherMapper) {
                 if (!classGroup.getId().equals(classGroupTeacherMapper.getClassGroupId())) continue;
-                imGroupMemberList.add(new ImGroupMember(classGroupTeacherMapper.getUserId().toString()));
+                userIdList.add(classGroupTeacherMapper.getUserId());
             }
-            if (imGroupMemberList.size() > 0) {
-                ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-                imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+            if (userIdList.size() > 0) {
+                imGroupMemberService.quit(classGroup.getId().longValue(), userIdList);
             }
             // 新设置的老师加入群组
-            imGroupMemberList.clear();
+            userIdList.clear();
             for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
                 if (!classGroup.getId().equals(classGroupTeacherMapper.getClassGroupId())) continue;
                 classGroupTeacherMapper.setMusicGroupId(classGroup.getMusicGroupId());
                 classGroupTeacherMapper.setGroupType(classGroup.getGroupType());
-                imGroupMemberList.add(new ImGroupMember(classGroupTeacherMapper.getUserId().toString()));
+                userIdList.add(classGroupTeacherMapper.getUserId());
+            }
+            if (userIdList.size() > 0) {
+            	Map<Integer, String> userRoleMap = new HashMap<Integer, String>();
+            	for(Integer userId : userIdList){
+            		userRoleMap.put(userId, "");
+            	}
+                imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
             }
-            ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-            imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
         }
         classGroupTeacherMapperDao.delMusicGroupTeacherMapper(classGroupTeacherMapperList);
 
@@ -103,7 +108,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     public int classGroupTeachersInsert(List<ClassGroupTeacherMapper> classGroupTeacherMapperList, boolean checkCourser) {
         String classGroupIds = classGroupTeacherMapperList.stream().map(classGroupTeacherMapper -> classGroupTeacherMapper.getClassGroupId().toString()).collect(Collectors.joining(","));
         //老师加入群组
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+        List<Integer> userIdList = new ArrayList<Integer>();
         List<ClassGroup> classGroups = classGroupService.findClassGroupByIds(classGroupIds);
 
         List<ClassGroupTeacherMapper> oldClassGroupTeacherMapper = classGroupTeacherMapperDao.getClassGroupTeacherMapper(classGroupTeacherMapperList, GroupType.MUSIC);
@@ -111,28 +116,32 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
         Set<String> oldTeacher = new HashSet<>();
         Set<String> newTeacher = new HashSet<>();
         for (ClassGroup classGroup : classGroups) {
-            imGroupMemberList.clear();
+        	userIdList.clear();
             //原设置的老师删除群组
             for (ClassGroupTeacherMapper classGroupTeacherMapper : oldClassGroupTeacherMapper) {
                 if (!classGroup.getId().equals(classGroupTeacherMapper.getClassGroupId())) continue;
-                imGroupMemberList.add(new ImGroupMember(classGroupTeacherMapper.getUserId().toString()));
+                userIdList.add(classGroupTeacherMapper.getUserId());
                 oldTeacher.add(classGroupTeacherMapper.getClassGroupId() + classGroupTeacherMapper.getTeacherRole().getCode() + classGroupTeacherMapper.getUserId());
             }
-            if (imGroupMemberList.size() > 0) {
-                ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-                imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+            if (userIdList.size() > 0) {
+                imGroupMemberService.quit(classGroup.getId().longValue(), userIdList);
             }
             // 新设置的老师加入群组
-            imGroupMemberList.clear();
+            userIdList.clear();
             for (ClassGroupTeacherMapper classGroupTeacherMapper : classGroupTeacherMapperList) {
                 if (!classGroup.getId().equals(classGroupTeacherMapper.getClassGroupId())) continue;
                 classGroupTeacherMapper.setMusicGroupId(classGroup.getMusicGroupId());
                 classGroupTeacherMapper.setGroupType(classGroup.getGroupType());
-                imGroupMemberList.add(new ImGroupMember(classGroupTeacherMapper.getUserId().toString()));
+                userIdList.add(classGroupTeacherMapper.getUserId());
                 newTeacher.add(classGroupTeacherMapper.getClassGroupId() + classGroupTeacherMapper.getTeacherRole().getCode() + classGroupTeacherMapper.getUserId());
             }
-            ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-            imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+            if (userIdList.size() > 0) {
+            	Map<Integer, String> userRoleMap = new HashMap<Integer, String>();
+            	for(Integer userId : userIdList){
+            		userRoleMap.put(userId, "");
+            	}
+                imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
+            }
         }
         classGroupTeacherMapperDao.delMusicGroupTeacherMapper(classGroupTeacherMapperList);
 

+ 5 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -225,7 +225,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     @Autowired
     private SchoolDao schoolDao;
     @Autowired
-	private ImFeignService imFeignService;
+	private ImGroupMemberService imGroupMemberService;
     @Autowired
     private CourseHomeworkService courseHomeworkService;
     @Autowired
@@ -4654,13 +4654,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, PRACTICE.getCode());
         if(Objects.nonNull(educationalTeacherId)&&!educationalTeacherId.equals(practiceGroup.getEducationalTeacherId())){
 			if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
-				ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(practiceGroup.getEducationalTeacherId().toString())};
-				imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+				imGroupMemberService.quit(classGroup.getId().longValue(), practiceGroup.getEducationalTeacherId());
 			}
 
 			practiceGroup.setEducationalTeacherId(educationalTeacherId);
-			ImGroupMember[] newImGroupMemberList = new ImGroupMember[]{new ImGroupMember(practiceGroup.getEducationalTeacherId().toString())};
-			imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), newImGroupMemberList,classGroup.getName()));
+			imGroupMemberService.join(classGroup.getId().longValue(), educationalTeacherId, "", false);
 		}
 		if(Objects.nonNull(subjectId)&&!subjectId.equals(practiceGroup.getSubjectId())){
 			Subject subject = subjectDao.get(subjectId);
@@ -5036,8 +5034,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			ImGroupMember[] oldImGroupMembers = {new ImGroupMember(oldTeacherId.toString())};
 			ImGroupMember[] imGroupMembers = {new ImGroupMember(newTeacherId.toString())};
 			for (ClassGroup classGroup:classGroupList) {
-				imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), oldImGroupMembers, classGroup.getName()));
-				imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+				imGroupMemberService.quit(classGroup.getId().longValue(), oldTeacherId);
+				imGroupMemberService.join(classGroup.getId().longValue(), newTeacherId, null, false);
 			}
 		}
 	}

+ 11 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java

@@ -23,6 +23,7 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -78,7 +79,9 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     @Autowired
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
     @Autowired
-    private ImFeignService imFeignService;
+    private ImGroupService imGroupService;
+    @Autowired
+    private ImGroupMemberService imGroupMemberService;
     @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
@@ -739,14 +742,13 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
 
             return BaseController.failed(HttpStatus.FOUND, errMessage);
         }
-
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
-        imGroupMemberList.add(new ImGroupMember(coursesGroup.getTeacherId().toString()));
-        imGroupMemberList.add(new ImGroupMember(order.getUserId().toString()));
-        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-        // 创建群组
-        imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
-
+        
+        Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
+        userRoleMap.put(coursesGroup.getTeacherId(), "");
+        userRoleMap.put(order.getUserId(), "");
+        
+        imGroupService.create(classGroup.getId().longValue(), coursesGroup.getTeacherId(), classGroup.getName(), classGroup.getName(), classGroup.getName(), classGroup.getName(), null, "COMM");
+        imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
         return BaseController.succeed();
     }
 

+ 0 - 16
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java

@@ -617,12 +617,6 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
 
         studentDao.updateStudentServiceTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
-        imGroupMemberList.add(new ImGroupMember(practiceGroup.getUserId().toString()));
-        imGroupMemberList.add(new ImGroupMember(practiceGroup.getStudentId().toString()));
-        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-        // 创建群组
-        imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
     }
 
     @Override
@@ -1162,16 +1156,6 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
 
         studentDao.updateStudentServiceTag(practiceGroupBuyParams.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
-        if(Objects.nonNull(practiceGroupBuyParams.getEducationalTeacherId())){
-            imGroupMemberList.add(new ImGroupMember(practiceGroupBuyParams.getEducationalTeacherId().toString()));
-        }
-        imGroupMemberList.add(new ImGroupMember(practiceGroupBuyParams.getUserId().toString()));
-        imGroupMemberList.add(new ImGroupMember(practiceGroupBuyParams.getStudentId().toString()));
-        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-        // 创建群组
-        imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
-
         return BaseController.succeed();
     }
 

+ 12 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -17,6 +17,7 @@ import com.ym.mec.biz.dal.enums.EmployeeOperateEnum;
 import com.ym.mec.biz.dal.enums.ParamEnum;
 import com.ym.mec.biz.dal.page.EmployeeQueryInfo;
 import com.ym.mec.biz.service.EmployeeService;
+import com.ym.mec.biz.service.ImGroupMemberService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -27,6 +28,7 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -44,6 +46,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	@Autowired
 	private ImFeignService imFeignService;
 	@Autowired
+	private ImGroupMemberService imGroupMemberService;
+	@Autowired
 	private SysUserFeignService sysUserFeignService;
 	@Autowired
 	private TeacherDao teacherDao;
@@ -254,25 +258,23 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		if(imGroupModels.size() > 0){
 			//❤️用户加群
 			for (ImGroupModel imGroupModel : imGroupModels) {
+				Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
+				
 				List<ImGroupMember> memberList = imGroupModel.getMemberList();
-				if(memberList != null && memberList.size() > 0){
-					ImGroupMember[] imGroupMembers = new ImGroupMember[memberList.size()];
-					imGroupModel.setMembers(memberList.toArray(imGroupMembers));
+				for(ImGroupMember member : memberList){
+					userRoleMap.put(Integer.parseInt(member.getId()), "");
 				}
+				imGroupMemberService.join(Long.parseLong(imGroupModel.getId()), userRoleMap);
 			}
-		imFeignService.groupBatchJoin(imGroupModels);
 		}
 		//原有员工退群
 		List<ImGroupModel> groupModels = classGroupDao.queryTeacherQuitGroups(levelUserId);
 		if(groupModels.size() > 0){
+			List<Long> imGroupIdList = new ArrayList<Long>();
 			for (ImGroupModel imGroupModel : groupModels) {
-				List<ImGroupMember> memberList = imGroupModel.getMemberList();
-				if(memberList != null && memberList.size() > 0){
-					ImGroupMember[] imGroupMembers = new ImGroupMember[memberList.size()];
-					imGroupModel.setMembers(memberList.toArray(imGroupMembers));
-				}
+				imGroupIdList.add(Long.parseLong(imGroupModel.getId()));
 			}
-			imFeignService.groupBatchQuit(groupModels);
+			imGroupMemberService.quit(imGroupIdList, levelUserId);
 		}
 		//更换教务老师等数据
 		employeeDao.employeeLevel(employeeLevelDtos);

+ 204 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java

@@ -0,0 +1,204 @@
+package com.ym.mec.biz.service.impl;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ym.mec.biz.dal.dao.ImGroupDao;
+import com.ym.mec.biz.dal.dao.ImGroupMemberDao;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.dal.entity.ImGroupMember;
+import com.ym.mec.biz.service.ImGroupMemberService;
+import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.im.ImFeignService;
+import com.ym.mec.im.entity.GroupMember;
+import com.ym.mec.im.entity.GroupModel;
+
+@Service
+public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMember> implements ImGroupMemberService {
+
+	@Autowired
+	private ImGroupMemberDao imGroupMemberDao;
+
+	@Autowired
+	private ImGroupDao imGroupDao;
+
+	@Autowired
+	private ImFeignService imFeignService;
+
+	@Autowired
+	private ImGroupService imGroupService;
+
+	@Override
+	public BaseDAO<Long, ImGroupMember> getDAO() {
+		return imGroupMemberDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean join(Long imGroupId, Integer userId, String roleType, boolean isAdmin) {
+		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
+		if (imGroup == null) {
+			throw new BizException("加入群组失败:群组[{}]不存在", imGroupId);
+		}
+		//检查用户是否已存在
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userId.toString());
+		if(imGroupMemberList != null && imGroupMemberList.size() > 0){
+			return true;
+		}
+		
+		ImGroupMember imGroupMember = new ImGroupMember();
+		Date date = new Date();
+
+		imGroupMember.setCreateTime(date);
+		imGroupMember.setImGroupId(imGroupId);
+		imGroupMember.setIsAdmin(isAdmin);
+		imGroupMember.setRoleType(roleType);
+		imGroupMember.setUpdateTime(date);
+		imGroupMember.setUserId(userId);
+
+		imGroupMemberDao.insert(imGroupMember);
+
+		imGroup.setMemberNum(imGroup.getMemberNum() + 1);
+		imGroup.setUpdateTime(date);
+		imGroupDao.update(imGroup);
+
+		String groupId = imGroup.getId().toString();
+
+		GroupMember groupMember = new GroupMember(userId.toString(), groupId);
+		imFeignService.groupJoin(new GroupModel(groupId, new GroupMember[] { groupMember }, imGroup.getName()));
+
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean join(Long imGroupId, Map<Integer, String> userRoleMap) {
+		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
+		if (imGroup == null) {
+			throw new BizException("加入群组失败:群组[{}]不存在", imGroupId);
+		}
+		//检查用户是否已存在
+		List<Integer> existUserIdList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userRoleMap.keySet().stream().map(Objects::toString)
+		.collect(Collectors.joining(","))).stream().map(e -> e.getUserId()).collect(Collectors.toList());
+
+		Date date = new Date();
+		List<ImGroupMember> imGroupMemberList = new ArrayList<ImGroupMember>();
+		List<GroupMember> groupMemberList = new ArrayList<GroupMember>();
+
+		String groupId = imGroup.getId().toString();
+
+		for (Entry<Integer, String> entry : userRoleMap.entrySet()) {
+			
+			if(existUserIdList.contains(entry.getKey())){
+				continue;
+			}
+
+			ImGroupMember imGroupMember = new ImGroupMember();
+			imGroupMember.setCreateTime(date);
+			imGroupMember.setImGroupId(imGroupId);
+			imGroupMember.setIsAdmin(false);
+			imGroupMember.setRoleType(entry.getValue());
+			imGroupMember.setUpdateTime(date);
+			imGroupMember.setUserId(entry.getKey());
+
+			imGroupMemberList.add(imGroupMember);
+			groupMemberList.add(new GroupMember(imGroupMember.getUserId().toString(), groupId));
+		}
+
+		if (imGroupMemberList.size() > 0) {
+			imGroupMemberDao.batchInsert(imGroupMemberList);
+
+			imGroup.setMemberNum(imGroup.getMemberNum() + imGroupMemberList.size());
+			imGroup.setUpdateTime(date);
+			imGroupDao.update(imGroup);
+
+			imFeignService.groupJoin(new GroupModel(groupId, groupMemberList.stream().toArray(GroupMember[]::new), imGroup.getName()));
+		}
+
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean quit(Long imGroupId, Integer userId) {
+		List<Integer> userIdList = new ArrayList<Integer>();
+		userIdList.add(userId);
+
+		return quit(imGroupId, userIdList);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean quit(List<Long> imGroupIdList, Integer userId) {
+		for (Long imGroupId : imGroupIdList) {
+			quit(imGroupId, userId);
+		}
+		return true;
+	}
+
+	@Override
+	public boolean quit(Long imGroupId, List<Integer> userIdList) {
+
+		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
+		if (imGroup == null) {
+			throw new BizException("退出群组失败:群组[{}]不存在", imGroupId);
+		}
+
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userIdList.stream().map(Objects::toString)
+				.collect(Collectors.joining(",")));
+
+		if (imGroupMemberList == null || imGroupMemberList.size() == 0) {
+			return true;
+		}
+
+		imGroupMemberDao.batchDelete(imGroupMemberList);
+
+		imGroup.setMemberNum(imGroup.getMemberNum() - 1);
+		imGroup.setUpdateTime(new Date());
+		imGroupDao.update(imGroup);
+
+		String groupId = imGroup.getId().toString();
+
+		List<GroupMember> groupMemberList = new ArrayList<GroupMember>();
+		for (Integer userId : userIdList) {
+			groupMemberList.add(new GroupMember(userId.toString(), groupId));
+		}
+		imFeignService.groupQuit(new GroupModel(groupId, groupMemberList.stream().toArray(GroupMember[]::new), imGroup.getName()));
+
+		return true;
+	}
+
+	@Override
+	public boolean updateRoleType(Long imGroupId, Integer userId, String roleType) {
+		List<Integer> userIdList = new ArrayList<Integer>();
+		userIdList.add(userId);
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userIdList.stream().map(Objects::toString)
+				.collect(Collectors.joining(",")));
+
+		if (imGroupMemberList == null || imGroupMemberList.size() == 0) {
+			throw new BizException("更新失败:找不到用户信息");
+		}
+
+		Date date = new Date();
+		for (ImGroupMember imGroupMember : imGroupMemberList) {
+			imGroupMember.setRoleType(roleType);
+			imGroupMember.setUpdateTime(date);
+		}
+		imGroupMemberDao.batchUpdate(imGroupMemberList);
+
+		return true;
+	}
+
+}

+ 36 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupNoticeServiceImpl.java

@@ -1,16 +1,26 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
 import com.ym.mec.biz.dal.dao.ImGroupNoticeDao;
+import com.ym.mec.biz.dal.dto.ImGroupNoticeDto;
 import com.ym.mec.biz.dal.entity.ImGroupNotice;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
 import com.ym.mec.biz.service.ImGroupNoticeService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
+import com.ym.mec.util.collection.MapUtil;
 
 @Service
 public class ImGroupNoticeServiceImpl extends BaseServiceImpl<Long, ImGroupNotice>  implements ImGroupNoticeService {
-
+	
 	@Autowired
 	private ImGroupNoticeDao imGroupNoticeDao;
 
@@ -20,7 +30,28 @@ public class ImGroupNoticeServiceImpl extends BaseServiceImpl<Long, ImGroupNotic
 	}
 
 	@Override
-	public ImGroupNotice getNewNotice(Long groupId) {
-		return imGroupNoticeDao.getNewNotice(groupId);
+	public PageInfo<ImGroupNoticeDto> queryPage(ImGroupNoticeQueryInfo queryInfo) {
+		PageInfo<ImGroupNoticeDto> pageInfo = new PageInfo<ImGroupNoticeDto>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+		
+		List<ImGroupNoticeDto> dataList = null;
+		int count = this.findCount(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = imGroupNoticeDao.queryForPage(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<ImGroupNoticeDto>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	public ImGroupNoticeDto queryLatestNotice(Long imGroupId) {
+		return imGroupNoticeDao.queryLatestNotice(imGroupId);
 	}
+	
 }

+ 122 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java

@@ -0,0 +1,122 @@
+package com.ym.mec.biz.service.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import com.ym.mec.biz.dal.dao.ImGroupDao;
+import com.ym.mec.biz.dal.dao.ImGroupMemberDao;
+import com.ym.mec.biz.dal.dao.ImGroupNoticeDao;
+import com.ym.mec.biz.dal.dto.ImGroupMemberDto;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.service.ImGroupMemberService;
+import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.im.ImFeignService;
+import com.ym.mec.im.entity.GroupMember;
+import com.ym.mec.im.entity.GroupModel;
+
+@Service
+public class ImGroupServiceImpl extends BaseServiceImpl<Long, ImGroup> implements ImGroupService {
+
+	@Autowired
+	private ImGroupDao imGroupDao;
+
+	@Autowired
+	private ImGroupMemberDao imGroupMemberDao;
+
+	@Autowired
+	private ImGroupNoticeDao imGroupNoticeDao;
+
+	@Autowired
+	private ImGroupMemberService imGroupMemberService;
+
+	@Autowired
+	private ImFeignService imFeignService;
+
+	@Override
+	public BaseDAO<Long, ImGroup> getDAO() {
+		return imGroupDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean create(Long id, Integer userId, String name, String introduce, String memo, String tags, String img, String type) {
+		ImGroup imGroup = imGroupDao.get(id);
+		if (imGroup != null) {
+			return true;
+		}
+
+		imGroup = new ImGroup();
+
+		Date date = new Date();
+
+		imGroup.setId(id);
+		imGroup.setCreateTime(date);
+		imGroup.setIntroduce(introduce);
+		
+		if(userId != null){
+			imGroup.setMemberNum(1);
+		}else{
+			imGroup.setMemberNum(0);
+		}
+		imGroup.setMemo(memo);
+		imGroup.setName(name);
+		imGroup.setTags(tags);
+		imGroup.setImg(img);
+		imGroup.setType(type);
+		imGroup.setUpdateTime(date);
+		imGroupDao.insert(imGroup);
+
+		String groupId = imGroup.getId().toString();
+		
+		if(userId != null){
+			imGroupMemberService.join(imGroup.getId(), userId, null, true);
+
+			GroupMember groupMember = new GroupMember(userId.toString(), groupId);
+
+			imFeignService.groupCreate(new GroupModel(groupId, new GroupMember[] { groupMember }, name));
+		}else{
+			imFeignService.groupCreate(new GroupModel(groupId, null, name));
+		}
+
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public boolean cancel(Long imGroupId) {
+
+		// 删除群成员
+		imGroupMemberDao.deleteByImGroupId(imGroupId);
+		// 删除群公告
+		imGroupNoticeDao.deleteByImGroupId(imGroupId);
+		// 删除群信息
+		imGroupDao.delete(imGroupId);
+
+		String groupId = imGroupId.toString();
+		imFeignService.groupDismiss(new GroupModel(groupId, null));
+
+		return true;
+	}
+
+	@Override
+	public List<ImGroup> queryByUserId(Integer userId, String search) {
+		return imGroupDao.queryByUserId(userId, search);
+	}
+
+	@Override
+	public List<ImGroupMemberDto> queryMemberById(Long imGroupId) {
+		return imGroupDao.queryMemberById(imGroupId);
+	}
+
+	@Override
+	public ImGroupMemberDto queryMember(Long imGroupId, Integer userId) {
+		return imGroupDao.queryMember(imGroupId, userId);
+	}
+
+}

+ 84 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java

@@ -0,0 +1,84 @@
+package com.ym.mec.biz.service.impl;
+
+import java.util.Date;
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import com.ym.mec.biz.dal.dao.ImUserFriendDao;
+import com.ym.mec.biz.dal.dto.ImUserFriendDto;
+import com.ym.mec.biz.dal.entity.ImUserFriend;
+import com.ym.mec.biz.service.ImUserFriendService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+
+@Service
+public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend> implements ImUserFriendService {
+
+	@Autowired
+	private ImUserFriendDao imUserFriendDao;
+
+	@Override
+	public BaseDAO<Long, ImUserFriend> getDAO() {
+		return imUserFriendDao;
+	}
+
+	@Override
+	public boolean addFriend(Integer userId, Integer friendUserId, String nickname, String memo) {
+		// 检查是否已经是好友
+		ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
+		if (userFriend != null) {
+			throw new BizException("好友已存在");
+		}
+
+		Date date = new Date();
+
+		userFriend = new ImUserFriend();
+		userFriend.setFriendId(friendUserId);
+		userFriend.setUserId(friendUserId);
+		userFriend.setFriendNickname(nickname);
+		userFriend.setMemo(memo);
+		userFriend.setCreateTime(date);
+		userFriend.setUpdateTime(date);
+		imUserFriendDao.insert(userFriend);
+
+		return true;
+	}
+
+	@Override
+	public boolean deleteFriend(Integer userId, Integer friendUserId) {
+		ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
+		if (userFriend == null) {
+			throw new BizException("好友不存在");
+		}
+		imUserFriendDao.delete(userFriend.getId());
+		return true;
+	}
+
+	@Override
+	public boolean updateFriendNickname(Integer userId, Integer friendUserId, String nickname) {
+		ImUserFriend userFriend = imUserFriendDao.query(userId, friendUserId);
+		if (userFriend == null) {
+			throw new BizException("好友不存在");
+		}
+		Date date = new Date();
+		userFriend.setFriendNickname(nickname);
+		userFriend.setUpdateTime(date);
+		imUserFriendDao.update(userFriend);
+
+		return true;
+	}
+
+	@Override
+	public List<ImUserFriendDto> queryFriendListByUserId(Integer userId, String search) {
+		return imUserFriendDao.queryFriendListByUserId(userId, search);
+	}
+
+	@Override
+	public ImUserFriendDto queryFriendDetail(Integer userId, Integer friendUserId) {
+		return imUserFriendDao.queryFriendDetail(userId, friendUserId);
+	}
+
+}

+ 4 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -757,8 +757,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				List<Map<Integer,String>> classGroupStudents = (List<Map<Integer,String>>)JSON.parse(adjust.getClassGroupStudents());
 				List<Integer> studentIds = JSON.parseArray(adjust.getStudentIds(), Integer.class);
 				List<Long> courseIds = JSON.parseArray(adjust.getSubLockCourseIds(), Long.class);
+				List<Long> allLockCourseIds = JSON.parseArray(adjust.getAllLockCourseIds(), Long.class);
 				classGroupService.spanGroupClassAdjustPass(adjust.getMasterClassGroupId()
-						,studentIds,courseIds,classGroupStudents);
+						,studentIds,courseIds,classGroupStudents,allLockCourseIds,batchNo);
 			}
 		}
 		return batchNo;
@@ -1071,8 +1072,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			List<Map<Integer,String>> classGroupStudents = (List<Map<Integer,String>>)JSON.parse(adjust.getClassGroupStudents());
 			List<Integer> studentIds = JSON.parseArray(adjust.getStudentIds(), Integer.class);
 			List<Long> courseIds = JSON.parseArray(adjust.getSubLockCourseIds(), Long.class);
+			List<Long> allLockCourseIds = JSON.parseArray(adjust.getAllLockCourseIds(), Long.class);
 			classGroupService.spanGroupClassAdjustPass(adjust.getMasterClassGroupId()
-					,studentIds,courseIds,classGroupStudents);
+					,studentIds,courseIds,classGroupStudents,allLockCourseIds,batchNo);
 		}
 		musicGroupPaymentCalenderDao.batchUpdate(musicGroupPaymentCalenders);
 	}

+ 79 - 28
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -19,6 +19,7 @@ import java.util.Set;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -32,16 +33,6 @@ import com.alibaba.fastjson.TypeReference;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
-import com.ym.mec.biz.dal.dto.BasicUserDto;
-import com.ym.mec.biz.dal.dto.CourseFormDto;
-import com.ym.mec.biz.dal.dto.CourseScheduleTeachersDto;
-import com.ym.mec.biz.dal.dto.HighClassGroupDto;
-import com.ym.mec.biz.dal.dto.MusicCardDto;
-import com.ym.mec.biz.dal.dto.RegisterPayDto;
-import com.ym.mec.biz.dal.dto.SporadicPayDto;
-import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
-import com.ym.mec.biz.dal.dto.SubjectRegisterDto;
-import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
@@ -62,6 +53,7 @@ import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.ClassGroupStudentMapperService;
 import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
 import com.ym.mec.biz.service.GoodsService;
+import com.ym.mec.biz.service.ImGroupMemberService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
@@ -203,7 +195,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
     @Autowired
-    private ImFeignService imFeignService;
+    private ImGroupMemberService imGroupMemberService;
     @Autowired
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
     @Autowired
@@ -410,8 +402,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setVersion(0);
         BigDecimal balance = BigDecimal.ZERO;
         if (sporadicPayDto.getUseBalancePayment() && amount.compareTo(BigDecimal.ZERO) > 0) {
-            if (chargeInfo.getChargeType().getCode().equals(9)) {
-                throw new BizException("账户充值不支持余额支付");
+            if (chargeInfo.getChargeType().getCode().equals(9)||chargeInfo.getChargeType().getCode().equals(13)) {
+                throw new BizException(chargeInfo.getChargeType().getMsg()+"不支持余额支付");
             }
             SysUserCashAccount userCashAccount = sysUserCashAccountService.get(userId);
 
@@ -2259,12 +2251,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         Integer teamTeacherId = newMusicGroup.getTeamTeacherId();
         Integer educationalTeacherId = newMusicGroup.getEducationalTeacherId();
-
-        ImGroupMember[] oldImGroupMembers1 = {new ImGroupMember(oldMusicGroup.getTeamTeacherId().toString())};
-        ImGroupMember[] nowImGroupMembers1 = {new ImGroupMember(teamTeacherId.toString())};
-        ImGroupMember[] oldImGroupMembers2 = {new ImGroupMember(oldMusicGroup.getEducationalTeacherId().toString())};
-        ImGroupMember[] nowImGroupMembers2 = {new ImGroupMember(educationalTeacherId.toString())};
-
+        
         Integer oldDirectorUserId = oldMusicGroup.getDirectorUserId();
         if (oldDirectorUserId == null) {
             oldDirectorUserId = teamTeacherId;
@@ -2274,15 +2261,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             directorUserId = teamTeacherId;
         }
 
-        ImGroupMember[] oldImGroupMembers3 = {new ImGroupMember(oldDirectorUserId.toString())};
-        ImGroupMember[] nowImGroupMembers3 = {new ImGroupMember(directorUserId.toString())};
+        List<Integer> quitUserIdList = new ArrayList<Integer>();
+        quitUserIdList.add(oldMusicGroup.getTeamTeacherId());
+        quitUserIdList.add(oldMusicGroup.getEducationalTeacherId());
+        quitUserIdList.add(oldDirectorUserId);
+
+        Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
+        userRoleMap.put(teamTeacherId, null);
+        userRoleMap.put(educationalTeacherId, null);
+        userRoleMap.put(directorUserId, null);
+        
         classGroups.forEach(e -> {
-            imFeignService.groupQuit(new ImGroupModel(e.getId().toString(), oldImGroupMembers3, e.getName()));
-            imFeignService.groupJoin(new ImGroupModel(e.getId().toString(), nowImGroupMembers3, e.getName()));
-            imFeignService.groupQuit(new ImGroupModel(e.getId().toString(), oldImGroupMembers2, e.getName()));
-            imFeignService.groupJoin(new ImGroupModel(e.getId().toString(), nowImGroupMembers2, e.getName()));
-            imFeignService.groupQuit(new ImGroupModel(e.getId().toString(), oldImGroupMembers1, e.getName()));
-            imFeignService.groupJoin(new ImGroupModel(e.getId().toString(), nowImGroupMembers1, e.getName()));
+        	imGroupMemberService.quit(e.getId().longValue(), quitUserIdList);
+        	imGroupMemberService.join(e.getId().longValue(), userRoleMap);
         });
     }
 
@@ -2582,6 +2573,20 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("获取用户信息失败");
         }
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.findStudentListByIdList(registerIds);
+        List<StudentRegistration> oldRegs = studentRegistrationDao.getMusicGroupStu(musicGroupId);
+        Map<Integer, List<StudentRegistration>> oldRegMap = oldRegs.stream().collect(Collectors.groupingBy(StudentRegistration::getUserId));
+        //去掉相同的人
+        List<StudentRegistration> newRegs = new ArrayList<>();
+        Set<Integer> hasUsers = new HashSet<>();
+        for (StudentRegistration studentRegistration : studentRegistrations) {
+            if (oldRegMap.containsKey(studentRegistration.getUserId()) || hasUsers.contains(studentRegistration.getUserId())) {
+                continue;
+            }
+            hasUsers.add(studentRegistration.getUserId());
+            newRegs.add(studentRegistration);
+        }
+        studentRegistrations = newRegs;
+
         List<Integer> subjectIds = studentRegistrations.stream().map(StudentRegistration::getActualSubjectId).collect(Collectors.toList());
         List<Subject> subjects = subjectDao.findBySubjectIds(subjectIds);
         Map<Integer, List<Subject>> subjectMap = subjects.stream().collect(Collectors.groupingBy(Subject::getId));
@@ -2595,7 +2600,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             for (MusicGroupSubjectPlan musicGroupSubjectPlan : musicSubjectClassPlans) {
                 if (!subjectId.equals(musicGroupSubjectPlan.getSubjectId())) continue;
                 hasSubject = true;
-                musicGroupSubjectPlan.setApplyStudentNum(regs.size());
+                musicGroupSubjectPlan.setApplyStudentNum(musicGroupSubjectPlan.getApplyStudentNum() + regs.size());
                 subjectPlan = musicGroupSubjectPlan;
             }
             if (!hasSubject) {
@@ -2632,4 +2637,50 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         return studentRegistrationList;
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean closeMusicGroup(CloseMusicGroupDto closeMusicGroupDto) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        MusicGroup musicGroup = musicGroupDao.get(closeMusicGroupDto.getMusicGroupId());
+        if (musicGroup == null) {
+            throw new BizException("乐团找不到");
+        }
+
+        if (musicGroup.getStatus() != MusicGroupStatusEnum.PROGRESS) {
+            throw new BizException("乐团当前状态是{},不能关闭", musicGroup.getStatus().getMsg());
+        }
+
+        musicGroup.setStatus(MusicGroupStatusEnum.CLOSE);
+        musicGroup.setUpdateTime(new Date());
+        musicGroupDao.update(musicGroup);
+
+        musicGroupBuildLogDao.insert(new MusicGroupBuildLog(closeMusicGroupDto.getMusicGroupId(), "关闭乐团", sysUser.getId(), ""));
+
+        List<StudentRegistration> musicGroupRegs = studentRegistrationDao.findMusicGroupStudent(closeMusicGroupDto.getMusicGroupId(), null);
+        Map<Integer, BigDecimal> userReBackMap = closeMusicGroupDto.getUserReBack();
+        //退还没上课程费用
+        for (StudentRegistration musicGroupReg : musicGroupRegs) {
+            BigDecimal userReBack = userReBackMap.getOrDefault(musicGroupReg.getUserId(), BigDecimal.ZERO);
+
+            if (userReBack.compareTo(musicGroupReg.getSurplusCourseFee()) > 0) {
+                throw new BizException(musicGroupReg.getName() + "退费金额不能大于实际金额");
+            }
+            //退用户余额
+            if (userReBack.compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(musicGroupReg.getUserId(), userReBack, PlatformCashAccountDetailTypeEnum.REFUNDS, "关闭乐团");
+            }
+            //清除剩余课程费用
+            if (musicGroupReg.getSurplusCourseFee().compareTo(BigDecimal.ZERO) > 0) {
+                studentRegistrationService.updateUserSurplusCourseFee(musicGroupReg.getUserId(), musicGroupReg.getMusicGroupId(), musicGroupReg.getSurplusCourseFee().negate(), "关闭乐团", sysUser.getId());
+            }
+        }
+
+        //删除未上课表
+        courseScheduleDao.logicDeleteCourseSchedulesByMusicGroupID(musicGroup.getId());
+        return true;
+    }
+
 }

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupSubjectPlanServiceImpl.java

@@ -148,6 +148,11 @@ public class MusicGroupSubjectPlanServiceImpl extends BaseServiceImpl<Integer, M
         boolean flag = false;
         for (int i = 10; i >= 1; i--) {
             MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanDao.getMusicOneSubjectClassPlan(musicGroupId, subjectId);
+            if(musicOneSubjectClassPlan == null){
+                MusicGroup musicGroup = musicGroupService.get(musicGroupId);
+                Subject subject = subjectService.get(subjectId);
+                throw new BizException("操作失败:{}乐团缺少{}声部",musicGroup.getName(),subject.getName());
+            }
             int applyNum = musicOneSubjectClassPlan.getApplyStudentNum() == null ? 0 : musicOneSubjectClassPlan.getApplyStudentNum();
             musicOneSubjectClassPlan.setApplyStudentNum(applyNum + num);
             musicOneSubjectClassPlan.setUpdateTime(new Date());

+ 10 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/OnlineMusicGroupServiceImpl.java

@@ -18,6 +18,7 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.date.DateUtil;
+
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.util.StringUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -76,7 +77,9 @@ public class OnlineMusicGroupServiceImpl implements OnlineMusicGroupService {
     @Autowired
     private PracticeGroupService practiceGroupService;
     @Autowired
-    private ImFeignService imFeignService;
+    private ImGroupService imGroupService;
+    @Autowired
+    private ImGroupMemberService imGroupMemberService;
     @Autowired
     private SysMessageService sysMessageService;
 
@@ -286,15 +289,13 @@ public class OnlineMusicGroupServiceImpl implements OnlineMusicGroupService {
 
         studentDao.updateStudentServiceTag(onlineMusicGroupCourseInfo.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
-        if(Objects.nonNull(musicGroup.getEducationalTeacherId())){
-            imGroupMemberList.add(new ImGroupMember(musicGroup.getEducationalTeacherId().toString()));
-        }
-        imGroupMemberList.add(new ImGroupMember(onlineMusicGroupCourseInfo.getStudentId().toString()));
-        imGroupMemberList.add(new ImGroupMember(onlineMusicGroupCourseInfo.getTeacherId().toString()));
-        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
+        Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
+        userRoleMap.put(onlineMusicGroupCourseInfo.getStudentId(), null);
+        userRoleMap.put(onlineMusicGroupCourseInfo.getTeacherId(), null);
+        
         // 创建群组
-        imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+        imGroupService.create(classGroup.getId().longValue(), musicGroup.getEducationalTeacherId(), classGroup.getName(), classGroup.getName(), classGroup.getName(), classGroup.getName(), null, "MUSIC");
+        imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 
         List<String> courseTimes = courses.stream().map(c -> DateUtil.dateToString(c.getStartClassTime(), "yyyy-MM-dd HH:mm")).collect(Collectors.toList());
 

+ 0 - 19
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -2125,16 +2125,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         studentDao.updateStudentServiceTag(practiceGroup.getStudentId(), null, YesOrNoEnum.YES.getCode());
 
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
-        if (Objects.nonNull(practiceGroup.getEducationalTeacherId())) {
-            imGroupMemberList.add(new ImGroupMember(practiceGroup.getEducationalTeacherId().toString()));
-        }
-        imGroupMemberList.add(new ImGroupMember(practiceGroup.getUserId().toString()));
-        imGroupMemberList.add(new ImGroupMember(practiceGroup.getStudentId().toString()));
-        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-        // 创建群组
-        imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
-
         result.put("teacherName", teacher.getRealName());
         result.put("enableApply", applyTimes < 1 ? 1 : 0);
         result.put("status", "SUCCESS");
@@ -3314,15 +3304,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
         studentDao.updateStudentServiceTag(practiceGroup.getStudentId(), null, YesOrNoEnum.YES.getCode());
 
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
-        if (Objects.nonNull(practiceGroup.getEducationalTeacherId())) {
-            imGroupMemberList.add(new ImGroupMember(practiceGroup.getEducationalTeacherId().toString()));
-        }
-        imGroupMemberList.add(new ImGroupMember(practiceGroup.getUserId().toString()));
-        imGroupMemberList.add(new ImGroupMember(practiceGroup.getStudentId().toString()));
-        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-        // 创建群组
-        imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
     }
 
     @Override

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

@@ -110,8 +110,8 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
                 if (!appendCourseBalance) {
                     throw new BizException("增加用户课程余额失败");
                 }
-            } else if (info.getChargeType().getCode() == 9) { //零星收费账户充值
-                sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费账户充值", studentPaymentOrder.getTransNo());
+            } else if (info.getChargeType().getCode() == 9 || info.getChargeType().getCode() == 13) { //零星收费账户充值,网基课活动
+                sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费"+info.getChargeType().getMsg(), studentPaymentOrder.getTransNo());
             } else if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {
                 degreeRegistrationService.updateStatus(studentPaymentOrder);
                 return true;

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

@@ -474,7 +474,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     public List<StudentPaymentOrder> reConfirmOrder(Date startTime, Date endTime) {
         if (startTime == null) {
             endTime = new Date();
-            startTime = DateUtil.addMinutes(endTime, 20);
+            startTime = DateUtil.addMinutes(endTime, -20);
         }
 
         List<StudentPaymentOrder> orders = studentPaymentOrderDao.getAdaPayOrdersByTime(startTime, endTime);

+ 41 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -23,6 +23,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
@@ -97,6 +98,7 @@ import com.ym.mec.biz.service.ClassGroupStudentMapperService;
 import com.ym.mec.biz.service.ContractService;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
+import com.ym.mec.biz.service.ImGroupMemberService;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
 import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
 import com.ym.mec.biz.service.SellOrderService;
@@ -164,6 +166,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Autowired
     private ImFeignService imFeignService;
     @Autowired
+    private ImGroupMemberService imGroupMemberService;
+    @Autowired
     private MusicGroupSubjectPlanService musicGroupSubjectPlanService;
     @Autowired
     private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
@@ -836,8 +840,11 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     }
 
     @Override
-    @Transactional(rollbackFor = Exception.class)
+    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void insertStudent(String studentIds,String oldMusicGroupId,String newMusicGroupId,BigDecimal masterTotalPrice){
+        if(oldMusicGroupId == newMusicGroupId){
+            return;
+        }
         SysUser sysUser1 = sysUserFeignService.queryUserInfo();
         //获取旧乐团学员注册信息
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryByUserIdsAndMusicGroupId(studentIds,oldMusicGroupId);
@@ -848,13 +855,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             if(studentRegistration.getSurplusCourseFee().doubleValue() > 0d && masterTotalPrice.doubleValue() > 0d){
                 StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
                 if(studentRegistration.getSurplusCourseFee().doubleValue() > masterTotalPrice.doubleValue()){
+                    amount = masterTotalPrice;
                     studentCourseFeeDetail.setAmount(masterTotalPrice.negate());
                     studentCourseFeeDetail.setSurplusCourseFee(studentRegistration.getSurplusCourseFee().subtract(masterTotalPrice));
                 }else {
+                    amount = studentRegistration.getSurplusCourseFee();
                     studentCourseFeeDetail.setAmount(studentRegistration.getSurplusCourseFee().negate());
                     studentCourseFeeDetail.setSurplusCourseFee(BigDecimal.ZERO);
                 }
-                amount = studentCourseFeeDetail.getAmount();
                 studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
                 studentRegistration.setSurplusCourseFee(studentCourseFeeDetail.getSurplusCourseFee());
                 studentCourseFeeDetail.setMemo("跨团合班消费");
@@ -871,31 +879,33 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentRegistrationDao.update(registration);
             }else {
                 //生成学员乐团注册表
+                studentRegistration.setOrganId(musicGroupDao.get(newMusicGroupId).getOrganId());
                 studentRegistration.setSurplusCourseFee(amount);
                 studentRegistration.setMusicGroupId(newMusicGroupId);
-                studentRegistrationDao.insertBasic(studentRegistration);
+                studentRegistrationDao.insert(studentRegistration);
                 registration = studentRegistration;
+
+                //增加报名学生数
+                musicGroupSubjectPlanService.addApplyStudentNum(newMusicGroupId, studentRegistration.getSubjectId(), 1);
+                //新增Fee表
+                MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(studentRegistration.getUserId(),newMusicGroupId);
+                if(musicGroupStudentFee == null){
+                    musicGroupStudentFee = new MusicGroupStudentFee(newMusicGroupId,
+                            studentRegistration.getUserId(), studentRegistration.getSubjectId(),BigDecimal.ZERO,
+                            null, studentRegistration.getTemporaryCourseFee(), studentRegistration.getPaymentStatus()==YES?PAID_COMPLETED:NON_PAYMENT);
+                    musicGroupStudentFeeDao.insert(musicGroupStudentFee);
+                }
             }
             //主班新增余额日志
-            if(studentRegistration.getSurplusCourseFee().doubleValue() > 0d && masterTotalPrice.doubleValue() > 0d){
+            if(amount.doubleValue() != 0d && masterTotalPrice.doubleValue() > 0d){
                 StudentCourseFeeDetail studentCourseFeeDetail = new StudentCourseFeeDetail();
                 studentCourseFeeDetail.setAmount(amount);
-                studentCourseFeeDetail.setSurplusCourseFee(registration.getSurplusCourseFee().add(amount));
-                studentCourseFeeDetail.setStudentRegistrationId(studentRegistration.getId());
+                studentCourseFeeDetail.setSurplusCourseFee(registration.getSurplusCourseFee());
+                studentCourseFeeDetail.setStudentRegistrationId(registration.getId());
                 studentCourseFeeDetail.setMemo("跨团合班费用转移");
                 studentCourseFeeDetail.setOperator(sysUser1.getId());
                 studentCourseFeeDetails.add(studentCourseFeeDetail);
             }
-            //增加报名学生数
-            musicGroupSubjectPlanService.addApplyStudentNum(newMusicGroupId, studentRegistration.getSubjectId(), 1);
-            //新增Fee表
-            MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(studentRegistration.getUserId(),oldMusicGroupId);
-            if(musicGroupStudentFee == null){
-                musicGroupStudentFee = new MusicGroupStudentFee(newMusicGroupId,
-                        studentRegistration.getUserId(), studentRegistration.getSubjectId(),BigDecimal.ZERO,
-                        null, studentRegistration.getTemporaryCourseFee(), studentRegistration.getPaymentStatus()==YES?PAID_COMPLETED:NON_PAYMENT);
-                musicGroupStudentFeeDao.insert(musicGroupStudentFee);
-            }
         }
         if(studentCourseFeeDetails.size() > 0){
             studentCourseFeeDetailDao.batchInsert(studentCourseFeeDetails);
@@ -919,8 +929,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             classGroupStudentMapper.setGroupType(GroupType.MUSIC);
             classGroupStudentMapperDao.insert(classGroupStudentMapper);
         }
-        ImGroupMember[] imGroupMembers = {new ImGroupMember(userId.toString())};
-        imFeignService.groupJoin(new ImGroupModel(classGroupId.toString(), imGroupMembers, classGroup.getName()));
+        imGroupMemberService.join(classGroupId.longValue(), userId, null, false);
         //2、班级人数调整
 //        classGroupDao.updateClassStudentNum(classGroupId.longValue(), 1);
         //3、学生加入新班级未开始课程
@@ -1590,4 +1599,18 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 	public List<StudentMusicGroupDto> queryStudentMusicGroupInfo(Integer userId) {
 		return studentRegistrationDao.queryStudentMusicGroupInfo(userId);
 	}
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean delReg(Long id) {
+        StudentRegistration studentRegistration = studentRegistrationDao.get(id);
+        MusicGroupSubjectPlan subjectPlan = musicGroupSubjectPlanDao.findSubjectPlan(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId());
+        int delNum = studentRegistrationDao.delete(id);
+        subjectPlan.setApplyStudentNum(subjectPlan.getApplyStudentNum() - 1);
+        int updateNum = musicGroupSubjectPlanDao.update(subjectPlan);
+        if (delNum <= 0 || updateNum <= 0) {
+            throw new BizException("删除失败,请重试");
+        }
+        return true;
+    }
 }

+ 29 - 40
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -90,7 +90,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
     @Autowired
 	private CourseScheduleTeacherSalaryDao courseScheduleTeacherSalaryDao;
     @Autowired
-	private ImFeignService imFeignService;
+	private ImGroupMemberService imGroupMemberService;
+    
+    @Autowired
+    private ImGroupService imGroupService;
     @Autowired
 	private SubjectDao subjectDao;
     @Autowired
@@ -1400,11 +1403,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
 
-		List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+		Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
 		if(Objects.nonNull(vipGroupApplyBaseInfoDto.getEducationalTeacherId())){
-            imGroupMemberList.add(new ImGroupMember(vipGroupApplyBaseInfoDto.getEducationalTeacherId().toString()));
+            userRoleMap.put(vipGroupApplyBaseInfoDto.getEducationalTeacherId(),null);
         }
-		imGroupMemberList.add(new ImGroupMember(vipGroupApplyBaseInfoDto.getUserId().toString()));
+		userRoleMap.put(vipGroupApplyBaseInfoDto.getUserId(),null);
 		//生成学生单课缴费信息
 		for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
 			courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentForVipGroup(vipGroupId,classGroupStudent.getUserId());
@@ -1415,16 +1418,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			} catch (Exception e) {
 				e.printStackTrace();
 			}
-			imGroupMemberList.add(new ImGroupMember(classGroupStudent.getUserId().toString()));
+			userRoleMap.put(classGroupStudent.getUserId(),null);
 			studentDao.updateStudentServiceTag(classGroupStudent.getUserId(), null, YesOrNoEnum.YES.getCode());
 		}
 
 		courseScheduleService.checkNewCourseSchedules(courseSchedules, false,false);
 
 		try {
-			ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-			// 创建群组
-			imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+			imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 
 			//发送推送短信
 			Map<Integer,String> map = new HashMap<>(1);
@@ -1871,8 +1872,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
         classGroupDao.update(classGroup);
 
 		//学员退出班级群
-		ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentId.toString())};
-		imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, null));
+		imGroupMemberService.quit(classGroup.getId().longValue(), studentId);
 	}
 
 	@Override
@@ -2001,12 +2001,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		Integer oldTeacherId=vipGroup.getUserId();
 		if(Objects.nonNull(studentRecoverInfo.getTeacherId())&&!studentRecoverInfo.getTeacherId().equals(vipGroup.getUserId())){
 			vipGroup.setUserId(studentRecoverInfo.getTeacherId());
+			
+			imGroupMemberService.quit(classGroup.getId().longValue(), oldTeacherId);
 
-			ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(oldTeacherId.toString())};
-			imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
-
-			ImGroupMember[] newImGroupMemberList = new ImGroupMember[]{new ImGroupMember(vipGroup.getUserId().toString())};
-			imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), newImGroupMemberList,classGroup.getName()));
+			imGroupMemberService.join(classGroup.getId().longValue(), vipGroup.getUserId(), null, false);
 		}
 
 		ClassGroupStudentMapper classStudentMapperByUserIdAndClassGroupId = classGroupStudentMapperDao.query(classGroup.getId(),
@@ -2326,8 +2324,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(Integer.parseInt(studentPaymentOrder.getMusicGroupId()), null);
 
 				//学员退出班级群
-				ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentApplyRefunds.getUserId().toString())};
-				imFeignService.groupJoin(new ImGroupModel(studentPaymentOrder.getClassGroupId().toString(), imGroupMembers, null));
+				imGroupMemberService.quit(studentPaymentOrder.getClassGroupId().longValue(), studentApplyRefunds.getUserId());
+
 				break;
 			case REJECT:
 
@@ -2650,14 +2648,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.nonNull(vipGroupApplyBaseInfo.getEducationalTeacherId())&&!vipGroupApplyBaseInfo.getEducationalTeacherId().equals(oldVipGroupInfo.getEducationalTeacherId())){
 			ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(oldVipGroupInfo.getId().toString(), GroupType.VIP.getCode());
 			if(Objects.nonNull(oldVipGroupInfo.getEducationalTeacherId())){
-				ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(oldVipGroupInfo.getEducationalTeacherId().toString())};
-				imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+				
+				imGroupMemberService.quit(classGroup.getId().longValue(), oldVipGroupInfo.getEducationalTeacherId());
 			}
 
 			oldVipGroupInfo.setEducationalTeacherId(vipGroupApplyBaseInfo.getEducationalTeacherId());
 			isChange=true;
-			ImGroupMember[] newImGroupMemberList = new ImGroupMember[]{new ImGroupMember(oldVipGroupInfo.getEducationalTeacherId().toString())};
-			imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), newImGroupMemberList,classGroup.getName()));
+			
+			imGroupMemberService.join(classGroup.getId().longValue(), oldVipGroupInfo.getEducationalTeacherId(), null, false);
 		}
 		if(Objects.nonNull(vipGroupApplyBaseInfo.getOrganId())&&!vipGroupApplyBaseInfo.getOrganId().equals(oldVipGroupInfo.getOrganId())){
 			isChange=true;
@@ -2761,7 +2759,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		List<ClassGroupStudentMapper> classGroupStudents = classGroupStudentMapperDao.findByClassGroup(classGroup.getId());
 
-		List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+		Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
 		//生成学生单课缴费信息
 		for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
 			SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(classGroupStudent.getUserId());
@@ -2791,16 +2789,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			sysUserCashAccountService.updateCourseBalance(classGroupStudent.getUserId(),sysUserCashAccount.getCourseBalance().subtract(surplusCourseTotalPrice),PlatformCashAccountDetailTypeEnum.PAY_FEE,surplusCourseTotalPrice.negate(),"后台加课扣除课程余额");
 
 			courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
-			imGroupMemberList.add(new ImGroupMember(classGroupStudent.getUserId().toString()));
+			userRoleMap.put(classGroupStudent.getUserId(), null);
 		}
 
 		classGroupService.updateClassGroupInfo(classGroup.getId());
 
 //		courseScheduleStudentPaymentService.updateVipGiveCourse(vipGroup.getId());
 
-		ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-		imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(),
-				imGroupMembers, classGroup.getName()));
+		imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 	}
 
 	@Override
@@ -2848,7 +2844,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		Date now=new Date();
-        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+        Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
 
 		if(vipGroup.getStatus().equals(VipGroupStatusEnum.APPLYING)||vipGroup.getStatus().equals(VipGroupStatusEnum.NOT_START)){
 			List<CourseSchedule> courseSchedules = JSON.parseArray(vipGroup.getCourseSchedulesJson(),CourseSchedule.class);
@@ -2864,7 +2860,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 						salaryMap.get("onlineTeacherSalary"),
 						salaryMap.get("offlineTeacherSalary"));
 			}
-            imGroupMemberList.add(new ImGroupMember(vipGroup.getUserId().toString()));
+            userRoleMap.put(vipGroup.getUserId(), null);
 		}
 
 		List<CourseSchedule> surplusCourses = courseScheduleDao.findByClassGroupAndStatus(classGroup.getId(), CourseStatusEnum.NOT_START.getCode());
@@ -2895,7 +2891,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 					classGroupStudentMappers.add(classGroupStudentMapper);
 				}
 
-				imGroupMemberList.add(new ImGroupMember(studentId.toString()));
+				userRoleMap.put(studentId, null);
 			}
 
 			if(!CollectionUtils.isEmpty(classGroupStudentMappers)){
@@ -2914,9 +2910,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			classGroupDao.update(classGroup);
 
 			try {
-				ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-				// 创建群组
-				imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+				imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 			} catch (Exception e) {
 				e.printStackTrace();
 			}
@@ -3061,7 +3055,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				classGroupStudentMappers.add(classGroupStudentMapper);
 			}
 
-			imGroupMemberList.add(new ImGroupMember(studentId.toString()));
+			userRoleMap.put(studentId, null);
 
 			if(vipGroup.getOnlineClassesNum()>0){
 				try {
@@ -3097,9 +3091,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
 
 		try {
-			ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
-			// 创建群组
-			imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+			imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
@@ -3171,12 +3163,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			Set<Long> collect = vipGroupList.stream().map(e -> e.getId()).collect(Collectors.toSet());
 			Set<Integer> classGroupIds = classGroupDao.queryClassGroupIds(collect);
 			//解散群
-			List<ImGroupModel> imGroupModels = new ArrayList<>();
-			ImGroupMember[] imGroupMember = {new ImGroupMember("")};
 			for (Integer classGroupId : classGroupIds) {
-				imGroupModels.add(new ImGroupModel(classGroupId + "", imGroupMember, ""));
+				imGroupService.cancel(classGroupId.longValue());
 			}
-			imFeignService.groupBatchDismiss(imGroupModels);
 		}
 		List<VipGroup> normalVipGroupList = vipGroupDao.queryNormalStatusList();
 		if (!CollectionUtils.isEmpty(normalVipGroupList)){

+ 14 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -3384,6 +3384,12 @@
         WHERE cs.class_group_id_ = #{classGroupId}
         GROUP BY cs.type_
     </select>
+    <select id="querySubCourseTimeMap" resultType="java.util.Map">
+        SELECT cs.type_ 'key',SUM(ROUND((UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.end_class_time_)) - UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.start_class_time_)))/60)) 'value'
+        FROM course_schedule cs
+        WHERE cs.class_group_id_ = #{classGroupId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW()
+        GROUP BY cs.type_
+    </select>
     <select id="findClassMaxCourseNumMap" resultType="java.util.Map">
         SELECT c.type_ 'key',MAX(c.subCourseNum) 'value' FROM (SELECT cs.type_,COUNT(cs.id_) subCourseNum FROM course_schedule cs
         WHERE cs.class_group_id_ IN
@@ -3489,4 +3495,12 @@
         WHERE cssp.user_id_ = #{studentId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW()
         AND vg.educational_teacher_id_ = #{teacherId}
     </select>
+    <select id="findCoursesByClassGroupIdAndCourseIds" resultMap="CourseSchedule">
+        SELECT * FROM course_schedule WHERE class_group_id_ = #{classGroupId}
+        AND id_ IN
+        <foreach collection="allLockCourseIds" item="courseId" open="(" close=")" separator=",">
+            #{courseId}
+        </foreach>
+        ORDER BY class_date_,start_class_time_ ASC
+    </select>
 </mapper>

+ 127 - 0
mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml

@@ -0,0 +1,127 @@
+<?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.ImGroupDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ImGroup" id="ImGroup">
+		<result column="id_" property="id" />
+		<result column="name_" property="name" />
+		<result column="introduce_" property="introduce" />
+		<result column="member_num_" property="memberNum" />
+		<result column="memo_" property="memo" />
+		<result column="tags_" property="tags" />
+		<result column="img_" property="img" />
+		<result column="type_" property="type" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+	
+	<resultMap type="com.ym.mec.biz.dal.dto.ImGroupMemberDto" id="ImGroupMemberDto">
+		<result column="id_" property="id" />
+		<result column="im_group_id_" property="imGroupId" />
+		<result column="user_id_" property="userId" />
+		<result column="nickname_" property="nickname" />
+		<result column="is_admin_" property="isAdmin" />
+		<result column="role_type_" property="roleType" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="username_" property="user.username" />
+		<result column="avatar_" property="user.avatar" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ImGroup" >
+		SELECT * FROM im_group WHERE id_ = #{id} 
+	</select>
+	
+	<select id="getLocked" resultMap="ImGroup" >
+		SELECT * FROM im_group WHERE id_ = #{id} for update
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ImGroup">
+		SELECT * FROM im_group ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroup" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO im_group (id_,name_,introduce_,member_num_,memo_,tags_,img_,type_create_time_,update_time_) VALUES(#{id},#{name},#{introduce},#{memberNum},#{memo},#{tags},#{img},#{type},#{createTime},#{updateTime})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroup">
+		UPDATE im_group <set>
+		<if test="memberNum != null">
+		member_num_ = #{memberNum},
+		</if>
+		<if test="id != null">
+		id_ = #{id},
+		</if>
+		<if test="tags != null">
+		tags_ = #{tags},
+		</if>
+		<if test="introduce != null">
+		introduce_ = #{introduce},
+		</if>
+		<if test="updateTime != null">
+		update_time_ = #{updateTime},
+		</if>
+		<if test="memo != null">
+		memo_ = #{memo},
+		</if>
+		<if test="name != null">
+		name_ = #{name},
+		</if>
+		<if test="img != null">
+		img_ = #{img},
+		</if>
+		<if test="type != null">
+		type_ = #{type},
+		</if>
+		<if test="createTime != null">
+		create_time_ = #{createTime},
+		</if>
+		</set> WHERE id_ = #{id} 
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM im_group WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ImGroup" parameterType="map">
+		SELECT * FROM im_group ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM im_group
+	</select>
+	
+	<select id="queryByUserId" resultMap="ImGroup" parameterType="map">
+		SELECT ig.* FROM im_group_member igm left join im_group ig on igm.im_group_id_ = ig.id_
+		where igm.user_id_ = #{userId}
+		<if test="search != null">
+			and (ig.name_ like concat('%',#{search},'%') or ig.tags_ like concat('%',#{search},'%'))
+		</if>
+	</select>
+	
+	<select id="queryMemberById" resultMap="ImGroupMemberDto">
+		SELECT igm.*,u.avatar_,case when find_in_set('STUDENT',u.user_type_) then u.username_ else u.real_name_ end username_ FROM im_group_member igm left join sys_user u on igm.user_id_ = u.id_
+		where igm.im_group_id_ = #{imGroupId}
+	</select>
+	
+	<select id="queryMember" resultMap="ImGroupMemberDto" parameterType="map">
+		SELECT igm.*,u.avatar_,case when find_in_set('STUDENT',u.user_type_) then u.username_ else u.real_name_ end username_ FROM im_group_member igm left join sys_user u on igm.user_id_ = u.id_
+		where igm.im_group_id_ = #{imGroupId} and igm.user_id_ = #{userId}
+	</select>
+</mapper>

+ 139 - 0
mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml

@@ -0,0 +1,139 @@
+<?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.ImGroupMemberDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ImGroupMember" id="ImGroupMember">
+		<result column="id_" property="id" />
+		<result column="im_group_id_" property="imGroupId" />
+		<result column="user_id_" property="userId" />
+		<result column="nickname_" property="nickname" />
+		<result column="is_admin_" property="isAdmin" />
+		<result column="role_type_" property="roleType" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ImGroupMember" >
+		SELECT * FROM im_group_member WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ImGroupMember">
+		SELECT * FROM im_group_member ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO im_group_member (id_,im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_) VALUES(#{id},#{imGroupId},#{userId},#{nickname},#{isAdmin},#{roleType},#{createTime},#{updateTime})
+	</insert>
+	
+	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO im_group_member (id_,im_group_id_,user_id_,nickname_,is_admin_,role_type_,create_time_,update_time_) VALUES
+		 <foreach collection="list" item="item" separator=";">
+		(#{item.id},#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},#{item.createTime},#{item.updateTime})
+		</foreach>
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember">
+		UPDATE im_group_member <set>
+		<if test="roleType != null">
+		role_type_ = #{roleType},
+		</if>
+		<if test="userId != null">
+		user_id_ = #{userId},
+		</if>
+		<if test="nickname != null">
+		nickname_ = #{nickname},
+		</if>
+		<if test="id != null">
+		id_ = #{id},
+		</if>
+		<if test="isAdmin != null">
+		is_admin_ = #{isAdmin},
+		</if>
+		<if test="imGroupId != null">
+		im_group_id_ = #{imGroupId},
+		</if>
+		<if test="updateTime != null">
+		update_time_ = #{updateTime},
+		</if>
+		<if test="createTime != null">
+		create_time_ = #{createTime},
+		</if>
+		</set> WHERE id_ = #{id} 
+	</update>
+	
+	<update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.ImGroupMember">
+		<foreach collection="list" item="item" index="index" open="" close="" separator=";">
+			UPDATE im_group_member 
+			<set>
+				<if test="item。roleType != null">
+				role_type_ = #{item。roleType},
+				</if>
+				<if test="item。userId != null">
+				user_id_ = #{item。userId},
+				</if>
+				<if test="item.nickname != null">
+				nickname_ = #{item.nickname},
+				</if>
+				<if test="item。id != null">
+				id_ = #{item。id},
+				</if>
+				<if test="item。isAdmin != null">
+				is_admin_ = #{item。isAdmin},
+				</if>
+				<if test="item。imGroupId != null">
+				im_group_id_ = #{item。imGroupId},
+				</if>
+				<if test="item。updateTime != null">
+				update_time_ = #{item。updateTime},
+				</if>
+				<if test="item。createTime != null">
+				create_time_ = #{item。createTime},
+				</if>
+			</set> 
+			WHERE id_ = #{item。id}
+		</foreach> 
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM im_group_member WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ImGroupMember" parameterType="map">
+		SELECT * FROM im_group_member ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM im_group_member
+	</select>
+	
+	<delete id="deleteByImGroupId" >
+		DELETE FROM im_group_member WHERE im_group_id_ = #{imGroupId}
+	</delete>
+	
+	<delete id="batchDelete" >
+		DELETE FROM im_group_member WHERE id_ in
+		<foreach collection="list" item="item" open="(" separator="," close=")">
+            #{item.id}
+        </foreach>
+	</delete>
+	
+	<select id="queryByImGroupIdAndUserId" resultMap="ImGroupMember" parameterType="map">
+		SELECT * FROM im_group_member where find_in_set(im_group_id_,#{imGroupIdList}) and find_in_set(user_id_,#{userId})
+	</select>
+</mapper>

+ 98 - 79
mec-biz/src/main/resources/config/mybatis/ImGroupNoticeMapper.xml

@@ -5,98 +5,117 @@
 不要修改此文件。所有改动将在下次重新自动生成时丢失。
 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.ImGroupNoticeDao">
-
-    <resultMap type="com.ym.mec.biz.dal.entity.ImGroupNotice" id="ImGroupNotice">
-        <result column="id_" property="id"/>
-        <result column="im_group_id_" property="imGroupId"/>
-        <result column="title_" property="title"/>
-        <result column="content_" property="content"/>
-        <result column="real_name_" property="realName"/>
-        <result column="avatar_" property="avatar"/>
-        <result column="is_top_" property="isTop"/>
-        <result column="del_flag_" property="delFlag"/>
-        <result column="create_time_" property="createTime"/>
-        <result column="operator_id_" property="operatorId"/>
-        <result column="update_time_" property="updateTime"/>
-    </resultMap>
-
-    <!-- 根据主键查询一条记录 -->
-    <select id="get" resultMap="ImGroupNotice">
-		SELECT * FROM im_group_notice WHERE id_ = #{id}
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ImGroupNotice" id="ImGroupNotice">
+		<result column="id_" property="id" />
+		<result column="im_group_id_" property="imGroupId" />
+		<result column="title_" property="title" />
+		<result column="content_" property="content" />
+		<result column="is_top_" property="isTop" />
+		<result column="is_sent_to_new_member_" property="isSentToNewMember" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="del_flag_" property="delFlag" />
+		<result column="operator_id_" property="operatorId" />
+	</resultMap>
+	
+	<resultMap type="com.ym.mec.biz.dal.dto.ImGroupNoticeDto" id="ImGroupNoticeDto" extends="ImGroupNotice">
+		<result column="real_name_" property="user.realName"/>
+        <result column="avatar_" property="user.avatar"/>
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ImGroupNotice" >
+		SELECT * FROM im_group_notice WHERE id_ = #{id} 
 	</select>
-
-    <!-- 全查询 -->
-    <select id="findAll" resultMap="ImGroupNotice">
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ImGroupNotice">
 		SELECT * FROM im_group_notice ORDER BY id_
 	</select>
-
-    <!-- 向数据库增加一条记录 -->
-    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroupNotice" useGeneratedKeys="true" keyColumn="id"
-            keyProperty="id">
-        INSERT INTO im_group_notice (im_group_id_,title_,content_,is_top_,
-        del_flag_,create_time_,update_time_,operator_id_)
-        VALUES(#{imGroupId},#{title},#{content},#{isTop},
-        #{delFlag},now(),now(),#{operatorId})
-    </insert>
-
-    <!-- 根据主键查询一条记录 -->
-    <update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroupNotice">
-        UPDATE im_group_notice
-        <set>
-            <if test="delFlag != null">
-                del_flag_ = #{delFlag},
-            </if>
-            <if test="title != null">
-                title_ = #{title},
-            </if>
-            <if test="content != null">
-                content_ = #{content},
-            </if>
-            <if test="isTop != null">
-                is_top_ = #{isTop},
-            </if>
-            <if test="updateTime != null">
-                update_time_ = NOW(),
-            </if>
-            <if test="operatorId != null">
-                operator_id_ = #{operatorId}
-            </if>
-        </set>
-        WHERE id_ = #{id}
-    </update>
-
-    <!-- 根据主键删除一条记录 -->
-    <update id="delete">
-		UPDATE im_group_notice SET del_flag_ = 1 WHERE id_ = #{id}
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImGroupNotice" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO im_group_notice (id_,im_group_id_,title_,content_,is_top_,is_sent_to_new_member_,create_time_,update_time_,del_flag_,operator_id_) VALUES(#{id},#{imGroupId},#{title},#{content},#{isTop},#{isSentToNewMember},#{createTime},#{updateTime},#{delFlag},#{operatorId})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImGroupNotice">
+		UPDATE im_group_notice <set>
+		<if test="delFlag != null">
+		del_flag_ = #{delFlag},
+		</if>
+		<if test="operatorId != null">
+		operator_id_ = #{operatorId},
+		</if>
+		<if test="isTop != null">
+		is_top_ = #{isTop},
+		</if>
+		<if test="isSentToNewMember != null">
+		is_sent_to_new_member_ = #{isSentToNewMember},
+		</if>
+		<if test="id != null">
+		id_ = #{id},
+		</if>
+		<if test="imGroupId != null">
+		im_group_id_ = #{imGroupId},
+		</if>
+		<if test="title != null">
+		title_ = #{title},
+		</if>
+		<if test="updateTime != null">
+		update_time_ = #{updateTime},
+		</if>
+		<if test="content != null">
+		content_ = #{content},
+		</if>
+		<if test="createTime != null">
+		create_time_ = #{createTime},
+		</if>
+		</set> WHERE id_ = #{id} 
 	</update>
-
-    <!-- 分页查询 -->
-    <select id="queryPage" resultMap="ImGroupNotice" parameterType="map">
-        SELECT ign.*,su.real_name_,su.avatar_ FROM im_group_notice ign
-        LEFT JOIN sys_user su ON su.id_ = ign.operator_id_
-        <where>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM im_group_notice WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryForPage" resultMap="ImGroupNoticeDto" parameterType="map">
+		SELECT ign.*,u.real_name_,u.avatar_ FROM im_group_notice ign left join sys_user u on ign.operator_id_ = u.id_
+		<where>
             ign.del_flag_ = 0
             <if test="groupId != null">
                 AND ign.im_group_id_ = #{groupId}
             </if>
         </where>
         ORDER BY ign.is_top_ DESC,ign.update_time_ DESC
-        <include refid="global.limit"/>
-    </select>
-
-    <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM im_group_notice
-        <where>
-            del_flag_ = 0
+		<include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(ign.id_) FROM im_group_notice ign
+		<where>
+            ign.del_flag_ = 0
             <if test="groupId != null">
-                AND im_group_id_ = #{groupId}
+                AND ign.im_group_id_ = #{groupId}
             </if>
         </where>
 	</select>
-    <select id="getNewNotice" resultMap="ImGroupNotice">
-        SELECT * FROM im_group_notice ign
-        WHERE ign.im_group_id_ = #{groupId} AND ign.del_flag_ = 0
+	
+	<select id="queryLatestNotice" resultMap="ImGroupNoticeDto">
+		SELECT * FROM im_group_notice ign
+        WHERE ign.im_group_id_ = #{imGroupId} AND ign.del_flag_ = 0
         ORDER BY ign.is_top_ DESC,ign.update_time_ DESC LIMIT 1
-    </select>
+	</select>
+	
+	<delete id="deleteByImGroupId" >
+		DELETE FROM im_group_notice WHERE im_group_id_ = #{imGroupId}
+	</delete>
 </mapper>

+ 108 - 0
mec-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml

@@ -0,0 +1,108 @@
+<?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.ImUserFriendDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ImUserFriend" id="ImUserFriend">
+		<result column="id_" property="id" />
+		<result column="user_id_" property="userId" />
+		<result column="friend_id_" property="friendId" />
+		<result column="friend_nickname_" property="friendNickname" />
+		<result column="memo_" property="memo" />
+		<result column="tags_" property="tags" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+	
+	<resultMap type="com.ym.mec.biz.dal.dto.ImUserFriendDto" id="ImUserFriendDto" extends="ImUserFriend">
+		<result column="real_name_" property="friend.realName" />
+		<result column="avatar_" property="friend.avatar" />
+		<result column="user_type_" property="friend.userType" />
+		<result column="phone_" property="friend.phone" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ImUserFriend" >
+		SELECT * FROM im_user_friend WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ImUserFriend">
+		SELECT * FROM im_user_friend ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ImUserFriend" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO im_user_friend (id_,user_id_,friend_id_,friend_nickname_,memo_,tags_,create_time_,update_time_) VALUES(#{id},#{userId},#{friendId},#{friendNickname},#{memo},#{tags},#{createTime},#{updateTime})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImUserFriend">
+		UPDATE im_user_friend <set>
+		<if test="userId != null">
+		user_id_ = #{userId},
+		</if>
+		<if test="friendId != null">
+		friend_id_ = #{friendId},
+		</if>
+		<if test="id != null">
+		id_ = #{id},
+		</if>
+		<if test="friendNickname != null">
+		friend_nickname_ = #{friendNickname},
+		</if>
+		<if test="memo != null">
+		memo_ = #{memo},
+		</if>
+		<if test="tags != null">
+		tags_ = #{tags},
+		</if>
+		<if test="updateTime != null">
+		update_time_ = #{updateTime},
+		</if>
+		<if test="createTime != null">
+		create_time_ = #{createTime},
+		</if>
+		</set> WHERE id_ = #{id} 
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM im_user_friend WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ImUserFriend" parameterType="map">
+		SELECT * FROM im_user_friend ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM im_user_friend
+	</select>
+	
+	<select id="query" resultMap="ImUserFriend" parameterType="map">
+		SELECT * FROM im_user_friend where user_id_ = #{userId} and friend_id_ = #{friendId}
+	</select>
+	
+	<select id="queryFriendListByUserId" resultMap="ImUserFriendDto" parameterType="map">
+		SELECT iuf.*,u.real_name_,u.avatar_,u.phone_,u.user_type_ FROM im_user_friend iuf left join sys_user u on iuf.friend_id_ = u.id_
+		where iuf.user_id_ = #{userId}
+		<if test="search != null">
+			and (u.real_name_ like concat('%',#{search},'%') or iuf.friend_nickname_ like concat('%',#{search},'%'))
+		</if>
+	</select>
+	
+	<select id="queryFriendDetail" resultMap="ImUserFriendDto" parameterType="map">
+		SELECT iuf.*,u.real_name_,u.avatar_,u.phone_,u.user_type_ FROM im_user_friend iuf left join sys_user u on iuf.friend_id_ = u.id_
+		where iuf.user_id_ = #{userId} and iuf.friend_id_ = #{friendUserId}
+	</select>
+</mapper>

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

@@ -253,6 +253,9 @@
                 AND spo.group_type_='SPORADIC'
                 AND sci.charge_type_ = #{chargeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
+            <if test="noneTqType != null">
+                and spo.mer_no_ != '淘器微信'
+            </if>
         </where>
     </sql>
     <select id="getRouteOrders" resultMap="StudentPaymentRouteOrder">

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -488,7 +488,8 @@
         </foreach>
     </insert>
 
-    <insert id="insertBasic" parameterType="com.ym.mec.biz.dal.entity.StudentRegistration">
+    <insert id="insertBasic" parameterType="com.ym.mec.biz.dal.entity.StudentRegistration" useGeneratedKeys="true"
+            keyColumn="id" keyProperty="id">
         INSERT INTO student_registration
         (parents_phone_,user_id_,name_,music_group_id_,current_grade_,current_class_,subject_id_,
         create_time_,update_time_,parents_name_,payment_status_,actual_subject_id_,music_group_status_,temporary_course_fee_,class_group_id_)

+ 2 - 1
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -1218,7 +1218,8 @@
 		MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."4"'),DECIMAL) END) high_online4,
 		MAX(case when mgs.course_schedule_type_ = 'HIGH_ONLINE' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."5"'),DECIMAL) END) high_online5,
 		MAX(case when mgs.course_schedule_type_ = 'MUSIC_NETWORK' then CONVERT(JSON_EXTRACT(mgs.salary_rule_json_,'$."1"'),DECIMAL) END) music_network1
-		FROM `teacher` t LEFT JOIN `sys_user` su on t.`id_` = su.`id_` 
+		FROM `teacher` t
+		LEFT JOIN `sys_user` su on t.`id_` = su.`id_`
 		LEFT JOIN `organization` o on o.`id_` = t.`organ_id_` 
 		LEFT JOIN `teacher_default_vip_group_salary` gs on gs.`user_id_` = t.`id_`
 		LEFT JOIN `vip_group_category` gc on gc.`id_` = gs.`vip_group_category_id_`

+ 17 - 13
mec-client-api/src/main/java/com/ym/mec/im/ImFeignService.java

@@ -1,17 +1,21 @@
 package com.ym.mec.im;
 
-import com.ym.mec.common.entity.*;
-import org.apache.commons.lang3.StringUtils;
+import java.util.List;
+
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
-import org.springframework.scheduling.annotation.Async;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 
 import com.ym.mec.common.config.FeignConfiguration;
+import com.ym.mec.common.entity.ImGroupMessage;
+import com.ym.mec.common.entity.ImGroupModel;
+import com.ym.mec.common.entity.ImPrivateMessage;
+import com.ym.mec.common.entity.ImResult;
+import com.ym.mec.common.entity.ImUserModel;
+import com.ym.mec.im.entity.GroupModel;
 import com.ym.mec.im.fallback.ImFeignServiceFallback;
 
-import java.util.List;
-
 @FeignClient(name = "im-server", configuration = FeignConfiguration.class, fallback = ImFeignServiceFallback.class)
 public interface ImFeignService {
 
@@ -37,7 +41,7 @@ public interface ImFeignService {
 	 * @return
 	 */
 	@PostMapping(value = "group/create")
-	Object groupCreate(@RequestBody ImGroupModel groupModel);
+	Object groupCreate(@RequestBody GroupModel groupModel);
 
 	/**
 	 * 批量创建群组
@@ -45,7 +49,7 @@ public interface ImFeignService {
 	 * @return
 	 */
 	@PostMapping(value = "group/batchCreate")
-	void groupBatchCreate(@RequestBody List<ImGroupModel> groupModels);
+	void groupBatchCreate(@RequestBody List<GroupModel> groupModels);
 
 	/**
 	 * 加入群组
@@ -53,7 +57,7 @@ public interface ImFeignService {
 	 * @return
 	 */
 	@PostMapping(value = "group/join")
-	Object groupJoin(@RequestBody ImGroupModel groupModel);
+	Object groupJoin(@RequestBody GroupModel groupModel);
 
 	/**
 	 * 批量加入群组
@@ -61,7 +65,7 @@ public interface ImFeignService {
 	 * @return
 	 */
 	@PostMapping(value = "group/batchJoin")
-	Object groupBatchJoin(@RequestBody List<ImGroupModel> groupModels);
+	Object groupBatchJoin(@RequestBody List<GroupModel> groupModels);
 
 	/**
 	 * 退出群组
@@ -69,7 +73,7 @@ public interface ImFeignService {
 	 * @return
 	 */
 	@PostMapping(value = "group/quit")
-	Object groupQuit(@RequestBody ImGroupModel groupModel);
+	Object groupQuit(@RequestBody GroupModel groupModel);
 
 	/**
 	 * 解散群组
@@ -77,7 +81,7 @@ public interface ImFeignService {
 	 * @return
 	 */
 	@PostMapping(value = "group/dismiss")
-	Object groupDismiss(@RequestBody ImGroupModel groupModel);
+	Object groupDismiss(@RequestBody GroupModel groupModel);
 
 	/**
 	 * 批量解散群组
@@ -93,7 +97,7 @@ public interface ImFeignService {
 	 * @return
 	 */
 	@PostMapping(value = "group/batchQuit")
-	Object groupBatchQuit(@RequestBody List<ImGroupModel> groupModels);
+	Object groupBatchQuit(@RequestBody List<GroupModel> groupModels);
 
 	/**
 	 * 发送私聊消息

+ 47 - 0
mec-client-api/src/main/java/com/ym/mec/im/entity/GroupMember.java

@@ -0,0 +1,47 @@
+package com.ym.mec.im.entity;
+
+public class GroupMember {
+
+	public String id;
+	public String groupId;
+	public Integer munite;//禁言分钟数
+
+	public GroupMember() {
+	}
+
+	public GroupMember(String id, String groupId, Integer munite) {
+		this.id = id;
+		this.groupId = groupId;
+		this.munite = munite;
+	}
+
+	public GroupMember(String id, String groupId) {
+		this.id = id;
+		this.groupId = groupId;
+	}
+
+	public GroupMember setId(String id) {
+		this.id = id;
+		return this;
+	}
+
+	public String getId() {
+		return this.id;
+	}
+
+	public String getGroupId() {
+		return this.groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public Integer getMunite() {
+		return this.munite;
+	}
+
+	public void setMunite(Integer munite) {
+		this.munite = munite;
+	}
+}

+ 71 - 0
mec-client-api/src/main/java/com/ym/mec/im/entity/GroupModel.java

@@ -0,0 +1,71 @@
+package com.ym.mec.im.entity;
+
+public class GroupModel {
+
+	private String id;
+	private GroupMember[] members;
+	private String name;
+	private Integer minute;//禁言分钟数
+	private Integer status;
+
+	public GroupModel() {
+	}
+
+	public GroupModel(String id, GroupMember[] members, String name, Integer minute) {
+		this.id = id;
+		this.members = members;
+		this.name = name;
+		this.minute = minute;
+	}
+
+	public GroupModel(String id, GroupMember[] members, String name) {
+		this.id = id;
+		this.members = members;
+		this.name = name;
+	}
+
+	public GroupModel(String id, Integer status) {
+		this.id = id;
+		this.status = status;
+	}
+
+	public String getId() {
+		return this.id;
+	}
+
+	public GroupModel setId(String id) {
+		this.id = id;
+		return this;
+	}
+
+	public GroupMember[] getMembers() {
+		return this.members;
+	}
+
+	public GroupModel setMembers(GroupMember[] members) {
+		this.members = members;
+		return this;
+	}
+
+	public String getName() {
+		return this.name;
+	}
+
+	public GroupModel setName(String name) {
+		this.name = name;
+		return this;
+	}
+
+	public Integer getMinute() {
+		return this.minute;
+	}
+
+	public GroupModel setMinute(Integer minute) {
+		this.minute = minute;
+		return this;
+	}
+
+	public Integer getStatus() {
+		return this.status;
+	}
+}

+ 16 - 12
mec-client-api/src/main/java/com/ym/mec/im/fallback/ImFeignServiceFallback.java

@@ -1,12 +1,16 @@
 package com.ym.mec.im.fallback;
 
-import com.ym.mec.common.entity.*;
-import com.ym.mec.im.ImFeignService;
-import org.springframework.scheduling.annotation.Async;
+import java.util.List;
+
 import org.springframework.stereotype.Component;
 
-import javax.xml.ws.Action;
-import java.util.List;
+import com.ym.mec.common.entity.ImGroupMessage;
+import com.ym.mec.common.entity.ImGroupModel;
+import com.ym.mec.common.entity.ImPrivateMessage;
+import com.ym.mec.common.entity.ImResult;
+import com.ym.mec.common.entity.ImUserModel;
+import com.ym.mec.im.ImFeignService;
+import com.ym.mec.im.entity.GroupModel;
 
 @Component
 public class ImFeignServiceFallback implements ImFeignService {
@@ -23,32 +27,32 @@ public class ImFeignServiceFallback implements ImFeignService {
     }
 
     @Override
-    public Object groupCreate(ImGroupModel groupModel) {
+    public Object groupCreate(GroupModel groupModel) {
         return null;
     }
 
     @Override
-    public void groupBatchCreate(List<ImGroupModel> groupModels) {
+    public void groupBatchCreate(List<GroupModel> groupModels) {
 
     }
 
     @Override
-    public Object groupJoin(ImGroupModel groupModel) {
+    public Object groupJoin(GroupModel groupModel) {
         return null;
     }
 
     @Override
-    public Object groupBatchJoin(List<ImGroupModel> groupModels) {
+    public Object groupBatchJoin(List<GroupModel> groupModels) {
         return null;
     }
 
     @Override
-    public Object groupQuit(ImGroupModel groupModel) {
+    public Object groupQuit(GroupModel groupModel) {
         return null;
     }
 
     @Override
-    public Object groupDismiss(ImGroupModel groupModel) {
+    public Object groupDismiss(GroupModel groupModel) {
         return null;
     }
 
@@ -58,7 +62,7 @@ public class ImFeignServiceFallback implements ImFeignService {
     }
 
     @Override
-    public Object groupBatchQuit(List<ImGroupModel> groupModels) {
+    public Object groupBatchQuit(List<GroupModel> groupModels) {
         return null;
     }
 

+ 1 - 3
mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImGroupModel.java

@@ -1,10 +1,8 @@
 package com.ym.mec.common.entity;
 
-import java.lang.reflect.Array;
-import java.util.Arrays;
 import java.util.List;
 
-public class ImGroupModel {
+public class ImGroupModel{
     //群组编号
     private String id;
     //用户列表

+ 12 - 13
mec-student/src/main/java/com/ym/mec/student/controller/CourseController.java

@@ -1,28 +1,27 @@
 package com.ym.mec.student.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
 import java.util.List;
 
-import com.timevale.tgtext.text.pdf.PdfStructTreeController.returnType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dto.StudentCourseInfoDto;
 import com.ym.mec.biz.dal.dto.UserMusicGroupQueryInfo;
-import com.ym.mec.biz.dal.page.GroupNoticeQueryInfo;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
 import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.ImGroupNoticeService;
 import com.ym.mec.common.controller.BaseController;
 
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
 @RequestMapping("course")
 @Api(tags = "课程服务")
 @RestController
@@ -75,12 +74,12 @@ public class CourseController extends BaseController {
     @ApiOperation(value = "获取最新一条群公告")
     @RequestMapping("/getNewNotice")
     public Object getNewNotice(Long groupId) {
-        return succeed(imGroupNoticeService.getNewNotice(groupId));
+        return succeed(imGroupNoticeService.queryLatestNotice(groupId));
     }
 
     @ApiOperation(value = "获取群公告列表")
     @RequestMapping("/queryNoticePage")
-    public Object queryPage(GroupNoticeQueryInfo queryInfo) {
+    public Object queryPage(ImGroupNoticeQueryInfo queryInfo) {
         return succeed(imGroupNoticeService.queryPage(queryInfo));
     }
 

+ 98 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ImGroupController.java

@@ -0,0 +1,98 @@
+package com.ym.mec.student.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.Objects;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+import com.ym.mec.biz.service.ImGroupNoticeService;
+import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.biz.service.ImUserFriendService;
+import com.ym.mec.common.controller.BaseController;
+
+@RequestMapping("imGroup")
+@Api(tags = "IM群服务")
+@RestController
+public class ImGroupController extends BaseController {
+
+	@Autowired
+	private ImGroupService imGroupService;
+
+	@Autowired
+	private ImUserFriendService imUserFriendService;
+
+	@Autowired
+	private ImGroupNoticeService imGroupNoticeService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation("查询群列表")
+	@GetMapping(value = "/queryGroupList")
+	public Object queryGroupList(String search) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imGroupService.queryByUserId(sysUser.getId(), search));
+	}
+
+	@ApiOperation("查询群详情")
+	@GetMapping(value = "/queryGroupDetail")
+	public Object queryGroupList(Long imGroupId) {
+
+		return succeed(imGroupService.get(imGroupId));
+	}
+
+	@ApiOperation("查询群成员列表")
+	@GetMapping(value = "/queryGroupMemberList")
+	public Object queryGroupMemberList(Long imGroupId) {
+
+		return succeed(imGroupService.queryMemberById(imGroupId));
+	}
+
+	@ApiOperation("查询群成员详情")
+	@GetMapping(value = "/queryGroupMemberDetail")
+	public Object queryGroupMemberDetail(Long imGroupId, Integer userId) {
+
+		return succeed(imGroupService.queryMember(imGroupId, userId));
+	}
+
+	@ApiOperation("查询好友详情")
+	@GetMapping(value = "/queryFriendDetail")
+	public Object queryFriendDetail(Integer userId) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imUserFriendService.queryFriendDetail(sysUser.getId(), userId));
+	}
+
+	@ApiOperation("查询好友列表")
+	@GetMapping(value = "/queryFriendList")
+	public Object queryFriendList(String search) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUser.getId(), search));
+	}
+
+	@ApiOperation("查询群公告列表")
+	@GetMapping(value = "/queryNoticeList")
+	public Object queryNoticeList(ImGroupNoticeQueryInfo queryInfo) {
+		return succeed(imGroupNoticeService.queryPage(queryInfo));
+	}
+}

+ 3 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java

@@ -18,7 +18,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
-import com.ym.mec.biz.dal.page.GroupNoticeQueryInfo;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.CourseScheduleEvaluateService;
 import com.ym.mec.biz.service.ImGroupNoticeService;
@@ -90,12 +90,12 @@ public class ClassGroupController extends BaseController {
     @ApiOperation(value = "获取最新一条群公告")
     @RequestMapping("/getNewNotice")
     public Object getNewNotice(Long groupId) {
-        return succeed(imGroupNoticeService.getNewNotice(groupId));
+        return succeed(imGroupNoticeService.queryLatestNotice(groupId));
     }
 
     @ApiOperation(value = "获取群公告列表")
     @RequestMapping("/queryNoticePage")
-    public Object queryPage(GroupNoticeQueryInfo queryInfo) {
+    public Object queryPage(ImGroupNoticeQueryInfo queryInfo) {
         return succeed(imGroupNoticeService.queryPage(queryInfo));
     }
 

+ 132 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ImGroupController.java

@@ -0,0 +1,132 @@
+package com.ym.mec.teacher.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.ImUserFriendDto;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+import com.ym.mec.biz.service.ImGroupNoticeService;
+import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.biz.service.ImUserFriendService;
+import com.ym.mec.common.controller.BaseController;
+
+@RequestMapping("imGroup")
+@Api(tags = "IM群服务")
+@RestController
+public class ImGroupController extends BaseController {
+
+	@Autowired
+	private ImGroupService imGroupService;
+
+	@Autowired
+	private ImUserFriendService imUserFriendService;
+
+	@Autowired
+	private ImGroupNoticeService imGroupNoticeService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation("查询群列表")
+	@GetMapping(value = "/queryGroupList")
+	public Object queryGroupList(String search) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imGroupService.queryByUserId(sysUser.getId(), search));
+	}
+
+	@ApiOperation("查询群详情")
+	@GetMapping(value = "/queryGroupDetail")
+	public Object queryGroupList(Long imGroupId) {
+
+		return succeed(imGroupService.get(imGroupId));
+	}
+
+	@ApiOperation("查询群成员列表")
+	@GetMapping(value = "/queryGroupMemberList")
+	public Object queryGroupMemberList(Long imGroupId) {
+
+		return succeed(imGroupService.queryMemberById(imGroupId));
+	}
+
+	@ApiOperation("查询群学生列表")
+	@GetMapping(value = "/queryGroupStudentList")
+	public Object queryGroupStudentList(Long imGroupId) {
+
+		return succeed(imGroupService.queryMemberById(imGroupId).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
+	}
+
+	@ApiOperation("查询群成员详情")
+	@GetMapping(value = "/queryGroupMemberDetail")
+	public Object queryGroupMemberDetail(Long imGroupId, Integer userId) {
+
+		return succeed(imGroupService.queryMember(imGroupId, userId));
+	}
+
+	@ApiOperation("查询好友详情")
+	@GetMapping(value = "/queryFriendDetail")
+	public Object queryFriendDetail(Integer userId) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUser.getId(), userId);
+		if (dto == null) {
+			dto = new ImUserFriendDto();
+			SysUser user = sysUserFeignService.queryUserById(userId);
+			dto.setFriend(user);
+			if (user.getUserType().contains("TEACHER")) {
+				dto.setFriendNickname(user.getRealName());
+			} else {
+				dto.setFriendNickname(user.getUsername());
+			}
+			dto.setFriendId(userId);
+		}
+		return succeed(dto);
+	}
+
+	@ApiOperation("查询好友列表")
+	@GetMapping(value = "/queryFriendList")
+	public Object queryFriendList(String search) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUser.getId(), search));
+	}
+
+	@ApiOperation("查询好友中的学生列表")
+	@GetMapping(value = "/queryFriendStudentList")
+	public Object queryFriendStudentList(String search) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUser.getId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
+				.collect(Collectors.toList()));
+	}
+
+	@ApiOperation("查询群公告列表")
+	@GetMapping(value = "/queryNoticeList")
+	public Object queryNoticeList(ImGroupNoticeQueryInfo queryInfo) {
+		return succeed(imGroupNoticeService.queryPage(queryInfo));
+	}
+}

+ 8 - 11
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -2306,23 +2306,20 @@ public class ExportController extends BaseController {
         }
         OutputStream outputStream = response.getOutputStream();
         try {
-
             String[] header = {"老师编号", "姓名", "分部", "工作类型", "在职状态", "老师状态", "1v1", "1v2", "1v3", "1v4", "1v5", "1v6", "1v7",
                     "网管课", "单技课2.0(主教)", "合奏课2.0(主教)", "综合课2.0(主教)", "集训单技课2.0(主教)", "集训合奏课2.0(主教)",
                     "基础技能课2.0(主教)", "课堂课2.0(主教)", "单技课3.0(主教)", "合奏课3.0(主教)", "综合课3.0(主教)", "集训单技课3.0(主教)", "集训合奏课3.0(主教)",
-                    "基础技能课3.0(主教)"
+                    "基础技能课3.0(主教)", "课堂课3.0(主教)"
                     , "单技课2.0(助教)", "合奏课2.0(助教)", "综合课2.0(助教)", "集训单技课2.0(助教)", "集训合奏课2.0(助教)",
                     "基础技能课2.0(助教)", "课堂课2.0(助教)", "单技课3.0(助教)", "合奏课3.0(助教)", "综合课3.0(助教)", "集训单技课3.0(助教)", "集训合奏课3.0(助教)",
-                    "基础技能课3.0(助教)", "课堂课3.0", "网络基础训练课1v3", "网络基础训练课1v4", "网络基础训练课1v5", "乐团网管课1v1"};
+                    "基础技能课3.0(助教)", "课堂课3.0(助教)", "网络基础训练课1v3", "网络基础训练课1v4", "网络基础训练课1v5", "乐团网管课1v1"};
             String[] body = {"userId", "realName", "organName", "jobNature", "demissionStatus", "status", "vip1", "vip2", "vip3", "vip4", "vip5", "vip6", "vip7",
-                    "practiceSalary",
-                    "mainSingleSalary2", "mainMixSalary2", "mainComprehensiveSalary2", "mainTraningSigleSalary2", "mainTraningMixSalary2", "mainHighSalary2",
-                    "mainClassroomSalary2", "mainSingleSalary", "mainMixSalary", "mainComprehensiveSalary", "mainTraningSigleSalary", "mainTraningMixSalary", "mainHighSalary",
-                    "mainClassroomSalary",
-                    "assistantSingleSalary2", "assistantMixSalary2", "assistantComprehensiveSalary2", "assistantTraningSigleSalary2", "assistantTraningMixSalary2", "assistantHighSalary2",
-                    "assistantClassroomSalary2", "assistantSingleSalary", "assistantMixSalary", "assistantComprehensiveSalary", "assistantTraningSigleSalary", "assistantTraningMixSalary", "assistantHighSalary",
-                    "assistantClassroomSalary",
-                    "highOnline3Salary", "highOnline4Salary", "highOnline5Salary", "musicNetwork1Salary"};
+                    "practiceSalary","mainSingleSalary2", "mainMixSalary2", "mainComprehensiveSalary2", "mainTraningSigleSalary2", "mainTraningMixSalary2",
+                    "mainHighSalary2","mainClassroomSalary2", "mainSingleSalary", "mainMixSalary", "mainComprehensiveSalary", "mainTraningSigleSalary", "mainTraningMixSalary",
+                    "mainHighSalary","mainClassroomSalary",
+                    "assistantSingleSalary2", "assistantMixSalary2", "assistantComprehensiveSalary2", "assistantTraningSigleSalary2", "assistantTraningMixSalary2",
+                    "assistantHighSalary2","assistantClassroomSalary2", "assistantSingleSalary", "assistantMixSalary", "assistantComprehensiveSalary", "assistantTraningSigleSalary", "assistantTraningMixSalary",
+                    "assistantHighSalary","assistantClassroomSalary","highOnline3Salary", "highOnline4Salary", "highOnline5Salary", "musicNetwork1Salary"};
             HSSFWorkbook workbook = POIUtil.exportExcel(header, body, pageList);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=teacherDefaultSalary-" + DateUtil.getDate(new Date()) + ".xls");

+ 143 - 0
mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java

@@ -0,0 +1,143 @@
+package com.ym.mec.web.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.Date;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+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 com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dto.ImUserFriendDto;
+import com.ym.mec.biz.dal.entity.ImGroup;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+import com.ym.mec.biz.service.ImGroupNoticeService;
+import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.biz.service.ImUserFriendService;
+import com.ym.mec.common.controller.BaseController;
+
+@RequestMapping("imGroup")
+@Api(tags = "IM群服务")
+@RestController
+public class ImGroupController extends BaseController {
+
+	@Autowired
+	private ImGroupService imGroupService;
+
+	@Autowired
+	private ImUserFriendService imUserFriendService;
+
+	@Autowired
+	private ImGroupNoticeService imGroupNoticeService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation("查询群列表")
+	@GetMapping(value = "/queryGroupList")
+	public Object queryGroupList(String search) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imGroupService.queryByUserId(sysUser.getId(), search));
+	}
+
+	@ApiOperation("查询群详情")
+	@GetMapping(value = "/queryGroupDetail")
+	public Object queryGroupList(Long imGroupId) {
+
+		return succeed(imGroupService.get(imGroupId));
+	}
+
+	@ApiOperation("修改群信息")
+	@PostMapping(value = "/updateImGroup")
+	public Object updateImGroup(@RequestBody ImGroup imGroup) {
+		imGroup.setUpdateTime(new Date());
+		return succeed(imGroupService.update(imGroup));
+	}
+
+	@ApiOperation("查询群成员列表")
+	@GetMapping(value = "/queryGroupMemberList")
+	public Object queryGroupMemberList(Long imGroupId) {
+
+		return succeed(imGroupService.queryMemberById(imGroupId));
+	}
+
+	@ApiOperation("查询群学生列表")
+	@GetMapping(value = "/queryGroupStudentList")
+	public Object queryGroupStudentList(Long imGroupId) {
+
+		return succeed(imGroupService.queryMemberById(imGroupId).stream().filter(e -> StringUtils.isBlank(e.getRoleType())).collect(Collectors.toList()));
+	}
+
+	@ApiOperation("查询群成员详情")
+	@GetMapping(value = "/queryGroupMemberDetail")
+	public Object queryGroupMemberDetail(Long imGroupId, Integer userId) {
+
+		return succeed(imGroupService.queryMember(imGroupId, userId));
+	}
+
+	@ApiOperation("查询好友详情")
+	@GetMapping(value = "/queryFriendDetail")
+	public Object queryFriendDetail(Integer userId) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		ImUserFriendDto dto = imUserFriendService.queryFriendDetail(sysUser.getId(), userId);
+		if (dto == null) {
+			dto = new ImUserFriendDto();
+			SysUser user = sysUserFeignService.queryUserById(userId);
+			dto.setFriend(user);
+			if (user.getUserType().contains("TEACHER")) {
+				dto.setFriendNickname(user.getRealName());
+			} else {
+				dto.setFriendNickname(user.getUsername());
+			}
+			dto.setFriendId(userId);
+		}
+		return succeed(dto);
+	}
+
+	@ApiOperation("查询好友列表")
+	@GetMapping(value = "/queryFriendList")
+	public Object queryFriendList(String search) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUser.getId(), search));
+	}
+
+	@ApiOperation("查询好友中的学生列表")
+	@GetMapping(value = "/queryFriendStudentList")
+	public Object queryFriendStudentList(String search) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (Objects.isNull(sysUser)) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(imUserFriendService.queryFriendListByUserId(sysUser.getId(), search).stream().filter(e -> StringUtils.isBlank(e.getTags()))
+				.collect(Collectors.toList()));
+	}
+
+	@ApiOperation("查询群公告列表")
+	@GetMapping(value = "/queryNoticeList")
+	public Object queryNoticeList(ImGroupNoticeQueryInfo queryInfo) {
+		return succeed(imGroupNoticeService.queryPage(queryInfo));
+	}
+}

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java

@@ -1,5 +1,6 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
 import com.ym.mec.biz.dal.dto.MusicGroupRegsDto;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -290,4 +291,11 @@ public class MusicGroupController extends BaseController {
 		return succeed(musicGroupService.addMusicGroupRegs(musicGroupRegsDto.getMusicGroupId(),musicGroupRegsDto.getRegisterIds()));
 	}
 
+	@ApiOperation(value = "关闭乐团")
+	@PostMapping("/closeMusicGroup")
+	@PreAuthorize("@pcs.hasPermissions('musicGroup/closeMusicGroup')")
+	public HttpResponseResult<Boolean> closeMusicGroup(CloseMusicGroupDto closeMusicGroupDto) {
+		return succeed(musicGroupService.closeMusicGroup(closeMusicGroupDto));
+	}
+
 }

+ 12 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java

@@ -11,6 +11,7 @@ import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.exception.BizException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -179,4 +180,15 @@ public class StudentRegistrationController extends BaseController {
         return succeed(studentRegistrationService.getClassGroupCourseExpectPrice(classGroupIds));
     }
 
+    @ApiOperation(value = "删除报名的学生")
+    @PostMapping("/del")
+    @PreAuthorize("@pcs.hasPermissions('studentRegistration/del')")
+    public HttpResponseResult<Boolean> del(Long id) {
+        StudentRegistration studentRegistration = studentRegistrationService.get(id);
+        if(studentRegistration == null){
+            return failed("删除的报名信息不存在");
+        }
+        return succeed(studentRegistrationService.delReg(id));
+    }
+
 }

+ 12 - 13
mec-web/src/main/java/com/ym/mec/web/controller/education/ImGroupNoticeController.java

@@ -1,23 +1,22 @@
 package com.ym.mec.web.controller.education;
 
-import com.ym.mec.auth.api.client.SysUserFeignService;
-import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.entity.ImGroupNotice;
-import com.ym.mec.biz.dal.page.GroupNoticeQueryInfo;
-import com.ym.mec.biz.service.ImGroupNoticeService;
-import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.common.page.QueryInfo;
-import com.ym.mec.im.ImFeignService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+
+import java.util.Date;
+
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
-import java.util.Date;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ImGroupNotice;
+import com.ym.mec.biz.dal.page.ImGroupNoticeQueryInfo;
+import com.ym.mec.biz.service.ImGroupNoticeService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.im.ImFeignService;
 
 /**
  * @Author Joburgess
@@ -65,13 +64,13 @@ public class ImGroupNoticeController extends BaseController {
     @RequestMapping("/getNewNotice")
     @PreAuthorize("@pcs.hasPermissions('imGroupNotice/getNewNotice','system')")
     public Object getNewNotice(Long groupId) {
-        return succeed(imGroupNoticeService.getNewNotice(groupId));
+        return succeed(imGroupNoticeService.queryLatestNotice(groupId));
     }
 
     @ApiOperation(value = "获取群公告列表")
     @RequestMapping("/queryNoticePage")
     @PreAuthorize("@pcs.hasPermissions('imGroupNotice/queryNoticePage','system')")
-    public Object queryPage(GroupNoticeQueryInfo queryInfo) {
+    public Object queryPage(ImGroupNoticeQueryInfo queryInfo) {
         return succeed(imGroupNoticeService.queryPage(queryInfo));
     }