Explorar o código

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
Joburgess %!s(int64=4) %!d(string=hai) anos
pai
achega
6bf09c396f
Modificáronse 24 ficheiros con 293 adicións e 203 borrados
  1. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/EmployeeDao.java
  2. 0 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImUserFriendDao.java
  3. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MusicGroupStatusEnum.java
  4. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  5. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderService.java
  6. 38 42
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  7. 16 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  8. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  9. 25 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  10. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  11. 22 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java
  12. 21 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  13. 34 67
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  14. 37 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  15. 35 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java
  16. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  17. 1 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  18. 16 0
      mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml
  19. 1 11
      mec-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml
  20. 2 2
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  21. 1 1
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  22. 1 1
      mec-im/src/main/java/com/ym/config/ResourceServerConfig.java
  23. 2 11
      mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java
  24. 0 7
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java

+ 19 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/EmployeeDao.java

@@ -175,4 +175,23 @@ public interface EmployeeDao extends BaseDAO<Integer, Employee> {
      */
     List<SimpleUserDto> findAllByRole(@Param("roleIds") String roleIds,
                                    @Param("organIds") String organIds);
+
+    /**
+     * 获取离职员工所在的乐团列表
+     * @param levelUserId
+     * @return
+     */
+    List<String> queryMusicGroupIdByUserId(Integer levelUserId);
+    /**
+     * 获取离职员工所在的乐团列表
+     * @param levelUserId
+     * @return
+     */
+    List<String> queryPracticeGroupIdByUserId(Integer levelUserId);
+    /**
+     * 获取离职员工所在的乐团列表
+     * @param levelUserId
+     * @return
+     */
+    List<String> queryVipGroupIdByUserId(Integer levelUserId);
 }

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

@@ -1,11 +1,8 @@
 package com.ym.mec.biz.dal.dao;
 
 import java.util.List;
-import java.util.Set;
-
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 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;
@@ -30,12 +27,5 @@ public interface ImUserFriendDao extends BaseDAO<Long, ImUserFriend> {
 	 */
     void deleteByUserId(Integer teacherId);
 
-	/**
-	 * 批量新增
-	 * @param teachers
-	 * @param teacherId
-	 */
-	void batchInsert(@Param("teachers") Set<BasicUserDto> teachers, @Param("teacherId") Integer teacherId);
-
 	void insertByBasicUser(@Param("basicUserDto") BasicUserDto basicUserDto, @Param("teacherId") Integer teacherId);
 }

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

@@ -3,7 +3,8 @@ package com.ym.mec.biz.dal.enums;
 import com.ym.mec.common.enums.BaseEnum;
 
 public enum MusicGroupStatusEnum implements BaseEnum<String, MusicGroupStatusEnum> {
-	DRAFT("草稿"), AUDIT("审核中"), AUDIT_FAILED("审核失败"), PRE_APPLY("预报名"), PRE_BUILD_FEE("创建缴费"), FEE_AUDIT("费用审核中"), APPLY("报名中"), PAY("缴费中"), PREPARE("筹备中"), PROGRESS(
+	DRAFT("草稿"), AUDIT("审核中"), AUDIT_FAILED("审核失败"), PRE_APPLY("预报名"), PRE_BUILD_FEE("创建缴费"),
+	FEE_AUDIT("费用审核中"), APPLY("报名中"), PAY("缴费中"), PREPARE("筹备中"), PROGRESS(
 			"进行中"), CANCELED("取消"), PAUSE("暂停"), CLOSE("关闭");
 
 	private String msg;

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

@@ -489,7 +489,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param mergeClassSplitClassAffirmDto
      * @return
      */
-    String mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) throws InvocationTargetException, IllegalAccessException, Exception;
+    HttpResponseResult mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) throws InvocationTargetException, IllegalAccessException, Exception;
 
     /**
      * 进行中乐团-修改-班级详情-学员班级调整-合并结果确认-获取新班级的可排课时长
@@ -535,7 +535,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param mergeClassSplitClassAffirmDto
      * @return
      */
-    String spanGroupMergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto);
+    HttpResponseResult spanGroupMergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto);
 
     /**
      * 跨团合班缴费项目审核通过后

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

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderAuditDto;
 import com.ym.mec.biz.dal.dto.MusicGroupPaymentCalenderDto;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.page.MusicGroupPaymentCalenderQueryInfo;
 import com.ym.mec.common.page.PageInfo;
@@ -116,7 +117,7 @@ public interface MusicGroupPaymentCalenderService extends BaseService<Long, Musi
 	 * @author zouxuan
 	 * @param batchNo
 	 */
-	public void autoClassGroupAdjust(String batchNo);
+	public void autoClassGroupAdjust(MusicGroupStudentClassAdjust musicGroupStudentClassAdjust);
 
 	/**
 	 * @describe 审核拒绝

+ 38 - 42
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -7,6 +7,7 @@ import static com.ym.mec.biz.dal.enums.GroupType.COMM;
 import static com.ym.mec.biz.dal.enums.GroupType.MUSIC;
 import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
 import static com.ym.mec.biz.dal.enums.GroupType.VIP;
+import static com.ym.mec.biz.dal.enums.MusicGroupStatusEnum.PROGRESS;
 
 import java.math.BigDecimal;
 import java.time.Duration;
@@ -2179,7 +2180,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             Integer musicGroupStudentClassAdjustId = classGroup4MixDto.getMusicGroupStudentClassAdjustId();
             //学生结算表
             courseScheduleStudentPaymentService.createForMusicGroup(courseScheduleList, studentIdList, musicGroupStudentClassAdjustId);
-            imUserFriendService.refreshClassImUserFriend(classGroup.getId());
             return classGroup;
         }
         return null;
@@ -2202,23 +2202,25 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
 
         List<ClassGroupTeacherMapper> byClassGroup = classGroupTeacherMapperDao.findByClassGroup(classGroupId);
-        if (byClassGroup != null && byClassGroup.size() > 0) {
-            ClassGroupTeacherMapper groupTeacherMapper = byClassGroup.stream().filter(classGroupTeacherMapper -> classGroupTeacherMapper.getTeacherRole() == TeachTypeEnum.BISHOP).findFirst().get();
-            if (groupTeacherMapper != null) {
-                imGroupMemberService.quit(classGroupId.longValue(), groupTeacherMapper.getUserId());
-            }
-        }
-
         List<ClassGroupTeacherMapper> newTeacherMapperList = classGroup4MixDtos.get(0).getClassGroupTeacherMapperList();
-        if (newTeacherMapperList.size() > 0) {
-            //获取之前的班级老师
-            Set<Integer> groupTeacher = classGroupDao.findGroupTeacher(classGroupId);
-            groupTeacher.forEach(e -> {
-            	imGroupMemberService.quit(classGroupId.longValue(), e);
-            });
-            newTeacherMapperList.forEach(e -> {
-                imGroupMemberService.join(classGroupId.longValue(), e.getUserId(), "指导老师", false);
-            });
+        MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+        if(musicGroup.getStatus() == PROGRESS){
+            if (byClassGroup != null && byClassGroup.size() > 0) {
+                ClassGroupTeacherMapper groupTeacherMapper = byClassGroup.stream().filter(classGroupTeacherMapper -> classGroupTeacherMapper.getTeacherRole() == TeachTypeEnum.BISHOP).findFirst().get();
+                if (groupTeacherMapper != null) {
+                    imGroupMemberService.quit(classGroupId.longValue(), groupTeacherMapper.getUserId());
+                }
+            }
+            if (newTeacherMapperList.size() > 0) {
+                //获取之前的班级老师
+                Set<Integer> groupTeacher = classGroupDao.findGroupTeacher(classGroupId);
+                groupTeacher.forEach(e -> {
+                    imGroupMemberService.quit(classGroupId.longValue(), e);
+                });
+                newTeacherMapperList.forEach(e -> {
+                    imGroupMemberService.join(classGroupId.longValue(), e.getUserId(), "指导老师", false);
+                });
+            }
         }
         if (Objects.nonNull(classGroup4MixDtos.get(0).getCourseAddType()) && classGroup4MixDtos.get(0).getCourseAddType().equals("onlyUpdateTeacher")) {
             List<Integer> classGroupIds = new ArrayList<>();
@@ -2242,8 +2244,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
         classGroupService.updateTotalClassTimes(classGroup.getId(), courseTimes);
 
-        MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
-
         Integer schoolId = teachMode.equals(TeachModeEnum.ONLINE) ? null : musicGroup.getSchoolId();
 
         List<Subject> subjectList = subjectService.findBySubjectByIdList(classGroup.getSubjectIdList());
@@ -2272,11 +2272,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 .map(ClassGroupTeacherMapper::getUserId)
                 .collect(Collectors.toList());
 
-        //所有教师列表
-        List<Teacher> teachers = teacherDao.findByTeacherIds(allTeacherIds);
-        Map<Integer, Teacher> teacherMap = teachers.stream()
-                .collect(Collectors.toMap(Teacher::getId, teacher -> teacher));
-
         Set<String> newTeacher = newClassGroupTeacherMapperList.stream().map(
                 classGroupTeacherMapper -> classGroupTeacherMapper.getTeacherRole().getCode() + classGroupTeacherMapper.getUserId()
         ).collect(Collectors.toSet());
@@ -2313,7 +2308,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
             Integer totalMinutes = courseTypeMinutesMap.get(classGroup4MixDto.getCourseType().getCode());
             long totalCourseDuration = 0;
-//            classGroup4MixDto.setCourseTimes(totalMinutes/(int)courseDuration);
 
             if (classGroup4MixDto.getCourseTimes() <= 0) {
                 throw new BizException("{}课程类型剩余课程时长不足", classGroup4MixDto.getCourseType().getMsg());
@@ -2399,12 +2393,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             }
         }
 
-        //排课处理
-//        if (classGroup.getType().equals(ClassGroupTypeEnum.SNAP)) {
-//            courseScheduleService.checkSnapCourseShchedules(courseScheduleList);
-//        } else {
         courseScheduleService.checkNewCourseSchedules(courseScheduleList, false, false);
-//        }
 
         //老师结算表
         if (courseScheduleTeacherSalaryList.size() > 0) {
@@ -2417,7 +2406,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             //学生结算表
             courseScheduleStudentPaymentService.createForMusicGroup(musicGroupId, courseScheduleList, studentIds);
         }
-        imUserFriendService.refreshClassImUserFriend(classGroupId);
+        if(musicGroup.getStatus() == PROGRESS){
+            imUserFriendService.refreshClassImUserFriend(classGroupId);
+        }
         return classGroup;
     }
 
@@ -2981,9 +2972,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         	}
         }
         
-        imGroupService.create(classGroup.getId().longValue(), musicGroup.getTeamTeacherId(), classGroup.getName(), musicGroup.getName(), musicGroup.getName(), musicGroup.getName(), null, "MUSIC");
+        imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), musicGroup.getName(), musicGroup.getName(), musicGroup.getName(), null, "MUSIC");
         imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
-        imUserFriendService.refreshClassImUserFriend(classGroup.getId());
         return true;
     }
 
@@ -3341,9 +3331,6 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 settingsDetail.setCourseTotalNum(subNum.intValue());
                 settingsDetail.setCourseType(CourseScheduleType.valueOf(courseType));
                 settingsDetail.setUnitPrice(unitPrice);
-//                settingsDetail.setCourseTotalMinuties(Integer.parseInt(jsonObject.get(courseType).toString()) * subNum.intValue());
-//                settingsDetail.setCourseCurrentPrice(unitPrice.multiply(new BigDecimal(settingsDetail.getCourseTotalMinuties())));
-//                settingsDetail.setCourseOriginalPrice(settingsDetail.getCourseCurrentPrice());
                 courseMap.put(courseType, settingsDetail);
             }
             resultMap.put(classGroupId, courseMap);
@@ -3356,7 +3343,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
+    public HttpResponseResult mergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
         List<Integer> classGroupIds = mergeClassSplitClassAffirmDto.getClassGroupIds();
         if (classGroupIds == null || classGroupIds.size() == 0) {
             throw new BizException("参数校验失败");
@@ -3440,6 +3427,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         musicGroupStudentClassAdjustDao.insert(musicGroupStudentClassAdjust);
         //如果需要审核,校验参数配置
         checkMergeClassSplitClassAffirmParam(mergeClassSplitClassAffirmDto);
+        HttpResponseResult httpResponseResult = new HttpResponseResult();
+        httpResponseResult.setStatus(true);
+        httpResponseResult.setCode(200);
         //如果缴费项目不需要审核,那么生成班级以及课表
         if (status == null || status != AUDITING) {
             //每种课程类型单独进行排课
@@ -3473,14 +3463,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 //删除教师课酬
                 courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds);
             }
-            return "学员班级调整完成";
+            imUserFriendService.refreshGroupImUserFriend(musicGroup.getId(),MUSIC);
+            httpResponseResult.setMsg("学员班级调整完成");
         } else {
             //冻结班级
             classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
             //冻结所选班级的课程
             courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1);
-            return "学员班级调整申请已提交,缴费项目审核中";
+            httpResponseResult.setMsg("学员班级调整申请已提交,缴费项目审核中");
         }
+        return httpResponseResult;
     }
 
     public void checkMergeClassSplitClassAffirmParam(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
@@ -3699,7 +3691,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public String spanGroupMergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
+    public HttpResponseResult spanGroupMergeClassSplitClassAffirm(MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         //缴费项目
         MusicGroupPaymentCalenderDto paymentCalenderDto = mergeClassSplitClassAffirmDto.getMusicGroupPaymentCalenderDtos().get(0);
@@ -3781,18 +3773,22 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         List<Long> allLockCourseIds = courseScheduleDao.queryStudentNotStartByClassIdsAndStudentIds(classGroupIds, null);
         musicGroupStudentClassAdjust.setAllLockCourseIds(JSON.toJSONString(allLockCourseIds));
         musicGroupStudentClassAdjustDao.insert(musicGroupStudentClassAdjust);
+        HttpResponseResult httpResponseResult = new HttpResponseResult();
+        httpResponseResult.setCode(200);
+        httpResponseResult.setStatus(true);
         //没有需要审核的缴费项目
         if (paymentCalenderDto.getStatus() != AUDITING) {
             List<Map> classGroupStudents1 = JSON.parseArray(musicGroupStudentClassAdjust.getClassGroupStudents(),Map.class);
             spanGroupClassAdjustPass(masterClassGroupId,studentIds,courseIds,classGroupStudents1,allLockCourseIds,paymentCalenderDto.getBatchNo(),masterTotalPrice);
-            return "操作成功:学员班级调整完成";
+            httpResponseResult.setMsg("操作成功:学员班级调整完成");
         }else {
 //                冻结班级
             classGroupDao.batchUpdateLockByClassGroupIds(classGroupIds, 1);
 //                冻结所选班级的课程
             courseScheduleDao.batchUpdateLockByCourseIds(allLockCourseIds, 1);
-            return "操作成功:学员班级调整申请已提交,缴费项目审核中";
+            httpResponseResult.setMsg("操作成功:学员班级调整申请已提交,缴费项目审核中");
         }
+        return httpResponseResult;
     }
 
     @Override

+ 16 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -413,10 +413,10 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
             oldStudentIds = classGroupStudents.stream().map(ClassGroupStudentMapper::getUserId).collect(Collectors.toSet());
             oldNormalStudentIds = classGroupStudents.stream().filter(s -> ClassGroupStudentStatusEnum.NORMAL.equals(s.getStatus())).map(ClassGroupStudentMapper::getUserId).collect(Collectors.toSet());
         }
-
+        MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
         //线上基础技能班,原始分班人数不能小于3人大于6人
         if (classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) {
-            MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
+
             if (studentIds.size() < 3 && musicGroup.getStatus().equals(MusicGroupStatusEnum.PREPARE)) {
                 throw new BizException("线上基础技能班人数不能少于3人");
             }
@@ -526,21 +526,26 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         if (!CollectionUtils.isEmpty(removeStudentIds)) {
             courseScheduleDao.deleteMusicGroupCourseSchedulesWithStudents(courseIds, new ArrayList<>(removeStudentIds));
-            //5、学生退出班级群组
-            imGroupMemberService.quit(classGroup.getId().longValue(), new ArrayList<Integer>(addStudentIds));
+            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
+                //5、学生退出班级群组
+                imGroupMemberService.quit(classGroup.getId().longValue(), new ArrayList<Integer>(addStudentIds));
+            }
         }
 
         if (!CollectionUtils.isEmpty(addStudentIds)) {
             courseScheduleStudentPaymentService.createForMusicGroup(classGroup.getMusicGroupId(), classGroupNotStartCourse, new ArrayList<>(addStudentIds));
-            studentDao.updateStudentServiceTag(null, new ArrayList<>(addStudentIds), YesOrNoEnum.YES.getCode());
-            Map<Integer,String> userRoleMap = new HashMap<Integer, String>();
-            for (Integer addStudentId : addStudentIds) {
-            	userRoleMap.put(addStudentId, "");
+            if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
+                Map<Integer,String> userRoleMap = new HashMap<>();
+                for (Integer addStudentId : addStudentIds) {
+                    userRoleMap.put(addStudentId, "");
+                }
+                //5、添加进IM群组
+                imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
             }
-            //5、添加进IM群组
-            imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
         }
-        imUserFriendService.refreshClassImUserFriend(classGroup.getId());
+        if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){
+            imUserFriendService.refreshClassImUserFriend(classGroup.getId());
+        }
     }
 
     @Override

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

@@ -83,6 +83,8 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     @Autowired
     private ImGroupMemberService imGroupMemberService;
     @Autowired
+    private ImUserFriendService imUserFriendService;
+    @Autowired
     private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
     @Autowired
     private SysTenantAccountService sysTenantAccountService;
@@ -254,6 +256,11 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         }
         courseScheduleTeacherSalaryDao.batchInsert(courseScheduleTeacherSalaries);
         teacherAttendanceDao.batchInsert(teacherAttendances);
+        //创建群聊
+        imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), courseGroup.getName(), courseGroup.getName(), courseGroup.getName(), null, "COMM");
+        Map<Integer,String> userRoleMap = new HashMap(1);
+        userRoleMap.put(courseGroup.getTeacherId(),"指导老师");
+        imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
         return BaseController.succeed();
     }
 
@@ -749,6 +756,7 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         
         imGroupService.create(classGroup.getId().longValue(), coursesGroup.getTeacherId(), classGroup.getName(), classGroup.getName(), classGroup.getName(), classGroup.getName(), null, "COMM");
         imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
+        imUserFriendService.refreshClassImUserFriend(classGroup.getId());
         return BaseController.succeed();
     }
 

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

@@ -7,6 +7,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.service.ImUserFriendService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@@ -58,6 +60,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	private SysUserCashAccountDao sysUserCashAccountDao;
 	@Autowired
 	private ClassGroupDao classGroupDao;
+	@Autowired
+	private ImUserFriendService imUserFriendService;
 
 	@Override
 	public BaseDAO<Integer, Employee> getDAO() {
@@ -311,6 +315,27 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		employeeDao.updateUserDemissionDate(levelUserId);
 		//冻结用户
 		employeeDao.updateUserLock(levelUserId,1);
+		//获取用户担任教务老师的所有乐团列表
+		List<String> musicGroupIds = employeeDao.queryMusicGroupIdByUserId(levelUserId);
+		if(musicGroupIds.size() > 0){
+			for (String musicGroupId : musicGroupIds) {
+				imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC);
+			}
+		}
+		//获取用户担任教务老师的所有网管课列表
+		List<String> practiceGroupIds = employeeDao.queryPracticeGroupIdByUserId(levelUserId);
+		if(practiceGroupIds.size() > 0){
+			for (String musicGroupId : practiceGroupIds) {
+				imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.PRACTICE);
+			}
+		}
+		//获取用户担任教务老师的所有VIP课列表
+		List<String> vipGroupIds = employeeDao.queryVipGroupIdByUserId(levelUserId);
+		if(vipGroupIds.size() > 0){
+			for (String musicGroupId : vipGroupIds) {
+				imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.VIP);
+			}
+		}
 	}
 
 	@Override

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

@@ -160,11 +160,12 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 	}
 
 	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public boolean quit(Long imGroupId, List<Integer> userIdList) {
 
 		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
 		if (imGroup == null) {
-			throw new BizException("退出群组失败:群组[{}]不存在", imGroupId);
+			return true;
 		}
 
 		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), userIdList.stream().map(Objects::toString)
@@ -176,7 +177,7 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
 		imGroupMemberDao.batchDelete(imGroupMemberList);
 
-		imGroup.setMemberNum(imGroup.getMemberNum() - 1);
+		imGroup.setMemberNum(imGroup.getMemberNum() - userIdList.size());
 		imGroup.setUpdateTime(new Date());
 		imGroupDao.update(imGroup);
 

+ 22 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImUserFriendServiceImpl.java

@@ -142,7 +142,10 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 		Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(courseSchedule.getClassGroupId(),null,null);
 		ClassGroup classGroup = classGroupDao.get(courseSchedule.getClassGroupId());
 		GroupType groupType = classGroup.getGroupType();
-		saveImUserFriends(studentIds,teacherIds,groupType,classGroup.getMusicGroupId());
+		List<ImUserFriend> imUserFriends = saveImUserFriends(studentIds, teacherIds, groupType, classGroup.getMusicGroupId());
+		if(imUserFriends.size() > 0){
+			batchInsert(imUserFriends);
+		}
 	}
 
 	@Override
@@ -154,20 +157,30 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 		Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(classGroupId,null,null);
 		ClassGroup classGroup = classGroupDao.get(classGroupId);
 		GroupType groupType = classGroup.getGroupType();
-		saveImUserFriends(studentIds,teacherIds,groupType,classGroup.getMusicGroupId());
+		List<ImUserFriend> imUserFriends = saveImUserFriends(studentIds, teacherIds, groupType, classGroup.getMusicGroupId());
+		if(imUserFriends.size() > 0){
+			batchInsert(imUserFriends);
+		}
 	}
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void refreshGroupImUserFriend(String musicGroupId,GroupType groupType) {
-		//获取班级关联的老师列表
-		Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(null,musicGroupId,groupType);
-		//获取班级关联的学员列表
-		Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(null,musicGroupId,groupType);
-		saveImUserFriends(studentIds,teacherIds,groupType,musicGroupId);
+		List<ClassGroup> classGroups = classGroupDao.queryClassGroups(musicGroupId, groupType.getCode());
+		List<ImUserFriend> imUserFriends = new ArrayList<>();
+		classGroups.forEach(e->{
+			//获取班级关联的老师列表
+			Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(e.getId(),null,null);
+			//获取班级关联的学员列表
+			Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(e.getId(),null,null);
+			imUserFriends.addAll(saveImUserFriends(studentIds,teacherIds,groupType,musicGroupId));
+		});
+		if(imUserFriends.size() > 0){
+			batchInsert(imUserFriends);
+		}
 	}
 
-	public void saveImUserFriends(Set<Integer> studentIds,Set<Integer> teacherIds,GroupType groupType,String musicGroupId){
+	public List<ImUserFriend> saveImUserFriends(Set<Integer> studentIds,Set<Integer> teacherIds,GroupType groupType,String musicGroupId){
 		List<ImUserFriend> imUserFriends = new ArrayList<>();
 		Set<Integer> educationIds = new HashSet<>();
 		MusicGroup musicGroup = new MusicGroup();
@@ -292,8 +305,6 @@ public class ImUserFriendServiceImpl extends BaseServiceImpl<Long, ImUserFriend>
 				imUserFriends.add(imUserFriend);
 			}
 		}
-		if(imUserFriends.size() > 0){
-			batchInsert(imUserFriends);
-		}
+		return imUserFriends;
 	}
 }

+ 21 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -24,6 +24,7 @@ import java.util.Map.Entry;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.service.*;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -150,6 +151,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	@Autowired
 	private ImGroupMemberService imGroupMemberService;
 	@Autowired
+	private ImUserFriendService imUserFriendService;
+	@Autowired
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 	@Autowired
 	private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao;
@@ -479,6 +482,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			Organization organization = organizationDao.get(musicGroup.getOrganId());
 			sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
 					MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT, "", organization.getName(), musicGroup.getName());
+		}else {
+			imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC);
 		}
 		return batchNo;
 	}
@@ -800,8 +805,13 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 					MessageTypeEnum.BACKSTAGE_PAYMENT_CALENDER_AUDIT, "", organization.getName(), musicGroup.getName());
 		}else {
 			if(paymentType == ADD_STUDENT){
-				//如果是合班缴费
-				autoClassGroupAdjust(batchNo);
+				MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
+				if(musicGroupStudentClassAdjust != null){
+					//如果是合班缴费
+					autoClassGroupAdjust(musicGroupStudentClassAdjust);
+				}else {
+					imUserFriendService.refreshGroupImUserFriend(musicGroupId,GroupType.MUSIC);
+				}
 			}else if(paymentType == SPAN_GROUP_CLASS_ADJUST){
 				//删除和解冻班级,课程信息
 				MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
@@ -985,9 +995,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 		calenderAuditDetailDto.setAuditDto(auditDto);
 		//获取收费标准
 		calenderAuditDetailDto.setMusicGroupPaymentCalenderCourseSettings(musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettingsByBatchNo(batchNo));
-		//获取学员列表
-//		calenderAuditDetailDto.setBasicUserDtos(musicGroupPaymentCalenderDetailDao.querySimpleUserDto(batchNo,auditDto.getMusicGroupId()));
-//		calenderAuditDetailDto.setStudentNum(calenderAuditDetailDto.getSimpleUserDto().size());
 		//获取缴费周期
 		List<MusicGroupPaymentCalender> groupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
 		calenderAuditDetailDto.setMusicGroupPaymentCalenders(groupPaymentCalenders);
@@ -999,11 +1006,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 	//审核通过后自动排课
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void autoClassGroupAdjust(String batchNo){
-		MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
-		if(musicGroupStudentClassAdjust == null){
-			return;
-		}
+	public void autoClassGroupAdjust(MusicGroupStudentClassAdjust musicGroupStudentClassAdjust){
 		List<MusicGroupPaymentCalender> musicGroupPaymentCalenders = musicGroupPaymentCalenderDao.findByBatchNo(musicGroupStudentClassAdjust.getBatchNo());
 		for (MusicGroupPaymentCalender musicGroupPaymentCalender : musicGroupPaymentCalenders) {
 			if(musicGroupPaymentCalender.getStatus() == AUDITING || musicGroupPaymentCalender.getStatus() == REJECT){
@@ -1061,6 +1064,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			//删除教师课酬
 			courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(delCourseIds);
 		}
+		imUserFriendService.refreshGroupImUserFriend(musicGroupPaymentCalenders.get(0).getMusicGroupId(),GroupType.MUSIC);
 	}
 
 	@Override
@@ -1115,8 +1119,13 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				classGroupService.addStudentToClassGroupAndCourseArranging(Integer.parseInt(calender.getStudentIds()), classGroupIdStr, batchNo,
 						musicGroupPaymentCalenderCourseSettingsDao.queryCalenderCourseSettingsByBatchNo(batchNo));
 			}
-			//如果是合班缴费
-			autoClassGroupAdjust(batchNo);
+			MusicGroupStudentClassAdjust musicGroupStudentClassAdjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
+			if(musicGroupStudentClassAdjust != null){
+				//如果是合班缴费
+				autoClassGroupAdjust(musicGroupStudentClassAdjust);
+			}else {
+				imUserFriendService.refreshGroupImUserFriend(calender.getMusicGroupId(),GroupType.MUSIC);
+			}
 		}else if(calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST){
 			//删除和解冻班级,课程信息
 			MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);

+ 34 - 67
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -18,6 +18,8 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -30,42 +32,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.dao.ChargeTypeDao;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
-import com.ym.mec.biz.dal.dao.CooperationOrganDao;
-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.EmployeeDao;
-import com.ym.mec.biz.dal.dao.MusicGroupBuildLogDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderStudentDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentEntitiesDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentStudentCourseDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPurchaseListDao;
-import com.ym.mec.biz.dal.dao.MusicGroupQuitDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSubjectGoodsGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupSubjectPlanDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.SchoolDao;
-import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDetailDao;
-import com.ym.mec.biz.dal.dao.StudentPreRegistrationDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.StudentVisitDao;
-import com.ym.mec.biz.dal.dao.SubjectChangeDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
-import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.CloseMusicGroupDto;
 import com.ym.mec.biz.dal.dto.CourseFormDto;
@@ -125,25 +91,6 @@ import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
 import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
-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.ImGroupService;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
-import com.ym.mec.biz.service.MusicGroupService;
-import com.ym.mec.biz.service.MusicGroupSubjectGoodsGroupService;
-import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
-import com.ym.mec.biz.service.PayService;
-import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-import com.ym.mec.biz.service.StudentPaymentRouteOrderService;
-import com.ym.mec.biz.service.StudentRegistrationService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -192,6 +139,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
 
     @Autowired
+    private ClassGroupTeacherMapperDao classGroupTeacherMapperDao;
+
+    @Autowired
     private StudentPaymentOrderDao studentPaymentOrderDao;
 
     @Autowired
@@ -276,6 +226,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     @Autowired
     private ImGroupMemberService imGroupMemberService;
     @Autowired
+    private ImUserFriendService imUserFriendService;
+    @Autowired
     private ImGroupService imGroupService;
     @Autowired
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
@@ -1218,17 +1170,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 throw new BizException("课酬未确认");
             }
         }
-//        updateTeamTeacher(musicGroup, musicGroup);
-        //生成学员费用表
-        /*List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
-        if (musicGroupStudentFees != null && musicGroupStudentFees.size() > 0) {
-            if (musicGroup.getFeeType() != null && musicGroup.getFeeType() != FeeType.OFFLINE) {
-                for (MusicGroupStudentFee sf : musicGroupStudentFees) {
-                    sf.setRemainNetworkClassTimes(sf.getRemainNetworkClassTimes() + 1);
-                }
-            }
-            musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees, null, "PAID_COMPLETED");
-        }*/
         musicGroupStudentFeeDao.batchUpdateCalenders(musicGroupId);
         //记录操作日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "确认开团(筹备中 -> 进行中)", sysUser.getId(), ""));
@@ -1238,6 +1179,17 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroup.setGroupMemberNum(studentRegistrations == null ? 0 : studentRegistrations.size());
         musicGroup.setBillStartDate(new Date());
         musicGroupDao.update(musicGroup);
+        //获取乐团班级列表
+        List<ClassGroup> classGroups = classGroupDao.queryClassGroups(musicGroupId, "MUSIC");
+        for (ClassGroup classGroup : classGroups) {
+            //获取班级关联的老师列表
+            Set<Integer> teacherIds = classGroupTeacherMapperDao.queryTeacherIdsByClassGroupId(classGroup.getId(),null,null);
+            //获取班级关联的学员列表
+            Set<Integer> studentIds = classGroupStudentMapperDao.queryStudentIdsByClassGroupId(classGroup.getId(),null,null);
+            //创建IM群组
+            classGroupService.addImGroup(classGroup, new ArrayList<>(studentIds), new ArrayList<>(teacherIds));
+        }
+        imUserFriendService.refreshGroupImUserFriend(musicGroupId,GroupType.MUSIC);
         //给老师发送乐团成立通知
         Map<Integer, String> map = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertMybatisMap(musicGroupDao.queryTeacherIdMap(musicGroupId))), HashMap.class);
         if (map != null && map.size() > 0) {
@@ -1875,6 +1827,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
             // 退团
             BigDecimal surplusCourseFee = studentRegistration.getSurplusCourseFee();
+            StudentMusicGroupStatusEnum currentStudentMusicGroupStatus = studentRegistration.getMusicGroupStatus();
             studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
             studentRegistration.setSurplusCourseFee(BigDecimal.ZERO);
             studentRegistration.setUpdateTime(date);
@@ -1931,6 +1884,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
             }
             
+            if(currentStudentMusicGroupStatus != StudentMusicGroupStatusEnum.NORMAL){
+            	return true;
+            }
+            
             if (isRefundCourseFee) {
                 // 退课程费用
                 amount = amount.add(surplusCourseFee);
@@ -2044,6 +2001,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
 
         BigDecimal surplusCourseFee = studentRegistration.getSurplusCourseFee();
+        StudentMusicGroupStatusEnum currentStudentMusicGroupStatus = studentRegistration.getMusicGroupStatus();
         // 退团
         studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
         studentRegistration.setSurplusCourseFee(BigDecimal.ZERO);
@@ -2101,6 +2059,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupSubjectPlanDao.update(musicGroupSubjectPlan);
         }
         
+        if(currentStudentMusicGroupStatus != StudentMusicGroupStatusEnum.NORMAL){
+        	return true;
+        }
+        
         if (isRefundCourseFee) {
             // 退课程费用
             amount = amount.add(surplusCourseFee);
@@ -2601,7 +2563,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //如果已生成课表,那么修改未上课时教学点
             courseScheduleDao.updateCourseScheduleSchool("MUSIC", musicGroupId, musicGroup.getSchoolId());
         }
-        updateTeamTeacher(group, musicGroup);
+        if(group.getStatus() == MusicGroupStatusEnum.PROGRESS){
+            updateTeamTeacher(group, musicGroup);
+        }
 
         Date date = new Date();
         //缴费方式不同
@@ -2627,6 +2591,9 @@ 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){
+            imUserFriendService.refreshGroupImUserFriend(musicGroupId,GroupType.MUSIC);
+        }
         //记录操作日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "修改乐团基本信息数据", sysUser.getId(), JSONObject.toJSONString(subFeeSettingDto)));
     }

+ 37 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -760,9 +760,40 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
             }*/
             musicGroupStudentFeeDao.insert(musicGroupStudentFee);
-//            musicGroupStudentFeeDao.insert(new MusicGroupStudentFee(musicGroupId,
-//                    userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
-//                    nextPaymentDate, studentAddDto.getTemporaryCourseFee(), paymentStatus));
+
+            StudentPaymentOrder waitPayOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.WAIT_PAY);
+
+            if (waitPayOrder != null) {
+                waitPayOrder.setStatus(DealStatusEnum.CLOSE);
+                studentPaymentOrderService.update(waitPayOrder);
+            }
+            //生成订单
+            StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+            studentPaymentOrder.setUserId(userId);
+            studentPaymentOrder.setGroupType(GroupType.MUSIC);
+            studentPaymentOrder.setType(OrderTypeEnum.APPLY);
+            studentPaymentOrder.setStatus(DealStatusEnum.WAIT_PAY);
+            studentPaymentOrder.setMusicGroupId(musicGroupId);
+            studentPaymentOrder.setClassGroupId(studentAddDto.getSignClassId());
+            studentPaymentOrder.setOrganId(musicGroup.getOrganId());
+            studentPaymentOrder.setRoutingOrganId(musicGroup.getOrganId());
+
+            //生成订单明细
+            List<StudentPaymentOrderDetail> studentPaymentOrderDetails = studentAddDto.getStudentPaymentOrderDetails();
+            if (studentPaymentOrderDetails == null) {
+                studentPaymentOrderDetails = new ArrayList<>();
+            }
+            //汇总金额
+
+            BigDecimal reduce = studentPaymentOrderDetails.stream().map(StudentPaymentOrderDetail::getPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+            if (reduce.compareTo(BigDecimal.ZERO) == 0) {
+                studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
+                studentPaymentOrder.setActualAmount(reduce);
+                studentPaymentOrder.setPayTime(date);
+            }
+            studentPaymentOrder.setExpectAmount(reduce);
+            studentPaymentOrderService.insert(studentPaymentOrder);
+            
             //当前学员是否以前存在过当前乐团
             if (phoneAndMusicGroupId != null) {
                 studentRegistration.setId(phoneAndMusicGroupId.getId());
@@ -818,7 +849,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             StudentRegistration registration = studentRegistrationDao.getByPhoneAndMusicGroupId(newMusicGroupId, studentRegistration.getParentsPhone());
             if (registration != null) {
                 //修改剩余课程余额
+                Date date = new Date();
                 registration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
+                registration.setCreateTime(date);
+                registration.setUpdateTime(date);
                 registration.setSurplusCourseFee(registration.getSurplusCourseFee().add(amount));
                 studentRegistrationDao.update(registration);
             }else {

+ 35 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java

@@ -10,6 +10,9 @@ import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.thirdparty.adapay.ConfigInit;
 import com.ym.mec.thirdparty.adapay.Payment;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -20,16 +23,9 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import com.alibaba.fastjson.JSON;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dao.TenantEntryActivitiesDao;
-import com.ym.mec.biz.dal.dao.TenantPaymentOrderDao;
 import com.ym.mec.biz.dal.dto.PageInfoOrder;
 import com.ym.mec.biz.dal.entity.SysTenantAccountDetail.TransType;
-import com.ym.mec.biz.dal.entity.Teacher;
-import com.ym.mec.biz.dal.entity.TenantEntryActivities;
 import com.ym.mec.biz.dal.entity.TenantEntryActivities.SuitableUser;
-import com.ym.mec.biz.dal.entity.TenantPaymentOrder;
 import com.ym.mec.biz.dal.entity.TenantPaymentOrder.TenantPaymentType;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.PaymentChannelEnum;
@@ -77,6 +73,8 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
 
     @Autowired
     private YqPayFeignService yqPayFeignService;
+    @Autowired
+    private StudentPaymentRouteOrderDao studentPaymentRouteOrderDao;
 
     @Override
     public BaseDAO<Long, TenantPaymentOrder> getDAO() {
@@ -214,6 +212,8 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
             // 更新账户表信息
             sysTenantAccountService.update(userId, tenantEntryActivities.getPurchaseMinutes() + tenantEntryActivities.getGiveMinutes(),
                     tenantPaymentOrder.getOrderNo(), TransType.RECHARGE, "", tenantEntryActivities.getDiscountPrice(), "");
+
+            this.confirmOrder(tenantPaymentOrder);
         } else {
 
         }
@@ -221,6 +221,34 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
         return true;
     }
 
+    private Boolean confirmOrder(TenantPaymentOrder order) {
+        List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(order.getOrderNo());
+        for (StudentPaymentRouteOrder routeOrder : routeOrders) {
+            Map<String, Object> divMember = new HashMap<>();
+            divMember.put("member_id", routeOrder.getMerNo());//分佣账户
+            divMember.put("amount", routeOrder.getRouteAmount().setScale(2, BigDecimal.ROUND_HALF_UP));//分佣金额
+            divMember.put("fee_flag", "Y");
+            if (routeOrder.getMerNo().equals(ConfigInit.merNo)) {
+                divMember.put("member_id", 0);
+            }
+            List<Map<String, Object>> divMembers = new ArrayList<>();
+            divMembers.add(divMember);
+
+            Map<String, Object> confirm = new HashMap<>();
+            confirm.put("payment_id", order.getTransNo());
+            confirm.put("order_no", idGeneratorService.generatorId("payment"));
+            confirm.put("confirm_amt", routeOrder.getRouteAmount());
+            confirm.put("div_members", divMembers);
+            try {
+                Payment.createConfirm(confirm);
+            } catch (Exception e) {
+                continue;
+            }
+        }
+        return true;
+    }
+
+
     @Override
     public void queryOrderStatusFromRemote() {
         try {

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

@@ -2865,7 +2865,11 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 						salaryMap.get("onlineTeacherSalary"),
 						salaryMap.get("offlineTeacherSalary"));
 			}
-            userRoleMap.put(vipGroup.getUserId(), null);
+            userRoleMap.put(vipGroup.getUserId(), "指导老师");
+            
+            if(vipGroup.getEducationalTeacherId() != null){
+                userRoleMap.put(vipGroup.getEducationalTeacherId(), "乐团主管");
+            }
 		}
 
 		List<CourseSchedule> surplusCourses = courseScheduleDao.findByClassGroupAndStatus(classGroup.getId(), CourseStatusEnum.NOT_START.getCode());

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

@@ -591,6 +591,7 @@
     <select id="queryStudentIdsByClassGroupId" resultType="java.lang.Integer">
         SELECT DISTINCT user_id_ FROM class_group_student_mapper
         <include refid="queryStudentIdsByClassGroupIdSql"/>
+        AND status_ != 'QUIT'
         UNION ALL
         SELECT DISTINCT user_id_ FROM course_schedule_student_payment csts
         <include refid="queryStudentIdsByClassGroupIdSql"/>

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

@@ -361,4 +361,20 @@
             AND INTE_ARRAY(e.organ_id_list_,#{organIds})
         </if>
     </select>
+
+    <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')
+    </select>
+
+    <select id="queryPracticeGroupIdByUserId" resultType="java.lang.String">
+        SELECT DISTINCT id_ FROM practice_group
+        WHERE educational_teacher_id_ = #{levelUserId} AND group_status_ = 'NORMAL'
+    </select>
+
+    <select id="queryVipGroupIdByUserId" resultType="java.lang.String">
+        SELECT DISTINCT id_ FROM vip_group
+        WHERE educational_teacher_id_ = #{levelUserId} AND group_status_ IN (2,6)
+    </select>
 </mapper>

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

@@ -40,13 +40,6 @@
 		VALUES(#{id},#{userId},#{friendId},#{friendNickname},#{memo},#{tags},NOW(),NOW())
 	</insert>
 
-	<insert id="batchInsert">
-		INSERT INTO im_user_friend (user_id_,friend_id_,friend_nickname_,tags_,memo_,create_time_,update_time_)
-		VALUES
-		<foreach collection="teachers" item="item" separator=",">
-			(#{teacherId},#{item.userId},#{item.name},#{item.subjectName},#{item.musicGroupName},NOW(),NOW())
-		</foreach>
-	</insert>
 	<insert id="insertByBasicUser">
 		INSERT INTO im_user_friend (user_id_,friend_id_,friend_nickname_,tags_,memo_,create_time_,update_time_)
 		VALUES (#{teacherId},#{basicUserDto.userId},#{basicUserDto.name},#{basicUserDto.subjectName},#{basicUserDto.musicGroupName},NOW(),NOW())
@@ -61,9 +54,6 @@
 		<if test="friendId != null">
 		friend_id_ = #{friendId},
 		</if>
-		<if test="id != null">
-		id_ = #{id},
-		</if>
 		<if test="friendNickname != null">
 		friend_nickname_ = #{friendNickname},
 		</if>
@@ -96,7 +86,7 @@
 	</select>
 	
 	<select id="query" resultMap="ImUserFriend" parameterType="map">
-		SELECT * FROM im_user_friend where user_id_ = #{userId} and friend_id_ = #{friendId}
+		SELECT * FROM im_user_friend where user_id_ = #{userId} and friend_id_ = #{friendId} LIMIT 1
 	</select>
 	
 	<select id="queryFriendListByUserId" resultMap="ImUserFriendDto" parameterType="map">

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

@@ -45,7 +45,7 @@
     
     <resultMap type="com.ym.mec.biz.dal.dto.StudentMusicGroupDto" id="StudentMusicGroupDto" extends="StudentRegistration">
     	<result column="music_group_quit_status_" property="musicGroupQuit.status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="music_group_status_" property="musicGroup.status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="group_status_" property="musicGroup.status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="music_group_name_" property="musicGroup.name"/>
     </resultMap>
 
@@ -718,7 +718,7 @@
     </select>
     
     <select id="queryStudentMusicGroupInfo" resultMap="StudentMusicGroupDto">
-    	select sr.*,s.name_ subject_name_,mg.status_ music_group_status_,mg.name_ music_group_name_,mgq.status_ music_group_quit_status_ 
+    	select sr.*,s.name_ subject_name_,mg.status_ group_status_,mg.name_ music_group_name_,mgq.status_ music_group_quit_status_ 
     	from student_registration sr left join subject s on s.id_ = sr.actual_subject_id_
     	left join music_group mg on sr.music_group_id_ = mg.id_
     	left join (select mgq.* from music_group_quit mgq 

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

@@ -374,7 +374,7 @@
     </select>
 
     <select id="queryUserNameByIdList" resultType="java.util.Map">
-        select id_ `key`,IF(username_ IS NUll,real_name_,real_name_) `value` FROM sys_user s WHERE id_ IN
+        select id_ `key`,IF(username_ IS NUll,real_name_,username_) `value` FROM sys_user s WHERE id_ IN
         <foreach collection="userIds" item="userId" separator="," open="(" close=")">
             #{userId}
         </foreach>

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

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

+ 2 - 11
mec-web/src/main/java/com/ym/mec/web/controller/ClassGroupController.java

@@ -394,8 +394,7 @@ public class ClassGroupController extends BaseController {
     @PostMapping("/spanGroupMergeClassSplitClassAffirm")
     @PreAuthorize("@pcs.hasPermissions('classGroup/spanGroupMergeClassSplitClassAffirm')")
     public HttpResponseResult spanGroupMergeClassSplitClassAffirm(@RequestBody MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) throws Exception {
-        classGroupService.spanGroupMergeClassSplitClassAffirm(mergeClassSplitClassAffirmDto);
-        return succeed();
+        return classGroupService.spanGroupMergeClassSplitClassAffirm(mergeClassSplitClassAffirmDto);
     }
 
     @ApiOperation(value = "进行中乐团-修改-班级详情-学员班级调整-获取所选班级最大可排课时长")
@@ -409,14 +408,6 @@ public class ClassGroupController extends BaseController {
     @PostMapping("/mergeClassSplitClassAffirm")
     @PreAuthorize("@pcs.hasPermissions('classGroup/mergeClassSplitClassAffirm')")
     public HttpResponseResult mergeClassSplitClassAffirm(@RequestBody MergeClassSplitClassAffirmDto mergeClassSplitClassAffirmDto) throws Exception {
-        return succeed(classGroupService.mergeClassSplitClassAffirm(mergeClassSplitClassAffirmDto));
+        return classGroupService.mergeClassSplitClassAffirm(mergeClassSplitClassAffirmDto);
     }
-
-//    @ApiOperation(value = "进行中乐团-修改-班级详情-学员班级调整-合并结果确认-获取新班级可排课时长")
-//    @PostMapping("/findClassCourseMinute")
-//    @PreAuthorize("@pcs.hasPermissions('classGroup/findClassCourseMinute')")
-//    public HttpResponseResult findClassCourseMinuteMap(@RequestBody List<Integer> classGroupIds){
-//        return succeed(classGroupService.findClassCourseMinuteMap(classGroupIds));
-//    }
-
 }

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

@@ -76,13 +76,6 @@ public class MusicGroupController extends BaseController {
 		return succeed(musicGroupService.findMusicGroupSubjectInfo(musicGroupId));
 	}
 
-//	@ApiOperation(value = "用户费用表,数据补全")
-//	@PostMapping("/musicGroupStudentFeePatch")
-//	public Object musicGroupStudentFeePatch(@RequestBody List<String> musicGroupIds){
-//		musicGroupService.musicGroupStudentFeePatch(musicGroupIds);
-//		return succeed();
-//	}
-
 	@ApiOperation(value = "修改乐团声部信息")
 	@PostMapping("/updateSubjectInfo")
 	@PreAuthorize("@pcs.hasPermissions('musicGroup/updateSubjectInfo')")