Jelajahi Sumber

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

Joburgess 4 tahun lalu
induk
melakukan
fe9b265686

+ 16 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -235,6 +235,22 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<ImGroupModel> queryTeacherQuitGroups(@Param("userId") Integer userId);
 
     /**
+     * 获取员工关联的预报名的群聊
+     *
+     * @param userId
+     * @return
+     */
+    List<ImGroupModel> queryQuitApplyGroups(@Param("userId") Integer userId);
+
+    /**
+     * 获取员工关联的预报名的群聊
+     *
+     * @param userId
+     * @return
+     */
+    List<ImGroupModel> queryApplyGroups(@Param("transferUserId") Integer transferUserId, @Param("userId") Integer userId, @Param("organId") Integer organId);
+
+    /**
      * 获取教务老师关联的群列表
      *
      * @param userId

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CooperationOrganDao.java

@@ -54,4 +54,12 @@ public interface CooperationOrganDao extends BaseDAO<Integer, CooperationOrgan>
      * @return
      */
     List<CooperationOrgan> getCooperationOrganByIds(@Param("ids") List<Integer> ids);
+
+    /**
+     * 修改合作单位乐团主管
+     * @param transferUserId
+     * @param levelUserId
+     * @param organId
+     */
+    void batchUpdateEduId(@Param("transferUserId") Integer transferUserId, @Param("levelUserId") Integer levelUserId, @Param("organId") Integer organId);
 }

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

@@ -32,4 +32,6 @@ public interface ImGroupDao extends BaseDAO<Long, ImGroup> {
     int updateNickname(@Param("userId") Integer userId, @Param("nickName") String nickName);
 
 	int updateUserFriendNickname(@Param("userId") Integer userId, @Param("nickName") String nickName);
+
+    void updateMemberNum();
 }

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

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.dal.dao;
 
 import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 import org.apache.ibatis.annotations.Param;
 
@@ -18,4 +20,11 @@ public interface ImGroupMemberDao extends BaseDAO<Long, ImGroupMember> {
 	int batchUpdate(List<ImGroupMember> imGroupMemberList);
 	
 	int batchInsert(List<ImGroupMember> imGroupMemberList);
+
+	void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList);
+
+	boolean isExit(@Param("groupId") String groupId, @Param("userId") String userId);
+
+	void delRepeat();
+
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import com.ym.mec.biz.dal.entity.ImGroupMember;
 import com.ym.mec.common.service.BaseService;
@@ -59,4 +60,27 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	 */
 	boolean updateRoleType(Long imGroupId, Integer userId, String roleType);
 
+	void batchInsert(List<ImGroupMember> imGroupMemberList);
+
+	/**
+	 * 批量删除
+	 * @param imGroupMemberList
+	 */
+	void batchDelete(List<ImGroupMember> imGroupMemberList);
+
+	/**
+	 * 根据群编号和用户编号批量删除
+	 * @param imGroupMemberList
+	 */
+	void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList);
+
+	/**
+	 * 是否在群里
+	 * @param groupId
+	 * @param userId
+	 * @return
+	 */
+	boolean isExit(String groupId, String userId);
+
+	void delRepeat();
 }

+ 8 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationOrganServiceImpl.java

@@ -54,7 +54,7 @@ public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, Cooper
 		CooperationOrgan cooperationOrgan1 = cooperationOrganDao.get(cooperationOrgan.getId());
 		//修改了乐团主管后,修改关联乐团的乐团主管
 		if(!cooperationOrgan.getEducationUserId().equals(cooperationOrgan1.getEducationUserId())){
-			//获取进行中和暂停的乐团列表
+			//获取进行中、暂停、筹备中的乐团列表
 			List<MusicGroup> musicGroups = musicGroupDao.findByCooperationIdAndStatus(cooperationOrgan.getId());
 			if(musicGroups.size() > 0){
 				for (MusicGroup musicGroup : musicGroups) {
@@ -82,16 +82,13 @@ public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, Cooper
 			List<MusicGroup> musicGroupList = musicGroupDao.findByCooperationId(cooperationOrgan.getId());
 			if(musicGroupList.size() > 0){
 				for (MusicGroup musicGroup : musicGroupList) {
-					//乐团主管有变更
-					if(!cooperationOrgan.getEducationUserId().equals(musicGroup.getEducationalTeacherId())){
-						//不是导入的乐团
-						if(musicGroup.getId().length() > 10){
-							//是否有预报名的群聊
-							ImGroup imGroup = imGroupService.get(Long.parseLong(musicGroup.getId()));
-							if(imGroup != null){
-								imGroupMemberService.quit(Long.parseLong(musicGroup.getId()),musicGroup.getEducationalTeacherId());
-								imGroupMemberService.join(Long.parseLong(musicGroup.getId()),cooperationOrgan.getEducationUserId(),"乐团主管",false);
-							}
+					//不是导入的乐团
+					if(musicGroup.getId().length() > 10){
+						//是否有预报名的群聊
+						ImGroup imGroup = imGroupService.get(Long.parseLong(musicGroup.getId()));
+						if(imGroup != null){
+							imGroupMemberService.quit(Long.parseLong(musicGroup.getId()),musicGroup.getEducationalTeacherId());
+							imGroupMemberService.join(Long.parseLong(musicGroup.getId()),cooperationOrgan.getEducationUserId(),"乐团主管",false);
 						}
 					}
 				}

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

@@ -3,11 +3,14 @@ package com.ym.mec.biz.service.impl;
 import java.util.*;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.service.ImGroupService;
 import com.ym.mec.biz.service.ImUserFriendService;
+import com.ym.mec.im.entity.GroupMember;
+import com.ym.mec.im.entity.GroupModel;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -41,7 +44,7 @@ import org.springframework.util.CollectionUtils;
 
 @Service
 public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  implements EmployeeService {
-	
+
 	@Autowired
 	private EmployeeDao employeeDao;
 	@Autowired
@@ -62,6 +65,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	private OrganizationDao organizationDao;
 	@Autowired
 	private ImGroupDao imGroupDao;
+	@Autowired
+	private CooperationOrganDao cooperationOrganDao;
 
 	@Override
 	public BaseDAO<Integer, Employee> getDAO() {
@@ -256,8 +261,10 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	public void level(List<EmployeeLevelDto> employeeLevelDtos) {
 		Integer levelUserId = employeeLevelDtos.get(0).getLevelUserId();
 		List<ImGroupModel> educationGroupModels = new ArrayList<>();
-		List<ImGroupModel> teamGroupModels = new ArrayList<>();
-		List<ImGroupModel> directorGroupModels = new ArrayList<>();
+//		List<ImGroupModel> teamGroupModels = new ArrayList<>();
+//		List<ImGroupModel> directorGroupModels = new ArrayList<>();
+		//获取用户需要加入的预报名群聊
+//		List<ImGroupModel> applyGroupModels = new ArrayList<>();
 		//获取用户担任教务老师的所有乐团列表
 		List<String> musicGroupIds = employeeDao.queryMusicGroupIdByUserId(levelUserId);
 		//获取用户担任教务老师的所有网管课列表
@@ -267,6 +274,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		//获取用户需要加入的群组列表
 		Map<String, List<EmployeeLevelDto>> collect = employeeLevelDtos.stream().collect(Collectors.groupingBy(e -> e.getRoleName()));
 		Set<String> roleNames = collect.keySet();
+		Set<Integer> userIds = new HashSet<>();
 		for (String roleName : roleNames) {
 			List<EmployeeLevelDto> levelDtos = collect.get(roleName);
 			Map<Integer, List<EmployeeLevelDto>> organIdMap = levelDtos.stream().collect(Collectors.groupingBy(e -> e.getOrganId()));
@@ -277,28 +285,60 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 					if(employeeLevelDto.getLevelUserId() == employeeLevelDto.getTransferUserId()){
 						throw new BizException("交接人校验失败,请重新填写");
 					}
+					userIds.add(employeeLevelDto.getTransferUserId());
+					//获取关联的预报名的群聊
+					educationGroupModels.addAll(classGroupDao.queryApplyGroups(employeeLevelDto.getTransferUserId(),levelUserId,organId));
 					switch (roleName){
 						case "education":
+							//替换当前分部合作单位关联的乐团主管
+							cooperationOrganDao.batchUpdateEduId(employeeLevelDto.getTransferUserId(),levelUserId,organId);
 							//教务老师所需加入的群组
 							educationGroupModels.addAll(classGroupDao.queryEducationGroups(employeeLevelDto.getTransferUserId(),levelUserId,organId));
 							break;
 						case "teamTeacher":
 							//运营主管所需加入的群组
-							teamGroupModels.addAll(classGroupDao.queryTeamTeacherGroups(employeeLevelDto.getTransferUserId(),levelUserId,organId));
+							educationGroupModels.addAll(classGroupDao.queryTeamTeacherGroups(employeeLevelDto.getTransferUserId(),levelUserId,organId));
 							break;
 						case "director":
 							//乐队指导所需加入的群组
-							directorGroupModels.addAll(classGroupDao.queryDirectorGroups(employeeLevelDto.getTransferUserId(),levelUserId,organId));
+							educationGroupModels.addAll(classGroupDao.queryDirectorGroups(employeeLevelDto.getTransferUserId(),levelUserId,organId));
 							break;
 					}
 				}
 			}
 		}
+		Date date = new Date();
+//		educationGroupModels.addAll(applyGroupModels);
+//		educationGroupModels.addAll(educationGroupModels);
+//		educationGroupModels.addAll(teamGroupModels);
 		if(educationGroupModels.size() > 0){
+			Map<Integer, String> realNameMap = MapUtil.convertIntegerMap(teacherDao.queryNameByIdList(new ArrayList<>(userIds)));
 			//❤️用户加群
+			List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
+			List<GroupModel> groupModelList = new ArrayList<>();
 			for (ImGroupModel imGroupModel : educationGroupModels) {
-				Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
-				
+				String userId = imGroupModel.getMemberList().get(0).getId();
+				com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember();
+				imGroupMember.setCreateTime(date);
+				imGroupMember.setImGroupId(Long.parseLong(imGroupModel.getId()));
+				imGroupMember.setIsAdmin(false);
+				imGroupMember.setRoleType(imGroupModel.getUserRole());
+				imGroupMember.setUpdateTime(date);
+				imGroupMember.setUserId(Integer.parseInt(userId));
+				imGroupMember.setNickname(realNameMap.get(imGroupMember.getUserId()));
+				imGroupMemberList.add(imGroupMember);
+				GroupMember groupMember = new GroupMember(userId, imGroupModel.getId());
+				GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[] { groupMember }, imGroupModel.getName());
+				groupModelList.add(groupModel);
+			}
+			imGroupMemberService.batchInsert(imGroupMemberList);
+			imFeignService.groupBatchJoin(groupModelList);
+		}
+		/*if(educationGroupModels.size() > 0){
+			//❤️用户加群
+			for (ImGroupModel imGroupModel : educationGroupModels) {
+				Map<Integer,String> userRoleMap = new HashMap<>();
+
 				List<ImGroupMember> memberList = imGroupModel.getMemberList();
 				for(ImGroupMember member : memberList){
 					userRoleMap.put(Integer.parseInt(member.getId()), "乐团主管");
@@ -310,7 +350,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 			//❤️用户加群
 			for (ImGroupModel imGroupModel : teamGroupModels) {
 				Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
-				
+
 				List<ImGroupMember> memberList = imGroupModel.getMemberList();
 				for(ImGroupMember member : memberList){
 					userRoleMap.put(Integer.parseInt(member.getId()), "运营主管");
@@ -322,22 +362,42 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 			//❤️用户加群
 			for (ImGroupModel imGroupModel : directorGroupModels) {
 				Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
-				
+
 				List<ImGroupMember> memberList = imGroupModel.getMemberList();
 				for(ImGroupMember member : memberList){
 					userRoleMap.put(Integer.parseInt(member.getId()), "乐队指导");
 				}
 				imGroupMemberService.join(Long.parseLong(imGroupModel.getId()), userRoleMap);
 			}
-		}
+		}*/
 		//原有员工退群
 		List<ImGroupModel> groupModels = classGroupDao.queryTeacherQuitGroups(levelUserId);
-		if(groupModels.size() > 0){
+		/*if(groupModels.size() > 0){
+
 			List<Long> imGroupIdList = new ArrayList<Long>();
 			for (ImGroupModel imGroupModel : groupModels) {
 				imGroupIdList.add(Long.parseLong(imGroupModel.getId()));
 			}
 			imGroupMemberService.quit(imGroupIdList, levelUserId);
+		}*/
+		//原有员工退预报名群
+		groupModels.addAll(classGroupDao.queryQuitApplyGroups(levelUserId));
+//		groupModels.addAll(imGroupModels);
+		if(groupModels.size() > 0){
+			List<com.ym.mec.biz.dal.entity.ImGroupMember> imGroupMemberList = new ArrayList<>();
+			List<GroupModel> groupModelList = new ArrayList<>();
+			for (ImGroupModel imGroupModel : groupModels) {
+				com.ym.mec.biz.dal.entity.ImGroupMember imGroupMember = new com.ym.mec.biz.dal.entity.ImGroupMember();
+				imGroupMember.setImGroupId(Long.parseLong(imGroupModel.getId()));
+				imGroupMember.setUserId(Integer.parseInt(imGroupModel.getMemberList().get(0).getId()));
+				imGroupMemberList.add(imGroupMember);
+
+				GroupMember groupMember = new GroupMember(imGroupMember.getUserId().toString(), imGroupModel.getId());
+				GroupModel groupModel = new GroupModel(imGroupModel.getId(), new GroupMember[] { groupMember }, imGroupModel.getName());
+				groupModelList.add(groupModel);
+			}
+			imGroupMemberService.batchDeleteByGroupIdAndUserId(imGroupMemberList);
+			imFeignService.groupBatchQuit(groupModelList);
 		}
 		//更换教务老师等数据
 		employeeDao.employeeLevel(employeeLevelDtos);
@@ -360,6 +420,10 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 				imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.VIP);
 			}
 		}
+		//更新群成员数量
+		imGroupDao.updateMemberNum();
+		//删除重复的群成员
+		imGroupMemberService.delRepeat();
 	}
 
 	@Override

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

@@ -4,10 +4,13 @@ import java.util.*;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.common.entity.ImGroupModel;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -298,4 +301,29 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		return true;
 	}
 
+	@Override
+	public void batchInsert(List<ImGroupMember> imGroupMemberList) {
+		imGroupMemberDao.batchInsert(imGroupMemberList);
+	}
+
+	@Override
+	public void batchDelete(List<ImGroupMember> imGroupMemberList) {
+		imGroupMemberDao.batchDelete(imGroupMemberList);
+	}
+
+	@Override
+	public void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList) {
+		imGroupMemberDao.batchDeleteByGroupIdAndUserId(imGroupMemberList);
+	}
+
+	@Override
+	public boolean isExit(String groupId, String userId) {
+		return imGroupMemberDao.isExit(groupId,userId);
+	}
+
+	@Override
+	public void delRepeat() {
+		imGroupMemberDao.delRepeat();
+	}
+
 }

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

@@ -2564,7 +2564,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private void updateTeamTeacher(MusicGroup oldMusicGroup, MusicGroup newMusicGroup) {
         //获取当前乐团所有班级
         List<ClassGroup> classGroups = classGroupDao.findClassGroups(newMusicGroup.getId());
-        if (classGroups != null || classGroups.size() == 0) {
+        if (classGroups == null || classGroups.size() == 0) {
             return;
         }
         List<Integer> quitUserIdList = new ArrayList<>();
@@ -2627,8 +2627,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if(cooperationOrgan.getEducationUserId() == null){
             throw new BizException("操作失败:请先配置合作单位: {} 关联的乐团主管",cooperationOrgan.getName());
         }
+        boolean refresh = false;
         musicGroup.setEducationalTeacherId(cooperationOrgan.getEducationUserId());
         if (group.getStatus() == MusicGroupStatusEnum.PROGRESS) {
+            refresh = true;
             updateTeamTeacher(group, musicGroup);
         }
         //不是导入的乐团
@@ -2636,6 +2638,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //是否有预报名的群聊
             ImGroup imGroup = imGroupService.get(Long.parseLong(musicGroupId));
             if(imGroup != null){
+                refresh = true;
                 List<Integer> quitUserIdList = new ArrayList<>();
                 if(group.getTeamTeacherId() != null){
                     quitUserIdList.add(group.getTeamTeacherId());
@@ -2691,7 +2694,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (subFeeSettingDto.getMusicGroupPaymentEntities() != null && subFeeSettingDto.getMusicGroupPaymentEntities().size() > 0) {
             musicGroupPaymentEntitiesDao.batchAdd(subFeeSettingDto.getMusicGroupPaymentEntities(), musicGroupId);
         }
-        if (group.getStatus() == MusicGroupStatusEnum.PROGRESS) {
+        if (refresh) {
             imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC);
         }
         //记录操作日志

+ 30 - 7
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -316,6 +316,7 @@
         <result column="img_" property="img"/>
         <result column="teacher_ids_" property="teacherIds"/>
         <result column="group_name_" property="groupName"/>
+        <result column="user_role_" property="userRole"/>
         <collection property="memberList" ofType="com.ym.mec.common.entity.ImGroupMember">
             <result property="id" column="user_id_"/>
         </collection>
@@ -513,13 +514,35 @@
         LEFT JOIN courses_group csg ON csg.id_ = cg.music_group_id_
         WHERE cgtm.user_id_ != #{userId} AND cg.del_flag_ = 0
         AND ((vg.educational_teacher_id_ =  #{userId} AND vg.group_status_ IN (2,6) AND cg.group_type_ = 'VIP')
-        OR (mg.status_ IN ('PROGRESS','PAUSE') AND cg.group_type_ = 'MUSIC' AND (mg.team_teacher_id_ = #{userId} OR mg.educational_teacher_id_ = #{userId} OR mg.director_user_id_ = #{userId}))
+        OR (mg.status_ IN ('PROGRESS','PAUSE','PREPARE') AND cg.group_type_ = 'MUSIC' AND (mg.team_teacher_id_ = #{userId} OR mg.educational_teacher_id_ = #{userId} OR mg.director_user_id_ = #{userId}))
         OR (csg.educational_teacher_id_ =  #{userId} AND csg.status_ = 'NORMAL' AND cg.group_type_ = 'COMM'))
         GROUP BY cg.id_
     </select>
 
+    <select id="queryQuitApplyGroups" resultMap="imGroupModel">
+        SELECT mg.id_,ig.name_,#{userId} user_id_
+        FROM music_group mg
+        LEFT JOIN im_group ig ON ig.id_ = mg.id_
+        LEFT JOIN im_group_member igm ON igm.im_group_id_ = ig.id_
+        WHERE LENGTH(mg.id_) > 10 AND (mg.educational_teacher_id_ = #{userId} OR mg.director_user_id_ = #{userId} OR mg.team_teacher_id_ = #{userId})
+        AND ig.id_ IS NOT NULL AND mg.del_flag_ = 0 AND igm.user_id_ = #{userId}
+    </select>
+    <select id="queryApplyGroups" resultMap="imGroupModel">
+        SELECT mg.id_,ig.name_,#{transferUserId} user_id_,
+        CASE WHEN mg.educational_teacher_id_ = #{userId} THEN '乐团主管' WHEN mg.team_teacher_id_ = #{userId} THEN '运营主管' ELSE '乐队指导' END user_role_
+        FROM music_group mg
+        LEFT JOIN im_group ig ON ig.id_ = mg.id_
+        LEFT JOIN im_group_member igm ON igm.im_group_id_ = ig.id_ AND igm.user_id_ = #{transferUserId}
+        WHERE LENGTH(mg.id_) > 10 AND (mg.educational_teacher_id_ = #{userId} OR mg.director_user_id_ = #{userId} OR mg.team_teacher_id_ = #{userId})
+        AND ig.id_ IS NOT NULL AND igm.id_ IS NULL AND mg.del_flag_ = 0
+        <if test="organId != null">
+            AND mg.organ_id_ = #{organId}
+        </if>
+    </select>
+
     <select id="queryEducationGroups" resultMap="imGroupModel">
-        SELECT cg.id_,CASE WHEN cg.group_name_ IS NULL OR cg.group_name_ = '' THEN cg.name_ ELSE cg.group_name_ END name_,#{transferUserId} user_id_
+        SELECT cg.id_,CASE WHEN cg.group_name_ IS NULL OR cg.group_name_ = '' THEN cg.name_ ELSE cg.group_name_ END name_,#{transferUserId} user_id_,
+        '乐团主管' user_role_
         FROM class_group_teacher_mapper cgtm
         LEFT JOIN class_group cg ON cgtm.class_group_id_ = cg.id_
         LEFT JOIN music_group mg ON mg.id_ = cg.music_group_id_
@@ -527,27 +550,27 @@
         LEFT JOIN courses_group csg ON csg.id_ = cg.music_group_id_
         WHERE cg.del_flag_ = 0 AND
         ((vg.group_status_ IN (2,6) AND cg.group_type_ = 'VIP' AND vg.educational_teacher_id_ =  #{userId} AND vg.organ_id_ = #{organId})
-        OR (mg.status_ IN ('PROGRESS','PAUSE') AND cg.group_type_ = 'MUSIC' AND mg.educational_teacher_id_ =  #{userId} AND mg.organ_id_ = #{organId})
+        OR (mg.status_ IN ('PROGRESS','PAUSE','PREPARE') AND cg.group_type_ = 'MUSIC' AND mg.educational_teacher_id_ =  #{userId} AND mg.organ_id_ = #{organId})
         OR (csg.status_ = 'NORMAL' AND cg.group_type_ = 'COMM' AND csg.educational_teacher_id_ =  #{userId} AND csg.organ_id_ = #{organId}))
         GROUP BY cg.id_
     </select>
 
     <select id="queryTeamTeacherGroups" resultMap="imGroupModel">
         SELECT cg.id_,CASE WHEN cg.group_name_ IS NULL OR cg.group_name_ = '' THEN cg.name_ ELSE cg.group_name_ END name_,
-               #{transferUserId} user_id_
+               #{transferUserId} user_id_,'运营主管' user_role_
         FROM class_group_teacher_mapper cgtm
         LEFT JOIN class_group cg ON cgtm.class_group_id_ = cg.id_
         LEFT JOIN music_group mg ON mg.id_ = cg.music_group_id_
-        WHERE mg.team_teacher_id_ = #{userId} AND cg.del_flag_ = 0 AND mg.status_ IN ('PROGRESS','PAUSE')  AND cg.group_type_ = 'MUSIC'
+        WHERE mg.team_teacher_id_ = #{userId} AND cg.del_flag_ = 0 AND mg.status_ IN ('PROGRESS','PAUSE','PREPARE')  AND cg.group_type_ = 'MUSIC'
         GROUP BY cg.id_
     </select>
 
     <select id="queryDirectorGroups" resultMap="imGroupModel">
-        SELECT cg.id_,CASE WHEN cg.group_name_ IS NULL OR cg.group_name_ = '' THEN cg.name_ ELSE cg.group_name_ END name_,#{transferUserId} user_id_
+        SELECT cg.id_,CASE WHEN cg.group_name_ IS NULL OR cg.group_name_ = '' THEN cg.name_ ELSE cg.group_name_ END name_,#{transferUserId} user_id_,'乐队指导' user_role_
         FROM class_group_teacher_mapper cgtm
         LEFT JOIN class_group cg ON cgtm.class_group_id_ = cg.id_
         LEFT JOIN music_group mg ON mg.id_ = cg.music_group_id_ AND cg.group_type_ = 'MUSIC'
-        WHERE mg.director_user_id_ = #{userId} AND cg.del_flag_ = 0 AND mg.status_ IN ('PROGRESS','PAUSE')
+        WHERE mg.director_user_id_ = #{userId} AND cg.del_flag_ = 0 AND mg.status_ IN ('PROGRESS','PAUSE','PREPARE')
         GROUP BY cg.id_
     </select>
 

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml

@@ -101,6 +101,10 @@
         WHERE id_ = #{id}
     </update>
 
+    <update id="batchUpdateEduId">
+        UPDATE cooperation_organ SET education_user_id_ = #{transferUserId} WHERE organ_id_ = #{organId} AND education_user_id_ = #{levelUserId}
+    </update>
+
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="ExtCooperationOrgan"
             parameterType="map">

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

@@ -359,7 +359,7 @@
     <select id="queryMusicGroupIdByUserId" resultType="java.lang.String">
         SELECT DISTINCT id_ FROM music_group
         WHERE (director_user_id_ = #{levelUserId} OR educational_teacher_id_ = #{levelUserId} OR team_teacher_id_ = #{levelUserId})
-        AND status_ IN ('PROGRESS','PAUSE')
+        AND status_ IN ('PROGRESS','PAUSE','PREPARE')
     </select>
 
     <select id="queryPracticeGroupIdByUserId" resultType="java.lang.String">

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

@@ -98,6 +98,12 @@
 	<update id="updateUserFriendNickname">
 		UPDATE im_user_friend SET friend_nickname_ = #{nickName} WHERE friend_id_ = #{userId};
 	</update>
+	<update id="updateMemberNum">
+		UPDATE im_group ig
+		LEFT JOIN (SELECT COUNT(id_) num_,im_group_id_ FROM im_group_member GROUP BY im_group_id_) igm ON ig.id_ = igm.im_group_id_
+		SET member_num_ = igm.num_
+		WHERE ig.id_ = igm.im_group_id_
+	</update>
 
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >

+ 13 - 1
mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml

@@ -112,8 +112,20 @@
             #{item.id}
         </foreach>
 	</delete>
-	
+	<delete id="batchDeleteByGroupIdAndUserId">
+		<foreach collection="list" item="item" separator=";">
+			DELETE FROM im_group_member WHERE im_group_id_ = #{item.imGroupId} AND user_id_ = #{item.userId}
+		</foreach>
+	</delete>
+	<delete id="delRepeat">
+		DELETE FROM im_group_member
+				WHERE id_ IN (SELECT a.id_ FROM (SELECT id_ FROM im_group_member GROUP BY im_group_id_,user_id_ HAVING COUNT(user_id_) > 1) a)
+	</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_,#{userIdList})
 	</select>
+	<select id="isExit" resultType="java.lang.Boolean">
+		SELECT COUNT(DISTINCT userId) FROM im_group_member WHERE im_group_id_ = #{groupId} AND user_id_ = #{userId}
+	</select>
 </mapper>

+ 2 - 4
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -106,6 +106,7 @@
                 status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             repair_user_id_ = #{repairUserId},
+            transaction_teacher_id_ = #{transactionTeacherId},
             <if test="organId != null">
                 organ_id_ = #{organId},
             </if>
@@ -121,9 +122,6 @@
             <if test="educationalTeacherId != null">
                 educational_teacher_id_ = #{educationalTeacherId},
             </if>
-            <if test="transactionTeacherId != null">
-                transaction_teacher_id_ = #{transactionTeacherId},
-            </if>
             <if test="enrollClasses != null">
                 enroll_classes_ = #{enrollClasses},
             </if>
@@ -754,6 +752,6 @@
         SELECT * FROM music_group WHERE cooperation_organ_id_ = #{cooperationOrganId}
     </select>
     <select id="findByCooperationIdAndStatus" resultMap="MusicGroup">
-        SELECT * FROM music_group WHERE cooperation_organ_id_ = #{cooperationOrganId} AND status_ IN ('PROGRESS','PAUSE')
+        SELECT * FROM music_group WHERE cooperation_organ_id_ = #{cooperationOrganId} AND status_ IN ('PROGRESS','PAUSE','PREPARE')
     </select>
 </mapper>

+ 26 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImGroupModel.java

@@ -1,6 +1,8 @@
 package com.ym.mec.common.entity;
 
+import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 
 public class ImGroupModel{
     //群组编号
@@ -17,6 +19,7 @@ public class ImGroupModel{
     private Integer minute;
     private Integer count;
     private Integer status;
+    private String userRole;
 
     public ImGroupModel() {
     }
@@ -36,6 +39,14 @@ public class ImGroupModel{
         this.name = name;
     }
 
+    public String getUserRole() {
+        return userRole;
+    }
+
+    public void setUserRole(String userRole) {
+        this.userRole = userRole;
+    }
+
     public List<ImGroupMember> getMemberList() {
         return memberList;
     }
@@ -134,4 +145,19 @@ public class ImGroupModel{
         this.status = status;
         return this;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        ImGroupModel that = (ImGroupModel) o;
+        return id.equals(that.id) && Arrays.equals(members, that.members) && memberList.equals(that.memberList);
+    }
+
+    @Override
+    public int hashCode() {
+        int result = Objects.hash(id, memberList);
+        result = 31 * result + Arrays.hashCode(members);
+        return result;
+    }
 }

+ 1 - 1
mec-im/src/main/java/com/ym/config/ResourceServerConfig.java

@@ -11,7 +11,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
     @Override
     public void configure(HttpSecurity http) throws Exception {
         http.authorizeRequests().antMatchers("/v2/api-docs","/user/register",
-                "/group/join","/group/create","/room/leave","/room/statusSync",
+                "/group/join","/group/create","/group/quit","/room/leave","/room/statusSync",
                 "/room/statusImMsg","/group/batchDismiss","/private/send","/group/send","/group/dismiss","/room/statusImMsg").permitAll().anyRequest().authenticated().and().csrf().disable();
     }
 }

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

@@ -21,10 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @Author Joburgess
@@ -189,13 +186,19 @@ public class EmployeeController extends BaseController {
         }else{
             organIds = organId.toString();
         }
-        if(employeeRole == EmployeeRoleEnum.TEAM_TEACHER){
-            return succeed(employeeService.findByRole("5",organIds));
+        HashMap<String, Object> map = new HashMap<>();
+        if(employeeRole == null){
+            map.put("TEAM_TEACHER",employeeService.findByRole("5",organIds));
+            map.put("TRANSACTION",employeeService.findByRole("58",organIds));
+            map.put("EDUCATION",employeeService.findByRole("4",organIds));
+        }else if(employeeRole == EmployeeRoleEnum.TEAM_TEACHER){
+            map.put("TEAM_TEACHER",employeeService.findByRole("5",organIds));
         }else if(employeeRole == EmployeeRoleEnum.TRANSACTION){
-            return succeed(employeeService.findByRole("58",organIds));
+            map.put("TRANSACTION",employeeService.findByRole("58",organIds));
         }else {
-            return succeed(employeeService.findByRole("4",organIds));
+            map.put("EDUCATION",employeeService.findByRole("4",organIds));
         }
+        return succeed(map);
     }
 
     @ApiOperation(value = "获取教务老师")