Bladeren bron

Merge branch 'online1' into order_dowlaod_2021_03_26

周箭河 4 jaren geleden
bovenliggende
commit
e01d1748f9
87 gewijzigde bestanden met toevoegingen van 1760 en 320 verwijderingen
  1. 3 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java
  2. 1 1
      mec-auth/mec-auth-server/src/main/resources/bootstrap-test.properties
  3. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentMusicScoreDao.java
  4. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  5. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupDao.java
  6. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  7. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  8. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDao.java
  9. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  10. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  11. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMusicScoreCategoriesDao.java
  12. 88 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/NoClassMusicStudentDto.java
  13. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDetailDto.java
  14. 132 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStudentMusicScore.java
  15. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexErrInfoDto.java
  16. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java
  17. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  18. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupQueryInfo.java
  19. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/NoClassMusicStudentQueryInfo.java
  20. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentAttendanceQueryInfo.java
  21. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  22. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleStudentMusicScoreService.java
  23. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupService.java
  24. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  25. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  26. 39 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  27. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  28. 26 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  29. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentMusicScoreServiceImpl.java
  30. 28 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  31. 9 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  32. 47 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  33. 5 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  34. 2 19
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupServiceImpl.java
  35. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  36. 25 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  37. 41 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  38. 32 40
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  39. 50 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  40. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  41. 53 39
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  42. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  43. 5 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultVipGroupSalaryServiceImpl.java
  44. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherLeaveRecordServiceImpl.java
  45. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  46. 18 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  47. 2 2
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  48. 21 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  49. 4 2
      mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  50. 25 3
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  51. 25 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  52. 8 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  53. 12 2
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  54. 73 0
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  55. 140 0
      mec-biz/src/main/resources/config/mybatis/courseScheduleStudentMusicScoreMapper.xml
  56. 2 1
      mec-client-api/src/main/java/com/ym/mec/im/WebFeignService.java
  57. 1 1
      mec-client-api/src/main/java/com/ym/mec/im/fallback/WebFeignServiceFallback.java
  58. 7 7
      mec-common/audit-log/pom.xml
  59. 2 2
      mec-gateway/mec-gateway-web/src/main/resources/bootstrap-test.properties
  60. 26 34
      mec-im/src/main/java/com/ym/controller/RoomController.java
  61. 0 3
      mec-im/src/main/java/com/ym/mec/im/BaseMessage.java
  62. 1 1
      mec-im/src/main/java/com/ym/mec/im/message/DeviceStateChangedMessage.java
  63. 43 0
      mec-im/src/main/java/com/ym/mec/im/message/MusicScoreDownloadMessageMessage.java
  64. 25 0
      mec-im/src/main/java/com/ym/mec/im/message/MusicScoreDownloadStatusMessage.java
  65. 2 3
      mec-im/src/main/java/com/ym/pojo/DeviceTypeEnum.java
  66. 49 0
      mec-im/src/main/java/com/ym/pojo/MusicScoreData.java
  67. 153 0
      mec-im/src/main/java/com/ym/pojo/MusicScoreMessage.java
  68. 14 3
      mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java
  69. 7 1
      mec-im/src/main/java/com/ym/pojo/RoomResult.java
  70. 185 46
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  71. 16 3
      mec-im/src/main/java/com/ym/service/RoomService.java
  72. 1 1
      mec-im/src/main/resources/bootstrap-test.properties
  73. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  74. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  75. 1 1
      mec-student/src/main/resources/bootstrap-test.properties
  76. 1 1
      mec-task/src/main/resources/bootstrap-test.properties
  77. 1 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java
  78. 1 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  79. 1 1
      mec-teacher/src/main/resources/bootstrap-test.properties
  80. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/APIController.java
  81. 2 5
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  82. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/ImGroupController.java
  83. 32 5
      mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java
  84. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/VipGroupManageController.java
  85. 2 5
      mec-web/src/main/java/com/ym/mec/web/controller/education/EducationCourseScheduleController.java
  86. 12 10
      mec-web/src/main/java/com/ym/mec/web/controller/student/StudentAttendanceController.java
  87. 1 1
      mec-web/src/main/resources/bootstrap-test.properties

+ 3 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/web/controller/UserController.java

@@ -154,8 +154,10 @@ public class UserController extends BaseController {
 		if(StringUtils.isEmpty(sysUser.getImToken())){
 			ImResult register = imFeignService.register(new ImUserModel(sysUser.getId().toString(), username, sysUser.getAvatar()));
 			sysUser.setImToken(register.getToken());
+		}else {
+			imFeignService.update(new ImUserModel(sysUser.getId().toString(),username,sysUser.getAvatar()));
 		}
-		webFeignService.updateNickName(sysUser.getId(),username,null);
+		webFeignService.updateNickName(sysUser.getId(),username);
 		password = new BCryptPasswordEncoder().encode(password);
 		sysUser.setPassword(password);
 		sysUser.setUpdateTime(new Date());

+ 1 - 1
mec-auth/mec-auth-server/src/main/resources/bootstrap-test.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=f753d9d9-4bb2-4df6-a483-da9e169617c4
+spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentMusicScoreDao.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface CourseScheduleStudentMusicScoreDao extends BaseDAO<Integer, CourseScheduleStudentMusicScore> {
+
+    int updateByMusicScore(CourseScheduleStudentMusicScore courseScheduleStudentMusicScore);
+
+    List<CourseScheduleStudentMusicScore> queryByScoreIdAndCourseId(@Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId,
+                                                                    @Param("courseId") Long courseId,
+                                                                    @Param("userId") Integer userId,
+                                                                    @Param("downStatus") Integer downStatus,
+                                                                    @Param("userType") Integer userType);
+
+    int batchInsert(@Param("scheduleStudentMusicScores") List<CourseScheduleStudentMusicScore> scheduleStudentMusicScores);
+
+    /**
+     * 关闭所有伴奏的播放
+     * @param scheduleId
+     * @param userId
+     */
+    void closePlayStatus(@Param("scheduleId") long scheduleId, @Param("userId") Integer userId, @Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId);
+
+    /**
+     * 开启原音播放
+     * @param scheduleId
+     * @param musicScoreAccompanimentId
+     * @return
+     */
+    int openPlayStatus(@Param("scheduleId") long scheduleId,@Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId);
+
+    /**
+     * 开启伴奏播放
+     * @param scheduleId
+     * @param musicScoreAccompanimentId
+     * @return
+     */
+    int openAccompanimentPlayStatus(@Param("scheduleId") long scheduleId, @Param("musicScoreAccompanimentId") Integer musicScoreAccompanimentId);
+}

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

@@ -512,4 +512,11 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @return
      */
     List<CourseSchedule> getCourseScheduleStudentNum(@Param("courseIds") List<Long> courseIds);
+
+    List<CourseScheduleStudentPayment> getWithClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds,
+                                                            @Param("studentId") Integer studentId);
+
+    List<CourseScheduleStudentPayment> getWithGroup(@Param("groupId") String groupId,
+                                                            @Param("groupType") GroupType groupType,
+                                                            @Param("studentIds") List<Integer> studentIds);
 }

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

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

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.entity.IndexBaseMonthData;
+import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -148,6 +149,8 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
 
     int queryErrInspection(@Param("organIds") Set<Integer> organIds, @Param("startTime") String startTime);
 
+    IndexErrInfoDto getNoClassMusicGroupStudentInfo(@Param("organIds") Set<Integer> organIds);
+
     int countNoPaymentStudentNum(@Param("organIds") Set<Integer> organIds);
     List<String> getNoPaymentMusicGroup(@Param("organIds") Set<Integer> organIds);
 

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

@@ -375,4 +375,6 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      * @return
      */
     List<MusicGroup> getMusicGroupByIds(@Param("ids") List<String> ids);
+
+    List<String> getNoClassStudentMusicGroupIds(@Param("organIds") List<Integer> organIds);
 }

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

@@ -337,4 +337,11 @@ public interface MusicGroupPaymentCalenderDao extends BaseDAO<Long, MusicGroupPa
      * @return
      */
     List<MusicGroupPaymentCalender> getMusicGroupCalenderBatchNoByIds(@Param("ids") List<String> ids);
+
+    /**
+     * 获取缴费状态在审核中或者已拒绝的缴费项目的学员
+     * @param musicGroupId
+     * @return
+     */
+    String queryCalenderStudentIds(@Param("musicGroupId") String musicGroupId, @Param("batchNo") String batchNo);
 }

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

@@ -307,4 +307,11 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @return
      */
     List<ExportStudentAttendanceDto> exportStudentAttendancesQueryPage(Map<String, Object> params);
+
+    /**
+     * 获取异常考勤学员数量
+     * @param courseScheduleId
+     * @return
+     */
+    int countErrorAttendance(Integer courseScheduleId);
 }

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

@@ -486,4 +486,7 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
     List<StudentRegistration> getStudentNormalRegistration(@Param("studentIds") Set<Integer> studentIds);
 
     StudentRegistration getByUserIdAndMusicGroupId(@Param("musicGroupId") String musicGroupId, @Param("userId") Integer userId);
+
+    List<NoClassMusicStudentDto> queryNoClassMusicStudents(Map<String, Object> params);
+    int countNoClassMusicStudents(Map<String, Object> params);
 }

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

@@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 
+import java.util.List;
+
 public interface SysMusicScoreCategoriesDao extends BaseDAO<Integer, SysMusicScoreCategories> {
 
     List<SysMusicScoreCategories> findByParentId(@Param("parentId") Integer parentId);

+ 88 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/NoClassMusicStudentDto.java

@@ -0,0 +1,88 @@
+package com.ym.mec.biz.dal.dto;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/25 0025
+ */
+public class NoClassMusicStudentDto {
+
+    private Integer organId;
+
+    private String organName;
+
+    private String groupId;
+
+    private String groupName;
+
+    private Integer studentId;
+
+    private String studentName;
+
+    private Integer subjectId;
+
+    private String subjectName;
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getGroupName() {
+        return groupName;
+    }
+
+    public void setGroupName(String groupName) {
+        this.groupName = groupName;
+    }
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDetailDto.java

@@ -32,9 +32,19 @@ public class TeacherAttendanceDetailDto {
     private Date signOutTime;
 
     private Integer attendClassTime;
+
+    private Integer errorAttendanceNum;
     
     private School school;
 
+    public Integer getErrorAttendanceNum() {
+        return errorAttendanceNum;
+    }
+
+    public void setErrorAttendanceNum(Integer errorAttendanceNum) {
+        this.errorAttendanceNum = errorAttendanceNum;
+    }
+
     public Integer getAttendClassTime() {
         return attendClassTime;
     }

+ 132 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStudentMusicScore.java

@@ -0,0 +1,132 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.util.Date;
+
+public class CourseScheduleStudentMusicScore {
+    private Integer id;
+    private Long courseScheduleId;
+    private Integer downStatus = 0;
+    private Integer userId;
+    private Integer userType = 0;
+    private Integer musicScoreAccompanimentId;
+    private Integer playStatus = 0;
+    private Integer accompanimentPlayStatus = 0;
+    private Integer speed;
+    private String mp3Url;
+    private String url;
+    private String musicScoreName;
+    private Date createTime;
+    private Date updateTime;
+
+    public Integer getAccompanimentPlayStatus() {
+        return accompanimentPlayStatus;
+    }
+
+    public void setAccompanimentPlayStatus(Integer accompanimentPlayStatus) {
+        this.accompanimentPlayStatus = accompanimentPlayStatus;
+    }
+
+    public String getMp3Url() {
+        return mp3Url;
+    }
+
+    public void setMp3Url(String mp3Url) {
+        this.mp3Url = mp3Url;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public String getMusicScoreName() {
+        return musicScoreName;
+    }
+
+    public void setMusicScoreName(String musicScoreName) {
+        this.musicScoreName = musicScoreName;
+    }
+
+    public Integer getUserType() {
+        return userType;
+    }
+
+    public void setUserType(Integer userType) {
+        this.userType = userType;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Long getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Long courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getDownStatus() {
+        return downStatus;
+    }
+
+    public void setDownStatus(Integer downStatus) {
+        this.downStatus = downStatus;
+    }
+
+    public Integer getMusicScoreAccompanimentId() {
+        return musicScoreAccompanimentId;
+    }
+
+    public void setMusicScoreAccompanimentId(Integer musicScoreAccompanimentId) {
+        this.musicScoreAccompanimentId = musicScoreAccompanimentId;
+    }
+
+    public Integer getPlayStatus() {
+        return playStatus;
+    }
+
+    public void setPlayStatus(Integer playStatus) {
+        this.playStatus = playStatus;
+    }
+
+    public Integer getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(Integer speed) {
+        this.speed = speed;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/IndexErrInfoDto.java

@@ -17,6 +17,8 @@ public class IndexErrInfoDto<T> {
 
     private int num = 0;
 
+    private int num2 = 0;
+
     private List<T> result;
 
     public IndexErrInfoDto() {
@@ -62,6 +64,14 @@ public class IndexErrInfoDto<T> {
         this.num = num;
     }
 
+    public int getNum2() {
+        return num2;
+    }
+
+    public void setNum2(int num2) {
+        this.num2 = num2;
+    }
+
     public List<T> getResult() {
         return result;
     }

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexErrorType.java

@@ -10,6 +10,7 @@ public enum IndexErrorType implements BaseEnum<String, IndexErrorType> {
     MUSIC_PATROL("MUSIC_PATROL", "乐团巡查"),
     HIGH_CLASS_STUDENT_LESS_THAN_THREE("HIGH_CLASS_STUDENT_LESS_THAN_THREE", "基础技能班学员数量异常"),
     MUSIC_PATROL_ITEM("MUSIC_PATROL_ITEM", "乐团巡查事项异常"),
+    NO_CLASS_MUSIC_GROUP_STUDENT_INFO("NO_CLASS_MUSIC_GROUP_STUDENT_INFO", "当前有{0}个乐团共{1}名学员未加入任何班级"),
 
     STUDENT_INFO("STUDENT_INFO", "学员处理"),
     STUDENT_NOT_PAYMENT("STUDENT_NOT_PAYMENT", "未缴费学员数"),

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

@@ -63,7 +63,8 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
 
     /**试听课*/
     TRIAL_PRACTICE_CREATE_STUDENT_PUSH("TRIAL_PRACTICE_CREATE_STUDENT_PUSH", "试听课安排"),
-    TRIAL_PRACTICE_CREATE_TEACHER_PUSH("TRIAL_PRACTICE_CREATE_TEACHER_PUSH", "试听课安排"),
+
+    PRACTICE_CREATE_TEACHER_PUSH("PRACTICE_CREATE_TEACHER_PUSH", "新增网管课程"),
 
     /**乐团网管课*/
     MUSIC_NETWORK_CRATE_TEACHER("MUSIC_NETWORK_CRATE_TEACHER", "乐团网管课安排"),

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupQueryInfo.java

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 public class MusicGroupQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "所属分部编号",required = false)
@@ -26,6 +28,26 @@ public class MusicGroupQueryInfo extends QueryInfo {
 
     private MusicGroupStatusEnum status;
 
+    private Boolean noClassStudentMusicGroup;
+
+    private List<String> musicGroupIds;
+
+    public List<String> getMusicGroupIds() {
+        return musicGroupIds;
+    }
+
+    public void setMusicGroupIds(List<String> musicGroupIds) {
+        this.musicGroupIds = musicGroupIds;
+    }
+
+    public Boolean getNoClassStudentMusicGroup() {
+        return noClassStudentMusicGroup;
+    }
+
+    public void setNoClassStudentMusicGroup(Boolean noClassStudentMusicGroup) {
+        this.noClassStudentMusicGroup = noClassStudentMusicGroup;
+    }
+
     public MusicGroupStatusEnum getStatus() {
         return status;
     }

+ 44 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/NoClassMusicStudentQueryInfo.java

@@ -0,0 +1,44 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/3/25 0025
+ */
+public class NoClassMusicStudentQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "分部编号")
+    private String organIds;
+
+    @ApiModelProperty(value = "乐团名称/编号")
+    private String musicGroupSearch;
+
+    @ApiModelProperty(value = "学员姓名/编号")
+    private String studentSearch;
+
+    public String getOrganIds() {
+        return organIds;
+    }
+
+    public void setOrganIds(String organIds) {
+        this.organIds = organIds;
+    }
+
+    public String getMusicGroupSearch() {
+        return musicGroupSearch;
+    }
+
+    public void setMusicGroupSearch(String musicGroupSearch) {
+        this.musicGroupSearch = musicGroupSearch;
+    }
+
+    public String getStudentSearch() {
+        return studentSearch;
+    }
+
+    public void setStudentSearch(String studentSearch) {
+        this.studentSearch = studentSearch;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentAttendanceQueryInfo.java

@@ -59,6 +59,16 @@ public class StudentAttendanceQueryInfo extends QueryInfo {
     //是否回访
     private Boolean visitFlag;
 
+    private Boolean orderFlag;
+
+    public Boolean getOrderFlag() {
+        return orderFlag;
+    }
+
+    public void setOrderFlag(Boolean orderFlag) {
+        this.orderFlag = orderFlag;
+    }
+
     public Boolean getVisitFlag() {
         return visitFlag;
     }

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

@@ -225,6 +225,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @Date: 2019/9/23
 	 * 课时调整
 	 */
+	@Deprecated
 	void classStartDateAdjust(List<CourseSchedule> newCourseSchedules);
 
 	/**
@@ -259,7 +260,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @Date: 2019/9/24
 	 * 课程交换
 	 */
-	void courseSwap(Long courseScheduleId1, Long courseScheduleId2, Boolean allowZeroSalary);
+	void courseSwap(Long courseScheduleId1, Long courseScheduleId2);
 
 	/**
 	 * @Author: Joburgess

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

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore;
+import com.ym.mec.common.service.BaseService;
+
+public interface CourseScheduleStudentMusicScoreService extends BaseService<Integer, CourseScheduleStudentMusicScore> {
+
+}

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

@@ -58,5 +58,5 @@ public interface ImGroupService extends BaseService<Long, ImGroup> {
 	 * @param nickName
 	 * @return
 	 */
-    int updateNickName(Integer userId, String nickName,String userType);
+    int updateNickName(Integer userId, String nickName);
 }

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

@@ -3,8 +3,10 @@ package com.ym.mec.biz.service;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
+import com.ym.mec.biz.dal.page.NoClassMusicStudentQueryInfo;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.io.IOException;
@@ -368,4 +370,13 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      */
     Map<String,Boolean> checkMusicGroupsRegOrPayStatus(List<String> ids);
 
+    /**
+     * @describe 查询乐团中未加入班级学员信息
+     * @author Joburgess
+     * @date 2021/3/25 0025
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.NoClassMusicStudentDto>
+     */
+    PageInfo<NoClassMusicStudentDto> queryNoClassMusicStudentInfo(NoClassMusicStudentQueryInfo queryInfo);
+
 }

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

@@ -167,7 +167,8 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @return java.util.Map
      */
     <K extends VipGroup> Map<String, BigDecimal> countVipGroupPredictFee(K vipGroup,
-                                                     Integer teacherId);
+                                                                         Integer teacherId,
+                                                                         Long courseId);
 
     /**
      * @describe 计算vip课程购买总价,及老师课酬-只是学生人数统计方式不同
@@ -177,6 +178,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @param teacherId: 要计算课酬的老师的编号
      * @return java.util.Map
      */
+    @Deprecated
     <K extends VipGroup> Map<String, BigDecimal> countVipGroupCoursePredictFee(K vipGroup,
                                                                          Integer teacherId,
                                                                                Long courseId);

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

@@ -158,6 +158,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
     private MusicGroupPaymentCalenderService musicGroupPaymentCalenderService;
     @Autowired
     private MusicGroupStudentClassAdjustDao musicGroupStudentClassAdjustDao;
+    @Autowired
+    private MusicGroupPaymentCalenderDetailDao musicGroupPaymentCalenderDetailDao;
 
     @Override
     public BaseDAO<Integer, ClassGroup> getDAO() {
@@ -1199,6 +1201,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             totalOriginPriceMap.put(musicGroupPaymentCalenderCourseSettings.getCourseType(), musicGroupPaymentCalenderCourseSettings.getCourseOriginalPrice());
         }
 
+        List<Integer> classGroupIds = classGroupList.stream().map(ClassGroup::getId).collect(Collectors.toList());
+        List<CourseScheduleStudentPayment> ccs = courseScheduleStudentPaymentDao.getWithClassGroupIds(classGroupIds, studentId);
+        Set<Long> existCourseIds = new HashSet<>();
+        if(!CollectionUtils.isEmpty(ccs)){
+            existCourseIds = ccs.stream().map(CourseScheduleStudentPayment::getCourseScheduleId).collect(Collectors.toSet());;
+        }
+
         Map<CourseScheduleType, BigDecimal> totalPriceMap = new HashMap<CourseSchedule.CourseScheduleType, BigDecimal>();
         Map<CourseScheduleType, BigDecimal> totalOrignPriceMap = new HashMap<CourseSchedule.CourseScheduleType, BigDecimal>();
 
@@ -1222,6 +1231,10 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             // 3、学生加入级未开始课程
             List<CourseSchedule> courseScheduleList = courseScheduleService.findNoStartCoursesByClassGroupId(classGroup.getId());
             for (CourseSchedule courseSchedule : courseScheduleList) {
+                if(existCourseIds.contains(courseSchedule.getId())){
+                    throw new BizException("该学员已在此班级{}课程中", courseSchedule.getId());
+                }
+
                 CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
                 courseScheduleStudentPayment.setCourseSchedule(courseSchedule);
                 courseScheduleStudentPayment.setGroupType(classGroup.getGroupType());
@@ -1229,6 +1242,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
                 courseScheduleStudentPayment.setUserId(studentId);
                 courseScheduleStudentPayment.setBatchNo(batchNo);
+                courseScheduleStudentPayment.setBeMerged(false);
 
                 unitPrice = unitPriceMap.get(courseSchedule.getType());
                 if (unitPrice != null) {
@@ -3516,9 +3530,24 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (CollectionUtils.isEmpty(studentIds)) {
             throw new BizException("学员列表不可为空");
         }
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
 
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(classGroupIds.get(0));
+        //获取欠费学员列表
+        List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroup.getId(), new ArrayList<>(studentIds));
+        if(noPaymentUserIds.size() > 0){
+            throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+        }
+        //获取缴费状态在审核中或者已拒绝的缴费项目的学员
+        String studentId = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(),null);
+        if(StringUtils.isNotEmpty(studentId)){
+            for (Integer integer : studentIds) {
+                if(studentId.contains(integer.toString())){
+                    throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+                }
+            }
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+
         //生成缴费记录,同一个批次
         MusicGroupPaymentCalender.PaymentCalenderStatusEnum status = null;
         List<MusicGroupPaymentCalenderDto> paymentCalenderDtos = mergeClassSplitClassAffirmDto.getMusicGroupPaymentCalenderDtos();
@@ -3903,6 +3932,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 studentIds);
         //创建缴费项目
         MusicGroup musicGroup = musicGroupDao.findByClassGroupId(masterClassGroupId);
+        //获取缴费状态在审核中或者已拒绝的缴费项目的学员
+        String studentId = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroup.getId(),null);
+        if(StringUtils.isNotEmpty(studentId)){
+            for (Integer integer : studentIds) {
+                if(studentId.contains(integer.toString())){
+                    throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+                }
+            }
+        }
         BigDecimal masterTotalPrice = getMasterTotalPrice(masterClassGroupId);
         //是否有需要审核的缴费项目
         List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = paymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails();

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

@@ -477,6 +477,14 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         addStudentIds = allStudentIds.stream().filter(id -> !repeatStudentIds.contains(id)).collect(Collectors.toSet());
         removeStudentIds = oldNormalStudentIds.stream().filter(id -> !repeatStudentIds.contains(id)).collect(Collectors.toSet());
 
+        //未开始的课程
+        List<CourseSchedule> classGroupNotStartCourse = courseScheduleDao.findCoursesByClassGroupId(classGroupId.intValue(), CourseStatusEnum.NOT_START);
+
+        //有未开始的课程不能删除学生
+        if(!CollectionUtils.isEmpty(removeStudentIds) && !CollectionUtils.isEmpty(classGroupNotStartCourse)){
+            throw new BizException("班级有未上完的课程,不能删除学生");
+        }
+
         List<ClassGroupStudentMapper> needUpdateClassGroupStudents = new ArrayList<>();
 
         for (ClassGroupStudentMapper classGroupStudent : classGroupStudents) {
@@ -516,7 +524,6 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         classGroupService.updateClassStudentNum(classGroupId.intValue(), allStudentIds.size());
 
-        List<CourseSchedule> classGroupNotStartCourse = courseScheduleDao.findCoursesByClassGroupId(classGroupId.intValue(), CourseStatusEnum.NOT_START);
         if (CollectionUtils.isEmpty(classGroupNotStartCourse)) {
             if (!CollectionUtils.isEmpty(addStudentIds)) {
                 if(musicGroup.getStatus() == MusicGroupStatusEnum.PROGRESS){

+ 26 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -3367,7 +3367,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					if (newCourseSchedule.getGroupType() == GroupType.MUSIC) {
 						courseScheduleTeacherSalaryService.createMusicGroupCourseTeacherSalary(null, newCourseSchedule, ts);
 					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-						Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId);
+						Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, teacherId, ts.getCourseScheduleId());
 
 						BigDecimal teacherSalary=null;
 
@@ -3581,7 +3581,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
                     BigDecimal onlineTeacherSalary = new BigDecimal(0), offlineTeacherSalary = new BigDecimal(0);
 
-					Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(byCourseSchedule, newCourseSchedule.getActualTeacherId());
+					Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(byCourseSchedule, newCourseSchedule.getActualTeacherId(), newCourseSchedule.getId());
 
                     List<CourseSchedule> courseSchedules = new ArrayList<>();
                     courseSchedules.add(newCourseSchedule);
@@ -3721,7 +3721,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
     @Transactional(rollbackFor = Exception.class)
     @Override
-    public void courseSwap(Long courseScheduleId1, Long courseScheduleId2, Boolean allowZeroSalary) {
+    public void courseSwap(Long courseScheduleId1, Long courseScheduleId2) {
         if (courseScheduleId1.equals(courseScheduleId2)) {
             throw new BizException("请选择不同的课程");
         }
@@ -3754,7 +3754,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         List<CourseSchedule> courseSchedules = new ArrayList<>();
         courseSchedules.add(courseSchedule1);
         courseSchedules.add(courseSchedule2);
-        courseAdjust(courseSchedules, allowZeroSalary);
+        courseAdjust(courseSchedules, true);
     }
 
     @Override
@@ -3895,14 +3895,30 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
         //学员提起申诉通知
         CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleComplaints.getCourseScheduleId());
-        Set<Integer> roleIds = new HashSet<>(1);
-        roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
-        roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
-        roleIds.add(SysUserRole.SECTION_MANAGER);
-        roleIds.add(SysUserRole.ADMINISTRATOR);
+		GroupType groupType = courseSchedule.getGroupType();
+		String musicGroupId = courseSchedule.getMusicGroupId();
+		Integer targetUserId = null;
+		switch (groupType) {
+			case VIP:
+				targetUserId = vipGroupDao.get(Long.parseLong(musicGroupId)).getEducationalTeacherId();
+				break;
+			case MUSIC:
+				targetUserId = musicGroupDao.get(musicGroupId).getEducationalTeacherId();
+				break;
+			case PRACTICE:
+				targetUserId = practiceGroupDao.get(Long.parseLong(musicGroupId)).getEducationalTeacherId();
+				break;
+			case COMM:
+				targetUserId = coursesGroupDao.get(Long.parseLong(musicGroupId)).getEducationalTeacherId();
+				break;
+		}
+		Set<Integer> roleIds = new HashSet<>(1);
+		roleIds.add(SysUserRole.SECTION_MANAGER);
+		Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, user.getOrganId());
+		integers.add(targetUserId);
         Map<String, Long> memo = new HashMap<>(1);
         memo.put("courseScheduleComplaintsId", courseScheduleComplaints.getId());
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, user.getOrganId()), MessageTypeEnum.BACKSTAGE_STUDENT_APPEAL, JSONObject.toJSONString(memo), courseSchedule.getName(), user.getUsername());
+        sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_STUDENT_APPEAL, JSONObject.toJSONString(memo), courseSchedule.getName(), user.getUsername());
     }
 
     @Override

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentMusicScoreServiceImpl.java

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentMusicScoreDao;
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore;
+import com.ym.mec.biz.service.CourseScheduleStudentMusicScoreService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CourseScheduleStudentMusicScoreServiceImpl extends BaseServiceImpl<Integer, CourseScheduleStudentMusicScore>  implements CourseScheduleStudentMusicScoreService {
+	
+	@Autowired
+	private CourseScheduleStudentMusicScoreDao courseScheduleStudentMusicScoreDao;
+
+	@Override
+	public BaseDAO<Integer, CourseScheduleStudentMusicScore> getDAO() {
+		return courseScheduleStudentMusicScoreDao;
+	}
+
+}

+ 28 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java

@@ -391,6 +391,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				cssp.setOriginalPrice(courseOriginalPrice);
 				cssp.setExpectPrice(courseCurrentPrice);
 				cssp.setActualPrice(BigDecimal.ZERO);
+				cssp.setBeMerged(false);
 				newCourseScheduleStudentPayments.add(cssp);
 				if(courseSchedules.size() - 1 == i){
 					CourseScheduleStudentPayment scheduleStudentPayment = newCourseScheduleStudentPayments.get(0);
@@ -419,16 +420,27 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	@Override
 	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	public void createForMusicGroup(String musicGroupId, List<CourseSchedule> courseSchedules, List<Integer> studentIds) {
-		Map<CourseSchedule.CourseScheduleType, Integer> courseTypeCourseDurationMap = new HashMap<>();
+		Map<CourseSchedule.CourseScheduleType, Map<Integer, Integer>> courseTypeCourseDurationMap = new HashMap<>();
 		Map<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCourseMap = courseSchedules.stream().collect(Collectors.groupingBy(CourseSchedule::getType));
+
+		List<CourseScheduleStudentPayment> css = courseScheduleStudentPaymentDao.getWithGroup(musicGroupId, GroupType.MUSIC, studentIds);
+		Map<Integer, Set<Long>> studentCourseIdsMap = new HashMap<>();
+		if(!CollectionUtils.isEmpty(css)){
+			studentCourseIdsMap = css.stream().collect(Collectors.groupingBy(CourseScheduleStudentPayment::getUserId, Collectors.mapping(CourseScheduleStudentPayment::getCourseScheduleId, Collectors.toSet())));
+		}
+
 		for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> typeCoursesEntry : typeCourseMap.entrySet()) {
-			int totalCourseDuration = 0;
-			for (CourseSchedule courseSchedule : typeCoursesEntry.getValue()) {
-				//课程时长
-				int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
-				totalCourseDuration += courseDuration;
+			Map<Integer, Integer> sdMap = new HashMap<>();
+			for (Integer studentId : studentIds) {
+				int totalCourseDuration = 0;
+				for (CourseSchedule courseSchedule : typeCoursesEntry.getValue()) {
+					//课程时长
+					int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
+					totalCourseDuration += courseDuration;
+				}
+				sdMap.put(studentId, totalCourseDuration);
 			}
-			courseTypeCourseDurationMap.put(typeCoursesEntry.getKey(), totalCourseDuration);
+			courseTypeCourseDurationMap.put(typeCoursesEntry.getKey(), sdMap);
 		}
 
 		List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
@@ -436,9 +448,13 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 		List<String> allBatchNos = new ArrayList<>();
 
 		for (Integer studentId : studentIds) {
+			Set<Long> existCourseIds = new HashSet<>();
+			if(studentCourseIdsMap.containsKey(studentId)){
+				existCourseIds = studentCourseIdsMap.get(studentId);
+			}
 			for (Map.Entry<CourseSchedule.CourseScheduleType, List<CourseSchedule>> courseScheduleTypeListEntry : typeCourseMap.entrySet()) {
 				//当前课程类型总课程时长
-				Integer typeCourseDuration = courseTypeCourseDurationMap.get(courseScheduleTypeListEntry.getKey());
+				Integer typeCourseDuration = courseTypeCourseDurationMap.get(courseScheduleTypeListEntry.getKey()).get(studentId);
 
 				String batchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, studentId, courseScheduleTypeListEntry.getKey(),null);
 
@@ -480,6 +496,9 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				courseScheduleTypeListEntry.getValue().sort(Comparator.comparing(CourseSchedule::getStartClassTime));
 				BigDecimal typeCourseTotalOriginalPrice = new BigDecimal("0"), typeCourseTotalCurrentPrice = new BigDecimal("0");
 				for (CourseSchedule courseSchedule : courseScheduleTypeListEntry.getValue()) {
+					if(existCourseIds.contains(courseSchedule.getId())){
+						throw new BizException("该学员已在此班级{}课程中", courseSchedule.getId());
+					}
 					//课程时长
 					int courseDuration = DateUtil.minutesBetween(courseSchedule.getStartClassTime(), courseSchedule.getEndClassTime());
 
@@ -501,6 +520,7 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 					cssp.setOriginalPrice(courseOriginalPrice);
 					cssp.setExpectPrice(courseCurrentPrice);
 					cssp.setActualPrice(BigDecimal.ZERO);
+					cssp.setBeMerged(false);
 					typeCourseStudentPayments.add(cssp);
 				}
 

+ 9 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -841,13 +841,6 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         BigDecimal onlineTeacherSalary=BigDecimal.ZERO,
                 offlineTeacherSalary=BigDecimal.ZERO;
 
-        Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee(vipGroup, vipGroup.getUserId());
-
-        if(Objects.nonNull(salary)){
-            onlineTeacherSalary=salary.get("onlineTeacherSalary");
-            offlineTeacherSalary=salary.get("offlineTeacherSalary");
-        }
-
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByGroupWithNotStart(vipGroupId.toString(), GroupType.VIP.getCode());
         if(!CollectionUtils.isEmpty(courseScheduleTeacherSalaries)){
             List<Long> courseIds = courseScheduleTeacherSalaries.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
@@ -855,6 +848,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             Map<Integer, String> coureTeachModeMap = MapUtil.convertIntegerMap(teachModeById);
             for(int i=0;i<courseScheduleTeacherSalaries.size();i++){
                 String courseType = coureTeachModeMap.get(courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
+
+                Map<String, BigDecimal> salary = vipGroupService.countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), courseScheduleTeacherSalaries.get(i).getCourseScheduleId());
+
+                if(Objects.nonNull(salary)){
+                    onlineTeacherSalary=salary.get("onlineTeacherSalary");
+                    offlineTeacherSalary=salary.get("offlineTeacherSalary");
+                }
+
                 if(courseType.equals(TeachModeEnum.ONLINE.getCode())){
                     courseScheduleTeacherSalaries.get(i).setExpectSalary(onlineTeacherSalary);
                 }else if(courseType.equals(TeachModeEnum.OFFLINE.getCode())){
@@ -1289,7 +1290,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     private void createVipGroupCourseTeacherSalaries(CourseSchedule courseSchedule, List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries){
         VipGroup vipGroup = vipGroupService.get(Long.valueOf(courseSchedule.getMusicGroupId()));
         for (CourseScheduleTeacherSalary courseScheduleTeacherSalary : courseScheduleTeacherSalaries) {
-            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, courseSchedule.getActualTeacherId(), courseSchedule.getId());
+            Map<String, BigDecimal> salaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, courseSchedule.getActualTeacherId(), courseSchedule.getId());
             courseScheduleTeacherSalary.setExpectSalary(courseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?salaryMap.get("offlineTeacherSalary"):salaryMap.get("onlineTeacherSalary"));
         }
     }

+ 47 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java

@@ -954,6 +954,31 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             userPhoneMap.put(practiceGroup.getStudentId(), student.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.PAY_PRACTICE_BUY_SUCCESS,
                     userPhoneMap, null, 0, null, "STUDENT", groupStartTime, groupEndTime, teacherName, drillTimesOnWeek, firstCourseStartTime);
+
+            String practiceType = "网管课";
+            switch (practiceGroup.getType()){
+                case FREE:
+                case CHARGE:
+                    break;
+                case TRIAL:
+                    practiceType = "试听课";
+                    break;
+                case COME_ON_PACKAGE:
+                case CARE_PACKAGE:
+                    practiceType = practiceGroup.getType().getMsg();
+                    break;
+            }
+
+            Map<Integer, String> teacherMap = new HashMap<>();
+            teacherMap.put(practiceGroup.getUserId(), practiceGroup.getUserId().toString());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_CREATE_TEACHER_PUSH,
+                    teacherMap, null, 0, null, "TEACHER", teacher.getRealName(),
+                    practiceType, practiceGroup.getName());
+            Map<Integer, String> teacherPhoneMap = new HashMap<>();
+            teacherPhoneMap.put(practiceGroup.getUserId(), teacher.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.PRACTICE_CREATE_TEACHER_PUSH,
+                    teacherPhoneMap, null, 0, null, "TEACHER", teacher.getRealName(),
+                    practiceType, practiceGroup.getName());
         }catch (Exception e){
             e.printStackTrace();
         }
@@ -1483,16 +1508,30 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
 //                    userPhoneMap, null, 0, null, "STUDENT", student.getUsername(), teacher.getRealName(),
 //                    oneCourseTimeStr, twoCourseTimeStr);
 
+            String practiceType = "网管课";
+            switch (practiceGroupBuyParams.getType()){
+                case FREE:
+                case CHARGE:
+                    break;
+                case TRIAL:
+                    practiceType = "试听课";
+                    break;
+                case COME_ON_PACKAGE:
+                case CARE_PACKAGE:
+                    practiceType = practiceGroupBuyParams.getType().getMsg();
+                    break;
+            }
+
             Map<Integer, String> teacherMap = new HashMap<>();
             teacherMap.put(practiceGroupBuyParams.getUserId(), practiceGroupBuyParams.getUserId().toString());
-            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.TRIAL_PRACTICE_CREATE_TEACHER_PUSH,
-                    teacherMap, null, 0, null, "TEACHER", teacher.getRealName(), practiceGroupBuyParams.getName(),
-                    oneCourseTimeStr, twoCourseTimeStr);
-//            Map<Integer, String> teacherPhoneMap = new HashMap<>();
-//            teacherPhoneMap.put(practiceGroupBuyParams.getUserId(), teacher.getPhone());
-//            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TRIAL_PRACTICE_CREATE_TEACHER_PUSH,
-//                    teacherPhoneMap, null, 0, null, "TEACHER", teacher.getRealName(), practiceGroupBuyParams.getName(),
-//                    oneCourseTimeStr, twoCourseTimeStr);
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_CREATE_TEACHER_PUSH,
+                    teacherMap, null, 0, null, "TEACHER", teacher.getRealName(),
+                    practiceType, practiceGroupBuyParams.getName());
+            Map<Integer, String> teacherPhoneMap = new HashMap<>();
+            teacherPhoneMap.put(practiceGroupBuyParams.getUserId(), teacher.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.PRACTICE_CREATE_TEACHER_PUSH,
+                    teacherPhoneMap, null, 0, null, "TEACHER", teacher.getRealName(),
+                    practiceType, practiceGroupBuyParams.getName());
         }catch (Exception e){
             e.printStackTrace();
         }

+ 5 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

@@ -61,7 +61,7 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 	@Autowired
 	private OrganizationDao organizationDao;
 	@Autowired
-	private ImGroupService imGroupService;
+	private ImGroupDao imGroupDao;
 
 	@Override
 	public BaseDAO<Integer, Employee> getDAO() {
@@ -112,8 +112,8 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 			throw new BizException("员工信息不存在");
 		}
 		employee.setUserId(employee.getId());
+		SysUser sysUser = sysUserFeignService.queryUserByMobile(employee.getPhone());
 		if(StringUtils.isNotEmpty(employee.getPhone())){
-			SysUser sysUser = sysUserFeignService.queryUserByMobile(employee.getPhone());
 			if(sysUser != null && !sysUser.getId().equals(employee.getUserId())){
 				throw new BizException("手机号已存在");
 			}
@@ -124,7 +124,9 @@ public class EmployeeServiceImpl extends BaseServiceImpl<Integer, Employee>  imp
 		//新增用户角色
 		employeeDao.batchAddEmployeeRole(employee.getId(),employee.getRoleIds());
 		teacherDao.updateUser(employee);
-		imGroupService.updateNickName(employee.getUserId(),employee.getRealName(),"SYSTEM");
+		imGroupDao.updateNickname(employee.getUserId(), employee.getRealName());
+		imGroupDao.updateUserFriendNickname(employee.getUserId(), employee.getRealName());
+		imFeignService.update(new ImUserModel(employee.getUserId().toString(),employee.getRealName(),sysUser.getAvatar()));
 	}
 
 	@Override

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

@@ -128,27 +128,10 @@ public class ImGroupServiceImpl extends BaseServiceImpl<Long, ImGroup> implement
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public int updateNickName(Integer userId, String nickName,String userType) {
+	public int updateNickName(Integer userId, String nickName) {
 		//修改群成员备注
 		int i = imGroupDao.updateNickname(userId, nickName);
-		//修改sysUser名称,如果包含学员的角色,那么修改userName。否则修改realName
-		SysUser sysUser = sysUserFeignService.queryUserById(userId);
-		if(StringUtils.isNotEmpty(userType)){
-			if("STUDENT" == userType){
-				sysUser.setUsername(nickName);
-			}else {
-				sysUser.setRealName(nickName);
-			}
-		}else {
-			if(sysUser.getUserType().contains("STUDENT")){
-				sysUser.setUsername(nickName);
-			}else {
-				sysUser.setRealName(nickName);
-			}
-			sysUserFeignService.updateSysUser(sysUser);
-		}
-		//同步融云基本信息
-		imFeignService.update(new ImUserModel(sysUser.getId().toString(),nickName,sysUser.getAvatar()));
+		imGroupDao.updateUserFriendNickname(userId, nickName);
 		return i;
 	}
 

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

@@ -299,6 +299,10 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			int errInspection = indexBaseMonthDataDao.queryErrInspection(organIds,startTime);
 			oneChild.add(new IndexErrInfoDto(IndexErrorType.MUSIC_PATROL_ITEM, IndexErrorType.MUSIC_PATROL_ITEM.getMsg(),errInspection, null));
 
+			IndexErrInfoDto noClassMusicGroupStudentInfo = indexBaseMonthDataDao.getNoClassMusicGroupStudentInfo(organIds);
+			noClassMusicGroupStudentInfo.setDesc(IndexErrorType.NO_CLASS_MUSIC_GROUP_STUDENT_INFO.getMsg());
+			oneChild.add(noClassMusicGroupStudentInfo);
+
 			one.setNum(oneChild.stream().mapToInt(IndexErrInfoDto::getNum).sum());
 			one.setResult(oneChild);
 			all.add(one);
@@ -441,6 +445,12 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				flag1 = true;
 			}
 		}
+		if(!flag1){
+			IndexErrInfoDto noClassMusicGroupStudentInfo = indexBaseMonthDataDao.getNoClassMusicGroupStudentInfo(organIds);
+			if(Objects.nonNull(noClassMusicGroupStudentInfo) && noClassMusicGroupStudentInfo.getNum() > 0){
+				flag1 = true;
+			}
+		}
 		resultMap.put("musicPatrol",flag1);
 		boolean flag2 = false;
 		if(!flag2){

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

@@ -425,7 +425,31 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 	public void batchAdd(String batchNo, Set<Integer> userIdList) {
 		
 		List<MusicGroupPaymentCalender> musicGroupPaymentCalenderList = musicGroupPaymentCalenderDao.findByBatchNo(batchNo);
-		
+		if(musicGroupPaymentCalenderList == null || musicGroupPaymentCalenderList.size() == 0){
+			throw new BizException("操作失败:缴费项目不存在");
+		}
+		String musicGroupId = musicGroupPaymentCalenderList.get(0).getMusicGroupId();
+		// 所有缴费项目已完成排课才能创建下一个缴费项目
+		List<String> batchNoList = new ArrayList<>();
+		batchNoList.add(batchNo);
+		String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(musicGroupId, null, null,batchNoList);
+		if (StringUtils.isNoneBlank(orignBatchNo)) {
+			throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
+		}
+		//获取欠费学员列表
+		List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroupId, new ArrayList<>(userIdList));
+		if(noPaymentUserIds.size() > 0){
+			throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+		}
+		//获取缴费状态在审核中或者已拒绝的缴费项目的学员
+		String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroupId,batchNo);
+		if(StringUtils.isNotEmpty(studentIds)){
+			for (Integer integer : userIdList) {
+				if(studentIds.contains(integer.toString())){
+					throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+				}
+			}
+		}
 		List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetailList = new ArrayList<MusicGroupPaymentStudentCourseDetail>();
 		
 		Long musicGroupPaymentCalenderId = null;

+ 41 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -598,9 +598,24 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			}else if(paymentType == SPAN_GROUP_CLASS_ADJUST){
 				MusicGroupStudentClassAdjust adjust = musicGroupStudentClassAdjustDao.findByBatchNo(batchNo);
 				//获取默认的学员缴费详情
-				List<Integer> studentIds = JSON.parseArray(adjust.getStudentIds(), Integer.class);
+				List<Integer> studentIdList = JSON.parseArray(adjust.getStudentIds(), Integer.class);
+				//获取欠费学员列表
+				List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(musicGroup.getId(), studentIdList);
+				if(noPaymentUserIds.size() > 0){
+					throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+				}
+				//获取缴费状态在审核中或者已拒绝的缴费项目的学员
+				String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(musicGroupId,batchNo);
+				if(StringUtils.isNotEmpty(studentIds)){
+					for (Integer integer : studentIdList) {
+						if(studentIds.contains(integer.toString())){
+							throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+						}
+					}
+				}
+
 				List<MusicGroupPaymentCalenderStudentDetail> musicGroupPaymentCalenderStudentDetails = classGroupService.queryStudentPaymentCalenders(adjust.getMasterClassGroupId(),
-						adjust.getClassGroupStudents(),studentIds);
+						adjust.getClassGroupStudents(),studentIdList);
 				List<MusicGroupPaymentCalenderStudentDetail> calenderStudentDetails = musicGroupPaymentCalenderDto.getMusicGroupPaymentCalenderStudentDetails();
 
 				boolean containsAll = musicGroupPaymentCalenderStudentDetails.containsAll(calenderStudentDetails);
@@ -735,7 +750,6 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			// 设置批次号
 			musicGroupPaymentCalender.setBatchNo(batchNo);
 			musicGroupPaymentCalenderDao.insert(musicGroupPaymentCalender);
-
 			List<MusicGroupPaymentCalenderCourseSettings> currentMusicGroupPaymentCalenderCourseSettings = musicGroupPaymentCalender
 					.getMusicGroupPaymentCalenderCourseSettingsList();
 
@@ -1130,6 +1144,30 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				}
 			}
 			MusicGroupPaymentCalender calender = musicGroupPaymentCalenders.get(0);
+			if(calender.getPaymentType() == ADD_STUDENT || calender.getPaymentType() == SPAN_GROUP_CLASS_ADJUST){
+				// 所有缴费项目已完成排课才能创建下一个缴费项目
+				List<String> batchNoList = new ArrayList<>();
+				batchNoList.add(batchNo);
+				String orignBatchNo = musicGroupPaymentStudentCourseDetailDao.getUnUseBatchNoWithStudentAndCourseTypeAndCourseMinutes(calender.getMusicGroupId(), null, null,batchNoList);
+				if (StringUtils.isNoneBlank(orignBatchNo)) {
+					throw new BizException("当前乐团存在未排课的缴费项目,请先完成排课再操作");
+				}
+				List<Integer> userIds = Arrays.stream(calender.getStudentIds().split(",")).mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+				//获取欠费学员列表
+				List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(calender.getMusicGroupId(),userIds);
+				if(noPaymentUserIds.size() > 0){
+					throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+				}
+				//获取缴费状态在审核中或者已拒绝的缴费项目的学员
+				String studentIds = musicGroupPaymentCalenderDao.queryCalenderStudentIds(calender.getMusicGroupId(),batchNo);
+				if(StringUtils.isNotEmpty(studentIds)){
+					for (Integer integer : userIds) {
+						if(studentIds.contains(integer.toString())){
+							throw new BizException("操作失败:所选学员有待审核或已拒绝的缴费项目");
+						}
+					}
+				}
+			}
 			//如果是报名,并且所有的报名都审核通过,需要修改乐团状态
 			if (calender.getPaymentType() == MUSIC_APPLY) {
 				//统计乐团还在审核中或者审核被拒的缴费

+ 32 - 40
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -6,20 +6,12 @@ import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.YES;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.event.source.GroupEventSource;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.service.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -966,6 +958,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 waringSubjectIds.add(subjectId);
             }
         });
+
         if (waringSubjectIds.size() > 0) {
             List<Subject> waringSubjects = subjectDao.findBySubjectIds(waringSubjectIds);
             String waringSubjectStr = waringSubjects.stream().map(Subject::getName).collect(Collectors.joining(","));
@@ -1006,7 +999,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
-
         sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, "", sysUser.getRealName(), musicGroup.getName());
 
     }
@@ -1072,14 +1064,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.TEACHER_PUSH_MUSIC_GROUP_COURSE_ADD_PLAN,
                     map, null, 0, "1", "TEACHER", musicGroup.getName());
         }
-        Set<Integer> roleIds = new HashSet<>(5);
+        Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
-        roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
-        roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
-        roleIds.add(SysUserRole.ADMISSIONS_DIRECTOR);
-        roleIds.add(SysUserRole.DEAN_OF_STUDIES);
-
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_ACTION_GROUP, "1", musicGroup.getName());
+        Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+        integers.add(musicGroup.getEducationalTeacherId());
+        sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_ACTION_GROUP, "1", musicGroup.getName());
 
         //统计变更学员数
         groupEventSource.musicGroupStudentChangeEvent(musicGroupId, StudentMusicGroupStatusEnum.NORMAL, null);
@@ -1112,7 +1101,6 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupDao.update(musicGroup);
         Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
-
         sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_APPLY, "", sysUser.getRealName(), musicGroup.getName());
 
     }
@@ -1170,8 +1158,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         // 添加成员
         imGroupMemberService.join(Long.parseLong(musicGroupId), userRoleMap);
         Set<Integer> roleIds = new HashSet<>(1);
-        roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
+        roleIds.add(musicGroup.getEducationalTeacherId());
+        sysMessageService.batchSeoMessage(roleIds,
                 MessageTypeEnum.BACKSTAGE_CREATE_MUSIC_GROUP_ADJUST_SUCCESS, "", musicGroup.getName());
         Map<Integer, String> map = new HashMap<>(1);
         map.put(musicGroup.getEducationalTeacherId(), musicGroup.getEducationalTeacherId().toString());
@@ -1374,11 +1362,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
         //记录建团日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "取消乐团", sysUser.getId(), ""));
-        Set<Integer> roleIds = new HashSet<>(2);
+        Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
-        roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
-
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_STOP, "1", musicGroup.getName());
+        Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+        integers.add(musicGroup.getEducationalTeacherId());
+        sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_STOP, "1", musicGroup.getName());
         return true;
     }
 
@@ -1516,13 +1504,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "延长缴费", sysUser.getId(), ""));
-        Set<Integer> roleIds = new HashSet<>(4);
+        Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
-        roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
-        roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
-        roleIds.add(SysUserRole.ADMISSIONS_DIRECTOR);
-
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_LENGTHEN_PAYMENT, "", musicGroup.getName());
+        Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+        integers.add(musicGroup.getEducationalTeacherId());
+        sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_LENGTHEN_PAYMENT, "", musicGroup.getName());
         return true;
     }
 
@@ -1624,15 +1610,19 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         musicGroupQuitDao.insert(musicGroupQuit);
         Set<Integer> roleIds = new HashSet<>(1);
-        roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
+        roleIds.add(SysUserRole.SECTION_MANAGER);
+        Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+        integers.add(musicGroup.getEducationalTeacherId());
         Map<String, Object> memo = new HashMap<>(2);
         memo.put("Id", musicGroupQuit.getId());
         memo.put("type", "MUSICGROUP");
 
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
+        sysMessageService.batchSeoMessage(integers,
                 MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_GROUP, JSONObject.toJSONString(memo), sysUser.getUsername());
-        Map<Integer, String> receivers = new HashMap<>(1);
-        receivers.put(musicGroup.getEducationalTeacherId(), musicGroup.getEducationalTeacherId().toString());
+        Map<Integer, String> receivers = new HashMap<>(integers.size());
+        for (Integer integer : integers) {
+            receivers.put(integer, integer.toString());
+        }
         sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY,
                 receivers, null, 0, null, "SYSTEM", musicGroup.getName(), sysUser.getUsername());
         return true;
@@ -2603,11 +2593,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                         map, null, 0, "", "", musicGroup.getName(), studentApplyUrl, DateUtil.format(musicGroup.getPaymentExpireDate(), DateUtil.DATE_FORMAT_MIN), serverPhone);
             }
         }
-        Set<Integer> roleIds = new HashSet<>(3);
+        Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
-        roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
-        roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_ACTION_PAYMENT, "", musicGroup.getName());
+        Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+        integers.add(musicGroup.getEducationalTeacherId());
+        sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_ACTION_PAYMENT, "", musicGroup.getName());
         return musicGroup;
     }
 
@@ -2713,7 +2703,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 //        }
         Set<Integer> roleIds = new HashSet<>(1);
         roleIds.add(SysUserRole.SECTION_MANAGER);
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_MARKING, "", musicGroup.getName());
+        Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+        integers.add(musicGroup.getEducationalTeacherId());
+        sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_MARKING, "", musicGroup.getName());
     }
 
     @Override

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

@@ -2125,6 +2125,31 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             }
         }
 
+        String practiceType = "网管课";
+        switch (practiceGroup.getType()){
+            case FREE:
+            case CHARGE:
+                break;
+            case TRIAL:
+                practiceType = "试听课";
+                break;
+            case COME_ON_PACKAGE:
+            case CARE_PACKAGE:
+                practiceType = practiceGroup.getType().getMsg();
+                break;
+        }
+
+        Map<Integer, String> teacherMap = new HashMap<>();
+        teacherMap.put(practiceGroup.getUserId(), practiceGroup.getUserId().toString());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_CREATE_TEACHER_PUSH,
+                teacherMap, null, 0, null, "TEACHER",
+                teacher.getRealName(),practiceType, practiceGroup.getName());
+        Map<Integer, String> teacherPhoneMap = new HashMap<>();
+        teacherPhoneMap.put(practiceGroup.getUserId(), teacher.getPhone());
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.PRACTICE_CREATE_TEACHER_PUSH,
+                teacherPhoneMap, null, 0, null, "TEACHER",
+                teacher.getRealName(), practiceType, practiceGroup.getName());
+
         studentDao.updateStudentServiceTag(practiceGroup.getStudentId(), null, YesOrNoEnum.YES.getCode());
 
         imUserFriendService.refreshGroupImUserFriend(practiceGroup.getId().toString(), GroupType.PRACTICE);
@@ -3305,6 +3330,31 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             userPhoneMap.put(practiceGroup.getStudentId(), student.getPhone());
             sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.PAY_PRACTICE_BUY_SUCCESS,
                     userPhoneMap, null, 0, null, "STUDENT", groupStartTime, groupEndTime, teacherName, drillTimesOnWeek, firstCourseStartTime);
+
+            String practiceType = "网管课";
+            switch (practiceGroup.getType()){
+                case FREE:
+                case CHARGE:
+                    break;
+                case TRIAL:
+                    practiceType = "试听课";
+                    break;
+                case COME_ON_PACKAGE:
+                case CARE_PACKAGE:
+                    practiceType = practiceGroup.getType().getMsg();
+                    break;
+            }
+
+            Map<Integer, String> teacherMap = new HashMap<>();
+            teacherMap.put(practiceGroup.getUserId(), practiceGroup.getUserId().toString());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_CREATE_TEACHER_PUSH,
+                    teacherMap, null, 0, null, "TEACHER",
+                    teacher.getRealName(), practiceType, practiceGroup.getName());
+            Map<Integer, String> teacherPhoneMap = new HashMap<>();
+            teacherPhoneMap.put(practiceGroup.getUserId(), teacher.getPhone());
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.PRACTICE_CREATE_TEACHER_PUSH,
+                    teacherPhoneMap, null, 0, null, "TEACHER",
+                    teacher.getRealName(), practiceType, practiceGroup.getName());
         } catch (Exception e) {
             e.printStackTrace();
         }

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

@@ -675,7 +675,8 @@ public class StudentManageServiceImpl implements StudentManageService {
             LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
             studentExtracurricularExercisesSituationDao.deleteByStudent(student.getId(), monDayDate.toString());
         }
-        webFeignService.updateNickName(userId,student.getUsername(),"STUDENT");
+        webFeignService.updateNickName(userId,student.getUsername());
+        imFeignService.update(new ImUserModel(userId.toString(),student.getUsername(),sysUser1.getAvatar()));
         return userId;
     }
 

+ 53 - 39
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -17,18 +17,18 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
-
 import javax.annotation.Resource;
-
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.enums.*;
-import com.ym.mec.biz.event.source.GroupEventSource;
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.page.NoClassMusicStudentQueryInfo;
 import com.ym.mec.biz.service.*;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.im.WebFeignService;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.poi.ss.formula.functions.T;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,32 +37,17 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
-
 import com.alibaba.fastjson.JSONObject;
 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.auth.api.enums.CertificateTypeEnum;
-import com.ym.mec.biz.dal.dto.CourseFormDto;
 import com.ym.mec.biz.dal.dto.StudentAddDto;
 import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
 import com.ym.mec.biz.dal.dto.StudentFeeDetailDto;
 import com.ym.mec.biz.dal.dto.StudentInfo;
 import com.ym.mec.biz.dal.dto.StudentMusicDetailDto;
 import com.ym.mec.biz.dal.dto.StudentMusicGroupDto;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GoodsType;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImResult;
@@ -155,13 +140,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     private StudentInstrumentService studentInstrumentService;
     @Autowired
     private OrganizationDao organizationDao;
-
-    @Autowired
-    private GroupEventSource groupEventSource;
-    @Autowired
-    private WebFeignService webFeignService;
     @Autowired
     private StudentService studentService;
+    @Autowired
+    private ImGroupDao imGroupDao;
 
     @Override
     public BaseDAO<Long, StudentRegistration> getDAO() {
@@ -220,11 +202,11 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             //修改专业已报名人数
             musicGroupSubjectPlanService.addApplyStudentNum(musicGroupId, subId, 1);
             MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
-            Set<Integer> roleIds = new HashSet<>(2);
+            Set<Integer> roleIds = new HashSet<>(1);
             roleIds.add(SysUserRole.SECTION_MANAGER);
-            roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
-
-            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_STUDENT_SUBJECT_CHANGE, "", musicGroup.getName());
+            Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+            integers.add(musicGroup.getEducationalTeacherId());
+            sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_STUDENT_SUBJECT_CHANGE, "", musicGroup.getName());
         }
         return i;
     }
@@ -233,7 +215,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     public StudentFeeDetailDto queryFeeDetail(Integer studentId, String musicGroupId) {
         StudentFeeDetailDto studentFeeDetailDto = new StudentFeeDetailDto();
         List<MusicalListDetailDto> musicalList = studentPaymentOrderDetailService.getMusicalListDetail(musicGroupId, studentId);
-        if(musicalList.size() <=0){
+        if (musicalList.size() <= 0) {
             return studentFeeDetailDto;
         }
         MusicalListDetailDto detailDto = musicalList.get(0);
@@ -346,7 +328,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         String studentGrade = studentService.getStudentGrade(organization.getGradeType(), studentRegistration.getCurrentGradeNum());
         studentRegistration.setCurrentGrade(studentGrade);
 
-        if(hasReg != null){
+        if (hasReg != null) {
             studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.APPLY);
             studentRegistration.setId(hasReg.getId());
             studentRegistrationDao.update(studentRegistration);
@@ -357,8 +339,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         student.setCurrentGradeNum(studentRegistration.getCurrentGradeNum());
         student.setCurrentClass(studentRegistration.getCurrentClass());
         studentDao.update(student);
-
-        //webFeignService.updateNickName(sysUser.getId(),studentRegistration.getName(),"STUDENT");
+        imGroupDao.updateNickname(userId, studentRegistration.getName());
+        imGroupDao.updateUserFriendNickname(userId, studentRegistration.getName());
+        imFeignService.update(new ImUserModel(userId.toString(),studentRegistration.getName(),sysUser.getAvatar()));
         // 增加报名学生数
         musicGroupSubjectPlanService.addApplyStudentNum(studentRegistration.getMusicGroupId(), studentRegistration.getSubjectId(), 1);
         // 报名成功后,发送短信
@@ -699,7 +682,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                         studentDao.update(student);
                     }
                 }
-                webFeignService.updateNickName(userId,sysUser.getUsername(),"STUDENT");
+                imGroupDao.updateNickname(userId,sysUser.getUsername());
+                imGroupDao.updateUserFriendNickname(userId,sysUser.getUsername());
             }
             MusicGroupStudentFee studentFeeDaoByUser = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
             if (studentFeeDaoByUser != null) {
@@ -715,9 +699,10 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             studentRegistration.setTemporaryCourseFee(studentAddDto.getTemporaryCourseFee());
             //学生报名表
             Set<Integer> roleIds = new HashSet<>(1);
-            roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
-
-            sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_ADD_STUDENT, "", musicGroup.getName(), studentRegistration.getName());
+            roleIds.add(SysUserRole.SECTION_MANAGER);
+            Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId());
+            integers.add(musicGroup.getEducationalTeacherId());
+            sysMessageService.batchSeoMessage(integers, MessageTypeEnum.BACKSTAGE_MUSIC_GROUP_ADD_STUDENT, "", musicGroup.getName(), studentRegistration.getName());
             //增加报名学生数
             musicGroupSubjectPlanService.addApplyStudentNum(musicGroupId, studentRegistration.getSubjectId(), 1);
             //汇总金额
@@ -776,7 +761,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             student.setCurrentClass(studentRegistration.getCurrentClass());
             studentDao.update(student);
             //studentRegistrationDao.updateCurrentClass(studentRegistration);
-
+            imFeignService.update(new ImUserModel(userId.toString(),sysUser.getUsername(),sysUser.getAvatar()));
             return userId;
         }
     }
@@ -784,6 +769,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     @Override
     @Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
     public void insertStudent(String studentIds, String oldMusicGroupId, String newMusicGroupId, Map<Integer, List<MusicGroupPaymentCalenderStudentDetail>> collect) {
+        //获取欠费学员列表
+        List<Integer> studentIdList = Arrays.asList(studentIds.split(",")).stream().mapToInt(idStr -> Integer.valueOf(idStr)).boxed().collect(Collectors.toList());
+        List<Integer> noPaymentUserIds = musicGroupPaymentCalenderDetailDao.queryNoPaymentUserIds(newMusicGroupId,studentIdList);
+        if(noPaymentUserIds.size() > 0){
+            throw new BizException("操作失败:有欠费的学员不允许创建缴费");
+        }
         SysUser sysUser1 = sysUserFeignService.queryUserInfo();
         //获取旧乐团学员注册信息
         List<StudentRegistration> studentRegistrations = studentRegistrationDao.queryByUserIdsAndMusicGroupId(studentIds, oldMusicGroupId);
@@ -795,7 +786,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             if (masterTotalPrice.doubleValue() > studentRegistration.getSurplusCourseFee().doubleValue()) {
                 throw new BizException("用户信息发生变动,请重新提交");
             }
-            if (oldMusicGroupId == newMusicGroupId) {
+            if (oldMusicGroupId.equals(newMusicGroupId)) {
                 continue;
             }
             courseScheduleStudentPaymentService.updateCourseActualPrice(Arrays.asList(oldMusicGroupId), null, GroupType.MUSIC);
@@ -821,7 +812,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             }
             Boolean orderFlag = true;
             //用户是否在主乐团
-            StudentRegistration registration = studentRegistrationDao.getByPhoneAndMusicGroupId(newMusicGroupId, studentRegistration.getParentsPhone());
+            StudentRegistration registration = studentRegistrationDao.getStudentRegister(newMusicGroupId, studentRegistration.getUserId());
             if (registration != null) {
                 if (registration.getMusicGroupStatus() == StudentMusicGroupStatusEnum.NORMAL) {
                     orderFlag = false;
@@ -1709,4 +1700,27 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
 //        }
         return viewMap;
     }
+
+    @Override
+    public PageInfo<NoClassMusicStudentDto> queryNoClassMusicStudentInfo(NoClassMusicStudentQueryInfo queryInfo) {
+        PageInfo<NoClassMusicStudentDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        if(StringUtils.isNotBlank(queryInfo.getOrganIds())){
+            List<Integer> organIds = Arrays.stream(queryInfo.getOrganIds().split(",")).map(id -> Integer.valueOf(id)).collect(Collectors.toList());
+            params.put("organIds", organIds);
+        }
+
+        List<NoClassMusicStudentDto> dataList = new ArrayList<>();
+        int count = studentRegistrationDao.countNoClassMusicStudents(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList =studentRegistrationDao.queryNoClassMusicStudents(params);
+        }
+
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
 }

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

@@ -696,6 +696,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		result.setTeacherName(teacherDao.queryNameById(courseSchedule.getActualTeacherId()));
 		result.setAttendClassTime(teacherAttendanceDao.getAttendClassTime(courseScheduleId));
 		result.setSchool(schoolDao.get(courseSchedule.getSchoolId()));
+		//获取异常考勤学员数量
+		result.setErrorAttendanceNum(studentAttendanceDao.countErrorAttendance(courseScheduleId));
 		if(teacherAttendance != null){
 			result.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
 			result.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());

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

@@ -164,11 +164,11 @@ public class TeacherDefaultVipGroupSalaryServiceImpl extends BaseServiceImpl<Lon
 							TeacherDefaultVipGroupSalary origTdms = map.get(vipGroup.getVipGroupCategoryId());
 							if (tdms != null && origTdms != null) {
 								Map<String, BigDecimal> teachModeSalaryMap = new HashMap<>();
-								if(vipGroupCategory.getMusicTheory()){
-									teachModeSalaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, ts.getUserId());
-								}else{
-									teachModeSalaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
-								}
+//								if(vipGroupCategory.getMusicTheory()){
+									teachModeSalaryMap = vipGroupService.countVipGroupPredictFee(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
+//								}else{
+//									teachModeSalaryMap = vipGroupService.countVipGroupCoursePredictFee(vipGroup, ts.getUserId(), ts.getCourseScheduleId());
+//								}
 								if(TeachModeEnum.ONLINE.equals(ts.getCourseSchedule().getTeachMode())&&teachModeSalaryMap.containsKey("onlineTeacherSalary")){
 									ts.setExpectSalary(teachModeSalaryMap.get("onlineTeacherSalary"));
 								}else if(TeachModeEnum.OFFLINE.equals(ts.getCourseSchedule().getTeachMode())&&teachModeSalaryMap.containsKey("offlineTeacherSalary")){

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

@@ -111,6 +111,7 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 		teacherLeaveRecordDao.insert(teacherLeaveRecord);
 		Set<Integer> roleIds = new HashSet<>(1);
 		roleIds.add(SysUserRole.SECTION_MANAGER);
+		roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
 		Teacher teacher = teacherDao.get(sysUser.getId());
 		Set<Integer> userIds = musicGroupDao.queryUserIdByRoleId(roleIds,teacher.getTeacherOrganId());
 		if (userIds != null && userIds.size() > 0) {

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java

@@ -70,7 +70,7 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	@Autowired
 	private ImFeignService imFeignService;
 	@Autowired
-	private WebFeignService webFeignService;
+	private ImGroupDao imGroupDao ;
 	@Autowired
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 	@Autowired
@@ -157,8 +157,9 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		teacherDao.update(teacher);
 		teacher.setOrganId(null);
 		teacherDao.updateUser(teacher);
-		webFeignService.updateNickName(teacher.getId(),teacher.getRealName(),"TEACHER");
-//		imFeignService.update(new ImUserModel(teacher.getId().toString(),teacher.getRealName(),teacher.getAvatar()));
+		imGroupDao.updateNickname(teacher.getId(),teacher.getRealName());
+		imGroupDao.updateUserFriendNickname(teacher.getId(),teacher.getRealName());
+		imFeignService.update(new ImUserModel(teacher.getId().toString(),teacher.getRealName(),teacher.getAvatar()));
 	}
 
 	@Override

+ 18 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -293,7 +293,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		//计算课程相关费用信息
 		Map<String, BigDecimal> costInfo = countVipGroupPredictFee(vipGroupApplyBaseInfoDto,
-				vipGroupApplyBaseInfoDto.getUserId());
+				vipGroupApplyBaseInfoDto.getUserId(), null);
 
         vipGroupApplyBaseInfoDto.setAuditStatus(AuditStatusEnum.PASS);
 
@@ -429,7 +429,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		}
 
 		Set<Integer> roleIds = new HashSet<>(1);
-		roleIds.add(SysUserRole.OPERATION_EXECUTIVE);
+		roleIds.add(SysUserRole.SECTION_MANAGER);
 		Map<String,Long> memo = new HashMap<>(1);
 		memo.put("vipGroupId",vipGroupApplyBaseInfoDto.getId());
 //		SysUser sysUser = sysUserFeignService.queryUserById(vipGroup.getVipGroupApplyBaseInfo().getUserId());
@@ -440,6 +440,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(CollectionUtils.isEmpty(userIds)){
 			throw new BizException("当前分部没有运营主管,无法创建,请联系总部工作人员!");
 		}
+		if(vipGroupApplyBaseInfoDto.getEducationalTeacherId() != null){
+			userIds.add(vipGroupApplyBaseInfoDto.getEducationalTeacherId());
+		}
 //		if (vipGroup.getVipGroupApplyBaseInfo().getUserId() != null){
 //			sysMessageService.batchSeoMessage(userIds,MessageTypeEnum.BACKSTAGE_VIP_COURSE_APPLY, JSONObject.toJSONString(memo),sysUser.getUsername(),sysUser.getUsername());
 //		}else {
@@ -967,7 +970,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
     @Override
     public <K extends VipGroup> Map<String,BigDecimal> countVipGroupPredictFee(K vipGroup,
-																			   Integer teacherId){
+																			   Integer teacherId,
+																			   Long courseId){
 
 		if(Objects.isNull(teacherId)){
 			throw new BizException("请指定教师");
@@ -998,7 +1002,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		Map<String,BigDecimal> results=new HashMap<>(1);
 
 		int normalStudentNum = 0;
-		if(Objects.nonNull(vipGroup.getId())){
+		if(Objects.nonNull(courseId)){
+			normalStudentNum = courseScheduleStudentPaymentDao.countStudentNum(courseId.intValue());
+		}
+		if(normalStudentNum<=0&&Objects.nonNull(vipGroup.getId())){
 			normalStudentNum = classGroupStudentMapperDao.countGroupNormalStudentNum(GroupType.VIP, vipGroup.getId().toString());
 		}
 
@@ -1813,11 +1820,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		studentApplyRefunds.setUserId(userId);
 		studentApplyRefundsDao.insert(studentApplyRefunds);
 		Set<Integer> roleIds = new HashSet<>(1);
-		roleIds.add(SysUserRole.EDUCATIONAL_TEACHER);
+		roleIds.add(SysUserRole.SECTION_MANAGER);
+		Set<Integer> integers = musicGroupDao.queryUserIdByRoleId(roleIds, sysUser.getOrganId());
+		integers.add(vipGroup.getEducationalTeacherId());
 		Map<String,Object> memo = new HashMap<>(2);
 		memo.put("Id",studentApplyRefunds.getId());
 		memo.put("type","VIPGROUP");
-		sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds,sysUser.getOrganId()),MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_COURSE,JSONObject.toJSONString(memo),sysUser.getUsername());
+		sysMessageService.batchSeoMessage(integers,MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_COURSE,JSONObject.toJSONString(memo),sysUser.getUsername());
 	}
 
 	@Override
@@ -2113,7 +2122,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				classGroupTeacherMapperDao.insert(classGroupTeacherMapper);
 			}
 
-			Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId());
+			Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null);
 
 			//创建老师单节课课酬信息
 			courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroup,
@@ -2765,7 +2774,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		courseScheduleService.batchAddCourseSchedule(vipGroupApplyDto.getCourseSchedules());
 
-		Map<String, BigDecimal> map = countVipGroupPredictFee(vipGroup, vipGroup.getUserId());
+		Map<String, BigDecimal> map = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null);
 
 		BigDecimal teacherSalary=BigDecimal.ZERO;
 
@@ -2886,7 +2895,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(courseNum==0){
 				courseScheduleService.batchAddCourseSchedule(courseSchedules);
 
-				Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId());
+				Map<String, BigDecimal> salaryMap = countVipGroupPredictFee(vipGroup, vipGroup.getUserId(), null);
 
 				//创建老师单节课课酬信息
 				courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(vipGroup,

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

@@ -608,7 +608,7 @@
         FROM
             course_schedule_student_payment cssp
             LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
-            LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
             LEFT JOIN course_schedule_complaints csc ON csc.course_schedule_id_=cssp.course_schedule_id_ AND
             csc.user_id_=#{studentId}
         LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cs.id_ AND sa.user_id_=#{studentId}
@@ -2555,7 +2555,7 @@
             AND ta.teacher_id_ = cs.actual_teacher_id_
             AND cs.status_ = 'OVER'
             AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
-            AND (ta.dispose_content_ IS NOT NULL OR (ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL))
+            AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
             AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
         </if>
         <if test="searchType == 'NO_ATTENDANCE'">

+ 21 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -729,4 +729,25 @@
 		</foreach>
 		GROUP BY course_schedule_id_
 	</select>
+
+	<select id="getWithClassGroupIds" resultMap="CourseScheduleStudentPayment">
+		SELECT * FROM course_schedule_student_payment WHERE class_group_id_ IN
+		<foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+			#{classGroupId}
+		</foreach>
+		<if test="studentId!=null">
+			AND user_id_ = #{studentId}
+		</if>
+	</select>
+
+	<select id="getWithGroup" resultMap="CourseScheduleStudentPayment">
+		SELECT * FROM course_schedule_student_payment
+		WHERE music_group_id_ = #{groupId} AND group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+		<if test="studentIds!=null and studentIds.size()>0">
+			AND user_id_ IN
+			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+				#{studentId}
+			</foreach>
+		</if>
+	</select>
 </mapper>

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

@@ -93,11 +93,13 @@
 		</set> WHERE id_ = #{id} 
 	</update>
     <update id="updateNickname">
-		UPDATE im_group_member SET nickname_ = #{nickName} WHERE user_id_ = #{userId};
+		UPDATE im_group_member SET nickname_ = #{nickName} WHERE user_id_ = #{userId}
+	</update>
+	<update id="updateUserFriendNickname">
 		UPDATE im_user_friend SET friend_nickname_ = #{nickName} WHERE friend_id_ = #{userId};
 	</update>
 
-    <!-- 根据主键删除一条记录 -->
+	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
 		DELETE FROM im_group WHERE id_ = #{id} 
 	</delete>

+ 25 - 3
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -465,9 +465,9 @@
 			AND m.class_date_ = #{dayStr}
 		</if>
 		GROUP BY
-		m.organ_id_
+			m.organ_id_
 		ORDER BY
-		m.organ_id_;
+			m.organ_id_;
 	</select>
 
 	<select id="getOtherStudentData" resultMap="IndexBaseMonthData">
@@ -747,7 +747,7 @@
 		WHERE ta.teacher_id_ = cs.actual_teacher_id_
 		AND cs.status_ = 'OVER' AND cs.del_flag_ = 0 AND cs.class_date_ >= '2021-02-01'
 		AND (((ta.sign_in_status_ = 0 OR ta.sign_out_status_ = 0) AND ta.dispose_content_ IS NULL) OR (sa.id_ IS NULL OR (sa.status_ != 'NORMAL' AND sa.visit_flag_ = 0)))
-		AND (ta.dispose_content_ IS NOT NULL OR (ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL))
+		AND ta.sign_in_status_ IS NOT NULL AND ta.sign_out_status_ IS NOT NULL
 		AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
 		<if test="organIds != null and organIds.size()>0">
 			AND cs.organ_id_ IN
@@ -838,6 +838,28 @@
 			</foreach>
 		</if>
 	</select>
+
+	<select id="getNoClassMusicGroupStudentInfo" resultType="com.ym.mec.biz.dal.entity.IndexErrInfoDto">
+		SELECT
+			'NO_CLASS_MUSIC_GROUP_STUDENT_INFO' errorType,
+			COUNT( DISTINCT sr.music_group_id_ ) num,
+			COUNT( sr.user_id_ ) num2
+		FROM
+			student_registration sr
+				LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+				LEFT JOIN class_group_student_mapper cgsm ON cgsm.group_type_='MUSIC' AND cgsm.music_group_id_=sr.music_group_id_ AND cgsm.user_id_=sr.user_id_ AND cgsm.status_='NORMAL'
+		WHERE
+			sr.music_group_status_ = 'NORMAL'
+			AND mg.status_ = 'PROGRESS'
+			AND cgsm.id_ IS NULL
+			<if test="organIds!=null and organIds.size()>0">
+				AND mg.organ_id_ IN
+				<foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+					#{organId}
+				</foreach>
+			</if>
+	</select>
+
 	<select id="getFinancePayData"  resultMap="IndexBaseMonthData">
 		SELECT SUM(fe.amount_) total_num_,SUM(fe.amount_) activate_num_,SUM(fe.amount_) percent_,fe.organ_id_,#{dayStr} month_ FROM financial_expenditure fe
 		WHERE DATE_FORMAT(fe.create_time_,'%Y-%m-%d') = #{dayStr}

+ 25 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -218,6 +218,12 @@
             <if test="musicGroupId != null">
                 AND FIND_IN_SET(id_,#{musicGroupId})
             </if>
+            <if test="musicGroupIds!=null and musicGroupIds.size()>0">
+                AND id_ IN
+                <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
+                    #{musicGroupId}
+                </foreach>
+            </if>
         </where>
     </sql>
 
@@ -685,4 +691,23 @@
             #{id}
         </foreach>
     </select>
+
+    <select id="getNoClassStudentMusicGroupIds" resultType="java.lang.String">
+        SELECT
+            DISTINCT sr.music_group_id_
+        FROM
+            student_registration sr
+            LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+            LEFT JOIN class_group_student_mapper cgsm ON cgsm.group_type_='MUSIC' AND cgsm.music_group_id_=sr.music_group_id_ AND cgsm.user_id_=sr.user_id_
+        WHERE
+            sr.music_group_status_ = 'NORMAL'
+            AND mg.status_ = 'PROGRESS'
+            AND cgsm.id_ IS NULL
+            <if test="organIds!=null and organIds.size()>0">
+                AND mg.organ_id_ IN
+                <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                    #{organId}
+                </foreach>
+            </if>
+    </select>
 </mapper>

+ 8 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml

@@ -602,4 +602,12 @@
         AND batch_no_ IS NOT NULL
         GROUP BY music_group_id_,batch_no_
     </select>
+    <select id="queryCalenderStudentIds" resultType="java.lang.String">
+        SELECT GROUP_CONCAT(DISTINCT student_ids_) FROM music_group_payment_calender
+        WHERE status_ IN ('AUDITING','REJECT') AND music_group_id_ = #{musicGroupId}
+        <if test="batchNo != null and batchNo != ''">
+            AND batch_no_ != #{batchNo}
+        </if>
+
+    </select>
 </mapper>

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

@@ -498,7 +498,8 @@
         su.username_,su.phone_,su.avatar_,cs.teach_mode_,cs.type_ course_type_,o.name_ organ_name_,tu.real_name_ teacher_name_,tu.avatar_ teacher_avatar_,
         cs.name_ course_schedule_name_,cs.status_ course_status_,
         cs.actual_teacher_id_ teacher_id_,cs.class_date_ ,cs.start_class_time_,cs.end_class_time_ ,cs.new_course_id_,
-        CASE WHEN sa.visit_flag_ IS NULL THEN 0 ELSE sa.visit_flag_ END visitFlag
+        CASE WHEN sa.visit_flag_ IS NULL THEN 0 ELSE sa.visit_flag_ END visitFlag,
+        CASE WHEN sa.status_ IS NULL OR sa.status_ = 'TRUANT' THEN '1LEAVE' ELSE sa.status_ END status_1
         FROM course_schedule_student_payment cssp left join course_schedule cs on cs.id_ = cssp.course_schedule_id_
         left join student_attendance sa on cssp.course_schedule_id_ = sa.course_schedule_id_ and cssp.user_id_ = sa.user_id_
         LEFT JOIN sys_user su ON cssp.user_id_ = su.id_
@@ -506,7 +507,11 @@
         left join organization o on o.id_ = cs.organ_id_
         <include refid="findStudentAttendanceSql"/>
         GROUP BY cssp.id_
-        ORDER BY CONCAT(cs.class_date_, ' ', cs.start_class_time_) ASC
+        ORDER BY
+        <if test="orderFlag == 1 and search != null and search != ''">
+            status_1,visitFlag,cssp.id_,
+        </if>
+        CONCAT(cs.class_date_, ' ', cs.start_class_time_) ASC
         <include refid="global.limit"/>
     </select>
     <sql id="findStudentAttendanceSql">
@@ -671,4 +676,9 @@
         ORDER BY cssp.music_group_id_ DESC,cssp.id_ DESC
         <include refid="global.limit"/>
     </select>
+    <select id="countErrorAttendance" resultType="java.lang.Integer">
+        SELECT COUNT(cssp.id_) FROM course_schedule_student_payment cssp
+        LEFT JOIN student_attendance sa ON sa.course_schedule_id_ = cssp.course_schedule_id_ AND cssp.user_id_ = sa.user_id_
+        WHERE (sa.status_ != 'NORMAL' OR sa.status_ IS NULL) AND cssp.course_schedule_id_ = #{courseScheduleId}
+    </select>
 </mapper>

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

@@ -850,4 +850,77 @@
     <select id="getByUserIdAndMusicGroupId" resultMap="StudentRegistration">
         SELECT * FROM student_registration WHERE music_group_id_ = #{musicGroupId} AND user_id_ = #{userId}
     </select>
+
+    <resultMap id="NoClassMusicStudentDto" type="com.ym.mec.biz.dal.dto.NoClassMusicStudentDto">
+        <result property="organId" column="organ_id_"/>
+        <result property="organName" column="organ_name_"/>
+        <result property="groupId" column="music_group_id_"/>
+        <result property="groupName" column="music_group_name_"/>
+        <result property="studentId" column="student_id_"/>
+        <result property="studentName" column="student_name_"/>
+        <result property="subjectId" column="subject_id_" />
+        <result property="subjectName" column="subject_name_" />
+    </resultMap>
+
+    <sql id="queryNoClassMusicStudentsCondition">
+        <where>
+            sr.music_group_status_ = 'NORMAL'
+            AND mg.status_ = 'PROGRESS'
+            AND cgsm.id_ IS NULL
+            <if test="organIds!=null and organIds.size()>0">
+                AND mg.organ_id_ IN
+                <foreach collection="organIds" item="organId" open="(" close=")" separator=",">
+                    #{organId}
+                </foreach>
+            </if>
+            <if test="musicGroupSearch!=null and musicGroupSearch!=''">
+                AND (sr.music_group_id_ = #{musicGroupSearch} OR mg.name_ LIKE CONCAT('%', #{musicGroupSearch}, '%'))
+            </if>
+            <if test="studentSearch != null and studentSearch != ''">
+                AND (sr.user_id_ = #{studentSearch} OR stu.username_ LIKE CONCAT('%', #{studentSearch}, '%'))
+            </if>
+            <if test="organId!=null">
+                AND mg.organ_id_ = #{organId}
+            </if>
+        </where>
+    </sql>
+
+    <select id="queryNoClassMusicStudents" resultMap="NoClassMusicStudentDto">
+        SELECT
+            mg.organ_id_,
+            organ.name_ organ_name_,
+            sr.music_group_id_,
+            mg.name_ music_group_name_,
+            sr.user_id_ student_id_,
+            stu.username_ student_name_,
+            sr.actual_subject_id_ subject_id_,
+            sub.name_ subject_name_
+        FROM
+            student_registration sr
+            LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+            LEFT JOIN class_group_student_mapper cgsm ON cgsm.group_type_ = 'MUSIC'
+                AND cgsm.music_group_id_ = sr.music_group_id_
+                AND cgsm.user_id_ = sr.user_id_
+                AND cgsm.status_='NORMAL'
+            LEFT JOIN sys_user stu ON stu.id_ = sr.user_id_
+            LEFT JOIN organization organ ON mg.organ_id_=organ.id_
+            LEFT JOIN `subject` sub ON sub.id_=sr.actual_subject_id_
+        <include refid="queryNoClassMusicStudentsCondition" />
+        ORDER BY sr.id_
+        <include refid="global.limit"></include>
+    </select>
+
+    <select id="countNoClassMusicStudents" resultType="int">
+        SELECT
+            COUNT(sr.user_id_)
+        FROM
+        student_registration sr
+            LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_
+            LEFT JOIN class_group_student_mapper cgsm ON cgsm.group_type_ = 'MUSIC'
+                AND cgsm.music_group_id_ = sr.music_group_id_
+                AND cgsm.user_id_ = sr.user_id_
+                AND cgsm.status_='NORMAL'
+            LEFT JOIN sys_user stu ON stu.id_ = sr.user_id_
+        <include refid="queryNoClassMusicStudentsCondition" />
+    </select>
 </mapper>

+ 140 - 0
mec-biz/src/main/resources/config/mybatis/courseScheduleStudentMusicScoreMapper.xml

@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.CourseScheduleStudentMusicScoreDao">
+
+    <resultMap type="com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore" id="CourseScheduleStudentMusicScore">
+        <result column="id_" property="id"/>
+        <result column="course_schedule_id_" property="courseScheduleId"/>
+        <result column="user_id_" property="userId"/>
+        <result column="user_type_" property="userType"/>
+        <result column="down_status_" property="downStatus"/>
+        <result column="music_score_accompaniment_id_" property="musicScoreAccompanimentId"/>
+        <result column="play_status_" property="playStatus"/>
+        <result column="accompaniment_play_status_" property="accompanimentPlayStatus"/>
+        <result column="speed_" property="speed"/>
+        <result column="mp3_url_" property="mp3Url"/>
+        <result column="url_" property="url"/>
+        <result column="music_score_name_" property="musicScoreName"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="CourseScheduleStudentMusicScore">
+		SELECT * FROM course_schedule_student_music_score WHERE id_ = #{id}
+	</select>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="CourseScheduleStudentMusicScore">
+		SELECT * FROM course_schedule_student_music_score ORDER BY id_
+	</select>
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        INSERT INTO course_schedule_student_music_score (course_schedule_id_,user_id_,user_type_,down_status_,music_score_accompaniment_id_,play_status_,accompaniment_play_status_,speed_,create_time_,update_time_)
+        VALUES(#{courseScheduleId},#{userId},#{userType},#{downStatus},#{musicScoreAccompanimentId},#{playStatus},#{accompanimentPlayStatus},#{speed},now(),now())
+    </insert>
+    <insert id="batchInsert">
+        INSERT INTO course_schedule_student_music_score (course_schedule_id_,user_id_,user_type_,down_status_,music_score_accompaniment_id_,play_status_,accompaniment_play_status_,speed_,create_time_,update_time_)
+        VALUE
+        <foreach collection="scheduleStudentMusicScores" item="item" separator=",">
+            (#{item.courseScheduleId},#{item.userId},#{item.userType},#{item.downStatus},#{item.musicScoreAccompanimentId},#{item.playStatus},#{item.accompanimentPlayStatus},#{item.speed},now(),now())
+        </foreach>
+    </insert>
+
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore">
+        UPDATE course_schedule_student_music_score
+        <set>
+            <if test="accompanimentPlayStatus != null">
+                accompaniment_play_status_ = #{accompanimentPlayStatus},
+            </if>
+            <if test="downStatus != null">
+                down_status_ = #{downStatus},
+            </if>
+            <if test="playStatus != null">
+                play_status_ = #{playStatus},
+            </if>
+            <if test="speed != null">
+                speed_ = #{speed},
+            </if>
+            update_time_ = NOW()
+        </set>
+        WHERE id_ = #{id}
+    </update>
+
+    <update id="updateByMusicScore" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore">
+        UPDATE course_schedule_student_music_score
+        SET down_status_ = #{downStatus},play_status_ = #{playStatus},speed_ = #{speed},update_time_ = NOW()
+        WHERE course_schedule_id_ = #{courseScheduleId}
+        <if test="userId">
+            AND user_id_ = #{userId}
+        </if>
+        <if test="musicScoreAccompanimentId">
+            AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
+        </if>
+    </update>
+    <update id="closePlayStatus">
+        UPDATE course_schedule_student_music_score SET play_status_ = 0,accompaniment_play_status_ = 0,update_time_ = NOW()
+        WHERE course_schedule_id_ = #{scheduleId}
+        <if test="musicScoreAccompanimentId">
+            AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
+        </if>
+        <if test="musicScoreAccompanimentId">
+            AND user_id_ = #{userId}
+        </if>
+    </update>
+    <update id="openPlayStatus">
+        UPDATE course_schedule_student_music_score SET play_status_ = 1,update_time_ = NOW()
+        WHERE course_schedule_id_ = #{scheduleId}
+        AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
+    </update>
+    <update id="openAccompanimentPlayStatus">
+        UPDATE course_schedule_student_music_score SET accompaniment_play_status_ = 1,update_time_ = NOW()
+        WHERE course_schedule_id_ = #{scheduleId} AND music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
+    </update>
+
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
+        DELETE FROM course_schedule_student_music_score WHERE id_ = #{id}
+	</delete>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="CourseScheduleStudentMusicScore" parameterType="map">
+        SELECT * FROM course_schedule_student_music_score
+        <include refid="global.limit" />
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM course_schedule_student_music_score
+	</select>
+    <select id="queryByScoreIdAndCourseId"
+            resultMap="CourseScheduleStudentMusicScore">
+        SELECT cssm.*,smsa.mp3_url_,sms.url_,sms.name_ music_score_name_  FROM course_schedule_student_music_score cssm
+        LEFT JOIN sys_music_score_accompaniment smsa ON cssm.music_score_accompaniment_id_ = smsa.id_
+        LEFT JOIN sys_music_score sms ON sms.id_ = smsa.exam_song_id_
+        <where>
+            <if test="courseId != null">
+                AND cssm.course_schedule_id_ = #{courseId}
+            </if>
+            <if test="musicScoreAccompanimentId != null">
+                AND cssm.music_score_accompaniment_id_ = #{musicScoreAccompanimentId}
+            </if>
+            <if test="userType != null">
+                AND cssm.user_type_ = #{userType}
+            </if>
+            <if test="userId != null">
+                AND cssm.user_id_ = #{userId}
+            </if>
+            <if test="downStatus != null">
+                AND cssm.down_status_ = #{downStatus}
+            </if>
+        </where>
+    </select>
+</mapper>

+ 2 - 1
mec-client-api/src/main/java/com/ym/mec/im/WebFeignService.java

@@ -20,5 +20,6 @@ public interface WebFeignService {
 	Boolean isPurchasedPracticeCourse(@RequestParam("userId") Integer userId);
 
 	@RequestMapping(value = "api/updateNickName")
-	int updateNickName(@RequestParam("userId") Integer userId,@RequestParam("nickName") String nickName,@RequestParam("userType") String userType);
+	int updateNickName(@RequestParam("userId") Integer userId,
+					   @RequestParam("nickName") String nickName);
 }

+ 1 - 1
mec-client-api/src/main/java/com/ym/mec/im/fallback/WebFeignServiceFallback.java

@@ -24,7 +24,7 @@ public class WebFeignServiceFallback implements WebFeignService {
 	}
 
 	@Override
-	public int updateNickName(Integer userId, String nickName,String userType) {
+	public int updateNickName(Integer userId, String nickName) {
 		return 0;
 	}
 }

+ 7 - 7
mec-common/audit-log/pom.xml

@@ -21,11 +21,11 @@
 			<groupId>com.yonge.mongodb</groupId>
 			<artifactId>mongo-db</artifactId>
 		</dependency>
-        <dependency>
-            <groupId>io.swagger</groupId>
-            <artifactId>swagger-annotations</artifactId>
-            <version>1.5.20</version>
-            <scope>compile</scope>
-        </dependency>
-    </dependencies>
+		<dependency>
+			<groupId>io.swagger</groupId>
+			<artifactId>swagger-annotations</artifactId>
+			<version>1.5.20</version>
+			<scope>compile</scope>
+		</dependency>
+	</dependencies>
 </project>

+ 2 - 2
mec-gateway/mec-gateway-web/src/main/resources/bootstrap-test.properties

@@ -1,9 +1,9 @@
 #\u6307\u5b9a\u5f00\u53d1\u73af\u5883
 #spring.profiles.active=dev
 #\u670d\u52a1\u5668\u5730\u5740
-spring.cloud.nacos.config.server-addr=47.96.85.100:8848
+spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=f9d46b0a-9847-48ae-8e4b-216c7a3eb466
+spring.cloud.nacos.config.namespace=f753d9d9-4bb2-4df6-a483-da9e169617c4
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 26 - 34
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -1,12 +1,15 @@
 package com.ym.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.ym.common.ApiException;
 import com.ym.common.BaseResponse;
 import com.ym.common.ErrorEnum;
 import com.ym.pojo.*;
 import com.ym.service.MessageService;
 import com.ym.service.RoomService;
+import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
@@ -63,6 +66,13 @@ public class RoomController{
         return new BaseResponse<>();
     }
 
+    @ApiOperation(value = "老师通知学员下载伴奏")
+    @RequestMapping(value = "pushDownloadMusicScoreMsg", method = RequestMethod.POST)
+    public Object pushDownloadMusicScoreMsg(@RequestBody MusicScoreData musicScoreData) throws Exception {
+        roomService.pushDownloadMusicScoreMsg(musicScoreData);
+        return new BaseResponse<>();
+    }
+
     @RequestMapping(value = "joinRoomStatusNotify", method = RequestMethod.POST)
     public Object joinRoomStatusNotify(@RequestBody RoomStatusNotify roomStatusNotify) throws Exception {
         log.info("joinRoomStatusNotify: {}",JSONObject.toJSON(roomStatusNotify));
@@ -139,11 +149,12 @@ public class RoomController{
         return new BaseResponse<>(whiteboards);
     }
 
+    @ApiOperation(value = "通知学员打开,麦克风、摄像头等权限请求")
     @RequestMapping(value = "/device/approve", method = RequestMethod.POST)
     public Object approveControlDevice(@RequestBody ReqDeviceControlData data)
             throws Exception {
         boolean result;
-        result = roomService.approveControlDevice(data.getRoomId(), data.getTicket());
+        result = roomService.approveControlDevice(data);
         return new BaseResponse<>(result);
     }
 
@@ -155,26 +166,14 @@ public class RoomController{
         return new BaseResponse<>(result);
     }
 
+    @ApiOperation(value = "学员麦克风、摄像头等开关控制")
     @RequestMapping(value = "/device/control", method = RequestMethod.POST)
     public Object controlDevice(@RequestBody ReqDeviceControlData data)
             throws Exception {
-        boolean result;
-        if (data.getCameraOn() != null) {
-            result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.Camera, data.getCameraOn());
-        } else if (data.getMicrophoneOn() != null) {
-            result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.Microphone, data.getMicrophoneOn());
-        } else if (data.getMusicModeOn() != null) {
-            result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.MusicMode, data.getMusicModeOn());
-        } else if (data.getHandUpOn() != null) {
-            result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.HandUp, data.getHandUpOn());
-        }else if (data.getExamSongOn() != null) {
-            result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.ExamSong, data.getExamSongOn());
-        } else {
-            throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
-        }
-        return new BaseResponse<>(result);
+        return new BaseResponse<>(roomService.controlDevice(data));
     }
 
+    @ApiOperation(value = "学员伴奏下载状态回调")
     @RequestMapping(value = "adjustExamSong", method = RequestMethod.POST)
     public Object adjustExamSong(@RequestBody ExamSongData examSongData) throws Exception {
         log.info("adjustExamSong: {}",JSONObject.toJSON(examSongData));
@@ -182,32 +181,25 @@ public class RoomController{
         return new BaseResponse<>();
     }
 
+    @ApiOperation(value = "学员伴奏下载状态回调")
+    @RequestMapping(value = "adjustMusicScore", method = RequestMethod.POST)
+    public Object adjustMusicScore(@RequestBody MusicScoreData musicScoreData) throws Exception {
+        roomService.adjustMusicScore(musicScoreData);
+        return new BaseResponse<>();
+    }
+
+    @ApiOperation(value = "学员麦克风、摄像头等开关批量控制")
     @RequestMapping(value = "/device/batchControl", method = RequestMethod.POST)
     public Object batchControlDevice(@RequestBody ReqDeviceControlData data)throws Exception {
-        log.info("batchControlDevice: {}",JSONObject.toJSON(data));
-        boolean result = roomService.batchControlDevice(data);
-        return new BaseResponse<>(result);
+        log.info("batchControl: {}",JSONObject.toJSON(data));
+        return new BaseResponse<>(roomService.batchControlDevice(data));
     }
 
     @RequestMapping(value = "/device/sync", method = RequestMethod.POST)
     public Object syncDeviceState(@RequestBody ReqDeviceControlData data)
             throws Exception {
         log.info("syncDeviceState: {}",JSONObject.toJSON(data));
-        boolean result;
-        if (data.getCameraOn() != null) {
-            result = roomService.syncDeviceState(data.getRoomId(), DeviceTypeEnum.Camera, data.getCameraOn());
-        } else if (data.getMicrophoneOn() != null) {
-            result = roomService.syncDeviceState(data.getRoomId(), DeviceTypeEnum.Microphone, data.getMicrophoneOn());
-        } else if (data.getMusicModeOn() != null) {
-            result = roomService.syncDeviceState(data.getRoomId(), DeviceTypeEnum.MusicMode, data.getMusicModeOn());
-        }  else if (data.getHandUpOn() != null) {
-            result = roomService.syncDeviceState(data.getRoomId(), DeviceTypeEnum.HandUp, data.getHandUpOn());
-        }  else if (data.getExamSongOn() != null) {
-            result = roomService.syncDeviceState(data.getRoomId(), DeviceTypeEnum.ExamSong, data.getExamSongOn());
-        } else {
-            throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
-        }
-        return new BaseResponse<>(result);
+        return new BaseResponse<>(roomService.syncDeviceState(data));
     }
 
     @RequestMapping(value = "/whiteboard/turn-page", method = RequestMethod.POST)

+ 0 - 3
mec-im/src/main/java/com/ym/mec/im/BaseMessage.java

@@ -2,9 +2,6 @@ package com.ym.mec.im;
 
 import com.alibaba.fastjson.JSONObject;
 
-/**
- * Created by weiqinxiao on 2019/3/1.
- */
 public abstract class BaseMessage {
 
     public abstract String getObjectName();

+ 1 - 1
mec-im/src/main/java/com/ym/mec/im/message/DeviceStateChangedMessage.java

@@ -9,8 +9,8 @@ import lombok.Setter;
  */
 public class DeviceStateChangedMessage extends BaseMessage {
     private @Setter @Getter boolean enable;
-
     private @Setter @Getter int type;
+    private @Setter @Getter Integer musicScoreAccompanimentId;
 
     private @Setter @Getter String userId;
     private @Setter @Getter String userName;

+ 43 - 0
mec-im/src/main/java/com/ym/mec/im/message/MusicScoreDownloadMessageMessage.java

@@ -0,0 +1,43 @@
+package com.ym.mec.im.message;
+
+import com.ym.mec.im.BaseMessage;
+import com.ym.pojo.MusicScoreMessage;
+
+public class MusicScoreDownloadMessageMessage extends BaseMessage {
+    private MusicScoreMessage content;
+    private static final transient String TYPE = "DY:musicScoreDownloadMessage";
+
+    public MusicScoreDownloadMessageMessage(MusicScoreMessage content) {
+        this.content = content;
+    }
+
+    public MusicScoreMessage getContent() {
+        return content;
+    }
+
+    public void setContent(MusicScoreMessage content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "{\"id\":\"" + content.getId() +
+                "\", \"examSongId\":\"" + content.getExamSongId() +
+                "\", \"subjectId\":\"" + content.getSubjectId() +
+                "\", \"subjectName\":\"" + content.getSubjectName() +
+                "\", \"mp3Url\":\"" + content.getMp3Url() +
+                "\", \"speed\":\"" + content.getSpeed() +
+                "\", \"xmlUrl\":\"" + content.getXmlUrl() +
+                "\", \"examSongName\":\"" + content.getExamSongName() +
+                "\", \"categoriesName\":\"" + content.getCategoriesName() +
+                "\", \"categoriesId\":\"" + content.getCategoriesId() +
+                "\", \"type\":\"" + content.getType() +
+                "\", \"url\":\"" + content.getUrl() +
+                "\"}";
+    }
+
+    @Override
+    public String getObjectName() {
+        return TYPE;
+    }
+}

+ 25 - 0
mec-im/src/main/java/com/ym/mec/im/message/MusicScoreDownloadStatusMessage.java

@@ -0,0 +1,25 @@
+package com.ym.mec.im.message;
+
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore;
+import com.ym.mec.im.BaseMessage;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+public class MusicScoreDownloadStatusMessage extends BaseMessage {
+
+    private @Setter @Getter Integer studentId;
+
+    private @Setter @Getter List<CourseScheduleStudentMusicScore> studentMusicScores;
+
+    public MusicScoreDownloadStatusMessage(Integer studentId, List<CourseScheduleStudentMusicScore> studentMusicScores) {
+        this.studentId = studentId;
+        this.studentMusicScores = studentMusicScores;
+    }
+
+    @Override
+    public String getObjectName() {
+        return "DY:MSDSMsg";
+    }
+}

+ 2 - 3
mec-im/src/main/java/com/ym/pojo/DeviceTypeEnum.java

@@ -1,12 +1,11 @@
 package com.ym.pojo;
 
-/**
- * Created by weiqinxiao on 2019/3/19.
- */
 public enum DeviceTypeEnum {
     Microphone,
     Camera,
     MusicMode,
     HandUp,
     ExamSong,
+    MusicScore,
+    MusicScoreAccompaniment,
 }

+ 49 - 0
mec-im/src/main/java/com/ym/pojo/MusicScoreData.java

@@ -0,0 +1,49 @@
+package com.ym.pojo;
+
+public class MusicScoreData {
+	private String roomId;
+	private Integer musicScoreAccompanimentId;
+	private Integer userId;
+	private Integer userType;
+	private Integer status;
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+
+	public Integer getUserType() {
+		return userType;
+	}
+
+	public void setUserType(Integer userType) {
+		this.userType = userType;
+	}
+
+	public Integer getMusicScoreAccompanimentId() {
+		return musicScoreAccompanimentId;
+	}
+
+	public void setMusicScoreAccompanimentId(Integer musicScoreAccompanimentId) {
+		this.musicScoreAccompanimentId = musicScoreAccompanimentId;
+	}
+
+	public Integer getStatus() {
+		return status;
+	}
+
+	public void setStatus(Integer status) {
+		this.status = status;
+	}
+
+	public String getRoomId() {
+		return roomId;
+	}
+
+	public void setRoomId(String roomId) {
+		this.roomId = roomId;
+	}
+}

+ 153 - 0
mec-im/src/main/java/com/ym/pojo/MusicScoreMessage.java

@@ -0,0 +1,153 @@
+package com.ym.pojo;
+
+public class MusicScoreMessage {
+    /**  */
+    private Integer id;
+
+    /**  */
+    private Integer examSongId;
+
+    /**  */
+    private Integer subjectId;
+
+    /**  */
+    private String subjectName;
+
+    /**  */
+    private String mp3Url;
+
+    /** 速度 */
+    private Integer speed;
+
+    /**  */
+    private String xmlUrl;
+
+    /**  */
+    private String examSongName;
+
+    /**  */
+    private String categoriesName;
+
+    /**  */
+    private Integer categoriesId;
+
+    /**  */
+    private String type;
+
+    /**  */
+    private String url;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getExamSongId() {
+        return examSongId;
+    }
+
+    public void setExamSongId(Integer examSongId) {
+        this.examSongId = examSongId;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getMp3Url() {
+        return mp3Url;
+    }
+
+    public void setMp3Url(String mp3Url) {
+        this.mp3Url = mp3Url;
+    }
+
+    public Integer getSpeed() {
+        return speed;
+    }
+
+    public void setSpeed(Integer speed) {
+        this.speed = speed;
+    }
+
+    public String getXmlUrl() {
+        return xmlUrl;
+    }
+
+    public void setXmlUrl(String xmlUrl) {
+        this.xmlUrl = xmlUrl;
+    }
+
+    public String getExamSongName() {
+        return examSongName;
+    }
+
+    public void setExamSongName(String examSongName) {
+        this.examSongName = examSongName;
+    }
+
+    public String getCategoriesName() {
+        return categoriesName;
+    }
+
+    public void setCategoriesName(String categoriesName) {
+        this.categoriesName = categoriesName;
+    }
+
+    public Integer getCategoriesId() {
+        return categoriesId;
+    }
+
+    public void setCategoriesId(Integer categoriesId) {
+        this.categoriesId = categoriesId;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    @Override
+    public String toString() {
+        return "MusicScoreMessage{" +
+                "id='" + id + '\'' +
+                ", examSongId='" + examSongId + '\'' +
+                ", subjectId='" + subjectId + '\'' +
+                ", subjectName='" + subjectName + '\'' +
+                ", mp3Url='" + mp3Url + '\'' +
+                ", speed='" + speed + '\'' +
+                ", xmlUrl='" + xmlUrl + '\'' +
+                ", examSongName='" + examSongName + '\'' +
+                ", categoriesName='" + categoriesName + '\'' +
+                ", categoriesId='" + categoriesId + '\'' +
+                ", type='" + type + '\'' +
+                ", url='" + url + '\'' +
+                '}';
+    }
+}

+ 14 - 3
mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java

@@ -2,9 +2,6 @@ package com.ym.pojo;
 
 import lombok.Data;
 
-/**
- * Created by weiqinxiao on 2019/3/7.
- */
 @Data
 public class ReqDeviceControlData {
 	private Boolean cameraOn;
@@ -12,11 +9,25 @@ public class ReqDeviceControlData {
 	private Boolean musicModeOn;
 	private Boolean handUpOn;
 	private Boolean examSongOn;
+	//原音播放状态
+	private Boolean musicScoreOn;
+	//伴奏播放状态
+	private Boolean accompanimentOn;
+
 	private String roomId;
 	private String userId;
 	private String ticket;
 	private Integer status;
 	private Integer examSongId;
+	private Integer musicScoreAccompanimentId;
+
+	public Integer getMusicScoreAccompanimentId() {
+		return musicScoreAccompanimentId;
+	}
+
+	public void setMusicScoreAccompanimentId(Integer musicScoreAccompanimentId) {
+		this.musicScoreAccompanimentId = musicScoreAccompanimentId;
+	}
 
 	public Boolean getExamSongOn() {
 		return examSongOn;

+ 7 - 1
mec-im/src/main/java/com/ym/pojo/RoomResult.java

@@ -2,6 +2,7 @@ package com.ym.pojo;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentMusicScore;
 import lombok.Data;
 import lombok.Getter;
 import lombok.Setter;
@@ -11,6 +12,7 @@ import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * Created by weiqinxiao on 2019/2/28.
@@ -41,6 +43,7 @@ public class RoomResult {
         boolean microphone;
         boolean handUpOn;
         ExamSongDownloadData examSongDownloadJson;
+        List<CourseScheduleStudentMusicScore> scheduleStudentMusicScores;
         CustomMessage playMidiJson;
     }
 
@@ -51,7 +54,7 @@ public class RoomResult {
         int curPg;
     }
 
-    public void setMembers(List<RoomMember> roomMemberList, Map<Integer,String> midiMap,Map<Integer,String> examSongMap) {
+    public void setMembers(List<RoomMember> roomMemberList, Map<Integer,String> midiMap,Map<Integer,String> examSongMap,List<CourseScheduleStudentMusicScore> scheduleStudentMusicScores) {
         for (RoomMember member : roomMemberList) {
             MemberResult result = new MemberResult();
             result.setUserId(member.getUid());
@@ -63,6 +66,9 @@ public class RoomResult {
             result.setHandUpOn(member.isHand());
             result.setHeadUrl(member.getHeadUrl());
             result.setPlayMidiJson(JSONObject.parseObject(midiMap.get(Integer.parseInt(member.getUid())),CustomMessage.class));
+            if(scheduleStudentMusicScores != null && scheduleStudentMusicScores.size() > 0){
+                result.setScheduleStudentMusicScores(scheduleStudentMusicScores.stream().filter(e->e.getUserId().equals(Integer.parseInt(result.getUserId()))).collect(Collectors.toList()));
+            }
             ExamSongDownloadData examSongDownloadData;
             String json = examSongMap.get(Integer.parseInt(member.getUid()));
             if(StringUtils.isEmpty(json)){

+ 185 - 46
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -2,25 +2,22 @@ package com.ym.service.Impl;
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.ym.common.ApiException;
 import com.ym.common.BaseResponse;
 import com.ym.common.DisplayEnum;
 import com.ym.common.ErrorEnum;
 import com.ym.config.IMProperties;
 import com.ym.config.RoomProperties;
-import com.ym.dao.RoomDao;
-import com.ym.dao.RoomMemberDao;
-import com.ym.dao.UserDao;
-import com.ym.dao.WhiteboardDao;
+import com.ym.dao.*;
 import com.ym.job.ScheduleManager;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dao.CourseScheduleStudentMusicScoreDao;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.dto.RongyunBasicUserDto;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.SysExamSong;
-import com.ym.mec.biz.dal.entity.Teacher;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.service.StudentAttendanceService;
@@ -95,6 +92,10 @@ public class RoomServiceImpl implements RoomService {
     @Autowired
     private SysConfigDao sysConfigDao;
     @Autowired
+    private CourseScheduleStudentMusicScoreDao courseScheduleStudentMusicScoreDao;
+    @Autowired
+    private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
+    @Autowired
     private RedisTemplate<String,String> redisTemplate;
 
     @Override
@@ -206,6 +207,8 @@ public class RoomServiceImpl implements RoomService {
             userResult.setJoinTime(member.getJoinDt());
         }
 
+        List<CourseScheduleStudentMusicScore> scheduleStudentMusicScores = courseScheduleStudentMusicScoreDao.queryByScoreIdAndCourseId(null, courseId,null, null, null);
+
         String display = "";
         if (roleEnum == RoleTeacher) {
             display = "display://type=1?userId=" + userId + "?uri=";
@@ -226,6 +229,13 @@ public class RoomServiceImpl implements RoomService {
                 display = room.getDisplay();
             }
         }
+        //已下载的伴奏列表
+        if(scheduleStudentMusicScores != null && scheduleStudentMusicScores.size() > 0){
+            List<CourseScheduleStudentMusicScore> musicScores = scheduleStudentMusicScores.stream().filter(e -> e.getUserId().equals(sysUser.getId())).collect(Collectors.toList());
+            String toJSONString = JSON.toJSONString(musicScores, SerializerFeature.DisableCircularReferenceDetect);
+            List<CourseScheduleStudentMusicScore> lists = JSON.parseArray(toJSONString, CourseScheduleStudentMusicScore.class);
+            userResult.setScheduleStudentMusicScores(lists);
+        }
 
         userResult.setUserName(userName);
         userResult.setUserId(userId);
@@ -248,7 +258,7 @@ public class RoomServiceImpl implements RoomService {
             Set<String> userIds = roomMemberList.stream().map(e -> e.getUid()).collect(Collectors.toSet());
             Map<Integer,String> midiMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryMidiByUserIdsAndCourseId(userIds,courseId.toString()));
             Map<Integer,String> examSongMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryExamSongByUserIdsAndCourseId(userIds,courseId.toString()));
-            roomResult.setMembers(roomMemberList,midiMap,examSongMap);
+            roomResult.setMembers(roomMemberList,midiMap,examSongMap,scheduleStudentMusicScores);
         }
         roomResult.setWhiteboards(whiteboardDao.findByRid(roomId));
         log.info("join room: roomId = {}, userId = {}, userName={}, role = {}", roomId, userId, userName, roleEnum);
@@ -436,6 +446,7 @@ public class RoomServiceImpl implements RoomService {
         CourseSchedule courseSchedule = courseScheduleDao.get(firstCourseId.longValue());
         if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
             roleEnum = RoleTeacher;
+            courseScheduleStudentMusicScoreDao.closePlayStatus(courseSchedule.getId(),null,null);
         }else {
             roleEnum = RoleStudent;
         }
@@ -477,6 +488,7 @@ public class RoomServiceImpl implements RoomService {
             roomDao.deleteByRid(roomId);
             deleteWhiteboardByUser(roomId, userId);
             imHelper.dismiss(userId, roomId);
+            courseScheduleStudentMusicScoreDao.closePlayStatus(courseSchedule.getId(),null,null);
             log.info("leaveRoomSuccess dismiss the room: {},userId: {}", roomId,userId);
         } else {
             roomMemberDao.deleteUserByRidAndUid(roomId, userId);
@@ -676,10 +688,8 @@ public class RoomServiceImpl implements RoomService {
     @Transactional(rollbackFor = Exception.class)
     public String createWhiteBoard(String roomId) throws Exception {
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
-//        CheckUtils.checkArgument(roomDao.existsByRid(roomId), "room not exist");
         SysUser authUser = sysUserFeignService.queryUserInfo();
         String userId = authUser.getId().toString();
-//        CheckUtils.checkArgument(roomMemberDao.existsByRidAndUid(roomId, userId), "room member not exist");
 
         log.info("createWhiteBoard: roomId = {}", roomId);
 
@@ -794,10 +804,35 @@ public class RoomServiceImpl implements RoomService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean controlDevice(String roomId, String userId, DeviceTypeEnum typeEnum, boolean enable) throws Exception {
-        CheckUtils.checkArgument(roomId != null, "roomId must't be null");
-        CheckUtils.checkArgument(userId != null, "userId must't be null");
-        CheckUtils.checkArgument(roomDao.existsByRid(roomId), "room not exist");
+    public Boolean controlDevice(ReqDeviceControlData data) throws Exception {
+        String roomId = data.getRoomId();
+        String userId = data.getUserId();
+        DeviceTypeEnum typeEnum;
+        boolean enable;
+        if (data.getCameraOn() != null) {
+            typeEnum = DeviceTypeEnum.Camera;
+            enable = data.getCameraOn();
+        } else if (data.getMicrophoneOn() != null) {
+            typeEnum = DeviceTypeEnum.Microphone;
+            enable = data.getMicrophoneOn();
+        } else if (data.getMusicModeOn() != null) {
+            typeEnum = DeviceTypeEnum.MusicMode;
+            enable = data.getMusicModeOn();
+        } else if (data.getHandUpOn() != null) {
+            typeEnum = DeviceTypeEnum.HandUp;
+            enable = data.getHandUpOn();
+        }else if (data.getExamSongOn() != null) {
+            typeEnum = DeviceTypeEnum.ExamSong;
+            enable = data.getExamSongOn();
+        }else if (data.getMusicScoreOn() != null) {
+            typeEnum = DeviceTypeEnum.MusicScore;
+            enable = data.getMusicScoreOn();
+        }else if (data.getAccompanimentOn() != null) {
+            typeEnum = DeviceTypeEnum.MusicScoreAccompaniment;
+            enable = data.getAccompanimentOn();
+        } else {
+            throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
+        }
         SysUser authUser = sysUserFeignService.queryUserInfo();
         log.info("controlDevice: userId={}, typeEnum={}, onOff={}", userId, typeEnum, enable);
 
@@ -816,6 +851,25 @@ public class RoomServiceImpl implements RoomService {
                 DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), enable);
                 deviceResourceMessage.setUserId(userId);
                 imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
+            }else if(typeEnum.equals(DeviceTypeEnum.MusicScore)){
+                long scheduleId = Long.parseLong(roomId.substring(1));
+                //关闭所有曲目播放
+                courseScheduleStudentMusicScoreDao.closePlayStatus(scheduleId,Integer.parseInt(userId),null);
+                //原音
+                courseScheduleStudentMusicScoreDao.openPlayStatus(scheduleId,data.getMusicScoreAccompanimentId());
+                DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), enable);
+                deviceResourceMessage.setMusicScoreAccompanimentId(data.getMusicScoreAccompanimentId());
+                deviceResourceMessage.setUserId(userId);
+                imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
+            }else if(typeEnum.equals(DeviceTypeEnum.MusicScoreAccompaniment)){
+                long scheduleId = Long.parseLong(roomId.substring(1));
+                //关闭所有曲目播放
+                courseScheduleStudentMusicScoreDao.closePlayStatus(scheduleId,Integer.parseInt(userId),null);
+                courseScheduleStudentMusicScoreDao.openAccompanimentPlayStatus(scheduleId,data.getMusicScoreAccompanimentId());
+                DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(typeEnum.ordinal(), enable);
+                deviceResourceMessage.setMusicScoreAccompanimentId(data.getMusicScoreAccompanimentId());
+                deviceResourceMessage.setUserId(userId);
+                imHelper.publishMessage(authUser.getId().toString(), roomId, deviceResourceMessage, 1);
             }else {
                 String ticket = IdentifierUtils.uuid();
                 ControlDeviceTaskInfo taskInfo = new ControlDeviceTaskInfo();
@@ -851,6 +905,14 @@ public class RoomServiceImpl implements RoomService {
                     msg.setEnable(enable);
                 }
                 courseScheduleStudentPaymentDao.adjustExamSong(scheduleId,Integer.parseInt(userId),JSON.toJSONString(msg));
+            }else if(typeEnum.equals(DeviceTypeEnum.MusicScore)){
+                long scheduleId = Long.parseLong(roomId.substring(1));
+                //关闭所有曲目播放
+                courseScheduleStudentMusicScoreDao.closePlayStatus(scheduleId,Integer.parseInt(userId),null);
+            }else if(typeEnum.equals(DeviceTypeEnum.MusicScoreAccompaniment)){
+                long scheduleId = Long.parseLong(roomId.substring(1));
+                //关闭所有曲目播放
+                courseScheduleStudentMusicScoreDao.closePlayStatus(scheduleId,Integer.parseInt(userId),null);
             }else {
                 roomMemberDao.updateMusicByRidAndUid(roomId, userId, false);
             }
@@ -881,39 +943,33 @@ public class RoomServiceImpl implements RoomService {
         if(roomMembers.size() == 0){
             return false;
         }
-        boolean result = true;
-        if (data.getCameraOn() != null) {
-            for (RoomMember e:roomMembers) {
-                controlDevice(data.getRoomId(), e.getUid(), DeviceTypeEnum.Camera, data.getCameraOn());
-            }
-        } else if (data.getMicrophoneOn() != null) {
-            for (RoomMember e:roomMembers) {
-                controlDevice(data.getRoomId(), e.getUid(), DeviceTypeEnum.Microphone, data.getMicrophoneOn());
-            }
-        } else if (data.getMusicModeOn() != null) {
-            for (RoomMember e:roomMembers) {
-                controlDevice(data.getRoomId(), e.getUid(), DeviceTypeEnum.MusicMode, data.getMusicModeOn());
-            }
-        } else if (data.getExamSongOn() != null) {
+        if (data.getExamSongOn() != null) {
             if(StringUtils.isNotEmpty(data.getUserId())){
                 for (RoomMember e:roomMembers) {
-                    controlDevice(data.getRoomId(), e.getUid(), DeviceTypeEnum.ExamSong, data.getExamSongOn());
+                    data.setUserId(e.getUid());
+                    controlDevice(data);
                 }
             }else {
                 List<BasicUserDto> students = courseScheduleStudentPaymentDao.findStudents(Long.parseLong(data.getRoomId().substring(1)));
                 for (BasicUserDto e:students) {
-                    controlDevice(data.getRoomId(), e.getUserId().toString(), DeviceTypeEnum.ExamSong, data.getExamSongOn());
+                    data.setUserId(e.getUserId().toString());
+                    controlDevice(data);
                 }
             }
         } else {
-            throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
+            for (RoomMember e:roomMembers) {
+                data.setUserId(e.getUid());
+                controlDevice(data);
+            }
         }
-        return result;
+        return true;
     }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean approveControlDevice(String roomId, String ticket) throws Exception {
+    public Boolean approveControlDevice(ReqDeviceControlData data) throws Exception {
+        String ticket = data.getTicket();
+        String roomId = data.getRoomId();
         CheckUtils.checkArgument(ticket != null, "ticket must't be null");
         SysUser authUser = sysUserFeignService.queryUserInfo();
         String userId = authUser.getId().toString();
@@ -921,7 +977,7 @@ public class RoomServiceImpl implements RoomService {
         ControlDeviceTaskInfo taskInfo = (ControlDeviceTaskInfo) scheduleManager.executeTask(ticket);
         if (taskInfo.getTypeEnum().equals(DeviceTypeEnum.Camera)) {
             roomMemberDao.updateCameraByRidAndUid(roomId, userId, taskInfo.isOnOff());
-        }if (taskInfo.getTypeEnum().equals(DeviceTypeEnum.ExamSong)) {
+        }else if (taskInfo.getTypeEnum().equals(DeviceTypeEnum.ExamSong)) {
             long scheduleId = Long.parseLong(roomId.substring(1));
             ExamSongDownloadData msg;
             String examJson = courseScheduleStudentPaymentDao.getExamJsonByCourseIdAndUserId(scheduleId, authUser.getId());
@@ -932,7 +988,7 @@ public class RoomServiceImpl implements RoomService {
                 msg.setEnable(true);
             }
             courseScheduleStudentPaymentDao.adjustExamSong(scheduleId,authUser.getId(),JSON.toJSONString(msg));
-        } else {
+        }else {
             roomMemberDao.updateMicByRidAndUid(roomId, userId, taskInfo.isOnOff());
         }
         ControlDeviceNotifyMessage msg = new ControlDeviceNotifyMessage(ActionEnum.Approve.ordinal());
@@ -966,20 +1022,38 @@ public class RoomServiceImpl implements RoomService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Boolean syncDeviceState(String roomId, DeviceTypeEnum type, boolean enable) throws Exception {
-        CheckUtils.checkArgument(roomId != null, "roomId must't be null");
-        CheckUtils.checkArgument(roomDao.existsByRid(roomId), "room not exist");
+    public Boolean syncDeviceState(ReqDeviceControlData data) throws Exception {
+        String roomId = data.getRoomId();
+        DeviceTypeEnum type;
+        boolean enable;
+        if (data.getCameraOn() != null) {
+            type = DeviceTypeEnum.Camera;
+            enable = data.getCameraOn();
+        } else if (data.getMicrophoneOn() != null) {
+            type = DeviceTypeEnum.Microphone;
+            enable = data.getMicrophoneOn();
+        } else if (data.getMusicModeOn() != null) {
+            type = DeviceTypeEnum.MusicMode;
+            enable = data.getMusicModeOn();
+        }  else if (data.getHandUpOn() != null) {
+            type = DeviceTypeEnum.HandUp;
+            enable = data.getHandUpOn();
+        }  else if (data.getExamSongOn() != null) {
+            type = DeviceTypeEnum.ExamSong;
+            enable = data.getExamSongOn();
+        }else {
+            throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
+        }
         SysUser authUser = sysUserFeignService.queryUserInfo();
         String userId = authUser.getId().toString();
 
-        int result;
         DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(type.ordinal(), enable);
         if (type.equals(DeviceTypeEnum.Camera)) {
-            result = roomMemberDao.updateCameraByRidAndUid(roomId, userId, enable);
+            roomMemberDao.updateCameraByRidAndUid(roomId, userId, enable);
         } else if (type.equals(DeviceTypeEnum.Microphone)){
-            result = roomMemberDao.updateMicByRidAndUid(roomId, userId, enable);
+            roomMemberDao.updateMicByRidAndUid(roomId, userId, enable);
         } else if (type.equals(DeviceTypeEnum.HandUp)){
-            result = roomMemberDao.updateHandByRidAndUid(roomId, userId, enable);
+            roomMemberDao.updateHandByRidAndUid(roomId, userId, enable);
         } else if (type.equals(DeviceTypeEnum.ExamSong)){
             long scheduleId = Long.parseLong(roomId.substring(1));
             ExamSongDownloadData msg;
@@ -990,13 +1064,13 @@ public class RoomServiceImpl implements RoomService {
                 msg = JSON.parseObject(examJson, ExamSongDownloadData.class);
                 msg.setEnable(enable);
             }
-            result = courseScheduleStudentPaymentDao.adjustExamSong(scheduleId,authUser.getId(),JSON.toJSONString(msg));
+            courseScheduleStudentPaymentDao.adjustExamSong(scheduleId,authUser.getId(),JSON.toJSONString(msg));
         }else {
-            result = roomMemberDao.updateMusicByRidAndUid(roomId, userId, enable);
+            roomMemberDao.updateMusicByRidAndUid(roomId, userId, enable);
         }
         deviceResourceMessage.setUserId(userId);
         imHelper.publishMessage(userId, roomId, deviceResourceMessage, 1);
-        log.info("syncDeviceState : {}, {}, result = {}", roomId, enable, result);
+        log.info("syncDeviceState : {}, {}, result = {}", roomId, enable);
         return true;
     }
 
@@ -1006,11 +1080,12 @@ public class RoomServiceImpl implements RoomService {
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
         List<RoomMember> roomMemberList = roomMemberDao.findByRid(roomId);
         if(roomMemberList != null && roomMemberList.size() > 0){
+            List<CourseScheduleStudentMusicScore> scheduleStudentMusicScores = courseScheduleStudentMusicScoreDao.queryByScoreIdAndCourseId(null, Long.parseLong(roomId.substring(1)), null, null, null);
             RoomResult roomResult = new RoomResult();
             Set<String> userIds = roomMemberList.stream().map(e -> e.getUid()).collect(Collectors.toSet());
             Map<Integer,String> midiMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryMidiByUserIdsAndCourseId(userIds,roomId.substring(1)));
             Map<Integer,String> examSongMap = MapUtil.convertMybatisMap(courseScheduleStudentPaymentDao.queryExamSongByUserIdsAndCourseId(userIds,roomId.substring(1)));
-            roomResult.setMembers(roomMemberList,midiMap,examSongMap);
+            roomResult.setMembers(roomMemberList,midiMap,examSongMap,scheduleStudentMusicScores);
             return roomResult.getMembers();
         }
         return null;
@@ -1430,6 +1505,42 @@ public class RoomServiceImpl implements RoomService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void pushDownloadMusicScoreMsg(MusicScoreData musicScoreData) throws Exception {
+        SysUser authUser = sysUserFeignService.queryUserInfo();
+        String roomId = musicScoreData.getRoomId();
+        Long courseScheduleId = Long.parseLong(roomId.substring(1));
+        List<CourseScheduleStudentMusicScore> scheduleStudentMusicScores =
+                courseScheduleStudentMusicScoreDao.queryByScoreIdAndCourseId(musicScoreData.getMusicScoreAccompanimentId(),
+                        courseScheduleId,null,null,0);
+        SysMusicScoreAccompaniment accompaniment = sysMusicScoreAccompanimentDao.get(musicScoreData.getMusicScoreAccompanimentId());
+        if(scheduleStudentMusicScores.size() == 0){
+            //第一次下载,生成数据
+            List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByCourseSchedule(courseScheduleId);
+            Set<Integer> studentIds = courseScheduleStudentPayments.stream().map(e -> e.getUserId()).collect(Collectors.toSet());
+            studentIds.forEach(e->{
+                CourseScheduleStudentMusicScore musicScore = new CourseScheduleStudentMusicScore();
+                musicScore.setMusicScoreAccompanimentId(accompaniment.getId());
+                musicScore.setSpeed(accompaniment.getSpeed());
+                musicScore.setCourseScheduleId(courseScheduleId);
+                musicScore.setUserId(e);
+                scheduleStudentMusicScores.add(musicScore);
+            });
+            CourseScheduleStudentMusicScore musicScore = new CourseScheduleStudentMusicScore();
+            musicScore.setMusicScoreAccompanimentId(accompaniment.getId());
+            musicScore.setSpeed(accompaniment.getSpeed());
+            musicScore.setCourseScheduleId(courseScheduleId);
+            musicScore.setUserId(authUser.getId());
+            musicScore.setUserType(1);
+            scheduleStudentMusicScores.add(musicScore);
+            courseScheduleStudentMusicScoreDao.batchInsert(scheduleStudentMusicScores);
+        }
+        MusicScoreMessage musicScoreMessage = JSON.parseObject(JSON.toJSONString(accompaniment), MusicScoreMessage.class);
+        MusicScoreDownloadMessageMessage msg = new MusicScoreDownloadMessageMessage(musicScoreMessage);
+        imHelper.publishMessage(authUser.getId().toString(), roomId, msg, 0);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public void pushDownloadExamSongMsg(String roomId, Integer examSongId) throws Exception {
         SysUser authUser = sysUserFeignService.queryUserInfo();
 
@@ -1460,6 +1571,34 @@ public class RoomServiceImpl implements RoomService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public void adjustMusicScore(MusicScoreData musicScoreData) throws Exception {
+        SysUser authUser = sysUserFeignService.queryUserInfo();
+        Integer studentId = authUser.getId();
+        String roomId = musicScoreData.getRoomId();
+        Long scheduleId = Long.parseLong(roomId.substring(1));
+        Integer accompanimentId = musicScoreData.getMusicScoreAccompanimentId();
+        List<CourseScheduleStudentMusicScore> studentMusicScores = courseScheduleStudentMusicScoreDao.queryByScoreIdAndCourseId(accompanimentId,scheduleId,studentId,null,null);
+        if(accompanimentId != null){
+            SysMusicScoreAccompaniment accompaniment = sysMusicScoreAccompanimentDao.get(accompanimentId);
+            if(accompaniment == null){
+                throw new BizException("曲目信息不存在");
+            }
+            //修改下载状态
+            if(studentMusicScores == null || studentMusicScores.size() == 0){
+                throw new BizException("学员不存在此下载曲目");
+            }
+            CourseScheduleStudentMusicScore studentMusicScore = studentMusicScores.get(0);
+            studentMusicScore.setDownStatus(musicScoreData.getStatus());
+            courseScheduleStudentMusicScoreDao.update(studentMusicScore);
+        }
+        //给老师发送学员曲目下载状态
+        CourseSchedule courseSchedule = courseScheduleDao.get(scheduleId);
+        MusicScoreDownloadStatusMessage statusMessage = new MusicScoreDownloadStatusMessage(studentId,studentMusicScores);
+        imHelper.publishMessage(studentId.toString(),courseSchedule.getActualTeacherId().toString(), roomId,statusMessage);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public void adjustExamSong(String roomId, Integer status,Integer examSongId) throws Exception {
         if(roomId == null || status == null || examSongId == null){
             throw new BizException("参数校验失败");

+ 16 - 3
mec-im/src/main/java/com/ym/service/RoomService.java

@@ -35,11 +35,11 @@ public interface RoomService {
 
     Boolean turnWhiteBoardPage(String roomId, String whiteBoardId, int page) throws Exception;
 
-    Boolean controlDevice(String roomId, String userId, DeviceTypeEnum type, boolean enable) throws Exception;
+    Boolean controlDevice(ReqDeviceControlData data) throws Exception;
 
     Boolean batchControlDevice(ReqDeviceControlData data) throws Exception;
 
-    Boolean approveControlDevice(String roomId, String ticket) throws Exception;
+    Boolean approveControlDevice(ReqDeviceControlData data) throws Exception;
 
     Boolean rejectControlDevice(String roomId, String ticket) throws Exception;
 
@@ -58,7 +58,7 @@ public interface RoomService {
     Boolean approveUpgradeRole(String roomId, String ticket) throws Exception;
     Boolean rejectUpgradeRole(String roomId, String ticket) throws Exception;
 
-    Boolean syncDeviceState(String roomId, DeviceTypeEnum type, boolean enable) throws Exception;
+    Boolean syncDeviceState(ReqDeviceControlData data) throws Exception;
 
     Boolean changeRole(String roomId, String userId, int role) throws Exception;
 
@@ -95,10 +95,23 @@ public interface RoomService {
     void adjustExamSong(String roomId,Integer status,Integer examSongId) throws Exception;
 
     /**
+     * 修改学员伴奏下载状态
+     * @author zouxuan
+     * @param musicScoreData
+     */
+    void adjustMusicScore(MusicScoreData musicScoreData) throws Exception;
+
+    /**
      * 移动端用户加入房间失败
      * @author zouxuan
      * @param roomId
      * @param userId
      */
     void joinRoomFailure(String roomId, String userId);
+
+    /**
+     * 通知学员下载伴奏
+     * @param musicScoreData
+     */
+    void pushDownloadMusicScoreMsg(MusicScoreData musicScoreData) throws Exception;
 }

+ 1 - 1
mec-im/src/main/resources/bootstrap-test.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=f9d46b0a-9847-48ae-8e4b-216c7a3eb466
+spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java

@@ -65,10 +65,10 @@ public class MusicGroupController extends BaseController {
     @Autowired
     private StudentPreRegistrationDao studentPreRegistrationDao;
     @Autowired
-    private CourseScheduleDao courseScheduleDao;
+    private OrganizationService organizationService;
 
     @Autowired
-    private OrganizationService organizationService;
+    private CourseScheduleDao courseScheduleDao;
 
     @ApiOperation("预报名")
     @PostMapping(value = "/preRegister")

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -53,9 +53,9 @@ public class StudentManageController extends BaseController {
     @Autowired
     private SubjectService subjectService;
     @Autowired
-    private StudentService studentService;
-    @Autowired
     private OrganizationService organizationService;
+    @Autowired
+    private StudentService studentService;
 
     private final static Logger LOGGER = LoggerFactory.getLogger(StudentManageController.class);
 

+ 1 - 1
mec-student/src/main/resources/bootstrap-test.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=f753d9d9-4bb2-4df6-a483-da9e169617c4
+spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 1 - 1
mec-task/src/main/resources/bootstrap-test.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=f9d46b0a-9847-48ae-8e4b-216c7a3eb466
+spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 1 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMusicScoreAccompanimentController.java

@@ -14,7 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 @RequestMapping("sysMusicScoreAccompaniment")
-@Api(tags = "曲库服务")
+@Api(tags = "曲库伴奏服务")
 @RestController
 public class SysMusicScoreAccompanimentController extends BaseController {
 

+ 1 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -274,7 +274,7 @@ public class TeacherCourseScheduleController extends BaseController {
         if(Objects.isNull(courseScheduleId1)||Objects.isNull(courseScheduleId2)){
             return failed("请指定课程!");
         }
-        scheduleService.courseSwap(courseScheduleId1,courseScheduleId2, true);
+        scheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
         return succeed();
     }
 

+ 1 - 1
mec-teacher/src/main/resources/bootstrap-test.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=f753d9d9-4bb2-4df6-a483-da9e169617c4
+spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

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

@@ -63,8 +63,8 @@ public class APIController extends BaseController {
 	}
 
 	@GetMapping("/updateNickName")
-	public int updateNickName(Integer userId,String nickName,String userType) {
-		return imGroupService.updateNickName(userId,nickName,userType);
+	public int updateNickName(Integer userId,String nickName) {
+		return imGroupService.updateNickName(userId,nickName);
 	}
 
 }

+ 2 - 5
mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java

@@ -262,14 +262,11 @@ public class CourseScheduleController extends BaseController {
     @ApiOperation(value = "课时交换")
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/courseSwap')")
     @GetMapping(value = "/courseSwap",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public Object courseSwap(Long courseScheduleId1,Long courseScheduleId2, Boolean allowZeroSalary){
+    public Object courseSwap(Long courseScheduleId1,Long courseScheduleId2){
         if(Objects.isNull(courseScheduleId1)||Objects.isNull(courseScheduleId2)){
             return failed("请指定课程");
         }
-        if(Objects.isNull(allowZeroSalary)){
-            allowZeroSalary = false;
-        }
-        courseScheduleService.courseSwap(courseScheduleId1,courseScheduleId2,allowZeroSalary);
+        courseScheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
         return succeed();
     }
 

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

@@ -79,8 +79,8 @@ public class ImGroupController extends BaseController {
 
 	@ApiOperation("修改群成员信息")
 	@PostMapping(value = "/updateNickName")
-	public Object updateNickName(Integer userId,String nickName,String userType) {
-		return succeed(imGroupService.updateNickName(userId,nickName,userType));
+	public Object updateNickName(Integer userId,String nickName) {
+		return succeed(imGroupService.updateNickName(userId,nickName));
 	}
 
 	@ApiOperation("查询群成员列表")

+ 32 - 5
mec-web/src/main/java/com/ym/mec/web/controller/StudentRegistrationController.java

@@ -1,5 +1,10 @@
 package com.ym.mec.web.controller;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.page.NoClassMusicStudentQueryInfo;
+import com.ym.mec.biz.service.EmployeeService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -7,6 +12,7 @@ import io.swagger.annotations.ApiOperation;
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -29,11 +35,6 @@ 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.dto.StudentPreRegistrationDto;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderCourseSettings;
-import com.ym.mec.biz.dal.entity.StudentPaymentOrderDetail;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.page.StudentPreRegistrationQueryInfo;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
@@ -63,6 +64,10 @@ public class StudentRegistrationController extends BaseController {
     private StudentPreRegistrationService studentPreRegistrationService;
     @Autowired
     private MusicGroupDao musicGroupDao;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private EmployeeService employeeService;
 
     @ApiOperation(value = "乐团预报名列表分页查询")
     @GetMapping("/queryPreApplyList")
@@ -303,4 +308,26 @@ public class StudentRegistrationController extends BaseController {
             }
         }
     }
+
+    @ApiOperation(value = "查询乐团中未加入班级学员信息")
+    @GetMapping("/queryNoClassMusicStudentInfo")
+    @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryNoClassMusicStudentInfo')")
+    public HttpResponseResult queryNoClassMusicStudentInfo(NoClassMusicStudentQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        Employee employee = employeeService.get(sysUser.getId());
+        if (StringUtils.isBlank(queryInfo.getOrganIds())) {
+            queryInfo.setOrganIds(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            return failed("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganIds().split(",")))){
+                return failed("非法请求");
+            }
+        }
+        return succeed(studentRegistrationService.queryNoClassMusicStudentInfo(queryInfo));
+    }
 }

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

@@ -366,7 +366,7 @@ public class VipGroupManageController extends BaseController {
     @PostMapping("/getVipGroupCostCount")
     @PreAuthorize("@pcs.hasPermissions('vipGroupManage/getVipGroupCostCount')")
     public Object getVipGroupCostCount(@RequestBody VipGroupApplyBaseInfoDto vipGroup){
-        Map results = vipGroupService.countVipGroupPredictFee(vipGroup,vipGroup.getUserId());
+        Map results = vipGroupService.countVipGroupPredictFee(vipGroup,vipGroup.getUserId(), null);
         return succeed(results);
     }
 

+ 2 - 5
mec-web/src/main/java/com/ym/mec/web/controller/education/EducationCourseScheduleController.java

@@ -65,14 +65,11 @@ public class EducationCourseScheduleController extends BaseController {
 
     @ApiOperation(value = "课时交换")
     @PostMapping(value = "/courseSwap",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
-    public Object courseSwap(Long courseScheduleId1,Long courseScheduleId2, Boolean allowZeroSalary){
+    public Object courseSwap(Long courseScheduleId1,Long courseScheduleId2){
         if(Objects.isNull(courseScheduleId1)||Objects.isNull(courseScheduleId2)){
             return failed("请指定课程!");
         }
-        if(Objects.isNull(allowZeroSalary)){
-            allowZeroSalary = false;
-        }
-        scheduleService.courseSwap(courseScheduleId1,courseScheduleId2,allowZeroSalary);
+        scheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
         return succeed();
     }
 }

+ 12 - 10
mec-web/src/main/java/com/ym/mec/web/controller/student/StudentAttendanceController.java

@@ -71,17 +71,19 @@ public class StudentAttendanceController extends BaseController {
         if (sysUser == null) {
             return failed("用户信息获取失败");
         }
-            Employee employee = employeeDao.get(sysUser.getId());
-            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
-                queryInfo.setOrganId(employee.getOrganIdList());
-            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
-                return failed("用户所在分部异常");
-            }else {
-                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
-                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
-                    return failed("非法请求");
-                }
+        Employee employee = employeeDao.get(sysUser.getId());
+        if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+            queryInfo.setOrganId(employee.getOrganIdList());
+        }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+            return failed("用户所在分部异常");
+        }else {
+            List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+            if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                return failed("非法请求");
             }
+        }
+        //按考勤状态和回访状态排序
+        queryInfo.setOrderFlag(true);
         return succeed(studentAttendanceService.findStudentAttendance(queryInfo));
     }
 

+ 1 - 1
mec-web/src/main/resources/bootstrap-test.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.114.1.200:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=f753d9d9-4bb2-4df6-a483-da9e169617c4
+spring.cloud.nacos.config.namespace=46f06363-b9d6-46f0-9cd7-7b33dcf26bb0
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}