Преглед на файлове

Merge remote-tracking branch 'origin/master'

Joburgess преди 4 години
родител
ревизия
a7627d6c52
променени са 26 файла, в които са добавени 353 реда и са изтрити 32 реда
  1. 1 1
      .gitignore
  2. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  3. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImUserFriendDao.java
  4. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  5. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  6. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DelRegisterDto.java
  7. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupStudentClassAdjust.java
  8. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  9. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  10. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  11. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  12. 90 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  13. 27 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  14. 75 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  15. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  16. 5 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  17. 2 1
      mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  18. 2 2
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  19. 15 9
      mec-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml
  20. 4 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  21. 6 2
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentClassAdjustMapper.xml
  22. 3 6
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  23. 3 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  24. 12 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java
  25. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  26. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java

+ 1 - 1
.gitignore

@@ -7,6 +7,6 @@ target
 /p2p-biz/test-output
 bin
 /manage-center/src/main/resources/config/properties/generatorConfig.xml
-/p2p-utils/.gitignore
+.gitignore
 .idea
 *.iml

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

@@ -1749,4 +1749,11 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<CourseSchedule> findCoursesByClassGroupIdAndCourseIds(@Param("classGroupId") Long classGroupId, @Param("allLockCourseIds") List<Long> allLockCourseIds);
+
+    /**
+     * 获取班级总剩余时长
+     * @param masterClassGroupId
+     * @return
+     */
+    Integer queryTotalCourseTimes(Integer masterClassGroupId);
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import java.util.List;
 
+import com.ym.mec.biz.dal.dto.BasicUserDto;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.biz.dal.dto.ImUserFriendDto;
@@ -21,4 +22,17 @@ public interface ImUserFriendDao extends BaseDAO<Long, ImUserFriend> {
 	List<ImUserFriendDto> queryFriendListByUserId(@Param("userId") Integer userId, @Param("search") String search);
 
 	ImUserFriendDto queryFriendDetail(@Param("userId") Integer userId, @Param("friendUserId") Integer friendUserId);
+
+	/**
+	 * 清除通讯录
+	 * @param teacherId
+	 */
+    void deleteByUserId(Integer teacherId);
+
+	/**
+	 * 批量新增
+	 * @param teachers
+	 * @param teacherId
+	 */
+	void batchInsert(@Param("teachers") List<BasicUserDto> teachers, @Param("teacherId") Integer teacherId);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -423,4 +423,11 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     List<StudentRegistration> queryByUserIdsAndMusicGroupId(@Param("studentIds") String studentIds, @Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 批量删除注册信息
+     * @param ids
+     * @return
+     */
+    int batchDelete(@Param("ids") List<Long> ids);
 }

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

@@ -490,4 +490,6 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @return
      */
     String queryTeacherNameByTeacherIds(@Param("teachingTeacherIds") String teachingTeacherIds);
+
+    List<Integer> queryAllIds();
 }

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DelRegisterDto.java

@@ -0,0 +1,30 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+public class DelRegisterDto {
+
+    @ApiModelProperty(value = "乐团id", required = true)
+    private String musicGroupId;
+
+    @ApiModelProperty(value = "用户ids", required = true)
+    private List<Integer> userIds;
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+
+    public List<Integer> getUserIds() {
+        return userIds;
+    }
+
+    public void setUserIds(List<Integer> userIds) {
+        this.userIds = userIds;
+    }
+}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupStudentClassAdjust.java

@@ -28,6 +28,9 @@ public class MusicGroupStudentClassAdjust {
 	@ApiModelProperty(value = "班级可排课时长", required = false)
 	private String classCourseMinute;
 
+	@ApiModelProperty(value = "主班剩余总时长", required = false)
+	private Integer masterClassCourseTimes;
+
 	@ApiModelProperty(value = "老师选择的每种类型的排课时长", required = false)
 	private String defaultCourseTypeMinute;
 
@@ -55,6 +58,14 @@ public class MusicGroupStudentClassAdjust {
 
 	private Date updateTime;
 
+	public Integer getMasterClassCourseTimes() {
+		return masterClassCourseTimes;
+	}
+
+	public void setMasterClassCourseTimes(Integer masterClassCourseTimes) {
+		this.masterClassCourseTimes = masterClassCourseTimes;
+	}
+
 	public Integer getMasterClassGroupId() {
 		return masterClassGroupId;
 	}

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

@@ -336,4 +336,12 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      */
     Boolean delReg(Long id);
 
+
+    /**
+     * 批量删除报名的学生
+     * @param userIds
+     * @return
+     */
+    Boolean batchDelRegs(String musicGroupId,List<Integer> userIds);
+
 }

+ 14 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java

@@ -73,6 +73,14 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
     List<BasicUserDto> queryGroupStudents(Integer id, String search);
 
     /**
+     * 获取教师通讯录
+     * @param id
+     * @param search
+     * @return
+     */
+    void queryGroupStudents1(Integer id, String search);
+
+    /**
      * 获取教师通讯录学员列表
      * @param id
      * @param search
@@ -194,4 +202,10 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      * @return
      */
     List<TeacherDefaultSalaryDto> queryTeacherDefaultSalary(String organIdList);
+
+    /**
+     * 获取所有教师编号列表
+     * @return
+     */
+    List<Integer> queryAllIds();
 }

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

@@ -3749,6 +3749,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         musicGroupStudentClassAdjust.setOperatorId(sysUser.getId());
         musicGroupStudentClassAdjust.setClassGroupIds(JSON.toJSONString(classGroupIds));
         musicGroupStudentClassAdjust.setStudentIds(JSON.toJSONString(studentIds));
+        musicGroupStudentClassAdjust.setMasterClassCourseTimes(courseScheduleDao.queryTotalCourseTimes(masterClassGroupId));
         if (classGroupStudents != null && classGroupStudents.size() > 0) {
             musicGroupStudentClassAdjust.setClassGroupStudents(JSON.toJSONString(mergeClassSplitClassAffirmDto.getClassGroupStudents()));
         }

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

@@ -230,6 +230,8 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 						}
 					}
 				}
+			}else if(paymentType == SPAN_GROUP_CLASS_ADJUST){
+				status = musicGroupPaymentCalenderDto.getStatus();
 			}
 		}
 

+ 90 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -18,9 +18,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.dto.*;
-import com.ym.mec.biz.dal.entity.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -33,7 +30,79 @@ 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.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.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.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;
+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.ApprovalStatus;
+import com.ym.mec.biz.dal.entity.ChargeType;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.CooperationOrgan;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
+import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.biz.dal.entity.MusicGroupPurchaseList;
+import com.ym.mec.biz.dal.entity.MusicGroupQuit;
+import com.ym.mec.biz.dal.entity.MusicGroupStudentFee;
 import com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectGoodsGroup;
+import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.School;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
+import com.ym.mec.biz.dal.entity.StudentRegistration;
+import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SubjectChange;
+import com.ym.mec.biz.dal.entity.SysUserCashAccount;
+import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GoodsType;
@@ -69,12 +138,10 @@ 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.ImGroupMember;
-import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
-import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
@@ -1609,6 +1676,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
         }
 
+		// 有进行中的课程不能退团
+		List<CourseSchedule> courseScheduleList = courseScheduleDao.findMusicGroupCourseSchedulesWithStudent(musicGroupId, GroupType.MUSIC.getCode(),
+				"UNDERWAY", userId);
+		if (courseScheduleList != null && courseScheduleList.size() > 0) {
+			throw new BizException("退团失败,存在[进行中]的课程");
+		}
+
         musicGroupQuit.setStatus(status);
         musicGroupQuit.setReason(reason);
         musicGroupQuit.setQuitDate(date);
@@ -1636,6 +1710,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
             // 退团
             studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
+            studentRegistration.setSurplusCourseFee(BigDecimal.ZERO);
             studentRegistration.setUpdateTime(date);
 
             studentRegistrationDao.update(studentRegistration);
@@ -1756,14 +1831,21 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         if (musicGroup.getStatus() == MusicGroupStatusEnum.CANCELED || musicGroup.getStatus() == MusicGroupStatusEnum.PAUSE) {
-            throw new BizException("申请失败,乐团状态[已取消]或[已暂停]");
+            throw new BizException("退团失败,乐团状态[已取消]或[已暂停]");
         }
 
         // 判断乐器是否是租赁
         StudentRegistration studentRegistration = studentRegistrationDao.queryByUserIdAndMusicGroupId(userId, musicGroupId);
         if (studentRegistration == null) {
             throw new BizException("用户注册信息不存在");
-        }
+		}
+
+		// 有进行中的课程不能退团
+		List<CourseSchedule> courseScheduleList = courseScheduleDao.findMusicGroupCourseSchedulesWithStudent(musicGroupId, GroupType.MUSIC.getCode(),
+				"UNDERWAY", userId);
+		if (courseScheduleList != null && courseScheduleList.size() > 0) {
+			throw new BizException("退团失败,存在[进行中]的课程");
+		}
 
         Date date = new Date();
 
@@ -1793,6 +1875,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         // 退团
         studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
+        studentRegistration.setSurplusCourseFee(BigDecimal.ZERO);
         studentRegistration.setUpdateTime(date);
 
         studentRegistrationDao.update(studentRegistration);

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

@@ -886,7 +886,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 registration = studentRegistration;
 
                 //增加报名学生数
-                musicGroupSubjectPlanService.addApplyStudentNum(newMusicGroupId, studentRegistration.getSubjectId(), 1);
+                musicGroupSubjectPlanService.addApplyStudentNum(newMusicGroupId, studentRegistration.getActualSubjectId(), 1);
                 //新增Fee表
                 MusicGroupStudentFee musicGroupStudentFee = musicGroupStudentFeeDao.findByUser(studentRegistration.getUserId(),newMusicGroupId);
                 if(musicGroupStudentFee == null){
@@ -1613,4 +1613,30 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
         return true;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean batchDelRegs(String musicGroupId, List<Integer> userIds) {
+        List<StudentRegistration> registrations = studentRegistrationDao.findStudentListByUserIdList(musicGroupId, userIds);
+        if (registrations.size() <= 0) {
+            throw new BizException("删除的学员不存在,请核查");
+        }
+        Map<Integer, List<StudentRegistration>> regMap = registrations.stream().collect(Collectors.groupingBy(StudentRegistration::getSubjectId));
+        //更新声部信息
+        for (Map.Entry<Integer, List<StudentRegistration>> regEntry : regMap.entrySet()) {
+            MusicGroupSubjectPlan subjectPlan = musicGroupSubjectPlanDao.findSubjectPlan(musicGroupId, regEntry.getKey());
+            subjectPlan.setApplyStudentNum(subjectPlan.getApplyStudentNum() - regEntry.getValue().size());
+            int updateNum = musicGroupSubjectPlanDao.update(subjectPlan);
+            if (updateNum <= 0) {
+                throw new BizException("声部信息更新失败");
+            }
+        }
+        //删除注册信息
+        List<Long> ids = registrations.stream().map(StudentRegistration::getId).collect(Collectors.toList());
+        int delNum = studentRegistrationDao.batchDelete(ids);
+        if (delNum <= 0) {
+            throw new BizException("学员删除失败");
+        }
+        return true;
+    }
 }

+ 75 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -69,6 +69,8 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 	@Autowired
 	private StudentDao studentDao;
+	@Autowired
+	private ImUserFriendDao imUserFriendDao;
 
 
 	@Override
@@ -234,6 +236,74 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		return teachers.stream().distinct().collect(Collectors.toList());
 	}
 
+	@Transactional(rollbackFor = Exception.class)
+	public void queryGroupStudents1(Integer teacherId, String search) {
+		//获取关联的学员列表
+		Set<Integer> studentIds = teacherDao.queryCourseClassStudentIds(teacherId);
+		//获取关联的老师列表
+		studentIds.addAll(teacherDao.queryCourseClassTeacherIds(teacherId));
+		//获取关联的乐团的管理老师
+		List<String> musicLeaderIds = teacherDao.queryMusicLeaderIds(teacherId);
+		musicLeaderIds.removeAll(Collections.singleton(null));
+		if(musicLeaderIds.size() > 0){
+			Set<String> leaderIds = new HashSet<>();
+			musicLeaderIds.forEach(e->{
+				leaderIds.addAll(Arrays.asList(e.split(",")));
+			});
+			leaderIds.forEach(e->{
+				studentIds.add(Integer.valueOf(e));
+			});
+		}
+		studentIds.removeAll(Collections.singleton(null));
+		List<ImGroupModel> musicGroups =  musicGroupDao.queryTeacherGroups(teacherId,search);
+		List<BasicUserDto> teachers = new ArrayList<>();
+		if(musicGroups != null && musicGroups.size() > 0){
+			Set<String> musicGroupId = musicGroups.stream().map(ImGroupModel::getId).collect(Collectors.toSet());
+			List<MusicGroup> musicGroupList = musicGroupDao.queryListByIds(StringUtils.join(musicGroupId, ","));
+			Set<Integer> teacherIdSet = new HashSet<>();
+			if(musicGroupList != null && musicGroupList.size() > 0){
+				musicGroupList.forEach(e->{
+					teacherIdSet.add(e.getTeamTeacherId());
+					teacherIdSet.add(e.getEducationalTeacherId());
+					teacherIdSet.add(e.getDirectorUserId());
+				});
+			}
+			teacherIdSet.remove(teacherId);
+			teacherIdSet.removeAll(Collections.singleton(null));
+			if(teacherIdSet.size() > 0){
+				teachers = teacherDao.queryMusicGroupStudents(StringUtils.join(teacherIdSet,","), search);
+			}
+		}
+		List<BasicUserDto> userDtos = teacherDao.queryGroupStudents(teacherId, search);
+		if(userDtos != null && userDtos.size() > 0){
+			teachers.addAll(userDtos);
+			Set<String> musicGroupIds = userDtos.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toSet());
+			if(musicGroupIds != null && musicGroupIds.size() > 0){
+				Map<String, String> musicGroupNameMap = MapUtil.convertIntegerMap(musicGroupDao.queryMusicGroupNameMap(musicGroupIds));
+				userDtos.forEach(e->{
+					e.setMusicGroupName(musicGroupNameMap.get(e.getMusicGroupId()));
+				});
+			}
+		}
+		studentIds.removeAll(userDtos.stream().map(e->e.getUserId()).collect(Collectors.toSet()));
+		studentIds.remove(teacherId);
+		//获取课程关联的学生列表
+//		teachers.addAll(teacherDao.findCloseCourseStudentIds(teacherId, search));
+		//获取相关vip陪练教务的学员编号
+//		teachers.addAll(teacherDao.findVipEducationalStudentId(teacherId,search));
+//		teachers.addAll(teacherDao.findCommEducationalStudentId(teacherId,search));
+//		teachers.addAll(teacherDao.findPracticeEducationalStudentId(teacherId,search));
+		if(studentIds.size() > 0){
+			teachers.addAll(teacherDao.queryTeacherBaseInfo(studentIds,search));
+		}
+		if(teachers.size() > 0){
+			//删除现有的用户通讯录
+			imUserFriendDao.deleteByUserId(teacherId);
+			//批量新增
+			imUserFriendDao.batchInsert(teachers,teacherId);
+		}
+	}
+
     @Override
     public List<TeacherBasicDto> findTeachers(String organId) {
 		return teacherDao.findByFlowOrganRangeTeachers(organId);
@@ -562,4 +632,9 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		return teacherDao.queryTeacherDefaultSalary(organIdList);
 	}
 
+	@Override
+	public List<Integer> queryAllIds() {
+		return teacherDao.queryAllIds();
+	}
+
 }

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

@@ -2910,6 +2910,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			classGroupDao.update(classGroup);
 
 			try {
+				imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode());
 				imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 			} catch (Exception e) {
 				e.printStackTrace();
@@ -3091,6 +3092,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
 
 		try {
+			imGroupService.create(classGroup.getId().longValue(), null, classGroup.getName(), classGroup.getName(), vipGroup.getName(), null, null, GroupType.VIP.getCode());
 			imGroupMemberService.join(classGroup.getId().longValue(), userRoleMap);
 		} catch (Exception e) {
 			e.printStackTrace();

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

@@ -3503,4 +3503,9 @@
         </foreach>
         ORDER BY class_date_,start_class_time_ ASC
     </select>
+    <select id="queryTotalCourseTimes" resultType="java.lang.Integer">
+        SELECT SUM(ROUND((UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.end_class_time_)) - UNIX_TIMESTAMP(CONCAT(cs.class_date_,' ',cs.start_class_time_)))/60))
+        FROM course_schedule cs
+        WHERE cs.class_group_id_ = #{classGroupId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW()
+    </select>
 </mapper>

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

@@ -53,7 +53,8 @@
 		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 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>
 	
 	<!-- 根据主键查询一条记录 -->

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

@@ -39,7 +39,7 @@
 	
 	<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=";">
+		 <foreach collection="list" item="item" separator=",">
 		(#{item.id},#{item.imGroupId},#{item.userId},#{item.nickname},#{item.isAdmin},#{item.roleType},#{item.createTime},#{item.updateTime})
 		</foreach>
 	</insert>
@@ -134,6 +134,6 @@
 	</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 * FROM im_group_member where find_in_set(im_group_id_,#{imGroupIdList}) and find_in_set(user_id_,#{userIdList})
 	</select>
 </mapper>

+ 15 - 9
mec-biz/src/main/resources/config/mybatis/ImUserFriendMapper.xml

@@ -36,14 +36,17 @@
 	
 	<!-- 向数据库增加一条记录 -->
 	<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 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>
-	
+	<insert id="batchInsert">
+		INSERT INTO im_user_friend (user_id_,friend_id_,friend_nickname_,create_time_,update_time_)
+		VALUES
+		<foreach collection="teachers" item="item" separator=",">
+			(#{teacherId},#{item.userId},#{item.name},NOW(),NOW())
+		</foreach>
+	</insert>
+
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ImUserFriend">
 		UPDATE im_user_friend <set>
@@ -78,8 +81,11 @@
 	<delete id="delete" >
 		DELETE FROM im_user_friend WHERE id_ = #{id} 
 	</delete>
-	
-	<!-- 分页查询 -->
+    <delete id="deleteByUserId">
+		DELETE FROM im_user_friend WHERE user_id_ = #{teacherId}
+	</delete>
+
+    <!-- 分页查询 -->
 	<select id="queryPage" resultMap="ImUserFriend" parameterType="map">
 		SELECT * FROM im_user_friend ORDER BY id_ <include refid="global.limit"/>
 	</select>

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

@@ -465,12 +465,14 @@
         SELECT mgpc.batch_no_,MAX(mgpc.music_group_id_) music_group_id_
         ,MAX(mgpc.create_time_) create_time_,MAX(mgpc.payment_type_) payment_type_,MAX(mgpc.operator_) operator_,
         MAX(mgpc.pay_user_type_) pay_user_type_,MAX(mgpc.memo_) memo_,MAX(mgpc.audit_memo_) audit_memo_,MAX(mgpc.status_) status_,
-        SUM(mgpccs.course_total_minuties_) course_total_minuties_,
-        SUM(mgpccs.course_original_price_) course_original_price_,SUM(mgpccs.course_current_price_) course_current_price_,
+        CASE WHEN MAX(mgpc.payment_type_) = 'SPAN_GROUP_CLASS_ADJUST' THEN MAX(mgsca.master_class_course_times_) ELSE SUM(mgpccs.course_total_minuties_) END course_total_minuties_,
+        CASE WHEN MAX(mgpc.payment_type_) = 'SPAN_GROUP_CLASS_ADJUST' THEN MAX(mgpc.payment_amount_) ELSE SUM(mgpccs.course_original_price_) END course_original_price_,
+        SUM(mgpccs.course_current_price_) course_current_price_,
         MAX(mg.name_) music_group_name_,MAX(mg.organ_id_) organ_id_,MAX(mgpc.payment_pattern_)payment_pattern_
         FROM music_group_payment_calender mgpc
         LEFT JOIN music_group mg ON mg.id_ = mgpc.music_group_id_
         LEFT JOIN music_group_payment_calender_course_settings mgpccs ON mgpc.id_ = mgpccs.music_group_payment_calender_id_
+        LEFT JOIN music_group_student_class_adjust mgsca ON  mgsca.batch_no_ = mgpc.batch_no_
         <include refid="MusicGroupPaymentCalenderAuditDtoSql"/>
         GROUP BY mgpc.batch_no_
         ORDER BY create_time_ DESC

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

@@ -14,6 +14,7 @@
 		<result column="class_group_ids_" property="classGroupIds" />
 		<result column="student_ids_" property="studentIds" />
 		<result column="class_course_minute_" property="classCourseMinute" />
+		<result column="master_class_course_times_" property="masterClassCourseTimes" />
 		<result column="default_course_type_minute_" property="defaultCourseTypeMinute" />
 		<result column="all_lock_course_ids_" property="allLockCourseIds" />
 		<result column="sub_lock_course_ids_" property="subLockCourseIds" />
@@ -39,15 +40,18 @@
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
 		INSERT INTO music_group_student_class_adjust (music_group_id_,batch_no_,new_class_group_json_,
 		class_group_ids_,student_ids_,class_course_minute_,all_lock_course_ids_,sub_lock_course_ids_,
-		operator_id_,student_payment_ids_,class_group_students_,default_course_type_minute_,master_class_group_id_,create_time_,update_time_)
+		operator_id_,student_payment_ids_,class_group_students_,default_course_type_minute_,master_class_group_id_,master_class_course_times_,create_time_,update_time_)
 		VALUES(#{musicGroupId},#{batchNo},#{newClassGroupJson},#{classGroupIds},#{studentIds},
 		#{classCourseMinute},#{allLockCourseIds},#{subLockCourseIds},#{operatorId},#{studentPaymentIds},#{classGroupStudents},
-			   #{defaultCourseTypeMinute},#{masterClassGroupId},NOW(),NOW())
+			   #{defaultCourseTypeMinute},#{masterClassGroupId},#{masterClassCourseTimes},NOW(),NOW())
 	</insert>
 	
 	<!-- 根据主键查询一条记录 -->
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentClassAdjust">
 		UPDATE music_group_student_class_adjust <set>
+		<if test="masterClassCourseTimes != null">
+			master_class_course_times_ = #{masterClassCourseTimes},
+		</if>
 		<if test="masterClassGroupId != null">
 			master_class_group_id_ = #{masterClassGroupId},
 		</if>

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

@@ -110,11 +110,9 @@
 
 
     <!-- 向数据库增加一条记录 -->
-    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentRegistration" useGeneratedKeys="true"
-            keyColumn="id" keyProperty="id">
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.StudentRegistration" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO student_registration
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id!=null">id_,</if>
             <if test="userId!=null">user_id_,</if>
             <if test="name!=null">name_,</if>
             <if test="musicGroupId!=null">music_group_id_,</if>
@@ -139,7 +137,6 @@
         </trim>
         VALUES
         <trim prefix="(" suffix=")" suffixOverrides=",">
-            <if test="id!=null">#{id},</if>
             <if test="userId!=null">#{userId},</if>
             <if test="name!=null">#{name},</if>
             <if test="musicGroupId!=null">#{musicGroupId},</if>
@@ -164,8 +161,8 @@
                 #{musicGroupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             <if test="temporaryCourseFee != null">#{temporaryCourseFee},</if>
-            <if test="surplusCourseFee != null">#{surplus_course_fee_},</if>
-            <if test="createTime!=null">#{createTime},</if>
+            <if test="surplusCourseFee != null">#{surplusCourseFee},</if>
+            <if test="createTime!=null">NOW(),</if>
             <if test="updateTime!=null">NOW(),</if>
         </trim>
     </insert>

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

@@ -1244,4 +1244,7 @@
         SELECT GROUP_CONCAT(real_name_) FROM sys_user su
         WHERE FIND_IN_SET(su.id_,#{teachingTeacherIds})
     </select>
+    <select id="queryAllIds" resultType="java.lang.Integer">
+        SELECT id_ FROM sys_user
+    </select>
 </mapper>

+ 12 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -12,7 +12,9 @@ import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 
 import java.util.Date;
+import java.util.List;
 
+import jdk.internal.dynalink.linker.LinkerServices;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -127,6 +129,16 @@ public class TeacherController extends BaseController {
         return succeed(teacherService.queryGroupStudents(sysUser.getId(),search));
     }
 
+    @ApiOperation(value = "同步教师通讯录")
+    @GetMapping("/syncTeacherImFriend")
+    public Object syncTeacherImFriend(){
+        List<Integer> teacherIds = teacherService.queryAllIds();
+        for (Integer teacherId : teacherIds) {
+            teacherService.queryGroupStudents1(teacherId,null);
+        }
+        return succeed();
+    }
+
     @ApiOperation(value = "获取当前教师通讯录学员列表")
     @GetMapping("/queryGroupStudentList")
     public Object queryGroupStudentList(String search){

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

@@ -294,7 +294,7 @@ public class MusicGroupController extends BaseController {
 	@ApiOperation(value = "关闭乐团")
 	@PostMapping("/closeMusicGroup")
 	@PreAuthorize("@pcs.hasPermissions('musicGroup/closeMusicGroup')")
-	public HttpResponseResult<Boolean> closeMusicGroup(CloseMusicGroupDto closeMusicGroupDto) {
+	public HttpResponseResult<Boolean> closeMusicGroup(@RequestBody CloseMusicGroupDto closeMusicGroupDto) {
 		return succeed(musicGroupService.closeMusicGroup(closeMusicGroupDto));
 	}
 

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

@@ -2,6 +2,7 @@ package com.ym.mec.web.controller;
 
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderCourseSettingsDao;
 import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
+import com.ym.mec.biz.dal.dto.DelRegisterDto;
 import com.ym.mec.biz.dal.dto.MusicGroupSubjectGoodsAndInfoDto;
 import com.ym.mec.biz.dal.dto.StudentAddDto;
 import com.ym.mec.biz.dal.entity.*;
@@ -191,4 +192,12 @@ public class StudentRegistrationController extends BaseController {
         return succeed(studentRegistrationService.delReg(id));
     }
 
+
+    @ApiOperation(value = "批量删除报名的学生")
+    @PostMapping("/batchDel")
+    @PreAuthorize("@pcs.hasPermissions('studentRegistration/batchDel')")
+    public HttpResponseResult<Boolean> batchDel(@RequestBody DelRegisterDto delRegisterDto) {
+        return succeed(studentRegistrationService.batchDelRegs(delRegisterDto.getMusicGroupId(),delRegisterDto.getUserIds()));
+    }
+
 }