Browse Source

Merge branch 'vip_course_adjust' into err_data_export

Joburgess 4 years ago
parent
commit
cbf0acbbfe
100 changed files with 3340 additions and 470 deletions
  1. 2 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/AuthorizationServerConfig.java
  2. 35 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomAuthenticationKeyGenerator.java
  3. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayDegreeDetailDao.java
  4. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayDegreeInfoDao.java
  5. 39 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayReserveDao.java
  6. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  7. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CooperationOrganDao.java
  8. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  9. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java
  10. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupDao.java
  11. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ImGroupMemberDao.java
  12. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/IndexBaseMonthDataDao.java
  13. 21 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  14. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ReplacementInstrumentActivityDao.java
  15. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java
  16. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  17. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  18. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenDayDetailDto.java
  19. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenDayMsgDto.java
  20. 112 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenStatisticsDetailDto.java
  21. 60 10
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenStatisticsDto.java
  22. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreePayDto.java
  23. 140 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkCardDto.java
  24. 90 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkStatDto.java
  25. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java
  26. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ReplacementInstrumentActivityStatDto.java
  27. 232 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayDegreeInfo.java
  28. 46 31
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayReserve.java
  29. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CooperationOrgan.java
  30. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java
  31. 62 18
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OrganizationDegreeCourseFee.java
  32. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/School.java
  33. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroupActivity.java
  34. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EmployeeRoleEnum.java
  35. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  36. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  37. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderDetailTypeEnum.java
  38. 44 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ChildrenReserveQueryInfo.java
  39. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CooperationOrganQueryInfo.java
  40. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseScheduleQueryInfo.java
  41. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SchoolQueryInfo.java
  42. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseHomeWorkQueryInfo.java
  43. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysExamSongQueryInfo.java
  44. 21 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayDegreeDetailService.java
  45. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayDegreeInfoService.java
  46. 27 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayReserveService.java
  47. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CooperationOrganService.java
  48. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  49. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  50. 35 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ImGroupMemberService.java
  51. 15 4
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentCourseHomeworkService.java
  52. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  53. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreAccompanimentService.java
  54. 47 60
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayDegreeDetailServiceImpl.java
  55. 75 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayDegreeInfoServiceImpl.java
  56. 173 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java
  57. 26 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  58. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  59. 29 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java
  60. 125 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CooperationOrganServiceImpl.java
  61. 10 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  62. 55 40
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java
  63. 43 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java
  64. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  65. 91 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ImGroupMemberServiceImpl.java
  66. 34 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  67. 96 22
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  68. 26 14
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java
  69. 37 50
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundServiceImpl.java
  70. 139 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  71. 8 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  72. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  73. 26 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  74. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  75. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  76. 38 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMusicScoreAccompanimentServiceImpl.java
  77. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  78. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  79. 13 0
      mec-biz/src/main/resources/config/mybatis/ChildrenDayDegreeDetailDao.xml
  80. 116 0
      mec-biz/src/main/resources/config/mybatis/ChildrenDayDegreeInfoDao.xml
  81. 178 10
      mec-biz/src/main/resources/config/mybatis/ChildrenDayReserveMapper.xml
  82. 30 7
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  83. 26 23
      mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml
  84. 18 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  85. 3 3
      mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml
  86. 93 1
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  87. 6 0
      mec-biz/src/main/resources/config/mybatis/ImGroupMapper.xml
  88. 13 1
      mec-biz/src/main/resources/config/mybatis/ImGroupMemberMapper.xml
  89. 27 5
      mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml
  90. 15 6
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  91. 2 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  92. 14 3
      mec-biz/src/main/resources/config/mybatis/OrganizationDegreeCourseFeeMapper.xml
  93. 8 0
      mec-biz/src/main/resources/config/mybatis/ReplacementInstrumentActivityMapper.xml
  94. 25 18
      mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml
  95. 109 2
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  96. 9 8
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  97. 21 0
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  98. 21 6
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  99. 7 16
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml
  100. 1 1
      mec-biz/src/main/resources/config/mybatis/SysMusicScoreCategoriesMapper.xml

+ 2 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/AuthorizationServerConfig.java

@@ -16,6 +16,7 @@ import org.springframework.security.oauth2.config.annotation.web.configurers.Aut
 import org.springframework.security.oauth2.provider.client.JdbcClientDetailsService;
 import org.springframework.security.oauth2.provider.token.store.redis.RedisTokenStore;
 
+import com.ym.mec.auth.core.service.CustomAuthenticationKeyGenerator;
 import com.ym.mec.auth.core.service.CustomTokenServices;
 import com.ym.mec.common.constant.CommonConstants;
 
@@ -65,6 +66,7 @@ public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdap
 	@Bean
 	public RedisTokenStore redisTokenStore() {
 		RedisTokenStore tokenStore = new RedisTokenStore(connectionFactory);
+		tokenStore.setAuthenticationKeyGenerator(new CustomAuthenticationKeyGenerator());
 		tokenStore.setPrefix(CommonConstants.OAUTH_PREFIX);
 		return tokenStore;
 	}

+ 35 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/service/CustomAuthenticationKeyGenerator.java

@@ -0,0 +1,35 @@
+package com.ym.mec.auth.core.service;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.TreeSet;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.security.oauth2.common.util.OAuth2Utils;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.security.oauth2.provider.OAuth2Request;
+import org.springframework.security.oauth2.provider.token.DefaultAuthenticationKeyGenerator;
+
+public class CustomAuthenticationKeyGenerator extends DefaultAuthenticationKeyGenerator {
+	
+	private static final String CLIENT_ID = "client_id";
+
+	private static final String SCOPE = "scope";
+
+	private static final String USERNAME = "username";
+
+	@Override
+	public String extractKey(OAuth2Authentication authentication) {
+		Map<String, String> values = new LinkedHashMap<String, String>();
+		OAuth2Request authorizationRequest = authentication.getOAuth2Request();
+		if (!authentication.isClientOnly()) {
+			values.put(USERNAME, StringUtils.substringAfter(authentication.getName(), ":"));
+		}
+		values.put(CLIENT_ID, authorizationRequest.getClientId());
+		if (authorizationRequest.getScope() != null) {
+			values.put(SCOPE, OAuth2Utils.formatParameterList(new TreeSet<String>(authorizationRequest.getScope())));
+		}
+		return generateKey(values);
+	}
+
+}

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayDegreeDetailDao.java

@@ -23,4 +23,21 @@ public interface ChildrenDayDegreeDetailDao extends BaseDAO<Integer, ChildrenDay
      * @return
      */
     int batchAdd(@Param("details") List<ChildrenDayDegreeDetail> details);
+
+    /**
+     * 跟新状态信息
+     *
+     * @param orderId
+     * @param status
+     * @return
+     */
+    int updateStatus(@Param("orderId") Long orderId, @Param("status") Integer status);
+
+
+    /**
+     * 根据订单id获取购买详情
+     * @param orderId
+     * @return
+     */
+    List<ChildrenDayDegreeDetail> getByOrderId(@Param("orderId") Long orderId);
 }

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

@@ -0,0 +1,18 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeInfo;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface ChildrenDayDegreeInfoDao extends BaseDAO<Integer, ChildrenDayDegreeInfo> {
+
+    /**
+     * 获取已缴费的用户
+     *
+     * @param userIds
+     * @return
+     */
+    List<Integer> getPayedUser(@Param("userIds") List<Integer> userIds);
+}

+ 39 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ChildrenDayReserveDao.java

@@ -1,9 +1,11 @@
 package com.ym.mec.biz.dal.dao;
 
 
+import com.ym.mec.biz.dal.dto.ChildrenDayMsgDto;
 import com.ym.mec.biz.dal.dto.ChildrenStatisticsDetailDto;
 import com.ym.mec.biz.dal.dto.ChildrenStatisticsDto;
 import com.ym.mec.biz.dal.entity.ChildrenDayReserve;
+import com.ym.mec.biz.dal.page.ChildrenReserveQueryInfo;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
@@ -14,6 +16,7 @@ public interface ChildrenDayReserveDao extends BaseDAO<Integer, ChildrenDayReser
 
     /**
      * 获取后台考级活动列表
+     *
      * @param params
      * @return
      */
@@ -21,6 +24,7 @@ public interface ChildrenDayReserveDao extends BaseDAO<Integer, ChildrenDayReser
 
     /**
      * 获取后台考级活动列表
+     *
      * @param params
      * @return
      */
@@ -28,6 +32,7 @@ public interface ChildrenDayReserveDao extends BaseDAO<Integer, ChildrenDayReser
 
     /**
      * 根据用户id获取用户预约信息
+     *
      * @param userId
      * @return
      */
@@ -35,6 +40,7 @@ public interface ChildrenDayReserveDao extends BaseDAO<Integer, ChildrenDayReser
 
     /**
      * 获取后台考级活动详情列表
+     *
      * @param params
      * @return
      */
@@ -42,8 +48,41 @@ public interface ChildrenDayReserveDao extends BaseDAO<Integer, ChildrenDayReser
 
     /**
      * 获取后台考级活动详情列表
+     *
      * @param params
      * @return
      */
     List<ChildrenStatisticsDetailDto> queryChildrenStatisticsDetail(Map<String, Object> params);
+
+    /**
+     * 统计
+     *
+     * @param params
+     * @return
+     */
+    ChildrenStatisticsDto childrenStatistics(Map<String, Object> params);
+
+    /**
+     * 导出详情
+     *
+     * @param queryInfo
+     * @return
+     */
+    List<ChildrenStatisticsDetailDto> exportStatisticsDetail(ChildrenReserveQueryInfo queryInfo);
+
+    /**
+     * 获取发送的信息的用户
+     *
+     * @param msgDtos
+     * @return
+     */
+    List<ChildrenStatisticsDetailDto> getSendMsgList(@Param("msgDtos") List<ChildrenDayMsgDto> msgDtos);
+
+
+    /**
+     * 修改发送短信的状态
+     *
+     * @param userIds
+     */
+    Integer updateSendMasStatus(@Param("userIds") List<Integer> userIds);
 }

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

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

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

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

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -428,7 +428,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
 
     List<Date> getCourseScheduleDateWithOrgan(@Param("organIds") List<Integer> organIds,
                                               @Param("month") Date month,
-                                              @Param("type") String type);
+                                              @Param("type") String type,
+                                              @Param("transactionTeacherId") Integer transactionTeacherId);
 
     /**
      * @Author: Joburgess

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
 import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
 import com.ym.mec.biz.dal.dto.StudentServiceDetailDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
@@ -7,6 +8,7 @@ import com.ym.mec.biz.dal.dto.StudentServiceHomeworkDto;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -122,4 +124,24 @@ public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, Extracur
     Set<Integer> checkStudentHaveExercisesInDateRange(@Param("startDate") String startDate,
                                                      @Param("endDate") String endDate,
                                                      @Param("studentIds") List<Integer> studentIds);
+
+
+
+    /**
+     * @describe 获取课外训练列表-教务端
+     * @author Joburgess
+     * @date 2021/5/24 0024
+     * @param params:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.EduHomeworkCardDto>
+     */
+    List<EduHomeworkCardDto> getEduHomeworkList(Map<String, Object> params);
+    int countEduHomeworkList(Map<String, Object> params);
+
+    List<EduHomeworkCardDto> countEduHomeworkStudentNumWithMusicGroup(@Param("groupIds") List<String> groupIds,
+                                                                      @Param("startTime") Date startTime,
+                                                                      @Param("endTime") Date endTime);
+
+    List<EduHomeworkCardDto> countEduHomeworkSubjectStudentNumWithMusicGroup(@Param("groupId") String groupId,
+                                                                             @Param("startTime") Date startTime,
+                                                                             @Param("endTime") Date endTime);
 }

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

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

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

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

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

@@ -10,6 +10,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.poi.ss.formula.functions.Index;
 
+import java.math.BigDecimal;
 import java.util.*;
 
 public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData> {
@@ -297,4 +298,6 @@ public interface IndexBaseMonthDataDao extends BaseDAO<Long, IndexBaseMonthData>
     int countStudentLeaveCourseList(Map<String, Object> params);
 
     List<StudentLeaveCourseDto> queryStudentLeaveCourseList(Map<String, Object> params);
+
+    List<Map<Integer, BigDecimal>> getStudentErrorLeaveNumMap(Map<String, Object> params);
 }

+ 21 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java

@@ -399,6 +399,27 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
     List<Map<Long, String>> queryEduNameMapByCourseId(@Param("courseIds") List<Long> courseIds);
 
     /**
+     * 根据合作单位获取乐团列表
+     * @param cooperationOrganId
+     * @return
+     */
+    List<MusicGroup> findByCooperationIdAndStatus(Integer cooperationOrganId);
+
+    /**
+     * 根据合作单位获取乐团列表
+     * @param cooperationOrganId
+     * @return
+     */
+    List<MusicGroup> findByCooperationId(@Param("cooperationId") Integer cooperationOrganId);
+
+    /**
+     * 批量修改乐团主管
+     * @param cooperationOrganId
+     * @param educationUserId
+     */
+    void batchUpdateEdu(@Param("cooperationOrganId") Integer cooperationOrganId, @Param("educationUserId") Integer educationUserId);
+
+    /**
      * 获取学生最新的乐团
      *
      * @param userId
@@ -406,5 +427,4 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      */
     MusicGroup getStudentLastMusicGroup(@Param("userId") Integer userId);
 
-    List<MusicGroup> findByCooperationId(@Param("cooperationId") Integer cooperationOrganId, @Param("musicStatus") String musicStatus);
 }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ReplacementInstrumentActivityDao.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import java.util.List;
 import java.util.Map;
 
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.biz.dal.dto.ReplacementInstrumentActivityStatDto;
@@ -44,6 +45,7 @@ public interface ReplacementInstrumentActivityDao extends BaseDAO<Integer, Repla
 
     /**
      * 获取问卷分页数据
+     *
      * @param params
      * @return
      */
@@ -51,8 +53,17 @@ public interface ReplacementInstrumentActivityDao extends BaseDAO<Integer, Repla
 
     /**
      * 获取问卷总条数
+     *
      * @param params
      * @return
      */
     Integer getCount(Map<String, Object> params);
+
+    /**
+     * 置换活动的订单
+     *
+     * @param ids
+     * @return
+     */
+    List<StudentPaymentOrder> getActivityOrder(@Param("ids") List<Integer> ids);
 }

+ 26 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java

@@ -7,6 +7,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -63,6 +64,7 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
      * @date 2019/10/20
      */
     List<StudentCourseHomework> findByCourseSchedule(@Param("courseScheduleId") Long courseScheduleId,
+                                                     @Param("homeworkId") Long homeworkId,
                                                      @Param("userName") String userName);
 
     /**
@@ -165,4 +167,28 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
      * @return
      */
     int getStudentCourseHomeWorksCount(Map<String, Object> params);
+
+    /**
+     * @describe 获取作业列表-教务端
+     * @author Joburgess
+     * @date 2021/5/24 0024
+     * @param params:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.EduHomeworkCardDto>
+     */
+    List<EduHomeworkCardDto> getEduCourseHomeworkList(Map<String, Object> params);
+    int countEduCourseHomeworkList(Map<String, Object> params);
+
+    /**
+     * @describe 统计指定乐团作业人次信息
+     * @author Joburgess
+     * @date 2021/5/25 0025
+     * @param groupIds:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.EduHomeworkCardDto>
+     */
+    List<EduHomeworkCardDto> countHomeworkStudentInfoWithMusicGroup(@Param("groupIds") List<String> groupIds,
+                                                                    @Param("startTime") Date startTime,
+                                                                    @Param("endTime") Date endTime);
+    List<EduHomeworkCardDto> countHomeworkSubjectStudentInfoWithMusicGroup(@Param("groupId") String groupId,
+                                                                           @Param("startTime") Date startTime,
+                                                                           @Param("endTime") Date endTime);
 }

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

@@ -25,6 +25,8 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
 
     SysUser lockUserReturnInfo(@Param("userId") Integer userId);
 
+    SysUser getUser(@Param("userId") Integer userId);
+
     List<SysUser> findStudents(Map<String, Object> params);
 
     int countStudents(Map<String, Object> params);
@@ -202,4 +204,21 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      * @return java.util.List<com.ym.mec.biz.dal.entity.Student>
      */
     List<Student> getNoTeacherOrNoSubjectStudent();
+
+    /**
+     * @describe 从新学员中找出有VIP课的学员编号
+     * @author Joburgess
+     * @date 2021/6/3 0003
+     * @return java.util.List<java.lang.Integer>
+     */
+    List<Integer> getHasVipCourseStudentIdsFromNewStudents();
+
+    /**
+     * @describe 将指定学员更新为老学员
+     * @author Joburgess
+     * @date 2021/6/3 0003
+     * @param userIds:
+     * @return int
+     */
+    int updateNewStudentsToOld(@Param("userIds") List<Integer> userIds);
 }

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

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.Subject;
 
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.auth.api.entity.SysUser;
@@ -525,4 +526,14 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     int quitAllStudent(@Param("musicGroupId") String musicGroupId, @Param("remark") String remark);
+
+    /**
+     * @describe 获取指定乐团中的注册学员
+     * @author Joburgess
+     * @date 2021/5/24 0024
+     * @param groupIds:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.StudentRegistration>
+     */
+    List<StudentRegistration> findByMusicGroupIds(@Param("groupIds") List<String> groupIds,
+                                                  @Param("musicGroupStatus") StudentMusicGroupStatusEnum musicGroupStatus);
 }

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenDayDetailDto.java

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.List;
+
+public class ChildrenDayDetailDto {
+
+    @ApiModelProperty(value = "用户信息", required = false)
+    private SysUser user;
+
+    @ApiModelProperty(value = "声部id", required = false)
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "购买信息详情", required = false)
+    private List<ChildrenDayDegreeDetail> childrenDayDegreeDetails;
+
+    public SysUser getUser() {
+        return user;
+    }
+
+    public void setUser(SysUser user) {
+        this.user = user;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public List<ChildrenDayDegreeDetail> getChildrenDayDegreeDetails() {
+        return childrenDayDegreeDetails;
+    }
+
+    public void setChildrenDayDegreeDetails(List<ChildrenDayDegreeDetail> childrenDayDegreeDetails) {
+        this.childrenDayDegreeDetails = childrenDayDegreeDetails;
+    }
+}

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenDayMsgDto.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+
+public class ChildrenDayMsgDto {
+
+    @ApiModelProperty(value = "分部id", required = false)
+    private Integer organId;
+
+    @ApiModelProperty(value = "乐团id", required = false)
+    private String musicGroupId;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+}

+ 112 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenStatisticsDetailDto.java

@@ -1,6 +1,18 @@
 package com.ym.mec.biz.dal.dto;
 
+import java.math.BigDecimal;
+
 public class ChildrenStatisticsDetailDto {
+    private String organName;
+
+    private String cooperationOrganName;
+
+    private String musicGroupName;
+
+    private String currentClass;
+
+    private String realName;
+
     private String username;
 
     private String phone;
@@ -9,6 +21,106 @@ public class ChildrenStatisticsDetailDto {
 
     private boolean isReserve = false;
 
+    private String subjectName;
+
+    private String theoryLevel;
+
+    private String gradeLeave;
+
+    private boolean buyVipFlag = false;
+
+    private boolean buyTheoryCourseFlag = false;
+
+    private BigDecimal totalAmount = BigDecimal.ZERO;
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getCooperationOrganName() {
+        return cooperationOrganName;
+    }
+
+    public void setCooperationOrganName(String cooperationOrganName) {
+        this.cooperationOrganName = cooperationOrganName;
+    }
+
+    public String getMusicGroupName() {
+        return musicGroupName;
+    }
+
+    public void setMusicGroupName(String musicGroupName) {
+        this.musicGroupName = musicGroupName;
+    }
+
+    public String getCurrentClass() {
+        return currentClass;
+    }
+
+    public void setCurrentClass(String currentClass) {
+        this.currentClass = currentClass;
+    }
+
+    public String getRealName() {
+        return realName;
+    }
+
+    public void setRealName(String realName) {
+        this.realName = realName;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getTheoryLevel() {
+        return theoryLevel;
+    }
+
+    public void setTheoryLevel(String theoryLevel) {
+        this.theoryLevel = theoryLevel;
+    }
+
+    public String getGradeLeave() {
+        return gradeLeave;
+    }
+
+    public void setGradeLeave(String gradeLeave) {
+        this.gradeLeave = gradeLeave;
+    }
+
+    public boolean isBuyVipFlag() {
+        return buyVipFlag;
+    }
+
+    public void setBuyVipFlag(boolean buyVipFlag) {
+        this.buyVipFlag = buyVipFlag;
+    }
+
+    public boolean isBuyTheoryCourseFlag() {
+        return buyTheoryCourseFlag;
+    }
+
+    public void setBuyTheoryCourseFlag(boolean buyTheoryCourseFlag) {
+        this.buyTheoryCourseFlag = buyTheoryCourseFlag;
+    }
+
+    public BigDecimal getTotalAmount() {
+        return totalAmount;
+    }
+
+    public void setTotalAmount(BigDecimal totalAmount) {
+        this.totalAmount = totalAmount;
+    }
+
     public String getPhone() {
         return phone;
     }

+ 60 - 10
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ChildrenStatisticsDto.java

@@ -26,14 +26,40 @@ public class ChildrenStatisticsDto {
 
     private Integer musicTheoryNum = 0;
 
-    private Integer buyVipNum = 0;
+    private Integer buyVip1Num = 0;
 
-    private BigDecimal buyVipAmount = BigDecimal.ZERO;
+    private BigDecimal buyVip1Amount = BigDecimal.ZERO;
+
+    private Integer buyVip2Num = 0;
+
+    private BigDecimal buyVip2Amount = BigDecimal.ZERO;
 
     private Integer buyMusicTheoryNum = 0;
 
     private BigDecimal buyMusicTheoryAmount = BigDecimal.ZERO;
 
+    private BigDecimal theoryPrice = BigDecimal.ZERO;
+
+    private BigDecimal gradePrice = BigDecimal.ZERO;
+
+    private BigDecimal totalAmount = BigDecimal.ZERO;
+
+    public BigDecimal getTheoryPrice() {
+        return theoryPrice;
+    }
+
+    public void setTheoryPrice(BigDecimal theoryPrice) {
+        this.theoryPrice = theoryPrice;
+    }
+
+    public BigDecimal getGradePrice() {
+        return gradePrice;
+    }
+
+    public void setGradePrice(BigDecimal gradePrice) {
+        this.gradePrice = gradePrice;
+    }
+
     public Integer getOrganId() {
         return organId;
     }
@@ -122,20 +148,44 @@ public class ChildrenStatisticsDto {
         this.musicTheoryNum = musicTheoryNum;
     }
 
-    public Integer getBuyVipNum() {
-        return buyVipNum;
+    public Integer getBuyVip1Num() {
+        return buyVip1Num;
+    }
+
+    public void setBuyVip1Num(Integer buyVip1Num) {
+        this.buyVip1Num = buyVip1Num;
+    }
+
+    public BigDecimal getBuyVip1Amount() {
+        return buyVip1Amount;
+    }
+
+    public void setBuyVip1Amount(BigDecimal buyVip1Amount) {
+        this.buyVip1Amount = buyVip1Amount;
+    }
+
+    public Integer getBuyVip2Num() {
+        return buyVip2Num;
+    }
+
+    public void setBuyVip2Num(Integer buyVip2Num) {
+        this.buyVip2Num = buyVip2Num;
+    }
+
+    public BigDecimal getBuyVip2Amount() {
+        return buyVip2Amount;
     }
 
-    public void setBuyVipNum(Integer buyVipNum) {
-        this.buyVipNum = buyVipNum;
+    public void setBuyVip2Amount(BigDecimal buyVip2Amount) {
+        this.buyVip2Amount = buyVip2Amount;
     }
 
-    public BigDecimal getBuyVipAmount() {
-        return buyVipAmount;
+    public BigDecimal getTotalAmount() {
+        return totalAmount;
     }
 
-    public void setBuyVipAmount(BigDecimal buyVipAmount) {
-        this.buyVipAmount = buyVipAmount;
+    public void setTotalAmount(BigDecimal totalAmount) {
+        this.totalAmount = totalAmount;
     }
 
     public Integer getBuyMusicTheoryNum() {

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/DegreePayDto.java

@@ -16,6 +16,9 @@ public class DegreePayDto {
     @ApiModelProperty(value = "器乐考级等级")
     private Integer musicGradeLevel;
 
+    @ApiModelProperty(value = "报考器乐等级必须购Vip课")
+    private Boolean needVipCourse = false;
+
     @ApiModelProperty(value = "乐理等级")
     private Integer theoryLevel;
 
@@ -154,4 +157,12 @@ public class DegreePayDto {
     public void setReserveId(Integer reserveId) {
         this.reserveId = reserveId;
     }
+
+    public Boolean getNeedVipCourse() {
+        return needVipCourse;
+    }
+
+    public void setNeedVipCourse(Boolean needVipCourse) {
+        this.needVipCourse = needVipCourse;
+    }
 }

+ 140 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkCardDto.java

@@ -0,0 +1,140 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/5/24 0024
+ */
+public class EduHomeworkCardDto {
+
+    private String groupId;
+
+    private Integer subjectId;
+
+    private Long courseId;
+
+    private Long homeworkId;
+
+    private String content;
+
+    private String courseName;
+
+    private Date courseStartTime;
+
+    private Integer teacherId;
+
+    private String teacherName;
+
+    private Integer exceptStudentNum;
+
+    private Integer submitStudentNum;
+
+    private Integer repliedStudentNum;
+
+    private Date createTime;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getHomeworkId() {
+        return homeworkId;
+    }
+
+    public void setHomeworkId(Long homeworkId) {
+        this.homeworkId = homeworkId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public Date getCourseStartTime() {
+        return courseStartTime;
+    }
+
+    public void setCourseStartTime(Date courseStartTime) {
+        this.courseStartTime = courseStartTime;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public Integer getExceptStudentNum() {
+        return exceptStudentNum;
+    }
+
+    public void setExceptStudentNum(Integer exceptStudentNum) {
+        this.exceptStudentNum = exceptStudentNum;
+    }
+
+    public Integer getSubmitStudentNum() {
+        return submitStudentNum;
+    }
+
+    public void setSubmitStudentNum(Integer submitStudentNum) {
+        this.submitStudentNum = submitStudentNum;
+    }
+
+    public Integer getRepliedStudentNum() {
+        return repliedStudentNum;
+    }
+
+    public void setRepliedStudentNum(Integer repliedStudentNum) {
+        this.repliedStudentNum = repliedStudentNum;
+    }
+}

+ 90 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkStatDto.java

@@ -0,0 +1,90 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.Valid;
+import java.math.BigDecimal;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/5/24 0024
+ */
+public class EduHomeworkStatDto {
+
+    @ApiModelProperty(value = "课程组编号")
+    private String groupId;
+
+    @ApiModelProperty(value = "课程组名称")
+    private String groupName;
+
+    @ApiModelProperty(value = "声部")
+    private String subjectName;
+
+    @ApiModelProperty(value = "乐团人数")
+    private int groupStudentNum;
+
+    @ApiModelProperty(value = "作业人次")
+    private int exceptStudentNum;
+
+    @ApiModelProperty(value = "提交人次")
+    private int submitStudentNum;
+
+    @ApiModelProperty(value = "提交率")
+    private BigDecimal submitRate = BigDecimal.ZERO;
+
+    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 String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public int getExceptStudentNum() {
+        return exceptStudentNum;
+    }
+
+    public void setExceptStudentNum(int exceptStudentNum) {
+        this.exceptStudentNum = exceptStudentNum;
+    }
+
+    public int getSubmitStudentNum() {
+        return submitStudentNum;
+    }
+
+    public void setSubmitStudentNum(int submitStudentNum) {
+        this.submitStudentNum = submitStudentNum;
+    }
+
+    public int getGroupStudentNum() {
+        return groupStudentNum;
+    }
+
+    public void setGroupStudentNum(int groupStudentNum) {
+        this.groupStudentNum = groupStudentNum;
+    }
+
+    public BigDecimal getSubmitRate() {
+        return submitRate;
+    }
+
+    public void setSubmitRate(BigDecimal submitRate) {
+        this.submitRate = submitRate;
+    }
+}

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

@@ -23,6 +23,8 @@ public class ExtraExerciseStudentsDto extends ExtracurricularExercisesReply {
 
     private String content;
 
+    private String phone;
+
     private java.util.Date expireDate;
 
     private String statusStr;
@@ -43,6 +45,14 @@ public class ExtraExerciseStudentsDto extends ExtracurricularExercisesReply {
         this.headUrl = headUrl;
     }
 
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
     public String getIsRepliedTimelyStr() {
         return isRepliedTimelyStr;
     }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ReplacementInstrumentActivityStatDto.java

@@ -41,6 +41,12 @@ public class ReplacementInstrumentActivityStatDto extends ReplacementInstrumentA
     @ApiModelProperty(value="是否有置换乐器")
     private String hasInstrumentsId;
 
+    @ApiModelProperty(value="现金支付金额")
+    private BigDecimal actualAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value="余额支付")
+    private BigDecimal balance = BigDecimal.ZERO;
+
     public String getTitle() {
         return title;
     }
@@ -136,4 +142,20 @@ public class ReplacementInstrumentActivityStatDto extends ReplacementInstrumentA
     public void setHasYesFirstAnswer(String hasYesFirstAnswer) {
         this.hasYesFirstAnswer = hasYesFirstAnswer;
     }
+
+    public BigDecimal getActualAmount() {
+        return actualAmount;
+    }
+
+    public void setActualAmount(BigDecimal actualAmount) {
+        this.actualAmount = actualAmount;
+    }
+
+    public BigDecimal getBalance() {
+        return balance;
+    }
+
+    public void setBalance(BigDecimal balance) {
+        this.balance = balance;
+    }
 }

+ 232 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayDegreeInfo.java

@@ -0,0 +1,232 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@ApiModel(value = "com-domain-ChildrenDayDegreeInfo")
+public class ChildrenDayDegreeInfo {
+    @ApiModelProperty(value = "")
+    private Integer id;
+
+    /**
+     * 预约id
+     */
+    @ApiModelProperty(value = "预约id")
+    private Integer reserveId;
+
+    /**
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id")
+    private Integer userId;
+
+    /**
+     * 声部id
+     */
+    @ApiModelProperty(value = "声部id")
+    private Integer subjectId;
+
+    /**
+     * 器乐等级
+     */
+    @ApiModelProperty(value = "器乐等级")
+    private Integer gradeLevel;
+
+    /**
+     * 器乐支付金额
+     */
+    @ApiModelProperty(value = "器乐支付金额")
+    private BigDecimal gradePrice = BigDecimal.ZERO;
+
+    /**
+     * 乐理等级
+     */
+    @ApiModelProperty(value = "乐理等级")
+    private Integer theoryLevel;
+
+    /**
+     * 乐理支付金额
+     */
+    @ApiModelProperty(value = "乐理支付金额")
+    private BigDecimal theoryPrice = BigDecimal.ZERO;
+
+    /**
+     * vip 1v1支付价格
+     */
+    @ApiModelProperty(value = "vip 1v1支付价格")
+    private BigDecimal vip1v1Price = BigDecimal.ZERO;
+
+    /**
+     * vip 1v2支付价格
+     */
+    @ApiModelProperty(value = "vip 1v2支付价格")
+    private BigDecimal vip1v2Price = BigDecimal.ZERO;
+
+    /**
+     * 乐理课支付价格
+     */
+    @ApiModelProperty(value = "乐理课支付价格")
+    private BigDecimal theoryCoursePrice = BigDecimal.ZERO;
+
+    /**
+     * 支付总金额
+     */
+    @ApiModelProperty(value = "支付总金额")
+    private BigDecimal totalAmount = BigDecimal.ZERO;
+
+    @ApiModelProperty(value = "订单编号")
+    private Long orderId;
+
+    @ApiModelProperty(value = "")
+    private Date createTime;
+
+    @ApiModelProperty(value = "")
+    private Date updateTime;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getReserveId() {
+        return reserveId;
+    }
+
+    public void setReserveId(Integer reserveId) {
+        this.reserveId = reserveId;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public Integer getGradeLevel() {
+        return gradeLevel;
+    }
+
+    public void setGradeLevel(Integer gradeLevel) {
+        this.gradeLevel = gradeLevel;
+    }
+
+    public BigDecimal getGradePrice() {
+        return gradePrice;
+    }
+
+    public void setGradePrice(BigDecimal gradePrice) {
+        this.gradePrice = gradePrice;
+    }
+
+    public Integer getTheoryLevel() {
+        return theoryLevel;
+    }
+
+    public void setTheoryLevel(Integer theoryLevel) {
+        this.theoryLevel = theoryLevel;
+    }
+
+    public BigDecimal getTheoryPrice() {
+        return theoryPrice;
+    }
+
+    public void setTheoryPrice(BigDecimal theoryPrice) {
+        this.theoryPrice = theoryPrice;
+    }
+
+    public BigDecimal getVip1v1Price() {
+        return vip1v1Price;
+    }
+
+    public void setVip1v1Price(BigDecimal vip1v1Price) {
+        this.vip1v1Price = vip1v1Price;
+    }
+
+    public BigDecimal getVip1v2Price() {
+        return vip1v2Price;
+    }
+
+    public void setVip1v2Price(BigDecimal vip1v2Price) {
+        this.vip1v2Price = vip1v2Price;
+    }
+
+    public BigDecimal getTheoryCoursePrice() {
+        return theoryCoursePrice;
+    }
+
+    public void setTheoryCoursePrice(BigDecimal theoryCoursePrice) {
+        this.theoryCoursePrice = theoryCoursePrice;
+    }
+
+    public BigDecimal getTotalAmount() {
+        return totalAmount;
+    }
+
+    public void setTotalAmount(BigDecimal totalAmount) {
+        this.totalAmount = totalAmount;
+    }
+
+    public Long getOrderId() {
+        return orderId;
+    }
+
+    public void setOrderId(Long orderId) {
+        this.orderId = orderId;
+    }
+
+    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;
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getClass().getSimpleName());
+        sb.append(" [");
+        sb.append("Hash = ").append(hashCode());
+        sb.append(", id=").append(id);
+        sb.append(", reserveId=").append(reserveId);
+        sb.append(", userId=").append(userId);
+        sb.append(", subjectId=").append(subjectId);
+        sb.append(", gradeLevel=").append(gradeLevel);
+        sb.append(", gradePrice=").append(gradePrice);
+        sb.append(", theoryLevel=").append(theoryLevel);
+        sb.append(", theoryPrice=").append(theoryPrice);
+        sb.append(", vip1v1Price=").append(vip1v1Price);
+        sb.append(", vip1v2Price=").append(vip1v2Price);
+        sb.append(", theoryCoursePrice=").append(theoryCoursePrice);
+        sb.append(", totalAmount=").append(totalAmount);
+        sb.append(", createTime=").append(createTime);
+        sb.append(", updateTime=").append(updateTime);
+        sb.append("]");
+        return sb.toString();
+    }
+}

+ 46 - 31
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ChildrenDayReserve.java

@@ -3,53 +3,60 @@ package com.ym.mec.biz.dal.entity;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+
 import java.util.Date;
 
-@ApiModel(value="com-domain-ChildrenDayReserve")
+@ApiModel(value = "com-domain-ChildrenDayReserve")
 public class ChildrenDayReserve {
-    @ApiModelProperty(value="")
+    @ApiModelProperty(value = "")
     private Integer id;
 
     /**
-    * 用户id
-    */
-    @ApiModelProperty(value="用户id")
+     * 用户id
+     */
+    @ApiModelProperty(value = "用户id")
     private Integer userId;
 
     /**
-    * 分部id
-    */
-    @ApiModelProperty(value="分部id")
+     * 分部id
+     */
+    @ApiModelProperty(value = "分部id")
     private Integer organId;
 
     /**
-    * 合作单位id
-    */
-    @ApiModelProperty(value="合作单位id")
+     * 合作单位id
+     */
+    @ApiModelProperty(value = "合作单位id")
     private Integer cooperationOrganId;
 
     /**
-    * 乐团id
-    */
-    @ApiModelProperty(value="乐团id")
+     * 乐团id
+     */
+    @ApiModelProperty(value = "乐团id")
     private String musicGroupId;
 
     /**
-    * 是否预约 0-否 1-是
-    */
-    @ApiModelProperty(value="是否预约 0-否 1-是")
+     * 是否预约 0-否 1-是
+     */
+    @ApiModelProperty(value = "是否预约 0-否 1-是")
     private YesOrNoEnum isReserve;
 
     /**
-    * 创建时间
-    */
-    @ApiModelProperty(value="创建时间")
+     * 是否已发短信 0-否 1-是
+     */
+    @ApiModelProperty(value = "是否已发短信 0-否 1-是")
+    private YesOrNoEnum isSendMsg = YesOrNoEnum.NO;
+
+    /**
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
     private Date createTime;
 
     /**
-    * 更新时间
-    */
-    @ApiModelProperty(value="更新时间")
+     * 更新时间
+     */
+    @ApiModelProperty(value = "更新时间")
     private Date updateTime;
 
     @ApiModelProperty(value = "当前的缴费状态 0-正常 1-缴费中")
@@ -103,6 +110,22 @@ public class ChildrenDayReserve {
         this.isReserve = isReserve;
     }
 
+    public Integer getPayStatus() {
+        return payStatus;
+    }
+
+    public void setPayStatus(Integer payStatus) {
+        this.payStatus = payStatus;
+    }
+
+    public YesOrNoEnum getIsSendMsg() {
+        return isSendMsg;
+    }
+
+    public void setIsSendMsg(YesOrNoEnum isSendMsg) {
+        this.isSendMsg = isSendMsg;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }
@@ -136,12 +159,4 @@ public class ChildrenDayReserve {
         sb.append("]");
         return sb.toString();
     }
-
-    public Integer getPayStatus() {
-        return payStatus;
-    }
-
-    public void setPayStatus(Integer payStatus) {
-        this.payStatus = payStatus;
-    }
 }

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CooperationOrgan.java

@@ -34,6 +34,12 @@ public class CooperationOrgan {
 	/**  */
 	private Integer id;
 
+	/**  */
+	private Integer educationUserId;
+
+	/**  */
+	private String realName;
+
 	/** 单位名称 */
 	@ApiModelProperty(value = "班级编号", required = false)
 	private String name;
@@ -75,6 +81,22 @@ public class CooperationOrgan {
 	@ApiModelProperty(value = "是否全职资源",required = false)
 	private Integer fullJobResource;
 
+	public String getRealName() {
+		return realName;
+	}
+
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+
+	public Integer getEducationUserId() {
+		return educationUserId;
+	}
+
+	public void setEducationUserId(Integer educationUserId) {
+		this.educationUserId = educationUserId;
+	}
+
 	public Integer getFullJobResource() {
 		return fullJobResource;
 	}

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java

@@ -64,6 +64,12 @@ public class MusicGroup {
 	/** 教务老师 */
 	@ApiModelProperty(value = "教务老师编号",required = false)
 	private Integer educationalTeacherId;
+
+	@ApiModelProperty(value = "衔接老师名字",required = false)
+	private String transactionTeacherName;
+
+	@ApiModelProperty(value = "衔接老师编号",required = false)
+	private Integer transactionTeacherId;
 	
 	/** 收费类型 */
 	@ApiModelProperty(value = "收费类型",required = false)
@@ -177,6 +183,22 @@ public class MusicGroup {
 	@ApiModelProperty(value = "进行中,缴费按钮控制",required = true)
 	private Boolean isRemedy = false;
 
+	public String getTransactionTeacherName() {
+		return transactionTeacherName;
+	}
+
+	public void setTransactionTeacherName(String transactionTeacherName) {
+		this.transactionTeacherName = transactionTeacherName;
+	}
+
+	public Integer getTransactionTeacherId() {
+		return transactionTeacherId;
+	}
+
+	public void setTransactionTeacherId(Integer transactionTeacherId) {
+		this.transactionTeacherId = transactionTeacherId;
+	}
+
 	public String getRepairUserName() {
 		return repairUserName;
 	}

+ 62 - 18
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/OrganizationDegreeCourseFee.java

@@ -2,48 +2,67 @@ package com.ym.mec.biz.dal.entity;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
+
 import java.math.BigDecimal;
 import java.util.Date;
 
-@ApiModel(value="com-domain-OrganizationDegreeCourseFee")
+@ApiModel(value = "com-domain-OrganizationDegreeCourseFee")
 public class OrganizationDegreeCourseFee {
-    @ApiModelProperty(value="")
+    @ApiModelProperty(value = "")
     private Integer id;
 
     /**
-    * 分部id
-    */
-    @ApiModelProperty(value="分部id")
+     * 分部id
+     */
+    @ApiModelProperty(value = "分部id")
     private Integer organId;
 
     /**
-    * vip 1v1课价格
-    */
-    @ApiModelProperty(value="vip 1v1课价格")
+     * vip 1v1课原价格
+     */
+    @ApiModelProperty(value = "vip 1v1课原价格")
+    private BigDecimal originalVip1v1;
+
+    /**
+     * vip 1v2课原价格
+     */
+    @ApiModelProperty(value = "vip 1v2课原价格")
+    private BigDecimal originalVip1v2;
+
+    /**
+     * vip 1v1课价格
+     */
+    @ApiModelProperty(value = "vip 1v1课价格")
     private BigDecimal vip1v1;
 
     /**
      * vip 1v2课价格
      */
-    @ApiModelProperty(value="vip 1v2课价格")
+    @ApiModelProperty(value = "vip 1v2课价格")
     private BigDecimal vip1v2;
 
     /**
-    * 乐理课价格
-    */
-    @ApiModelProperty(value="乐理课价格")
+     * 乐理课原价格
+     */
+    @ApiModelProperty(value = "乐理课价格")
+    private BigDecimal originalTheory;
+
+    /**
+     * 乐理课价格
+     */
+    @ApiModelProperty(value = "乐理课价格")
     private BigDecimal theory;
 
     /**
-    * 创建时间
-    */
-    @ApiModelProperty(value="创建时间")
+     * 创建时间
+     */
+    @ApiModelProperty(value = "创建时间")
     private Date createTime;
 
     /**
-    * 修改时间
-    */
-    @ApiModelProperty(value="修改时间")
+     * 修改时间
+     */
+    @ApiModelProperty(value = "修改时间")
     private Date updateTime;
 
     public Integer getId() {
@@ -86,6 +105,31 @@ public class OrganizationDegreeCourseFee {
         this.theory = theory;
     }
 
+
+    public BigDecimal getOriginalVip1v1() {
+        return originalVip1v1;
+    }
+
+    public void setOriginalVip1v1(BigDecimal originalVip1v1) {
+        this.originalVip1v1 = originalVip1v1;
+    }
+
+    public BigDecimal getOriginalVip1v2() {
+        return originalVip1v2;
+    }
+
+    public void setOriginalVip1v2(BigDecimal originalVip1v2) {
+        this.originalVip1v2 = originalVip1v2;
+    }
+
+    public BigDecimal getOriginalTheory() {
+        return originalTheory;
+    }
+
+    public void setOriginalTheory(BigDecimal originalTheory) {
+        this.originalTheory = originalTheory;
+    }
+
     public Date getCreateTime() {
         return createTime;
     }

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

@@ -16,6 +16,8 @@ public class School {
 	
 	private Integer userId;
 
+	private String realName;
+
 	/**  */
 	@ApiModelProperty(value = "学校名称", required = false)
 	private String name;
@@ -62,6 +64,14 @@ public class School {
 	@ApiModelProperty(value = "备注", required = false)
 	private String remark;
 
+	public String getRealName() {
+		return realName;
+	}
+
+	public void setRealName(String realName) {
+		this.realName = realName;
+	}
+
 	public String getOrganName() {
 		return organName;
 	}

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

@@ -89,6 +89,17 @@ public class VipGroupActivity {
 	@ApiModelProperty(value = "每位学员最大使用次数")
 	private Integer studentMaxUsedTimes;
 
+	@ApiModelProperty(value = "适用学生类型:-1:所有;0:老用户;1:新用户")
+	private int  applyToStudentType = -1;
+
+	public int getApplyToStudentType() {
+		return applyToStudentType;
+	}
+
+	public void setApplyToStudentType(int applyToStudentType) {
+		this.applyToStudentType = applyToStudentType;
+	}
+
 	public Integer getMinCourseNum() {
 		return minCourseNum;
 	}

+ 3 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EmployeeRoleEnum.java

@@ -6,7 +6,9 @@ import com.ym.mec.common.enums.BaseEnum;
  * 员工角色枚举
  */
 public enum EmployeeRoleEnum implements BaseEnum<String, EmployeeRoleEnum> {
-	TEAM_TEACHER("TEAM_TEACHER", "运营主管"), EDUCATION("EDUCATION", "乐团主管");
+	TEAM_TEACHER("TEAM_TEACHER", "运营主管"),
+	TRANSACTION("TRANSACTION", "衔接老师"),
+	EDUCATION("EDUCATION", "乐团主管");
 
 	private String code;
 

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

@@ -16,6 +16,7 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     //运营数据类型
     SCHOOL("SCHOOL","合作单位", false, false),
     PROGRESS_MUSIC_GROUP_NUM("PROGRESS_MUSIC_GROUP_NUM","进行中乐团", false, false),
+    TRANSACTION_TEACHER_NUM("TRANSACTION_TEACHER_NUM", "衔接老师人数", false, false),
 
     //人事数据
     TEACHER_NUM("TEACHER_NUM","老师总数", false, false),

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

@@ -23,6 +23,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     STUDENT_PUSH_HAVE_COURSE_MESSAGE("STUDENT_PUSH_HAVE_COURSE_MESSAGE", "有课提醒"),
     STUDENT_PUSH_ONLINE_COURSE_ACTION("STUDENT_PUSH_ONLINE_COURSE_ACTION", "线上课开始"),
     STUDENT_PUSH_NAMES_ACHIEVE("STUDENT_PUSH_NAMES_ACHIEVE", "点名完成"),
+    SYSTEM_PUSH_NAMES_ACHIEVE("SYSTEM_PUSH_NAMES_ACHIEVE", "点名完成"),
 //    SCHEDULE_CHANGE("SCHEDULE_CHANGE", "课表变动"),
 //    STUDENT_SMS_TEACHING_SCHOOL_CHANGE("STUDENT_SMS_TEACHING_SCHOOL_CHANGE", "教学点变动"),
     STUDENT_PUSH_JOB_MESSAGE("STUDENT_PUSH_JOB_MESSAGE", "作业提醒"),
@@ -169,7 +170,9 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     BACKSTAGE_STUDENT_APPLY_QUIT_GROUP("BACKSTAGE_STUDENT_APPLY_QUIT_GROUP", "学员申请退团"),
 
     BACKSTAGE_STUDENT_APPLY_QUIT_COURSE("BACKSTAGE_STUDENT_APPLY_QUIT_COURSE", "学员申请退课"),
-    BACKSTAGE_STUDENT_APPLY_WITHDRAW("BACKSTAGE_STUDENT_APPLY_WITHDRAW", "学员申请提现");
+    BACKSTAGE_STUDENT_APPLY_WITHDRAW("BACKSTAGE_STUDENT_APPLY_WITHDRAW", "学员申请提现"),
+    CHILDREN_DAY_NOTICE_PUSH("CHILDREN_DAY_NOTICE_PUSH", "技能评测考级报名推送"),
+    CHILDREN_DAY_NOTICE_MSG("CHILDREN_DAY_NOTICE_MSG", "技能评测考级报名短信");
 
     MessageTypeEnum(String code, String msg) {
         this.code = code;

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

@@ -27,7 +27,8 @@ public enum OrderDetailTypeEnum implements BaseEnum<String, OrderDetailTypeEnum>
 	DEGREE_REGISTRATION("DEGREE_REGISTRATION", "考级报名"),
     MAINTENANCE("MAINTENANCE","乐保服务"),
     CLOUD_TEACHER("CLOUD_TEACHER","云教练"),
-    CLOUD_TEACHER_PLUS("CLOUD_TEACHER_PLUS","云教练+");
+    CLOUD_TEACHER_PLUS("CLOUD_TEACHER_PLUS","云教练+"),
+    THEORY_COURSE("THEORY_COURSE", "乐理课");
 
     private String code;
 

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

@@ -14,6 +14,50 @@ public class ChildrenReserveQueryInfo extends QueryInfo {
 
     private Integer subjectId;
 
+    //是否参加器乐
+    private Integer gradeFlag;
+
+    //是否参加乐理
+    private Integer theoryFlag;
+
+    //是否购买VIP
+    private Integer vipFlag;
+
+    //是否购买乐理课
+    private Integer theoryPriceFlag;
+
+    public Integer getGradeFlag() {
+        return gradeFlag;
+    }
+
+    public void setGradeFlag(Integer gradeFlag) {
+        this.gradeFlag = gradeFlag;
+    }
+
+    public Integer getTheoryFlag() {
+        return theoryFlag;
+    }
+
+    public void setTheoryFlag(Integer theoryFlag) {
+        this.theoryFlag = theoryFlag;
+    }
+
+    public Integer getVipFlag() {
+        return vipFlag;
+    }
+
+    public void setVipFlag(Integer vipFlag) {
+        this.vipFlag = vipFlag;
+    }
+
+    public Integer getTheoryPriceFlag() {
+        return theoryPriceFlag;
+    }
+
+    public void setTheoryPriceFlag(Integer theoryPriceFlag) {
+        this.theoryPriceFlag = theoryPriceFlag;
+    }
+
     public Integer getIsReserve() {
         return isReserve;
     }

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

@@ -10,6 +10,16 @@ public class CooperationOrganQueryInfo extends QueryInfo {
 
     private Integer fullJobResource;
 
+    private Integer educationUserId;
+
+	public Integer getEducationUserId() {
+		return educationUserId;
+	}
+
+	public void setEducationUserId(Integer educationUserId) {
+		this.educationUserId = educationUserId;
+	}
+
 	public Integer getFullJobResource() {
 		return fullJobResource;
 	}

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseScheduleQueryInfo.java

@@ -48,6 +48,17 @@ public class CourseScheduleQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "结束上课日期")
     private String endClassDate;
 
+    @ApiModelProperty(value = "衔接老师编号")
+    private Integer transactionTeacherId;
+
+    public Integer getTransactionTeacherId() {
+        return transactionTeacherId;
+    }
+
+    public void setTransactionTeacherId(Integer transactionTeacherId) {
+        this.transactionTeacherId = transactionTeacherId;
+    }
+
     public CourseStatusEnum getStatus() {
         return status;
     }

+ 11 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/SchoolQueryInfo.java

@@ -10,6 +10,17 @@ public class SchoolQueryInfo extends QueryInfo {
     
     private String organId;
 
+    //是否公共
+    private Integer publicFlag;
+
+    public Integer getPublicFlag() {
+        return publicFlag;
+    }
+
+    public void setPublicFlag(Integer publicFlag) {
+        this.publicFlag = publicFlag;
+    }
+
     public Integer getCooperationOrganId() {
         return cooperationOrganId;
     }

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseHomeWorkQueryInfo.java

@@ -11,6 +11,15 @@ public class StudentCourseHomeWorkQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "学生id")
     private Long userId;
 
+    @ApiModelProperty(value = "课程组编号")
+    private String groupId;
+
+    @ApiModelProperty(value = "教师编号")
+    private Integer teacherId;
+
+    @ApiModelProperty(value = "衔接老师编号")
+    private Integer transactionTeacherId;
+
     @ApiModelProperty(value = "开始时间")
     private Date startTime;
 
@@ -23,6 +32,8 @@ public class StudentCourseHomeWorkQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否回复")
     private YesOrNoEnum isReplied;
 
+    private Boolean extra = false;
+
     public Long getUserId() {
         return userId;
     }
@@ -31,6 +42,22 @@ public class StudentCourseHomeWorkQueryInfo extends QueryInfo {
         this.userId = userId;
     }
 
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
     public Date getStartTime() {
         return startTime;
     }
@@ -62,4 +89,20 @@ public class StudentCourseHomeWorkQueryInfo extends QueryInfo {
     public void setIsReplied(YesOrNoEnum isReplied) {
         this.isReplied = isReplied;
     }
+
+    public Boolean getExtra() {
+        return extra;
+    }
+
+    public void setExtra(Boolean extra) {
+        this.extra = extra;
+    }
+
+    public Integer getTransactionTeacherId() {
+        return transactionTeacherId;
+    }
+
+    public void setTransactionTeacherId(Integer transactionTeacherId) {
+        this.transactionTeacherId = transactionTeacherId;
+    }
 }

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

@@ -4,6 +4,8 @@ import com.ym.mec.biz.dal.enums.ClientTypeEnum;
 import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.List;
+
 public class SysExamSongQueryInfo extends QueryInfo {
 
     @ApiModelProperty(value = "上传人",required = true)
@@ -26,6 +28,16 @@ public class SysExamSongQueryInfo extends QueryInfo {
 
     private ClientTypeEnum clientType;
 
+    private List<Integer> categoriesIdList;
+
+    public List<Integer> getCategoriesIdList() {
+        return categoriesIdList;
+    }
+
+    public void setCategoriesIdList(List<Integer> categoriesIdList) {
+        this.categoriesIdList = categoriesIdList;
+    }
+
     public ClientTypeEnum getClientType() {
         return clientType;
     }

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

@@ -21,6 +21,7 @@ public interface ChildrenDayDegreeDetailService extends BaseService<Integer, Chi
 
     /**
      * 增加考级支付详情
+     *
      * @param degreePayDto
      * @param gradeFee
      * @param theoryLevelFee
@@ -29,10 +30,11 @@ public interface ChildrenDayDegreeDetailService extends BaseService<Integer, Chi
      * @param theoryCourseFee
      * @return
      */
-    List<ChildrenDayDegreeDetail> addDegreeDetails(DegreePayDto degreePayDto, BigDecimal gradeFee,BigDecimal theoryLevelFee,BigDecimal vip1v1Fee,BigDecimal vip1v2Fee,BigDecimal theoryCourseFee);
+    List<ChildrenDayDegreeDetail> addDegreeDetails(DegreePayDto degreePayDto, BigDecimal gradeFee, BigDecimal theoryLevelFee, BigDecimal vip1v1Fee, BigDecimal vip1v2Fee, BigDecimal theoryCourseFee);
 
     /**
      * 增加考级订单详情
+     *
      * @param degreePayDto
      * @param gradeFee
      * @param theoryLevelFee
@@ -43,4 +45,22 @@ public interface ChildrenDayDegreeDetailService extends BaseService<Integer, Chi
      */
     List<StudentPaymentOrderDetail> addOrderDetails(DegreePayDto degreePayDto, BigDecimal gradeFee, BigDecimal theoryLevelFee, BigDecimal vip1v1Fee, BigDecimal vip1v2Fee, BigDecimal theoryCourseFee);
 
+    /**
+     * 获取用户6.1考级报名详情
+     *
+     * @param userId
+     * @return
+     */
+    List<ChildrenDayDegreeDetail> getUserDegreeInfo(Integer userId);
+
+
+    /**
+     * 更新状态信息
+     *
+     * @param orderId
+     * @param status
+     * @return
+     */
+    Integer updateStatus(Long orderId, Integer status);
+
 }

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayDegreeInfoService.java

@@ -0,0 +1,27 @@
+package com.ym.mec.biz.service;
+
+
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeInfo;
+
+import com.ym.mec.common.service.BaseService;
+
+import java.util.List;
+
+
+public interface ChildrenDayDegreeInfoService extends BaseService<Integer, ChildrenDayDegreeInfo> {
+
+    /**
+     * 增加购买信息汇总
+     * @param orderId
+     * @return
+     */
+    ChildrenDayDegreeInfo addInfo(Long orderId);
+
+    /**
+     * 获取已付费的用户
+     * @param userIds
+     * @return
+     */
+    List<Integer> getPayedUser(List<Integer> userIds);
+
+}

+ 27 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ChildrenDayReserveService.java

@@ -4,11 +4,13 @@ package com.ym.mec.biz.service;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ChildrenDayReserve;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ChildrenReserveQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
+import java.util.List;
 import java.util.Map;
 
 public interface ChildrenDayReserveService extends BaseService<Integer, ChildrenDayReserve> {
@@ -35,6 +37,7 @@ public interface ChildrenDayReserveService extends BaseService<Integer, Children
 
     /**
      * 获取活动的费用信息
+     *
      * @param organId
      * @return
      */
@@ -42,6 +45,7 @@ public interface ChildrenDayReserveService extends BaseService<Integer, Children
 
     /**
      * 获取后台考级活动详情列表
+     *
      * @param queryInfo
      * @return
      */
@@ -54,4 +58,27 @@ public interface ChildrenDayReserveService extends BaseService<Integer, Children
      * @throws Exception
      */
     Map pay(DegreePayDto degreePayDto) throws Exception;
+
+    /**
+     * 支付回调处理
+     *
+     * @param studentPaymentOrder
+     * @return
+     */
+    Boolean orderCallback(StudentPaymentOrder studentPaymentOrder);
+
+    /**
+     * 导出详情
+     * @param queryInfo
+     * @return
+     */
+    List<ChildrenStatisticsDetailDto> exportStatisticsDetail(ChildrenReserveQueryInfo queryInfo);
+
+    /**
+     * 发送短信和推送
+     *
+     * @param msgDtos
+     * @return
+     */
+    Boolean sendMsg(List<ChildrenDayMsgDto> msgDtos);
 }

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

@@ -24,4 +24,9 @@ public interface CooperationOrganService extends BaseService<Integer, Cooperatio
      * @return
      */
     List<MusicGroupPaymentCalender> getCooperationOrganCalender4School(Integer id);
+
+    void updateCooperation(CooperationOrgan cooperationOrgan);
+
+    void updateCooperationEdu(List<Integer> organIds);
+
 }

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

@@ -209,7 +209,7 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @return java.util.List<java.util.Date>
 	 * @describe 获取
 	 */
-	List<Date> getCourseScheduleDates(Date month, String organIdList, String type);
+	List<Date> getCourseScheduleDates(Date month, String organIdList, String type, Integer transactionTeacherId);
 
 	/**
 	 * @describe 课程调整

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

@@ -1,15 +1,18 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
+import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
 import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.dal.page.ExtraExercilseReplyQueryInfo;
+import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
+import java.util.Map;
 
 public interface ExtracurricularExercisesReplyService extends BaseService<Long, ExtracurricularExercisesReply> {
 
@@ -67,4 +70,6 @@ public interface ExtracurricularExercisesReplyService extends BaseService<Long,
      */
     void exercisesSituationStatistics();
     void exercisesSituationStatistics2(String monday);
+
+    PageInfo<EduHomeworkCardDto> getEduHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo);
 }

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

@@ -2,7 +2,10 @@ package com.ym.mec.biz.service;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ImGroup;
 import com.ym.mec.biz.dal.entity.ImGroupMember;
 import com.ym.mec.common.service.BaseService;
 
@@ -19,6 +22,15 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	boolean join(Long imGroupId, Integer userId, String roleType, boolean isAdmin);
 
 	/**
+	 * 加入群组
+	 * @param imGroupId 群编号
+	 * @param roleType 角色类型
+	 * @param isAdmin 是否是管理员
+	 * @return
+	 */
+	boolean join(Long imGroupId, String roleType, boolean isAdmin, ImGroup imGroup, SysUser user);
+
+	/**
 	 * 批量加入群组
 	 * @param imGroupId 群组编号
 	 * @param userRoleMap key-用户编号  value-角色类型
@@ -59,4 +71,27 @@ public interface ImGroupMemberService extends BaseService<Long, ImGroupMember> {
 	 */
 	boolean updateRoleType(Long imGroupId, Integer userId, String roleType);
 
+	void batchInsert(List<ImGroupMember> imGroupMemberList);
+
+	/**
+	 * 批量删除
+	 * @param imGroupMemberList
+	 */
+	void batchDelete(List<ImGroupMember> imGroupMemberList);
+
+	/**
+	 * 根据群编号和用户编号批量删除
+	 * @param imGroupMemberList
+	 */
+	void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList);
+
+	/**
+	 * 是否在群里
+	 * @param groupId
+	 * @param userId
+	 * @return
+	 */
+	boolean isExit(String groupId, String userId);
+
+	void delRepeat();
 }

+ 15 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/StudentCourseHomeworkService.java

@@ -1,8 +1,6 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
-import com.ym.mec.biz.dal.dto.StudentCourseHomeworkDto;
-import com.ym.mec.biz.dal.dto.StudentVisitCourseHomeWorkDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
@@ -40,7 +38,7 @@ public interface StudentCourseHomeworkService extends BaseService<Long, StudentC
      * @param userName: 用户名
      * @return java.util.List<com.ym.mec.biz.dal.entity.StudentCourseHomework>
      */
-    List<StudentCourseHomework> findStudentCourseHomeworkByCourse(Long courseSchedule,String userName);
+    List<StudentCourseHomework> findStudentCourseHomeworkByCourse(Long courseSchedule, Long homeworkId,String userName);
 
     /**
      * @describe 跟新学生作业回复状态
@@ -96,4 +94,17 @@ public interface StudentCourseHomeworkService extends BaseService<Long, StudentC
      * @return
      */
     PageInfo<StudentVisitCourseHomeWorkDto> getStudentHomeWorks(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    /**
+     * @describe 教务端课后作业列表
+     * @author Joburgess
+     * @date 2021/5/24 0024
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.EduHomeworkCardDto>
+     */
+    PageInfo<EduHomeworkCardDto> getEduCourseHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    PageInfo<EduHomeworkStatDto> queryEduHomeworkStatList(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    List<EduHomeworkStatDto> queryEduHomeworkStatDetail(StudentCourseHomeWorkQueryInfo queryInfo);
 }

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

@@ -389,4 +389,10 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
      */
     Integer quitAllStudent(String musicGroupId, String remark);
 
+    /**
+     * 获取乐团在读学员数
+     * @param musicGroupIds
+     * @return
+     */
+    List<Map<String, Integer>> countNormalNum(List<String> musicGroupIds);
 }

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMusicScoreAccompanimentService.java

@@ -2,8 +2,10 @@ package com.ym.mec.biz.service;
 
 
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
@@ -17,4 +19,6 @@ public interface SysMusicScoreAccompanimentService extends BaseService<Integer,
     List<SysMusicScoreAccompaniment> queryAccPage(SysExamSongQueryInfo queryInfo);
 
     List<Subject> querySubjectIds();
+
+    PageInfo<SysMusicScoreAccompaniment> queryScorePage(SysExamSongQueryInfo queryInfo);
 }

+ 47 - 60
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayDegreeDetailServiceImpl.java

@@ -21,6 +21,8 @@ import java.util.List;
 public class ChildrenDayDegreeDetailServiceImpl extends BaseServiceImpl<Integer, ChildrenDayDegreeDetail> implements ChildrenDayDegreeDetailService {
     @Autowired
     private ChildrenDayDegreeDetailDao childrenDayDegreeDetailDao;
+    @Autowired
+    private StudentPaymentOrderDetailDao studentPaymentOrderDetailDao;
 
     @Override
     public BaseDAO<Integer, ChildrenDayDegreeDetail> getDAO() {
@@ -96,67 +98,52 @@ public class ChildrenDayDegreeDetailServiceImpl extends BaseServiceImpl<Integer,
     @Override
     @Transactional(rollbackFor = Exception.class)
     public List<StudentPaymentOrderDetail> addOrderDetails(DegreePayDto degreePayDto, BigDecimal gradeFee, BigDecimal theoryLevelFee, BigDecimal vip1v1Fee, BigDecimal vip1v2Fee, BigDecimal theoryCourseFee) {
+        Date nowDate = new Date();
+        List<StudentPaymentOrderDetail> orderDetails = new ArrayList<>();
+        if (degreePayDto.getMusicGradeLevel() != null || degreePayDto.getTheoryLevel() != null) {
+            StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
+            detail.setType(OrderDetailTypeEnum.DEGREE_REGISTRATION);
+            detail.setPrice(gradeFee.add(theoryLevelFee));
+            detail.setRemitFee(BigDecimal.ZERO);
+            detail.setCreateTime(nowDate);
+            detail.setUpdateTime(nowDate);
+            detail.setPaymentOrderId(degreePayDto.getOrderId());
+            detail.setIsRenew(0);
+            orderDetails.add(detail);
+        }
+        if (degreePayDto.getVip1v1() || degreePayDto.getVip1v2()) {
+            StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
+            detail.setType(OrderDetailTypeEnum.VIP);
+            detail.setPrice(vip1v1Fee.add(vip1v2Fee));
+            detail.setRemitFee(BigDecimal.ZERO);
+            detail.setCreateTime(nowDate);
+            detail.setUpdateTime(nowDate);
+            detail.setPaymentOrderId(degreePayDto.getOrderId());
+            detail.setIsRenew(0);
+            orderDetails.add(detail);
+        }
+        if (degreePayDto.getTheoryCourse()) {
+            StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
+            detail.setType(OrderDetailTypeEnum.THEORY_COURSE);
+            detail.setPrice(theoryCourseFee);
+            detail.setRemitFee(BigDecimal.ZERO);
+            detail.setCreateTime(nowDate);
+            detail.setUpdateTime(nowDate);
+            detail.setPaymentOrderId(degreePayDto.getOrderId());
+            detail.setIsRenew(0);
+            orderDetails.add(detail);
+        }
+        studentPaymentOrderDetailDao.batchAdd(orderDetails);
+        return orderDetails;
+    }
 
-//        Date nowDate = new Date();
-//        List<StudentPaymentOrderDetail> orderDetails = new ArrayList<>();
-//        if (degreePayDto.getMusicGradeLevel() != null) {
-//            StudentPaymentOrderDetail detail = new StudentPaymentOrderDetail();
-//            detail.setType(OrderDetailTypeEnum.CLOUD_TEACHER);
-//            detail.setPrice(cloudTeacherPrice);
-//            detail.setRemitFee(BigDecimal.ZERO);
-//            detail.setCreateTime(nowDate);
-//            detail.setUpdateTime(nowDate);
-//            detail.setPaymentOrderId(degreePayDto.getOrderId());
-//            detail.setIsRenew(0);
-//            orderDetails.add(detail);
-//        }
-//        if (degreePayDto.getTheoryLevel() != null) {
-//            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
-//            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
-//            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
-//            childrenDayDegreeDetail.setType(2);
-//            childrenDayDegreeDetail.setLevel(degreePayDto.getTheoryLevel());
-//            childrenDayDegreeDetail.setPrice(theoryLevelFee);
-//            childrenDayDegreeDetail.setStatus(1);
-//            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
-//            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
-//        }
-//        if (degreePayDto.getVip1v1()) {
-//            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
-//            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
-//            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
-//            childrenDayDegreeDetail.setType(3);
-//            childrenDayDegreeDetail.setPrice(vip1v1Fee);
-//            childrenDayDegreeDetail.setStatus(1);
-//            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
-//            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
-//        }
-//        if (degreePayDto.getVip1v2()) {
-//            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
-//            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
-//            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
-//            childrenDayDegreeDetail.setType(4);
-//            childrenDayDegreeDetail.setPrice(vip1v2Fee);
-//            childrenDayDegreeDetail.setStatus(1);
-//            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
-//            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
-//        }
-//        if (degreePayDto.getTheoryCourse()) {
-//            ChildrenDayDegreeDetail childrenDayDegreeDetail = new ChildrenDayDegreeDetail();
-//            childrenDayDegreeDetail.setReserveId(degreePayDto.getReserveId());
-//            childrenDayDegreeDetail.setUserId(degreePayDto.getUserId());
-//            childrenDayDegreeDetail.setType(5);
-//            childrenDayDegreeDetail.setPrice(theoryCourseFee);
-//            childrenDayDegreeDetail.setStatus(1);
-//            childrenDayDegreeDetail.setOrderId(degreePayDto.getOrderId());
-//            childrenDayDegreeDetails.add(childrenDayDegreeDetail);
-//        }
-//        childrenDayDegreeDetailDao.batchAdd(childrenDayDegreeDetails);
-//        return childrenDayDegreeDetails;
-//
-//
-//        StudentPaymentOrderDetail cloudTeacherOrderDetail = new StudentPaymentOrderDetail();
-        return null;
+    @Override
+    public List<ChildrenDayDegreeDetail> getUserDegreeInfo(Integer userId) {
+        return childrenDayDegreeDetailDao.getByUserIdAndStatus(userId, 2);
+    }
 
+    @Override
+    public Integer updateStatus(Long orderId, Integer status) {
+        return childrenDayDegreeDetailDao.updateStatus(orderId, status);
     }
 }

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

@@ -0,0 +1,75 @@
+package com.ym.mec.biz.service.impl;
+
+
+import com.ym.mec.biz.dal.dao.ChildrenDayDegreeDetailDao;
+import com.ym.mec.biz.dal.dao.ChildrenDayDegreeInfoDao;
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeDetail;
+import com.ym.mec.biz.dal.entity.ChildrenDayDegreeInfo;
+import com.ym.mec.biz.service.ChildrenDayDegreeInfoService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+@Service
+public class ChildrenDayDegreeInfoServiceImpl extends BaseServiceImpl<Integer, ChildrenDayDegreeInfo> implements ChildrenDayDegreeInfoService {
+    @Autowired
+    private ChildrenDayDegreeInfoDao childrenDayDegreeInfoDao;
+    @Autowired
+    private ChildrenDayDegreeDetailDao childrenDayDegreeDetailDao;
+
+    @Override
+    public BaseDAO<Integer, ChildrenDayDegreeInfo> getDAO() {
+        return childrenDayDegreeInfoDao;
+    }
+
+
+    @Override
+    public ChildrenDayDegreeInfo addInfo(Long orderId) {
+        List<ChildrenDayDegreeDetail> details = childrenDayDegreeDetailDao.getByOrderId(orderId);
+        ChildrenDayDegreeInfo childrenDayDegreeInfo = new ChildrenDayDegreeInfo();
+        BigDecimal totalAmount = BigDecimal.ZERO;
+        for (ChildrenDayDegreeDetail detail : details) {
+            switch (detail.getType()) {
+                case 1:
+                    childrenDayDegreeInfo.setSubjectId(detail.getSubjectId());
+                    childrenDayDegreeInfo.setGradeLevel(detail.getLevel());
+                    childrenDayDegreeInfo.setGradePrice(detail.getPrice());
+                    break;
+                case 2:
+                    childrenDayDegreeInfo.setTheoryLevel(detail.getLevel());
+                    childrenDayDegreeInfo.setTheoryPrice(detail.getPrice());
+                    break;
+                case 3:
+                    childrenDayDegreeInfo.setVip1v1Price(detail.getPrice());
+                    break;
+                case 4:
+                    childrenDayDegreeInfo.setVip1v2Price(detail.getPrice());
+                    break;
+                case 5:
+                    childrenDayDegreeInfo.setTheoryCoursePrice(detail.getPrice());
+                    break;
+                default:
+                    break;
+            }
+            childrenDayDegreeInfo.setReserveId(detail.getReserveId());
+            childrenDayDegreeInfo.setUserId(detail.getUserId());
+            childrenDayDegreeInfo.setOrderId(detail.getOrderId());
+            totalAmount = totalAmount.add(detail.getPrice());
+        }
+        childrenDayDegreeInfo.setTotalAmount(totalAmount);
+        if (childrenDayDegreeInfoDao.insert(childrenDayDegreeInfo) <= 0) {
+            throw new BizException("汇总信息插入失败");
+        }
+        return childrenDayDegreeInfo;
+    }
+
+    @Override
+    public List<Integer> getPayedUser(List<Integer> userIds) {
+       return childrenDayDegreeInfoDao.getPayedUser(userIds);
+    }
+}

+ 173 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ChildrenDayReserveServiceImpl.java

@@ -12,8 +12,12 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.http.HttpUtil;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -49,6 +53,20 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
     private StudentPaymentRouteOrderService studentPaymentRouteOrderService;
     @Autowired
     private PayService payService;
+    @Autowired
+    private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+    @Autowired
+    private ContractService contractService;
+    @Autowired
+    private SysUserCashAccountService sysUserCashAccountService;
+    @Autowired
+    private SysMessageService sysMessageService;
+    @Autowired
+    private StudentRegistrationService studentRegistrationService;
+    @Autowired
+    private ChildrenDayDegreeInfoService childrenDayDegreeInfoService;
+
+    private final Logger logger = LoggerFactory.getLogger(this.getClass());
 
     @Override
     public BaseDAO<Integer, ChildrenDayReserve> getDAO() {
@@ -104,6 +122,14 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = childrenDayReserveDao.queryChildrenStatistics(params);
+            //统计
+            pageInfo.setStatInfo(childrenDayReserveDao.childrenStatistics(params));
+            //获取乐团在读人数
+            List<String> musicGroupIds = dataList.stream().map(e -> e.getMusicGroupId()).collect(Collectors.toList());
+            Map<String, Long> normalNum = MapUtil.convertIntegerMap(studentRegistrationService.countNormalNum(musicGroupIds));
+            dataList.forEach(e -> {
+                e.setNormalNum(normalNum.get(e.getMusicGroupId()) == null ? 0 : normalNum.get(e.getMusicGroupId()).intValue());
+            });
         }
         if (count == 0) {
             dataList = new ArrayList<>();
@@ -147,10 +173,6 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
     public Map pay(DegreePayDto degreePayDto) throws Exception {
         studentDao.lockUser(degreePayDto.getUserId());
 
-        if (degreePayDto.getTheoryLevel() != null && !degreePayDto.getTheoryCourse()) {
-            throw new BizException("参加乐理考试,请选乐理考级专项训练课");
-        }
-
         //检查进行中的订单
         List<ChildrenDayDegreeDetail> details = childrenDayDegreeDetailService.getByUserIdAndStatus(degreePayDto.getUserId(), 1);
 
@@ -165,9 +187,18 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
             }
         }
 
+        //获取课程的价格
+        OrganizationDegreeCourseFee courseFee = organizationDegreeCourseFeeDao.getByOrganId(degreePayDto.getOrganId());
+
         //检查已经购买的课程(不能重复)
         details = childrenDayDegreeDetailService.getByUserIdAndStatus(degreePayDto.getUserId(), 2);
         Set<Integer> detailTypes = details.stream().map(ChildrenDayDegreeDetail::getType).collect(Collectors.toSet());
+
+        if (degreePayDto.getTheoryLevel() != null && degreePayDto.getTheoryLevel() > 0 &&
+                courseFee != null && !degreePayDto.getTheoryCourse() && !detailTypes.contains(5)) {
+            throw new BizException("参加乐理考试,请选乐理考级专项训练课");
+        }
+
         if (degreePayDto.getVip1v1() && detailTypes.contains(3)) {
             throw new BizException("您已购买过VIP 1V1课程,请勿重复选择");
         }
@@ -180,23 +211,27 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
             throw new BizException("您已购买过乐理考级专项训练课,请勿重复选择");
         }
         //检查器乐考级等级是否重复
-        if (degreePayDto.getMusicGradeLevel() != null) {
+        if (degreePayDto.getMusicGradeLevel() != null && degreePayDto.getMusicGradeLevel() > 0) {
             if (degreePayDto.getSubject() == null) {
                 throw new BizException("请选择考级声部");
             }
             List<ChildrenDayDegreeDetail> hasList = details.stream().filter(e -> e.getType().equals(1)).filter(e -> e.getSubjectId().equals(degreePayDto.getSubject()))
                     .filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).collect(Collectors.toList());
             if (hasList.size() > 0) {
-                throw new BizException("您已报考同声部同等级,请勿重复报考");
+                throw new BizException("您已报考同声部同等级,请勿重复报考");
+            }
+
+            if (degreePayDto.getNeedVipCourse() && !detailTypes.contains(3) && !detailTypes.contains(4)) {
+                throw new BizException("请选择VIP课程");
             }
         }
 
         //检查乐理考级等级是否重复
-        if (degreePayDto.getTheoryLevel() != null) {
+        if (degreePayDto.getTheoryLevel() != null && degreePayDto.getTheoryLevel() > 0) {
             List<ChildrenDayDegreeDetail> hasList = details.stream().filter(e -> e.getType().equals(2))
-                    .filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).collect(Collectors.toList());
+                    .filter(e -> e.getLevel().equals(degreePayDto.getTheoryLevel())).collect(Collectors.toList());
             if (hasList.size() > 0) {
-                throw new BizException("您已报考同等级乐理,请勿重复报考");
+                throw new BizException("您已报考同等级乐理请勿重复报考");
             }
         }
 
@@ -207,13 +242,6 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
         }
         degreePayDto.setReserveId(userReserve.getId());
 
-        //获取课程的价格
-        OrganizationDegreeCourseFee courseFee = organizationDegreeCourseFeeDao.getByOrganId(degreePayDto.getOrganId());
-
-        if (courseFee == null) {
-            throw new BizException("刚前分部不参与,谢谢关注");
-        }
-
         List<DegreeLevelFee> degreeLevelFees = degreeLevelFeeDao.getAll();
 
         //订单总金额
@@ -221,14 +249,14 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
 
         //器乐考级费用
         BigDecimal gradeFee = BigDecimal.ZERO;
-        if (degreePayDto.getMusicGradeLevel() != null) {
+        if (degreePayDto.getMusicGradeLevel() != null && degreePayDto.getMusicGradeLevel() > 0) {
             gradeFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getMusicGradeLevel())).map(DegreeLevelFee::getGrade).reduce(BigDecimal.ZERO, BigDecimal::add);
             orderAmount = orderAmount.add(gradeFee);
         }
 
         //乐理考级费用
         BigDecimal theoryLevelFee = BigDecimal.ZERO;
-        if (degreePayDto.getTheoryLevel() != null) {
+        if (degreePayDto.getTheoryLevel() != null && degreePayDto.getTheoryLevel() > 0) {
             theoryLevelFee = degreeLevelFees.stream().filter(e -> e.getLevel().equals(degreePayDto.getTheoryLevel())).map(DegreeLevelFee::getTheory).reduce(BigDecimal.ZERO, BigDecimal::add);
             orderAmount = orderAmount.add(theoryLevelFee);
         }
@@ -286,6 +314,7 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
 
         //添加购买详情
         degreePayDto.setOrderId(studentPaymentOrder.getId());
+        childrenDayDegreeDetailService.addOrderDetails(degreePayDto, gradeFee, theoryLevelFee, vip1v1Fee, vip1v2Fee, theoryCourseFee);
         childrenDayDegreeDetailService.addDegreeDetails(degreePayDto, gradeFee, theoryLevelFee, vip1v1Fee, vip1v2Fee, theoryCourseFee);
 
         studentPaymentOrder.setVersion(0);
@@ -324,4 +353,130 @@ public class ChildrenDayReserveServiceImpl extends BaseServiceImpl<Integer, Chil
         studentPaymentOrderService.update(studentPaymentOrder);
         return payMap;
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean orderCallback(StudentPaymentOrder studentPaymentOrder) {
+        Date nowDate = new Date();
+        //更新订单信息
+        studentPaymentOrder.setUpdateTime(nowDate);
+        int updateCount = studentPaymentOrderService.update(studentPaymentOrder);
+        if (updateCount <= 0) {
+            throw new BizException("订单更新失败");
+        }
+
+        Integer userId = studentPaymentOrder.getUserId();
+
+        Map<Integer, String> map = new HashMap<>();
+        map.put(userId, userId.toString());
+
+        //支付成功
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
+            if (childrenDayDegreeDetailService.updateStatus(studentPaymentOrder.getId(), 2) <= 0) {
+                throw new BizException("购买详情,更新失败");
+            }
+            childrenDayDegreeInfoService.addInfo(studentPaymentOrder.getId());
+
+            //插入交易明细
+            BigDecimal amount = studentPaymentOrder.getActualAmount();
+            if (amount.compareTo(BigDecimal.ZERO) > 0) {
+                SysUserCashAccount cashAccount = sysUserCashAccountService.get(userId);
+                //充值
+                SysUserCashAccountDetail rechargeDetail = new SysUserCashAccountDetail();
+                rechargeDetail.setAmount(amount);
+                rechargeDetail.setBalance(cashAccount.getBalance().add(amount));
+                rechargeDetail.setComment("缴费前充值");
+                rechargeDetail.setCreateTime(nowDate);
+                rechargeDetail.setStatus(DealStatusEnum.SUCCESS);
+                rechargeDetail.setTransNo(studentPaymentOrder.getTransNo());
+                rechargeDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+                rechargeDetail.setUpdateTime(nowDate);
+                rechargeDetail.setUserId(userId);
+                rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                rechargeDetail.setComAmount(studentPaymentOrder.getComAmount());
+                rechargeDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+                sysUserCashAccountDetailService.insert(rechargeDetail);
+
+                //缴费
+                SysUserCashAccountDetail paymentDetail = new SysUserCashAccountDetail();
+                paymentDetail.setAmount(amount.negate());
+                paymentDetail.setBalance(cashAccount.getBalance());
+                paymentDetail.setComment("6.1考级活动");
+                paymentDetail.setCreateTime(nowDate);
+                paymentDetail.setStatus(DealStatusEnum.SUCCESS);
+                paymentDetail.setTransNo(studentPaymentOrder.getTransNo());
+                paymentDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
+                paymentDetail.setUpdateTime(nowDate);
+                paymentDetail.setUserId(userId);
+                rechargeDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+                sysUserCashAccountDetailService.insert(paymentDetail);
+            }
+
+            try {
+                contractService.transferProduceContract(userId, null);
+            } catch (Exception e) {
+                logger.error("产品协议生成失败", e);
+            }
+            return true;
+        }
+
+        if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
+            if (childrenDayDegreeDetailService.updateStatus(studentPaymentOrder.getId(), 3) <= 0) {
+                throw new BizException("购买详情,更新失败");
+            }
+
+            if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
+                sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "6.1考级支付失败");
+            }
+
+            sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_SMS_PUSH_SPORADIC_PAYMENT_FAILED, map, null, 0, null, "STUDENT",
+                    studentPaymentOrder.getActualAmount(), "6.1考级活动");
+            return false;
+        }
+        return true;
+    }
+
+    @Override
+    public List<ChildrenStatisticsDetailDto> exportStatisticsDetail(ChildrenReserveQueryInfo queryInfo) {
+        return childrenDayReserveDao.exportStatisticsDetail(queryInfo);
+    }
+
+    @Override
+    public Boolean sendMsg(List<ChildrenDayMsgDto> msgDtos) {
+        List<ChildrenStatisticsDetailDto> reserves = childrenDayReserveDao.getSendMsgList(msgDtos);
+        if (reserves.size() <= 0) {
+            return true;
+        }
+
+        Map<Integer, String> userMap = new HashMap<>();
+        Map<Integer, String> userPhoneMap = new HashMap<>();
+
+        List<Integer> userList = reserves.stream().map(ChildrenStatisticsDetailDto::getUserId).collect(Collectors.toList());
+        List<Integer> payedUserIds = childrenDayDegreeInfoService.getPayedUser(userList);
+
+        for (ChildrenStatisticsDetailDto reserve : reserves) {
+            if (payedUserIds.contains(reserve.getUserId())) {
+                userList.remove(reserve.getUserId());
+                continue;
+            }
+            userMap.put(reserve.getUserId(), reserve.getUserId().toString());
+            userPhoneMap.put(reserve.getUserId(), reserve.getPhone());
+        }
+
+        if (userMap.size() <= 0) {
+            return true;
+        }
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+        String pushUrl = baseApiUrl + "/#/childrenPayment";
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.CHILDREN_DAY_NOTICE_PUSH,
+                userMap, null, 0, "5?" + pushUrl, "STUDENT");
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.AWSMS, MessageTypeEnum.CHILDREN_DAY_NOTICE_MSG,
+                userPhoneMap, null, 0, null, null, HttpUtil.getSortUrl(pushUrl));
+
+        childrenDayReserveDao.updateSendMasStatus(userList);
+        return true;
+    }
 }

+ 26 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -280,9 +280,18 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         } else {
             MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
             Map<Integer, String> userRoleMap = new HashMap<>();
-            userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
-            userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
-            userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
+            if(musicGroup.getEducationalTeacherId() != null){
+                userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
+            }
+            if(musicGroup.getTeamTeacherId() != null){
+                userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
+            }
+            if(musicGroup.getDirectorUserId() != null){
+                userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
+            }
+            if(musicGroup.getTransactionTeacherId() != null){
+                userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
+            }
             if (teacherIdList != null && teacherIdList.size() > 0) {
                 for (Integer teacherId : teacherIdList) {
                     userRoleMap.put(teacherId, "指导老师");
@@ -1015,6 +1024,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                         e.setTitle("乐团主管");
                     } else if (musicGroup.getDirectorUserId() != null && Integer.parseInt(e.getId()) == musicGroup.getDirectorUserId()) {
                         e.setTitle("乐队指导");
+                    } else if (musicGroup.getTransactionTeacherId() != null && Integer.parseInt(e.getId()) == musicGroup.getTransactionTeacherId()) {
+                        e.setTitle("衔接老师");
                     } else if (courseScheduleTeacherSalaryDao.isTeacher(groupId, Integer.parseInt(e.getId()))) {
                         e.setTitle("指导老师");
                     }
@@ -3139,9 +3150,18 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
 
         Map<Integer, String> userRoleMap = new HashMap<Integer, String>();
-        userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
-        userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
-        userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
+        if(musicGroup.getEducationalTeacherId() != null){
+            userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
+        }
+        if(musicGroup.getTeamTeacherId() != null){
+            userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
+        }
+        if(musicGroup.getDirectorUserId() != null){
+            userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
+        }
+        if(musicGroup.getTransactionTeacherId() != null){
+            userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
+        }
         for (Integer userId : userIds) {
             if (userId == null) continue;
 

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java

@@ -653,6 +653,9 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
         List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
         //获取冻结的课程列表
         List<CourseSchedule> classGroupNotStartCourse = courseScheduleDao.findCoursesByClassGroupIdAndCourseIds(classGroupId,allLockCourseIds);
+        if(classGroupNotStartCourse.size() == 0){
+            throw new BizException("操作失败:主班没有未开始的课程");
+        }
 
         Date now = new Date();
         List<ClassGroupStudentMapper> classGroupStudentMappers = new ArrayList<>();

+ 29 - 26
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ContractServiceImpl.java

@@ -14,6 +14,7 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.enums.CourseViewTypeEnum;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.util.http.HttpUtil;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -162,7 +163,6 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			SysUserTsign sysUserTsign = sysUserTsignService.queryByCardNo(organCode);
 
 			if (sysUserTsign == null) {
-
 				String accountId = eSealPlugin.createOrganAccount(orgName, organCode);
 
 				if (StringUtils.isBlank(accountId)) {
@@ -178,7 +178,6 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 				sysUserTsign = new SysUserTsign(-1, accountId, sealData, orgName, organCode);
 
 				sysUserTsignService.insert(sysUserTsign);
-
 			}
 		}
 	}
@@ -193,20 +192,30 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
 		if (sysUserTsign == null) {
 
-			if(!debugMode){
-				realnameAuthenticationPluginContext.getRealnameAuthenticationPlugin(LinkfaceRealnameAuthenticationPlugin.getName()).verify(realName, idCardNo);
+			String accountId = "";
+			String sealData = "";
+
+			SysUser user = studentDao.getUser(userId);
+			if (user == null) {
+				throw new BizException("用户信息查询失败");
 			}
 
-			String accountId = eSealPlugin.createUserAccount(realName, idCardNo, mobileNo);
+			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())){
+				if(!debugMode){
+					realnameAuthenticationPluginContext.getRealnameAuthenticationPlugin(LinkfaceRealnameAuthenticationPlugin.getName()).verify(realName, idCardNo);
+				}
+
+				accountId = eSealPlugin.createUserAccount(realName, idCardNo, mobileNo);
 
-			if (StringUtils.isBlank(accountId)) {
-				throw new BizException("创建电子存证账户失败");
-			}
+				if (StringUtils.isBlank(accountId)) {
+					throw new BizException("创建电子存证账户失败");
+				}
 
-			String sealData = eSealPlugin.createUserSeal(accountId);
+				sealData = eSealPlugin.createUserSeal(accountId);
 
-			if (StringUtils.isBlank(sealData)) {
-				throw new BizException("创建电子存证印章失败");
+				if (StringUtils.isBlank(sealData)) {
+					throw new BizException("创建电子存证印章失败");
+				}
 			}
 
 			sysUserTsign = new SysUserTsign(userId, accountId, sealData, realName, idCardNo);
@@ -229,8 +238,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 
 		// 合成freemarker
@@ -317,7 +325,6 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		if(true){
 			return transferProduceContract(userId, musicGroupId);
 		}
-
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
 
 		if (sysUserTsign == null) {
@@ -325,8 +332,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 		Date date = new Date();
 
@@ -522,8 +528,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 		Date date = new Date();
 
@@ -666,8 +671,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 		Date date = new Date();
 
@@ -902,8 +906,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 			if (user == null) {
 				throw new BizException("用户信息查询失败");
 			}
-			if(CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType()))
-				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
+			sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 		}
 
 		Date date = new Date();
@@ -985,7 +988,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		}
 
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
-		if (sysUserTsign == null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
+		if (sysUserTsign == null) {
 			try {
 				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 			} catch (Exception e) {
@@ -1063,7 +1066,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		}
 
 		eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
-		if (sysUserTsign != null) {
+		if (sysUserTsign != null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
 			eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
 		}
 
@@ -1172,7 +1175,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		}
 
 		SysUserTsign sysUserTsign = sysUserTsignService.get(userId);
-		if (sysUserTsign == null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
+		if (sysUserTsign == null) {
 			try {
 				sysUserTsign = register(userId, user.getRealName(), user.getIdCardNo(), user.getPhone());
 			} catch (Exception e) {
@@ -1230,7 +1233,7 @@ public class ContractServiceImpl implements ContractService, InitializingBean {
 		}
 
 		eSealPlugin.organSign(organTsign.getSealData(), srcPdfPath, srcPdfPath);
-		if (sysUserTsign != null) {
+		if (sysUserTsign != null && CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())) {
 			eSealPlugin.userSign(sysUserTsign.getAccountId(), sysUserTsign.getSealData(), srcPdfPath, srcPdfPath);
 		}
 

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

@@ -1,22 +1,44 @@
 package com.ym.mec.biz.service.impl;
 
+import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
-import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.service.ImGroupMemberService;
+import com.ym.mec.biz.service.ImGroupService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import com.ym.mec.biz.dal.dao.CooperationOrganDao;
-import com.ym.mec.biz.dal.entity.CooperationOrgan;
 import com.ym.mec.biz.service.CooperationOrganService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
 
 @Service
 public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, CooperationOrgan>  implements CooperationOrganService {
 	
 	@Autowired
 	private CooperationOrganDao cooperationOrganDao;
+	@Autowired
+	private MusicGroupDao musicGroupDao;
+	@Autowired
+	private ClassGroupDao classGroupDao;
+	@Autowired
+	private ImGroupMemberService imGroupMemberService;
+	@Autowired
+	private ImGroupService imGroupService;
+	@Autowired
+	private EmployeeDao employeeDao;
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
 
 	@Override
 	public BaseDAO<Integer, CooperationOrgan> getDAO() {
@@ -32,4 +54,105 @@ public class CooperationOrganServiceImpl extends BaseServiceImpl<Integer, Cooper
     public List<MusicGroupPaymentCalender> getCooperationOrganCalender4School(Integer id) {
 		return cooperationOrganDao.getCooperationOrganCalender4School(id);
     }
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateCooperation(CooperationOrgan cooperationOrgan) {
+		CooperationOrgan cooperationOrgan1 = cooperationOrganDao.get(cooperationOrgan.getId());
+		//修改了乐团主管后,修改关联乐团的乐团主管
+		if(!cooperationOrgan.getEducationUserId().equals(cooperationOrgan1.getEducationUserId())){
+			SysUser sysUser = sysUserFeignService.queryUserById(cooperationOrgan.getEducationUserId());
+			//获取进行中、暂停、筹备中的乐团列表
+			List<MusicGroup> musicGroups = musicGroupDao.findByCooperationIdAndStatus(cooperationOrgan.getId());
+			if(musicGroups.size() > 0){
+				for (MusicGroup musicGroup : musicGroups) {
+					//获取当前乐团所有班级
+					List<ClassGroup> classGroups = classGroupDao.findClassGroups(musicGroup.getId());
+					if (classGroups == null || classGroups.size() == 0) {
+						continue;
+					}
+					Integer educationalTeacherId = musicGroup.getEducationalTeacherId();
+					classGroups.forEach(e -> {
+						if(educationalTeacherId != null){
+							imGroupMemberService.quit(e.getId().longValue(), educationalTeacherId);
+						}
+						imGroupMemberService.join(e.getId().longValue(),"乐团主管",false,null,sysUser);
+					});
+				}
+			}
+			//更新预报名群信息
+			List<MusicGroup> musicGroupList = musicGroupDao.findByCooperationId(cooperationOrgan.getId());
+			if(musicGroupList.size() > 0){
+				for (MusicGroup musicGroup : musicGroupList) {
+					//不是导入的乐团
+					if(musicGroup.getId().length() > 10){
+						//是否有预报名的群聊
+						ImGroup imGroup = imGroupService.get(Long.parseLong(musicGroup.getId()));
+						if(imGroup != null){
+							imGroupMemberService.quit(Long.parseLong(musicGroup.getId()),musicGroup.getEducationalTeacherId());
+							imGroupMemberService.join(Long.parseLong(musicGroup.getId()),"乐团主管",false,imGroup,sysUser);
+						}
+					}
+				}
+			}
+			//修改乐团主管
+			musicGroupDao.batchUpdateEdu(cooperationOrgan.getId(),cooperationOrgan.getEducationUserId());
+		}
+		cooperationOrganDao.update(cooperationOrgan);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateCooperationEdu(List<Integer> organIds) {
+		List<CooperationOrgan> organList = cooperationOrganDao.getCooperationOrganByIds(organIds);
+		for (CooperationOrgan cooperationOrgan : organList) {
+			if(cooperationOrgan.getEducationUserId() != null){
+				Employee employee = employeeDao.get(cooperationOrgan.getEducationUserId());
+				if(employee != null){
+					//获取进行中、暂停、筹备中的乐团列表
+					List<MusicGroup> musicGroups = musicGroupDao.findByCooperationIdAndStatus(cooperationOrgan.getId());
+					if(musicGroups.size() > 0){
+						for (MusicGroup musicGroup : musicGroups) {
+							//获取当前乐团所有班级
+							List<ClassGroup> classGroups = classGroupDao.findClassGroups(musicGroup.getId());
+							if (classGroups == null || classGroups.size() == 0) {
+								continue;
+							}
+							Integer educationalTeacherId = musicGroup.getEducationalTeacherId();
+							List<Integer> quitUserIdList = new ArrayList<Integer>();
+							if(educationalTeacherId != null){
+								quitUserIdList.add(educationalTeacherId);
+							}
+							Map<Integer, String> userRoleMap = new HashMap<Integer, String>(1);
+							userRoleMap.put(cooperationOrgan.getEducationUserId(), "乐团主管");
+							classGroups.forEach(e -> {
+								if(educationalTeacherId != null){
+									imGroupMemberService.quit(e.getId().longValue(), quitUserIdList);
+								}
+								imGroupMemberService.join(e.getId().longValue(), userRoleMap);
+							});
+						}
+					}
+					//更新预报名群信息
+					List<MusicGroup> musicGroupList = musicGroupDao.findByCooperationId(cooperationOrgan.getId());
+					if(musicGroupList.size() > 0){
+						for (MusicGroup musicGroup : musicGroupList) {
+							//不是导入的乐团
+							if(musicGroup.getId().length() > 10){
+								//是否有预报名的群聊
+								ImGroup imGroup = imGroupService.get(Long.parseLong(musicGroup.getId()));
+								if(imGroup != null){
+									imGroupMemberService.quit(Long.parseLong(musicGroup.getId()),musicGroup.getEducationalTeacherId());
+									imGroupMemberService.join(Long.parseLong(musicGroup.getId()),cooperationOrgan.getEducationUserId(),"乐团主管",false);
+								}
+							}
+						}
+					}
+					//修改乐团主管
+					musicGroupDao.batchUpdateEdu(cooperationOrgan.getId(),cooperationOrgan.getEducationUserId());
+					System.out.println(cooperationOrgan.getName() + "  OK");
+				}
+			}
+		}
+	}
 }

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

@@ -988,7 +988,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     }
 
     @Override
-    public List<Date> getCourseScheduleDates(Date month, String organIdList, String type) {
+    public List<Date> getCourseScheduleDates(Date month, String organIdList, String type, Integer transactionTeacherId) {
 //		Map<String, Object> params = new HashMap<>();
 //		params.put("organIdList", organIdList);
 //
@@ -1015,7 +1015,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if(StringUtils.isNotBlank(organIdList)){
 			organIds = Arrays.stream(organIdList.split(",")).map(s->Integer.valueOf(s)).collect(Collectors.toList());
 		}
-		return courseScheduleDao.getCourseScheduleDateWithOrgan(organIds, month, type);
+		return courseScheduleDao.getCourseScheduleDateWithOrgan(organIds, month, type, transactionTeacherId);
     }
 
     @Override
@@ -2765,9 +2765,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     courseSchedules.get(courseStartDates.size() - 1).setEndClassTime(courseEndTime);
                     if (Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode())) {
                         if(courseSchedules.get(courseStartDates.size() - 1).getTeachMode().equals(TeachModeEnum.ONLINE)
-                            &&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)
-							&&Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId())){
-                            throw new BizException("请选择教学点");
+                            &&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)){
+                            throw new BizException("VIP课不支持从线上调整到线下");
                         }
                         courseSchedules.get(courseStartDates.size() - 1).setTeachMode(vipGroupCourseAdjustInfo.getTeachMode());
                         if (vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
@@ -3380,6 +3379,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 			}
 
+			if (VIP.equals(newCourseSchedule.getGroupType())){
+				if(TeachModeEnum.OFFLINE.equals(newCourseSchedule.getTeachMode())&&TeachModeEnum.ONLINE.equals(oldCourseSchedule.getTeachMode())){
+					throw new BizException("VIP课不支持从线上调整到线下");
+				}
+			}
+
             if(!CollectionUtils.isEmpty(newCourseSchedule.getTeachingTeacherIdList())){
                 if (newCourseSchedule.getTeachingTeacherIdList().contains(newCourseSchedule.getActualTeacherId())){
                     throw new BizException("主教和助教不可重复");

+ 55 - 40
mec-biz/src/main/java/com/ym/mec/biz/service/impl/EmployeeServiceImpl.java

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

+ 43 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -90,16 +90,7 @@ public class ExportServiceImpl implements ExportService {
             }
             BigDecimal transferFee = BigDecimal.ZERO;
             if (row.getPaymentChannel() != null && row.getPaymentChannel().equals("ADAPAY")) {
-                FeeFlagNumDto countFeeFlagNum = studentPaymentRouteOrderDao.getCountFeeFlagNum(row.getOrderNo());
-                if (countFeeFlagNum.getTotalNum() > countFeeFlagNum.getYesNum()) {
-                    transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
-                }
-                if (countFeeFlagNum.getTotalNum().equals(countFeeFlagNum.getYesNum())) {
-                    List<StudentPaymentRouteOrder> routeOrders = studentPaymentRouteOrderDao.getRouteOrders(row.getOrderNo());
-                    for (StudentPaymentRouteOrder routeOrder : routeOrders) {
-                        transferFee = transferFee.add(routeOrder.getRouteAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP));
-                    }
-                }
+                transferFee = row.getActualAmount().multiply(new BigDecimal("0.28")).divide(new BigDecimal(100), 2, BigDecimal.ROUND_HALF_UP);
             }
             row.setTransferFee(transferFee);
 
@@ -154,6 +145,27 @@ public class ExportServiceImpl implements ExportService {
                             }
                             row.setCloudTeacherFee(cloudTeacherFee);
                             break;
+                        case DEGREE_REGISTRATION:
+                            BigDecimal degreeFee = BigDecimal.ZERO;
+                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                degreeFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                            }
+                            row.setDegreeFee(degreeFee);
+                            break;
+                        case VIP:
+                            BigDecimal vipCourseFee = BigDecimal.ZERO;
+                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                vipCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                            }
+                            row.setVipCourseFee(vipCourseFee);
+                            break;
+                        case THEORY_COURSE:
+                            BigDecimal theoryCourseFee = BigDecimal.ZERO;
+                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                theoryCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                            }
+                            row.setTheoryCourseFee(theoryCourseFee);
+                            break;
                         default:
                             break;
                     }
@@ -424,6 +436,27 @@ public class ExportServiceImpl implements ExportService {
                             }
                             row.setCloudTeacherFee(cloudTeacherFee);
                             break;
+                        case DEGREE_REGISTRATION:
+                            BigDecimal degreeFee = BigDecimal.ZERO;
+                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                degreeFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                            }
+                            row.setDegreeFee(degreeFee);
+                            break;
+                        case VIP:
+                            BigDecimal vipCourseFee = BigDecimal.ZERO;
+                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                vipCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                            }
+                            row.setVipCourseFee(vipCourseFee);
+                            break;
+                        case THEORY_COURSE:
+                            BigDecimal theoryCourseFee = BigDecimal.ZERO;
+                            if (row.getExpectAmount().compareTo(BigDecimal.ZERO) > 0) {
+                                theoryCourseFee = orderDetail.getPrice().multiply(row.getActualAmount()).divide(row.getExpectAmount(), 2, BigDecimal.ROUND_DOWN);
+                            }
+                            row.setTheoryCourseFee(theoryCourseFee);
+                            break;
                         default:
                             break;
                     }

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

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.dal.page.ExtraExercilseReplyQueryInfo;
+import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysMessageService;
@@ -364,4 +365,19 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
             currentPage=currentPage.add(BigDecimal.ONE);
         }
 	}
+
+	@Override
+	public PageInfo<EduHomeworkCardDto> getEduHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo) {
+		PageInfo<EduHomeworkCardDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		int count = extracurricularExercisesReplyDao.countEduHomeworkList(params);
+		pageInfo.setTotal(count);
+		params.put("offset", pageInfo.getOffset());
+		List<EduHomeworkCardDto> dataList = extracurricularExercisesReplyDao.getEduHomeworkList(params);
+
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
 }

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

@@ -4,10 +4,13 @@ import java.util.*;
 import java.util.Map.Entry;
 import java.util.stream.Collectors;
 
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.service.ImGroupService;
+import com.ym.mec.common.entity.ImGroupModel;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -89,18 +92,31 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		if(classGroup.getGroupType() == GroupType.MUSIC){
 			MusicGroup musicGroup = musicGroupDao.get(classGroup.getMusicGroupId());
 			tags = musicGroup.getName();
-			userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
-			userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
-			userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
+			if(musicGroup.getEducationalTeacherId() != null){
+				userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
+			}
+			if(musicGroup.getTeamTeacherId() != null){
+				userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
+			}
+			if(musicGroup.getDirectorUserId() != null){
+				userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
+			}
+			if(musicGroup.getTransactionTeacherId() != null){
+				userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
+			}
 		}else if(classGroup.getGroupType() == GroupType.PRACTICE){
 			PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
 			tags = practiceGroup.getName();
 			userRoleMap.put(practiceGroup.getUserId(), "指导老师");
-			userRoleMap.put(practiceGroup.getEducationalTeacherId(), "乐团主管");
+			if(practiceGroup.getEducationalTeacherId() != null){
+				userRoleMap.put(practiceGroup.getEducationalTeacherId(), "乐团主管");
+			}
 		}else if(classGroup.getGroupType() == GroupType.VIP){
 			VipGroup vipGroup = vipGroupDao.get(Long.parseLong(classGroup.getMusicGroupId()));
 			userRoleMap.put(vipGroup.getUserId(), "指导老师");
-			userRoleMap.put(vipGroup.getEducationalTeacherId(), "乐团主管");
+			if(vipGroup.getEducationalTeacherId() != null){
+				userRoleMap.put(vipGroup.getEducationalTeacherId(), "乐团主管");
+			}
 			tags = vipGroup.getName();
 		}
 		ImGroup imGroup = imGroupService.create(imGroupId, null, classGroup.getName(), tags, tags, tags, null, classGroup.getGroupType().getCode());
@@ -158,6 +174,51 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
+	public boolean join(Long imGroupId,String roleType, boolean isAdmin,ImGroup imGroup,SysUser user) {
+		if (imGroup == null) {
+			imGroup = imGroupDao.getLocked(imGroupId);
+		}
+		if (imGroup == null) {
+			joinGroup(imGroupId,user.getId(),roleType,isAdmin,new HashMap<>());
+			return true;
+		}
+		//检查用户是否已存在
+		List<ImGroupMember> imGroupMemberList = imGroupMemberDao.queryByImGroupIdAndUserId(imGroupId.toString(), user.getId().toString());
+		if(imGroupMemberList != null && imGroupMemberList.size() > 0){
+			return true;
+		}
+
+		ImGroupMember imGroupMember = new ImGroupMember();
+		Date date = new Date();
+
+		imGroupMember.setCreateTime(date);
+		imGroupMember.setImGroupId(imGroupId);
+		imGroupMember.setIsAdmin(isAdmin);
+		imGroupMember.setRoleType(roleType);
+		imGroupMember.setUpdateTime(date);
+		imGroupMember.setUserId(user.getId());
+		if (StringUtils.isBlank(roleType)) {
+			imGroupMember.setNickname(user.getUsername()==null?user.getRealName():user.getUsername());
+		} else {
+			imGroupMember.setNickname(user.getRealName()==null?user.getUsername():user.getRealName());
+		}
+
+		imGroupMemberDao.insert(imGroupMember);
+
+		imGroup.setMemberNum(imGroup.getMemberNum() + 1);
+		imGroup.setUpdateTime(date);
+		imGroupDao.update(imGroup);
+
+		String groupId = imGroup.getId().toString();
+
+		GroupMember groupMember = new GroupMember(user.getId().toString(), groupId);
+		imFeignService.groupJoin(new GroupModel(groupId, new GroupMember[] { groupMember }, imGroup.getName()));
+
+		return true;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
 	public boolean join(Long imGroupId, Map<Integer, String> userRoleMap) {
 		ImGroup imGroup = imGroupDao.getLocked(imGroupId);
 		if (imGroup == null) {
@@ -298,4 +359,29 @@ public class ImGroupMemberServiceImpl extends BaseServiceImpl<Long, ImGroupMembe
 		return true;
 	}
 
+	@Override
+	public void batchInsert(List<ImGroupMember> imGroupMemberList) {
+		imGroupMemberDao.batchInsert(imGroupMemberList);
+	}
+
+	@Override
+	public void batchDelete(List<ImGroupMember> imGroupMemberList) {
+		imGroupMemberDao.batchDelete(imGroupMemberList);
+	}
+
+	@Override
+	public void batchDeleteByGroupIdAndUserId(List<ImGroupMember> imGroupMemberList) {
+		imGroupMemberDao.batchDeleteByGroupIdAndUserId(imGroupMemberList);
+	}
+
+	@Override
+	public boolean isExit(String groupId, String userId) {
+		return imGroupMemberDao.isExit(groupId,userId);
+	}
+
+	@Override
+	public void delRepeat() {
+		imGroupMemberDao.delRepeat();
+	}
+
 }

+ 34 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -8,10 +8,12 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
 import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
+import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
@@ -60,6 +62,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 	@Autowired
 	private ClassGroupDao classGroupDao;
+	@Autowired
+	private EmployeeService employeeService;
 
 	private static ThreadLocal<Set<Integer>> organIds = new ThreadLocal<Set<Integer>>(){
 		@Override
@@ -258,6 +262,33 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.PROGRESS_MUSIC_GROUP_NUM)) {
 			saveData(indexBaseMonthDataDao.getMusicData(dayStr), dayStr, IndexDataType.PROGRESS_MUSIC_GROUP_NUM);
 		}
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(TRANSACTION_TEACHER_NUM)) {
+			List<SimpleUserDto> transactionTeachers = employeeService.findByRole("58", null);
+			Map<Integer, Integer> organTeacherNumMap = new HashMap<>();
+			for (SimpleUserDto transactionTeacher : transactionTeachers) {
+				Set<Integer> organIds = Arrays.stream(transactionTeacher.getOrganIds().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toSet());
+				for (Integer organId : organIds) {
+					if(organTeacherNumMap.containsKey(organId)){
+						organTeacherNumMap.put(organId, organTeacherNumMap.get(organId)+1);
+					}else{
+						organTeacherNumMap.put(organId, 1);
+					}
+				}
+			}
+			List<IndexBaseMonthData> datas = new ArrayList<>();
+			Date month = DateUtil.stringToDate(dayStr, "yyyy-MM-dd");
+			for (Map.Entry<Integer, Integer> organTeacherNumMapEntry : organTeacherNumMap.entrySet()) {
+				IndexBaseMonthData data = new IndexBaseMonthData();
+				data.setOrganId(organTeacherNumMapEntry.getKey());
+				data.setMonth(month);
+				BigDecimal num = new BigDecimal(organTeacherNumMapEntry.getValue());
+				data.setTotalNum(num);
+				data.setActivateNum(num);
+				data.setPercent(num);
+				datas.add(data);
+			}
+			saveData(datas, dayStr, IndexDataType.TRANSACTION_TEACHER_NUM);
+		}
 
 		//人事数据
 		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.TEACHER_NUM)) {
@@ -485,8 +516,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 			two.setErrorType(IndexErrorType.STUDENT_INFO);
 			two.setDesc(IndexErrorType.STUDENT_INFO.getMsg());
 			List<IndexErrInfoDto> twoChild = new ArrayList<>();
-			//学员请假异常提醒(获取前两个月的)
-			String format1 = DateUtil.format(DateUtil.addMonths(new Date(), -1), DateUtil.ISO_YEAR_MONTH_FORMAT);
+			//学员请假异常提醒(只提醒本月的异常)
+			String format1 = DateUtil.format(new Date(), DateUtil.ISO_YEAR_MONTH_FORMAT);
 			twoChild.add(new IndexErrInfoDto(IndexErrorType.STUDENT_ERROR_LEAVE, IndexErrorType.STUDENT_ERROR_LEAVE.getMsg(), indexBaseMonthDataDao.countStudentErrorLeave(organIds,format1,classGroupIds), null));
 
 			//未缴费学员数
@@ -903,7 +934,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		boolean flag2 = false;
 		if(!flag2){
 			//学员请假异常提醒(获取前两个月的)
-			String format1 = DateUtil.format(DateUtil.addMonths(date, -1), DateUtil.ISO_YEAR_MONTH_FORMAT);
+			String format1 = DateUtil.format(date, DateUtil.ISO_YEAR_MONTH_FORMAT);
 			int studentErrorLeaveNum = indexBaseMonthDataDao.countStudentErrorLeave(organIds,format1,classGroupIds);
 			if(studentErrorLeaveNum > 0){
 				flag2 = true;

+ 96 - 22
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -238,6 +238,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             throw new BizException("乐团初始状态错误");
         }
         musicGroup.setDelFlag(false);
+        CooperationOrgan cooperationOrgan = cooperationOrganDao.get(musicGroup.getCooperationOrganId());
+        if (cooperationOrgan.getEducationUserId() == null) {
+            throw new BizException("操作失败:请先配置合作单位: {} 关联的乐团主管", cooperationOrgan.getName());
+        }
+        musicGroup.setEducationalTeacherId(cooperationOrgan.getEducationUserId());
         // 保存乐团基本信息
         musicGroupDao.insert(musicGroup);
 
@@ -383,6 +388,13 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             student.setCurrentClass(studentPreRegistration.getCurrentClass());
             studentDao.insert(student);
             sysUserCashAccountDao.insert(new SysUserCashAccount(userId, "CNY"));
+        } else {
+            user.setUsername(studentPreRegistration.getUserName());
+            if (!user.getUserType().contains("STUDENT")) {
+                user.setUserType(user.getUserType() + ",STUDENT");
+            }
+            user.setUpdateTime(new Date());
+            teacherDao.updateUser(user);
         }
 
         studentPreRegistration.setCreateTime(date);
@@ -716,6 +728,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setOrganId(musicGroup.getOrganId());
         studentPaymentOrder.setRoutingOrganId(musicGroup.getOrganId());
         studentPaymentOrder.setUpdateTime(date);
+
+        if ("205".equals(studentPaymentOrder.getPaymentAccountNo())) {
+            studentPaymentOrder.setPaymentChannel("ADAPAY");
+        }
         studentPaymentOrderService.update(studentPaymentOrder);
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
 
@@ -887,6 +903,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         studentPaymentOrder.setOrganId(musicGroup.getOrganId());
         studentPaymentOrder.setRoutingOrganId(musicGroup.getOrganId());
         studentPaymentOrder.setUpdateTime(date);
+
+        if ("205".equals(studentPaymentOrder.getPaymentAccountNo())) {
+            studentPaymentOrder.setPaymentChannel("ADAPAY");
+        }
         studentPaymentOrderService.update(studentPaymentOrder);
         studentPaymentOrder.setVersion(studentPaymentOrder.getVersion() + 1);
 
@@ -1164,6 +1184,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (musicGroup.getDirectorUserId() != null) {
             userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
         }
+        if (musicGroup.getTransactionTeacherId() != null) {
+            userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
+        }
         // 添加成员
         imGroupMemberService.join(Long.parseLong(musicGroupId), userRoleMap);
         Set<Integer> roleIds = new HashSet<>(1);
@@ -1790,6 +1813,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     if (studentPaymentOrder != null && studentPaymentOrder.getPaymentAccountNo() != null && studentPaymentOrder.getPaymentAccountNo().equals("200")) {
                         musicGroupSubjectPlan.setPaidZeroNum(musicGroupSubjectPlan.getPaidZeroNum() - 1);
                         musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
+                    } else if (studentPaymentOrder != null && studentPaymentOrder.getPaymentAccountNo() == null) {
+                        musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
                     }
                 } else {
                     musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
@@ -2021,6 +2046,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 if (studentPaymentOrder != null && studentPaymentOrder.getPaymentAccountNo() != null && studentPaymentOrder.getPaymentAccountNo().equals("200")) {
                     musicGroupSubjectPlan.setPaidZeroNum(musicGroupSubjectPlan.getPaidZeroNum() - 1);
                     musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
+                } else if (studentPaymentOrder != null && studentPaymentOrder.getPaymentAccountNo() == null) {
+                    musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
                 }
             } else {
                 musicGroupSubjectPlan.setPaidStudentNum(musicGroupSubjectPlan.getPaidStudentNum() - 1);
@@ -2559,28 +2586,32 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (classGroups == null || classGroups.size() == 0) {
             return;
         }
-        Integer teamTeacherId = newMusicGroup.getTeamTeacherId();
-        Integer educationalTeacherId = newMusicGroup.getEducationalTeacherId();
-
-        Integer oldDirectorUserId = oldMusicGroup.getDirectorUserId();
-        if (oldDirectorUserId == null) {
-            oldDirectorUserId = teamTeacherId;
+        List<Integer> quitUserIdList = new ArrayList<>();
+        if (oldMusicGroup.getTeamTeacherId() != null) {
+            quitUserIdList.add(oldMusicGroup.getTeamTeacherId());
         }
-        Integer directorUserId = newMusicGroup.getDirectorUserId();
-        if (directorUserId == null) {
-            directorUserId = teamTeacherId;
+        if (oldMusicGroup.getEducationalTeacherId() != null) {
+            quitUserIdList.add(oldMusicGroup.getEducationalTeacherId());
+        }
+        if (oldMusicGroup.getDirectorUserId() != null) {
+            quitUserIdList.add(oldMusicGroup.getDirectorUserId());
+        }
+        if (oldMusicGroup.getTransactionTeacherId() != null) {
+            quitUserIdList.add(oldMusicGroup.getTransactionTeacherId());
+        }
+        Map<Integer, String> userRoleMap = new HashMap<>(4);
+        if (newMusicGroup.getTeamTeacherId() != null) {
+            userRoleMap.put(newMusicGroup.getTeamTeacherId(), "运营主管");
+        }
+        if (newMusicGroup.getEducationalTeacherId() != null) {
+            userRoleMap.put(newMusicGroup.getEducationalTeacherId(), "乐团主管");
+        }
+        if (newMusicGroup.getDirectorUserId() != null) {
+            userRoleMap.put(newMusicGroup.getDirectorUserId(), "乐队指导");
+        }
+        if (newMusicGroup.getTransactionTeacherId() != null) {
+            userRoleMap.put(newMusicGroup.getTransactionTeacherId(), "衔接老师");
         }
-
-        List<Integer> quitUserIdList = new ArrayList<Integer>();
-        quitUserIdList.add(oldMusicGroup.getTeamTeacherId());
-        quitUserIdList.add(oldMusicGroup.getEducationalTeacherId());
-        quitUserIdList.add(oldDirectorUserId);
-
-        Map<Integer, String> userRoleMap = new HashMap<Integer, String>();
-        userRoleMap.put(directorUserId, "乐队指导");
-        userRoleMap.put(educationalTeacherId, "乐团主管");
-        userRoleMap.put(teamTeacherId, "运营主管");
-
         classGroups.forEach(e -> {
             imGroupMemberService.quit(e.getId().longValue(), quitUserIdList);
             imGroupMemberService.join(e.getId().longValue(), userRoleMap);
@@ -2611,9 +2642,52 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //如果已生成课表,那么修改未上课时教学点
             courseScheduleDao.updateCourseScheduleSchool("MUSIC", musicGroupId, musicGroup.getSchoolId());
         }
+        CooperationOrgan cooperationOrgan = cooperationOrganDao.get(musicGroup.getCooperationOrganId());
+        if (cooperationOrgan.getEducationUserId() == null) {
+            throw new BizException("操作失败:请先配置合作单位: {} 关联的乐团主管", cooperationOrgan.getName());
+        }
+        boolean refresh = false;
+        musicGroup.setEducationalTeacherId(cooperationOrgan.getEducationUserId());
         if (group.getStatus() == MusicGroupStatusEnum.PROGRESS) {
+            refresh = true;
             updateTeamTeacher(group, musicGroup);
         }
+        //不是导入的乐团
+        if (musicGroupId.length() > 10) {
+            //是否有预报名的群聊
+            ImGroup imGroup = imGroupService.get(Long.parseLong(musicGroupId));
+            if (imGroup != null) {
+                refresh = true;
+                List<Integer> quitUserIdList = new ArrayList<>();
+                if (group.getTeamTeacherId() != null) {
+                    quitUserIdList.add(group.getTeamTeacherId());
+                }
+                if (group.getEducationalTeacherId() != null) {
+                    quitUserIdList.add(group.getEducationalTeacherId());
+                }
+                if (group.getDirectorUserId() != null) {
+                    quitUserIdList.add(group.getDirectorUserId());
+                }
+                if (group.getTransactionTeacherId() != null) {
+                    quitUserIdList.add(group.getTransactionTeacherId());
+                }
+                Map<Integer, String> userRoleMap = new HashMap<>(4);
+                if (musicGroup.getTeamTeacherId() != null) {
+                    userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
+                }
+                if (musicGroup.getEducationalTeacherId() != null) {
+                    userRoleMap.put(musicGroup.getEducationalTeacherId(), "乐团主管");
+                }
+                if (musicGroup.getDirectorUserId() != null) {
+                    userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
+                }
+                if (musicGroup.getTransactionTeacherId() != null) {
+                    userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
+                }
+                imGroupMemberService.quit(Long.parseLong(musicGroupId), quitUserIdList);
+                imGroupMemberService.join(Long.parseLong(musicGroupId), userRoleMap);
+            }
+        }
 
         Date date = new Date();
         //缴费方式不同
@@ -2639,7 +2713,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (subFeeSettingDto.getMusicGroupPaymentEntities() != null && subFeeSettingDto.getMusicGroupPaymentEntities().size() > 0) {
             musicGroupPaymentEntitiesDao.batchAdd(subFeeSettingDto.getMusicGroupPaymentEntities(), musicGroupId);
         }
-        if (group.getStatus() == MusicGroupStatusEnum.PROGRESS) {
+        if (refresh) {
             imUserFriendService.refreshGroupImUserFriend(musicGroupId, GroupType.MUSIC);
         }
         //记录操作日志
@@ -3012,7 +3086,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
     @Override
     public List<MusicGroup> findByCooperationId(Integer cooperationId) {
-        return musicGroupDao.findByCooperationId(cooperationId,"PROGRESS");
+        return musicGroupDao.findByCooperationId(cooperationId);
     }
 
 }

+ 26 - 14
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ReplacementInstrumentActivityServiceImpl.java

@@ -31,6 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
+
 import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
@@ -112,7 +113,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
         }
         ReplacementInstrumentCooperation replacementInstrumentCooperation = replacementInstrumentCooperationDao.get(replacementInstrumentActivity.getReplacementInstrumentCooperationId());
         //如果提交过调查问卷,那么覆盖之前的记录
-        ReplacementInstrumentActivity activity = replacementInstrumentActivityDao.findByUserId(replacementInstrumentActivity.getCooperationOrganId(), sysUser.getId(),replacementInstrumentCooperation.getId());
+        ReplacementInstrumentActivity activity = replacementInstrumentActivityDao.findByUserId(replacementInstrumentActivity.getCooperationOrganId(), sysUser.getId(), replacementInstrumentCooperation.getId());
         if (replacementInstrumentCooperation != null && replacementInstrumentCooperation.getOpenPay().equals(YesOrNoEnum.YES)) {
             replacementInstrumentActivity.setOpenFlag(1);
         }
@@ -188,9 +189,9 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             replacementInstrumentActivity.setId(activity.getId());
             replacementInstrumentActivityDao.update(replacementInstrumentActivity);
 
-            if(questionnaireUserResultList != null && questionnaireUserResultList.size() > 0){
+            if (questionnaireUserResultList != null && questionnaireUserResultList.size() > 0) {
                 //删除原来的问卷结果
-                questionnaireUserResultDao.delByActiveIdAndUserId(activity.getReplacementInstrumentCooperationId(),sysUser.getId());
+                questionnaireUserResultDao.delByActiveIdAndUserId(activity.getReplacementInstrumentCooperationId(), sysUser.getId());
             }
             if (replacementInstrumentActivity.getInstrumentsId() != null && (activity.getInstrumentsId() == null || activity.getInstrumentsId() == 0)) {
                 sendPush = true;
@@ -199,7 +200,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             replacementInstrumentActivityDao.insert(replacementInstrumentActivity);
             sendPush = true;
         }
-        if(questionnaireUserResultList != null && questionnaireUserResultList.size() > 0){
+        if (questionnaireUserResultList != null && questionnaireUserResultList.size() > 0) {
             for (QuestionnaireUserResult result : questionnaireUserResultList) {
                 result.setUserId(sysUser.getId());
                 result.setQuestionnaireTopicId(topicId);
@@ -231,8 +232,8 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
 
 
     @Override
-    public ReplacementInstrumentActivity findByUserId(Integer cooperationOrganId, Integer userId,Integer cooperationId) {
-        return replacementInstrumentActivityDao.findByUserId(cooperationOrganId, userId,cooperationId);
+    public ReplacementInstrumentActivity findByUserId(Integer cooperationOrganId, Integer userId, Integer cooperationId) {
+        return replacementInstrumentActivityDao.findByUserId(cooperationOrganId, userId, cooperationId);
     }
 
     @Override
@@ -248,7 +249,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
             ReplacementInstrumentCooperation cooperation = replacementInstrumentCooperationDao.get(queryInfo.getCooperationId());
             CooperationOrgan cooperationOrgan = cooperationOrganDao.get(cooperation.getCooperationOrganId());
             QuestionnaireTopic questionnaireTopic = questionnaireTopicDao.get(cooperation.getTopicId());
-            if(questionnaireTopic != null){
+            if (questionnaireTopic != null) {
                 head.setTopicName(questionnaireTopic.getTitle());
             }
             head.setCooperationOrganName(cooperationOrgan.getName());
@@ -480,11 +481,22 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
 
         List<ReplacementInstrumentActivityStatDto> dataList = new ArrayList<>();
         int count = replacementInstrumentActivityDao.getCount(params);
+        pageInfo.setTotal(count);
 
-        if (count > 0) {
-            pageInfo.setTotal(count);
+        if (queryInfo.getPage() <= pageInfo.getTotalPage()) {
             params.put("offset", pageInfo.getOffset());
             dataList = replacementInstrumentActivityDao.getPageList(params);
+            List<Integer> ids = dataList.stream().map(ReplacementInstrumentActivity::getId).collect(Collectors.toList());
+            if (ids.size() > 0) {
+                List<StudentPaymentOrder> activityPageOrders = replacementInstrumentActivityDao.getActivityOrder(ids);
+                Map<Integer, List<StudentPaymentOrder>> activityOrderMap = activityPageOrders.stream().collect(Collectors.groupingBy(e -> Integer.parseInt(e.getMusicGroupId())));
+                for (ReplacementInstrumentActivityStatDto replacementInstrumentActivityStatDto : dataList) {
+                    if (!activityOrderMap.containsKey(replacementInstrumentActivityStatDto.getId())) continue;
+                    List<StudentPaymentOrder> activityOrders = activityOrderMap.get(replacementInstrumentActivityStatDto.getId());
+                    replacementInstrumentActivityStatDto.setActualAmount(activityOrders.get(0).getActualAmount());
+                    replacementInstrumentActivityStatDto.setBalance(activityOrders.get(0).getBalancePaymentAmount());
+                }
+            }
         }
         pageInfo.setRows(dataList);
         return pageInfo;
@@ -552,13 +564,13 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
     }
 
     @Transactional(rollbackFor = Exception.class)
-    public void resultSync(){
+    public void resultSync() {
         //获取所有问卷结果
         List<ReplacementInstrumentActivity> activities = replacementInstrumentActivityDao.findAll(new HashMap<>());
         List<QuestionnaireUserResult> questionnaireUserResultList = new ArrayList<>();
         for (ReplacementInstrumentActivity activity : activities) {
             String questionResult = activity.getQuestionResult();
-            if(StringUtils.isEmpty(questionResult)){
+            if (StringUtils.isEmpty(questionResult)) {
                 continue;
             }
             String[] split = questionResult.split("");
@@ -573,7 +585,7 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
                 result.setActiveId(activity.getReplacementInstrumentCooperationId());
                 result.setActiveType(QuestionnaireActiveTypeEnum.REPLACEMENT);
                 result.setQuestionnaireQuestionId(question.getId());
-                result.setQuestionnaireQuestionItemIdList(item.getId() + (Integer.parseInt(split[i]) == 0?1:0) + "");
+                result.setQuestionnaireQuestionItemIdList(item.getId() + (Integer.parseInt(split[i]) == 0 ? 1 : 0) + "");
                 result.setQuestionnaireTopicId(question.getQuestionnaireTopicId());
                 questionnaireUserResultList.add(result);
             }
@@ -582,8 +594,8 @@ public class ReplacementInstrumentActivityServiceImpl extends BaseServiceImpl<In
     }
 
     @Override
-    public ReplacementInstrumentActivity queryUserInfo(Integer cooperationOrganId,SysUser user,Integer cooperationId) {
-        ReplacementInstrumentActivity replacementInstrumentActivity = findByUserId(cooperationOrganId, user.getId(),cooperationId);
+    public ReplacementInstrumentActivity queryUserInfo(Integer cooperationOrganId, SysUser user, Integer cooperationId) {
+        ReplacementInstrumentActivity replacementInstrumentActivity = findByUserId(cooperationOrganId, user.getId(), cooperationId);
         ReplacementInstrumentCooperation cooperation = replacementInstrumentCooperationDao.get(cooperationId);
         if (replacementInstrumentActivity == null) {
             Student student = studentService.get(user.getId());

+ 37 - 50
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundServiceImpl.java

@@ -50,8 +50,6 @@ public class SoundServiceImpl implements SoundService {
     @Autowired
     private SysMusicScoreDao sysMusicScoreDao;
     @Autowired
-    private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
-    @Autowired
     private IdGeneratorService idGeneratorService;
 
     /**
@@ -62,23 +60,15 @@ public class SoundServiceImpl implements SoundService {
      */
     private List<Double> beatExtractor(byte[] bytes, String url) throws UnsupportedAudioFileException {
         List<Double> times = new ArrayList<>();
-        int size = 256;
-        int overlap = 128;
+        int size = 512;
+        int overlap = 256;
         AudioDispatcher dispatcher = StringUtils.isBlank(url)?getFromByteArray(bytes, size, overlap):getFromFile(url, size, overlap);
 
-        ComplexOnsetDetector detector = new ComplexOnsetDetector(size);
-        BeatRootOnsetEventHandler handler = new BeatRootOnsetEventHandler();
-        detector.setHandler(handler);
-
+        ComplexOnsetDetector detector = new ComplexOnsetDetector(size,0.7,0.1);
+        detector.setHandler((double time, double salience) -> times.add(time));
         dispatcher.addAudioProcessor(detector);
-        dispatcher.run();
 
-        handler.trackBeats(new OnsetHandler() {
-            @Override
-            public void handleOnset(double time, double salience) {
-                times.add(time);
-            }
-        });
+        dispatcher.run();
         return times;
     }
 
@@ -93,7 +83,6 @@ public class SoundServiceImpl implements SoundService {
         List<Double> pitchs = new ArrayList<>();
         int size = 2048;
         int overlap = 0;
-        Double[] t = new Double[1];
         final SilenceDetector silenceDetecor = new SilenceDetector();
         AudioDispatcher dispatcher = StringUtils.isBlank(url)?getFromByteArray(bytes, size, overlap):getFromFile(url, size, overlap);
         dispatcher.addAudioProcessor(silenceDetecor);
@@ -105,13 +94,11 @@ public class SoundServiceImpl implements SoundService {
 
             @Override
             public boolean process(AudioEvent audioEvent) {
-                t[0] = audioEvent.getEndTimeStamp();
                 pitchs.add(Double.isInfinite(silenceDetecor.currentSPL())?0:silenceDetecor.currentSPL());
                 return true;
             }
         });
         dispatcher.run();
-        pitchs.add(t[0]);
         return pitchs;
     }
 
@@ -131,35 +118,41 @@ public class SoundServiceImpl implements SoundService {
 
     @Override
     public HttpResponseResult compare(MultipartFile record, Integer musicScoreId) {
+        if(record.getSize()<1024){
+            throw new BizException("录音时间太短");
+        }
         SysMusicScore sysMusicScore = sysMusicScoreDao.get(musicScoreId);
         if(Objects.isNull(sysMusicScore)|| StringUtils.isBlank(sysMusicScore.getUrl())){
             throw new BizException("伴奏信息错误");
         }
         Map<String, BigDecimal> result = new HashMap<>();
 
+        LOGGER.info("录音文件大小:{}MB,伴奏编号:{},源文件:{}", record.getSize()/1048576f, musicScoreId, sysMusicScore.getUrl());
+        String tmpDir = FileUtils.getTempDirectoryPath() + "/";
+
+        BigDecimal oneHandred = new BigDecimal(100);
+        //总分
         BigDecimal score = BigDecimal.ZERO;
+        //相似度
         BigDecimal intonation = BigDecimal.ZERO;
+        //节奏
         BigDecimal cadence = BigDecimal.ZERO;
+        //完整度
         BigDecimal integrity = BigDecimal.ZERO;
         File f = null;
         File f_r = null;
         try {
+            //存储录音文件
+            String filePath_r =  tmpDir + idGeneratorService.generatorId("sound") + "_r.wav";
+            f_r = new File(filePath_r);
+            FileUtils.copyToFile(record.getInputStream(), f_r);
+
+            //下载原音文件
             URL url = new URL(sysMusicScore.getUrl());
-            String filePath = FileUtils.getTempDirectoryPath()+ idGeneratorService.generatorId("sound") + ".mp3";
+            String filePath = tmpDir + idGeneratorService.generatorId("sound") + "_s.mp3";
             f = new File(filePath);
             FileUtils.copyURLToFile(url, f);
 
-            LOGGER.info("文件名:{},伴奏编号:{},源文件:{}", record.getOriginalFilename(), musicScoreId, filePath);
-
-            BigDecimal oneHandred = new BigDecimal(100);
-
-            BigDecimal l_s = new BigDecimal(0);
-            BigDecimal l_r = new BigDecimal(0);
-
-            String filePath_r = FileUtils.getTempDirectoryPath()+ idGeneratorService.generatorId("sound") + ".mp3";
-            f_r = new File(filePath_r);
-            FileUtils.copyToFile(record.getInputStream(), f_r);
-
             //相似度
             List<Double> pitchs_s = soundPressureLevelExtractor(null, filePath);
             List<Double> pitchs_r = soundPressureLevelExtractor(null, filePath_r);
@@ -169,22 +162,16 @@ public class SoundServiceImpl implements SoundService {
                 maxLength = pitchs_r.size();
             }
 
-            if(maxLength>0){
-                l_s = new BigDecimal(pitchs_s.get(pitchs_s.size() - 1));
-                pitchs_s.remove(pitchs_s.size() - 1);
-                l_r = new BigDecimal(pitchs_r.get(pitchs_r.size() - 1));
-                pitchs_r.remove(pitchs_r.size() - 1);
-                maxLength = maxLength-1;
-            }
-
             double pitchSize = 0;
             double allPitchGap = 0;
             for(int i=0;i<maxLength;i++){
                 double pitch1 = Math.abs(pitchs_s.get(i));
                 double pitch2 = Math.abs(pitchs_r.get(i));
                 double pitchGap = Math.abs(pitch1-pitch2);
-                if(pitchGap>pitch1){
+                if(pitchGap>pitch1||pitchGap>20){
                     pitchGap = pitch1;
+                }else if(pitchGap<5){
+                    pitchGap = 0;
                 }
                 allPitchGap+=pitchGap;
                 pitchSize+=pitch1;
@@ -202,7 +189,7 @@ public class SoundServiceImpl implements SoundService {
             float sameTimes = 0;
             for (Double time1 : times_s) {
                 for (Double time2 : times_r) {
-                    if(Math.abs(time2-time1)<1.5){
+                    if(Math.abs(time2-time1)<1.3){
                         sameTimes++;
                         break;
                     }
@@ -210,21 +197,21 @@ public class SoundServiceImpl implements SoundService {
             }
             double cadence_d = 0;
             sameTimes = sameTimes>times_r.size()?times_r.size():sameTimes;
+            int allTimes = times_s.size();
             if (times_r.size()>0){
-                cadence_d = sameTimes/times_r.size();
+                cadence_d = sameTimes/allTimes;
             }
             cadence = new BigDecimal(cadence_d).multiply(oneHandred).setScale(0, BigDecimal.ROUND_HALF_UP);
 
-            integrity = new BigDecimal(0);
-            if(l_r.compareTo(BigDecimal.ZERO)<=0||l_s.compareTo(BigDecimal.ZERO)<=0){
-
-            }else if(l_r.compareTo(l_s)<0){
-                integrity = l_r.divide(l_s, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHandred).setScale(0, BigDecimal.ROUND_HALF_UP);
-            }else{
-                integrity = new BigDecimal(100);
+            //完整度
+            BigDecimal time_s = new BigDecimal(times_s.size());
+            BigDecimal time_r = new BigDecimal(times_r.size());
+            if(time_s.compareTo(time_r)<0){
+                time_r = time_s;
             }
+            integrity = time_r.divide(time_s, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHandred).setScale(0, BigDecimal.ROUND_HALF_UP);
 
-            score = intonation.add(cadence).add(integrity).divide(new BigDecimal(3), 0, BigDecimal.ROUND_HALF_UP);
+            score = intonation.multiply(new BigDecimal(0.4)).add(cadence.multiply(new BigDecimal(0.4))).add(integrity.multiply(new BigDecimal(0.2))).setScale(0, BigDecimal.ROUND_HALF_UP);
 
 
         } catch (UnsupportedAudioFileException e) {
@@ -236,7 +223,7 @@ public class SoundServiceImpl implements SoundService {
                 f.delete();
             }
             if(f_r!=null){
-                f_r.delete();
+                f_r.deleteOnExit();
             }
         }
 

+ 139 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -5,15 +5,15 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -30,6 +30,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -37,8 +38,6 @@ import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
-
 @Service
 public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, StudentCourseHomework> implements StudentCourseHomeworkService {
 
@@ -71,9 +70,13 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     @Autowired
     private MusicGroupDao musicGroupDao;
     @Autowired
+    private StudentRegistrationDao studentRegistrationDao;
+    @Autowired
     private VipGroupDao vipGroupDao;
     @Autowired
     private PracticeGroupDao practiceGroupDao;
+    @Autowired
+    private ExtracurricularExercisesReplyDao extracurricularExercisesReplyDao;
 
     @Override
     public BaseDAO<Long, StudentCourseHomework> getDAO() {
@@ -277,11 +280,8 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     }
 
     @Override
-    public List<StudentCourseHomework> findStudentCourseHomeworkByCourse(Long courseSchedule, String userName) {
-        if (Objects.isNull(courseSchedule)) {
-            throw new BizException("请指定课程");
-        }
-        return studentCourseHomeworkDao.findByCourseSchedule(courseSchedule, userName);
+    public List<StudentCourseHomework> findStudentCourseHomeworkByCourse(Long courseSchedule, Long homeworkId, String userName) {
+        return studentCourseHomeworkDao.findByCourseSchedule(courseSchedule, homeworkId, userName);
     }
 
     @Override
@@ -479,4 +479,133 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+
+    @Override
+    public PageInfo<EduHomeworkCardDto> getEduCourseHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo) {
+        PageInfo<EduHomeworkCardDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        int count = studentCourseHomeworkDao.countEduCourseHomeworkList(params);
+        pageInfo.setTotal(count);
+        params.put("offset", pageInfo.getOffset());
+        List<EduHomeworkCardDto> dataList = studentCourseHomeworkDao.getEduCourseHomeworkList(params);
+
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public PageInfo<EduHomeworkStatDto> queryEduHomeworkStatList(StudentCourseHomeWorkQueryInfo queryInfo) {
+        PageInfo<EduHomeworkStatDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        params.put("musicGroupStatus", MusicGroupStatusEnum.PROGRESS.getCode());
+
+        int count = musicGroupDao.queryCount(params);
+        pageInfo.setTotal(count);
+        params.put("offset", pageInfo.getOffset());
+        List<MusicGroup> musicGroups = musicGroupDao.queryPage(params);
+
+        List<EduHomeworkStatDto> dataList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(musicGroups)){
+            List<String> groupIds = musicGroups.stream().map(MusicGroup::getId).collect(Collectors.toList());
+            List<StudentRegistration> studentRegistrations = studentRegistrationDao.findByMusicGroupIds(groupIds, StudentMusicGroupStatusEnum.NORMAL);
+            Map<String, Long> groupStudentNumMap = studentRegistrations.stream().collect(Collectors.groupingBy(StudentRegistration::getMusicGroupId, Collectors.counting()));
+
+            BigDecimal oneHundred = new BigDecimal(100);
+            BigDecimal zero = new BigDecimal("0.00");
+
+            List<EduHomeworkCardDto> courseHomeworkStudentNumList = studentCourseHomeworkDao.countHomeworkStudentInfoWithMusicGroup(groupIds, queryInfo.getStartTime(), queryInfo.getEndTime());
+            List<EduHomeworkCardDto> homeworkStudentNumList = extracurricularExercisesReplyDao.countEduHomeworkStudentNumWithMusicGroup(groupIds, queryInfo.getStartTime(), queryInfo.getEndTime());
+            homeworkStudentNumList.addAll(courseHomeworkStudentNumList);
+            Map<String, List<EduHomeworkCardDto>> groupStudentListMap = homeworkStudentNumList.stream().collect(Collectors.groupingBy(EduHomeworkCardDto::getGroupId));
+            for (MusicGroup mg : musicGroups) {
+                EduHomeworkStatDto ehs = new EduHomeworkStatDto();
+                ehs.setGroupId(mg.getId());
+                ehs.setGroupName(mg.getName());
+                if(groupStudentNumMap.containsKey(mg.getId())){
+                    ehs.setGroupStudentNum(Math.toIntExact(groupStudentNumMap.get(mg.getId())));
+                }else{
+                    ehs.setGroupStudentNum(0);
+                }
+                int exceptStudentNum = 0;
+                int submitStudentNum = 0;
+                if(groupStudentListMap.containsKey(mg.getId())){
+                    List<EduHomeworkCardDto> eduHomeworkCardDtos = groupStudentListMap.get(mg.getId());
+                    for (EduHomeworkCardDto eduHomeworkCardDto : eduHomeworkCardDtos) {
+                        exceptStudentNum += eduHomeworkCardDto.getExceptStudentNum();
+                        submitStudentNum += eduHomeworkCardDto.getSubmitStudentNum();
+                    }
+                }
+                ehs.setExceptStudentNum(exceptStudentNum);
+                ehs.setSubmitStudentNum(submitStudentNum);
+                if(exceptStudentNum<=0){
+                    ehs.setSubmitRate(zero);
+                }else{
+                    ehs.setSubmitRate(new BigDecimal(submitStudentNum).divide(new BigDecimal(exceptStudentNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred));
+                }
+                dataList.add(ehs);
+            }
+        }
+
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public List<EduHomeworkStatDto> queryEduHomeworkStatDetail(StudentCourseHomeWorkQueryInfo queryInfo) {
+        List<EduHomeworkStatDto> dataList = new ArrayList<>();
+        MusicGroup musicGroup = musicGroupDao.get(queryInfo.getGroupId());
+        if(Objects.isNull(musicGroup)){
+            return dataList;
+        }
+        List<StudentRegistration> studentRegistrations = studentRegistrationDao.findByMusicGroupIds(Arrays.asList(queryInfo.getGroupId()), StudentMusicGroupStatusEnum.NORMAL);
+        Map<Integer, Long> subjectStudentNumMap = studentRegistrations.stream().collect(Collectors.groupingBy(StudentRegistration::getActualSubjectId, Collectors.counting()));
+
+        Map<Integer, Subject> idSubjectMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(subjectStudentNumMap)){
+            List<Subject> subjects = subjectDao.findBySubjectIds(new ArrayList<>(subjectStudentNumMap.keySet()));
+            idSubjectMap = subjects.stream().collect(Collectors.toMap(Subject::getId, s -> s, (s1, s2) -> s1));
+        }
+
+        BigDecimal oneHundred = new BigDecimal(100);
+        BigDecimal zero = new BigDecimal("0.00");
+
+        List<EduHomeworkCardDto> courseHomeworkStudentNumList = studentCourseHomeworkDao.countHomeworkSubjectStudentInfoWithMusicGroup(queryInfo.getGroupId(), queryInfo.getStartTime(), queryInfo.getEndTime());
+        List<EduHomeworkCardDto> homeworkStudentNumList = extracurricularExercisesReplyDao.countEduHomeworkSubjectStudentNumWithMusicGroup(queryInfo.getGroupId(), queryInfo.getStartTime(), queryInfo.getEndTime());
+        homeworkStudentNumList.addAll(courseHomeworkStudentNumList);
+        Map<Integer, List<EduHomeworkCardDto>> subjectStudentListMap = homeworkStudentNumList.stream().collect(Collectors.groupingBy(EduHomeworkCardDto::getSubjectId));
+        for (Map.Entry<Integer, Long> subjectStudentNumEntry : subjectStudentNumMap.entrySet()) {
+            EduHomeworkStatDto ehs = new EduHomeworkStatDto();
+            if(idSubjectMap.containsKey(subjectStudentNumEntry.getKey())){
+                ehs.setSubjectName(idSubjectMap.get(subjectStudentNumEntry.getKey()).getName());
+            }
+            ehs.setGroupId(queryInfo.getGroupId());
+            ehs.setGroupName(musicGroup.getName());
+            if(subjectStudentNumMap.containsKey(subjectStudentNumEntry.getKey())){
+                ehs.setGroupStudentNum(Math.toIntExact(subjectStudentNumMap.get(subjectStudentNumEntry.getKey())));
+            }else{
+                ehs.setGroupStudentNum(0);
+            }
+            int exceptStudentNum = 0;
+            int submitStudentNum = 0;
+            if(subjectStudentListMap.containsKey(subjectStudentNumEntry.getKey())){
+                List<EduHomeworkCardDto> eduHomeworkCardDtos = subjectStudentListMap.get(subjectStudentNumEntry.getKey());
+                for (EduHomeworkCardDto eduHomeworkCardDto : eduHomeworkCardDtos) {
+                    exceptStudentNum += eduHomeworkCardDto.getExceptStudentNum();
+                    submitStudentNum += eduHomeworkCardDto.getSubmitStudentNum();
+                }
+            }
+            ehs.setExceptStudentNum(exceptStudentNum);
+            ehs.setSubmitStudentNum(submitStudentNum);
+            if(exceptStudentNum<=0){
+                ehs.setSubmitRate(zero);
+            }else{
+                ehs.setSubmitRate(new BigDecimal(submitStudentNum).divide(new BigDecimal(exceptStudentNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP).multiply(oneHundred));
+            }
+            dataList.add(ehs);
+        }
+        return dataList;
+    }
 }

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

@@ -136,7 +136,7 @@ public class StudentManageServiceImpl implements StudentManageService {
             dataList = studentManageDao.findStudentsByOrganId(params);
         }
         if (dataList == null) {
-            dataList = new ArrayList<StudentManageListDto>();
+            dataList = new ArrayList<>();
         }
         pageInfo.setRows(dataList);
 
@@ -681,6 +681,8 @@ public class StudentManageServiceImpl implements StudentManageService {
         if (sysUser1 != null && !userId.equals(sysUser1.getId())) {
             throw new BizException("手机号已被占用");
         }
+        //不更新真实姓名
+        student.setRealName(null);
         sysUserFeignService.updateSysUser(student);
 
         student.setUserId(student.getId());
@@ -875,8 +877,13 @@ public class StudentManageServiceImpl implements StudentManageService {
         int count = indexBaseMonthDataDao.countStudentErrorLeave1(params);
         List<StudentErrorLeaveDto> dataList = new ArrayList<>();
         if (count > 0) {
+            //获取近两个月异常请假次数
+            Map<Integer,BigDecimal> leaveNumMap = MapUtil.convertIntegerMap(indexBaseMonthDataDao.getStudentErrorLeaveNumMap(params));
             pageInfo.setTotal(count);
             dataList = indexBaseMonthDataDao.queryStudentErrorLeave(params);
+            for (StudentErrorLeaveDto studentErrorLeaveDto : dataList) {
+                studentErrorLeaveDto.setTotalNum(leaveNumMap.get(studentErrorLeaveDto.getUserId()).intValue());
+            }
         }
         pageInfo.setRows(dataList);
         return pageInfo;

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

@@ -90,6 +90,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
     private StudentInstrumentService studentInstrumentService;
     @Autowired
     private ReplacementInstrumentActivityService replacementInstrumentActivityService;
+    @Autowired
+    private ChildrenDayReserveService childrenDayReserveService;
 
     @Override
     public BaseDAO<Long, StudentPaymentOrder> getDAO() {
@@ -374,6 +376,8 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
             studentInstrumentService.orderCallback(order);
         } else if (order.getType().equals(OrderTypeEnum.REPLACEMENT)) {
             replacementInstrumentActivityService.orderCallback(order);
+        }else if (order.getType().equals(OrderTypeEnum.DEGREE)) {
+            childrenDayReserveService.orderCallback(order);
         }
     }
 

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

@@ -331,9 +331,16 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         }
         sysUser.setPhone(studentRegistration.getParentsPhone());
         sysUser.setOrganId(studentRegistration.getOrganId());
-        sysUser.setRealName(studentRegistration.getParentsName());
 
-        sysUser.setUsername(studentRegistration.getName());
+        Boolean updateNameFlag = false;
+//        if (sysUser.getRealName() == null) {
+//            sysUser.setRealName(studentRegistration.getParentsName());
+//        }
+
+        if (StringUtils.isEmpty(sysUser.getUsername())) {
+            sysUser.setUsername(studentRegistration.getName());
+            updateNameFlag = true;
+        }
         sysUser.setGender(studentRegistration.getGender());
         sysUser.setBirthdate(studentRegistration.getBirthdate());
         sysUser.setCreateTime(date);
@@ -362,8 +369,12 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         student.setCurrentGradeNum(studentRegistration.getCurrentGradeNum());
         student.setCurrentClass(studentRegistration.getCurrentClass());
         studentDao.update(student);
-        imGroupDao.updateNickname(userId, studentRegistration.getName());
-        imGroupDao.updateUserFriendNickname(userId, studentRegistration.getName());
+
+        if (updateNameFlag) {
+            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);
@@ -691,11 +702,11 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 //新增user
                 sysUser = new SysUser();
                 sysUser.setPhone(studentRegistration.getParentsPhone());
-                sysUser.setRealName(studentRegistration.getParentsName());
+//                sysUser.setRealName(studentRegistration.getParentsName());
                 sysUser.setUsername(studentRegistration.getName());
                 sysUser.setGender(studentRegistration.getGender());
                 sysUser.setUserType("STUDENT");
-                sysUser.setIdCardNo(studentRegistration.getIdCardNo());
+//                sysUser.setIdCardNo(studentRegistration.getIdCardNo());
                 sysUser.setOrganId(musicGroup.getOrganId());
                 sysUser.setBirthdate(studentRegistration.getBirthdate());
                 teacherDao.addSysUser(sysUser);
@@ -723,7 +734,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     sysUser.setUserType(sysUser.getUserType() + ",STUDENT");
                 }
                 sysUser.setPhone(studentRegistration.getParentsPhone());
-                sysUser.setRealName(studentRegistration.getParentsName());
+//                sysUser.setRealName(studentRegistration.getParentsName());
                 sysUser.setUsername(studentRegistration.getName());
                 sysUser.setGender(studentRegistration.getGender());
                 sysUser.setOrganId(musicGroup.getOrganId());
@@ -1213,6 +1224,8 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 if (studentPaymentOrder.getPaymentAccountNo() != null && studentPaymentOrder.getPaymentAccountNo().equals("200")) {
                     musicOneSubjectClassPlan.setPaidZeroNum(musicOneSubjectClassPlan.getPaidZeroNum() - 1);
                     musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
+                } else if (studentPaymentOrder.getPaymentAccountNo() == null) {
+                    musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
                 }
             } else {
                 musicOneSubjectClassPlan.setPaidStudentNum(musicOneSubjectClassPlan.getPaidStudentNum() - 1);
@@ -1474,9 +1487,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         studentInfo.setCurrentClass(studentRegistration.getCurrentClass());
         studentDao.update(studentInfo);
         // 添加用户电子签章账户
-        if (CertificateTypeEnum.IDENTITY.getCode().equals(studentRegistration.getCertificateType())) {
-            contractService.register(student.getUserId(), student.getParentsName(), student.getIdCardNo(), student.getParentsPhone());
-        }
+        contractService.register(student.getUserId(), student.getParentsName(), student.getIdCardNo(), student.getParentsPhone());
         return student;
     }
 
@@ -1810,4 +1821,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     public Integer quitAllStudent(String musicGroupId, String remark) {
         return studentRegistrationDao.quitAllStudent(musicGroupId, remark);
     }
+
+    @Override
+    public List<Map<String, Integer>> countNormalNum(List<String> musicGroupIds) {
+        return studentRegistrationDao.countNormalNum(StringUtils.join(musicGroupIds, ","));
+    }
 }

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

@@ -919,7 +919,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
             //获取比例
             BigDecimal ratioAmount = multiply2.divide(totalAmount, 6, BigDecimal.ROUND_HALF_UP);
             //实际支付价格
-            BigDecimal actualAmount = goodsSellDto.getGoodsPrice();
+            BigDecimal actualAmount = multiply2;
             //如果有减免金额
             if (marketAmount.doubleValue() > 0l) {
                 //如果是最后一件商品

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

@@ -205,7 +205,14 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void updateStudentTeacherAndSubject() {
+        //更新新学员状态
+        List<Integer> newStudentIds = studentDao.getHasVipCourseStudentIdsFromNewStudents();
+        if(!CollectionUtils.isEmpty(newStudentIds)){
+            studentDao.updateNewStudentsToOld(newStudentIds);
+        }
+
         List<Student> noTeacherOrNoSubjectStudent = studentDao.getNoTeacherOrNoSubjectStudent();
         if (CollectionUtils.isEmpty(noTeacherOrNoSubjectStudent)) {
             return;
@@ -215,6 +222,7 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
         if (CollectionUtils.isEmpty(studentClassInfo)) {
             return;
         }
+        //更新学员指导老师和声部信息
         List<Student> needUpdateStudents = new ArrayList<>();
         Map<Integer, List<StudentClassInfoDto>> scm = studentClassInfo.stream().collect(Collectors.groupingBy(StudentClassInfoDto::getStudentId));
         for (Student student : noTeacherOrNoSubjectStudent) {

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

@@ -1,13 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
 
+import com.ym.mec.auth.api.dto.MusicScoreQueryInfo;
 import com.ym.mec.biz.dal.dao.SysMusicScoreAccompanimentDao;
 import com.ym.mec.biz.dal.entity.Subject;
+import com.ym.mec.biz.dal.entity.SysMusicScore;
 import com.ym.mec.biz.dal.entity.SysMusicScoreAccompaniment;
+import com.ym.mec.biz.dal.entity.SysMusicScoreCategories;
 import com.ym.mec.biz.dal.page.SysExamSongQueryInfo;
 import com.ym.mec.biz.service.SysMusicScoreAccompanimentService;
+import com.ym.mec.biz.service.SysMusicScoreCategoriesService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -17,12 +22,15 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integer, SysMusicScoreAccompaniment> implements SysMusicScoreAccompanimentService {
 	
 	@Autowired
 	private SysMusicScoreAccompanimentDao sysMusicScoreAccompanimentDao;
+	@Autowired
+	private SysMusicScoreCategoriesService sysMusicScoreCategoriesService;
 
 	@Override
 	public BaseDAO<Integer, SysMusicScoreAccompaniment> getDAO() {
@@ -53,7 +61,19 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integ
 
 	@Override
 	public List<SysMusicScoreAccompaniment> queryAccPage(SysExamSongQueryInfo queryInfo) {
-		Map<String, Object> params = new HashMap<String, Object>();
+		if(queryInfo.getCategoriesId() != null){
+			List<Integer> categoriesIdList = new ArrayList<>();
+			MusicScoreQueryInfo musicScoreQueryInfo = new MusicScoreQueryInfo();
+			musicScoreQueryInfo.setParentId(queryInfo.getCategoriesId());
+			List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
+			if(scoreCategories.size() > 0){
+				categoriesIdList = scoreCategories.stream().map(e->e.getId()).collect(Collectors.toList());
+			}else {
+				categoriesIdList.add(queryInfo.getCategoriesId());
+			}
+			queryInfo.setCategoriesIdList(categoriesIdList);
+		}
+		Map<String, Object> params = new HashMap<>();
 		MapUtil.populateMap(params, queryInfo);
 		return sysMusicScoreAccompanimentDao.queryAccPage(params);
 	}
@@ -62,4 +82,21 @@ public class SysMusicScoreAccompanimentServiceImpl extends BaseServiceImpl<Integ
 	public List<Subject> querySubjectIds() {
 		return sysMusicScoreAccompanimentDao.querySubjectIds();
 	}
+
+    @Override
+    public PageInfo<SysMusicScoreAccompaniment> queryScorePage(SysExamSongQueryInfo queryInfo) {
+		if(queryInfo.getCategoriesId() != null){
+			List<Integer> categoriesIdList = new ArrayList<>();
+			MusicScoreQueryInfo musicScoreQueryInfo = new MusicScoreQueryInfo();
+			musicScoreQueryInfo.setParentId(queryInfo.getCategoriesId());
+			List<SysMusicScoreCategories> scoreCategories = sysMusicScoreCategoriesService.queryTree(musicScoreQueryInfo);
+			if(scoreCategories.size() > 0){
+				categoriesIdList = scoreCategories.stream().map(e->e.getId()).collect(Collectors.toList());
+			}else {
+				categoriesIdList.add(queryInfo.getCategoriesId());
+			}
+			queryInfo.setCategoriesIdList(categoriesIdList);
+		}
+		return this.queryPage(queryInfo);
+    }
 }

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

@@ -687,10 +687,10 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 
 		Date date = new Date();
 
-		user.setRealName(realName);
-		user.setIdCardNo(idcardNo);
-		user.setUpdateTime(date);
-		sysUserFeignService.updateSysUser(user);
+//		user.setRealName(realName);
+//		user.setIdCardNo(idcardNo);
+//		user.setUpdateTime(date);
+//		sysUserFeignService.updateSysUser(user);
 
 		teacher.setIdcardBackImg(idcardBackImg);
 		teacher.setIdcardFrontImg(idcardFrontImg);

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

@@ -1637,7 +1637,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				}
 			}
 		}
-		if(!"36".equals(user.getOrganId())&& CertificateTypeEnum.IDENTITY.getCode().equals(user.getCertificateType())){
+		if(!"36".equals(user.getOrganId())){
 			try {
 				contractService.register(user.getId(),user.getRealName(),user.getIdCardNo(),user.getPhone());
 			} catch (Exception e) {

+ 13 - 0
mec-biz/src/main/resources/config/mybatis/ChildrenDayDegreeDetailDao.xml

@@ -90,4 +90,17 @@
             now(),now())
         </foreach>
     </insert>
+
+    <update id="updateStatus">
+        UPDATE children_day_degree_detail
+        SET status_=#{status},
+            update_time = NOW()
+        WHERE order_id_ = #{orderId}
+    </update>
+
+    <select id="getByOrderId" resultMap="ChildrenDayDegreeDetail">
+        SELECT *
+        FROM children_day_degree_detail
+        WHERE order_id_ = #{orderId}
+    </select>
 </mapper>

+ 116 - 0
mec-biz/src/main/resources/config/mybatis/ChildrenDayDegreeInfoDao.xml

@@ -0,0 +1,116 @@
+<?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.ChildrenDayDegreeInfoDao">
+    <resultMap id="ChildrenDayDegreeInfo" type="com.ym.mec.biz.dal.entity.ChildrenDayDegreeInfo">
+        <!--@mbg.generated-->
+        <!--@Table children_day_degree_info-->
+        <id column="id_" property="id"/>
+        <result column="reserve_id_" property="reserveId"/>
+        <result column="user_id_" property="userId"/>
+        <result column="subject_id_" property="subjectId"/>
+        <result column="grade_level_" property="gradeLevel"/>
+        <result column="grade_price_" property="gradePrice"/>
+        <result column="theory_level_" property="theoryLevel"/>
+        <result column="theory_price_" property="theoryPrice"/>
+        <result column="vip_1v1_price_" property="vip1v1Price"/>
+        <result column="vip_1v2_price_" property="vip1v2Price"/>
+        <result column="theory_course_price_" property="theoryCoursePrice"/>
+        <result column="total_amount_" property="totalAmount"/>
+        <result column="order_id_" property="orderId"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+    </resultMap>
+
+    <select id="get" parameterType="java.lang.Integer" resultMap="ChildrenDayDegreeInfo">
+        <!--@mbg.generated-->
+        select *
+        from children_day_degree_info
+        where id_ = #{id}
+    </select>
+
+    <delete id="delete" parameterType="java.lang.Integer">
+        <!--@mbg.generated-->
+        delete from children_day_degree_info
+        where id_ = #{id}
+    </delete>
+
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.ChildrenDayDegreeInfo"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into children_day_degree_info (reserve_id_, user_id_, subject_id_, grade_level_, grade_price_,
+        theory_level_,theory_price_, vip_1v1_price_, vip_1v2_price_, theory_course_price_, total_amount_,order_id_,
+        create_time_, update_time_)
+        values (#{reserveId}, #{userId}, #{subjectId}, #{gradeLevel}, #{gradePrice}, #{theoryLevel},
+        #{theoryPrice}, #{vip1v1Price}, #{vip1v2Price}, #{theoryCoursePrice}, #{totalAmount},#{orderId},
+        NOW(), NOW())
+    </insert>
+
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.ChildrenDayDegreeInfo">
+        <!--@mbg.generated-->
+        update children_day_degree_info
+        <set>
+            <if test="reserveId != null">
+                reserve_id_ = #{reserveId},
+            </if>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
+            <if test="subjectId != null">
+                subject_id_ = #{subjectId},
+            </if>
+            <if test="gradeLevel != null">
+                grade_level_ = #{gradeLevel},
+            </if>
+            <if test="gradePrice != null">
+                grade_price_ = #{gradePrice},
+            </if>
+            <if test="theoryLevel != null">
+                theory_level_ = #{theoryLevel},
+            </if>
+            <if test="theoryPrice != null">
+                theory_price_ = #{theoryPrice},
+            </if>
+            <if test="vip1v1Price != null">
+                vip_1v1_price_ = #{vip1v1Price},
+            </if>
+            <if test="vip1v2Price != null">
+                vip_1v2_price_ = #{vip1v2Price},
+            </if>
+            <if test="theoryCoursePrice != null">
+                theory_course_price_ = #{theoryCoursePrice},
+            </if>
+            <if test="totalAmount != null">
+                total_amount_ = #{totalAmount},
+            </if>
+            <if test="orderId != null">
+                order_id_ = #{orderId},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = NOW(),
+            </if>
+        </set>
+        where id_ = #{id}
+    </update>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="ChildrenDayDegreeInfo" parameterType="map">
+        SELECT * FROM children_day_degree_info
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM children_day_degree_info
+    </select>
+
+    <select id="getPayedUser" resultType="java.lang.Integer">
+        SELECT * FROM children_day_degree_info WHERE user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </select>
+</mapper>

+ 178 - 10
mec-biz/src/main/resources/config/mybatis/ChildrenDayReserveMapper.xml

@@ -9,6 +9,7 @@
         <result column="cooperation_organ_id_" property="cooperationOrganId"/>
         <result column="music_group_id_" property="musicGroupId"/>
         <result column="is_reserve_" property="isReserve" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="is_send_msg_" property="isSendMsg" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
     </resultMap>
@@ -51,6 +52,9 @@
             <if test="isReserve != null">
                 is_reserve_ = #{isReserve,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
+            <if test="isSendMsg != null">
+                is_send_msg_ = #{isSendMsg,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
             <if test="createTime != null">
                 create_time_ = #{createTime},
             </if>
@@ -75,8 +79,13 @@
     <resultMap id="ChildrenStatisticsDtoMap" type="com.ym.mec.biz.dal.dto.ChildrenStatisticsDto">
         <result property="buyMusicTheoryAmount" column="buy_music_theory_amount_"/>
         <result property="buyMusicTheoryNum" column="buy_music_theory_num_"/>
-        <result property="buyVipAmount" column="buy_vip_amount_"/>
-        <result property="buyVipNum" column="buy_vip_num_"/>
+        <result property="buyVip1Amount" column="buy_vip1_amount_"/>
+        <result property="buyVip1Num" column="buy_vip1_num_"/>
+        <result property="buyVip2Amount" column="buy_vip2_amount_"/>
+        <result property="buyVip2Num" column="buy_vip2_num_"/>
+        <result property="gradePrice" column="grade_price_"/>
+        <result property="theoryPrice" column="theory_price_"/>
+        <result property="totalAmount" column="total_amount_"/>
         <result property="cooperationOrganName" column="cooperation_organ_name_"/>
         <result property="instrumentalMusicNum" column="instrumental_music_num_"/>
         <result property="musicGroupName" column="music_group_name_"/>
@@ -90,17 +99,32 @@
         <result property="musicGroupId" column="music_group_id_"/>
     </resultMap>
     <select id="queryChildrenStatistics" resultMap="ChildrenStatisticsDtoMap">
-        SELECT o.name_ organ_name_,co.name_ cooperation_organ_name_,mg.name_ music_group_name_,COUNT(sr.user_id_) normal_num_,cdr.organ_id_,
+        SELECT o.name_ organ_name_,co.name_ cooperation_organ_name_,mg.name_ music_group_name_,cdr.organ_id_,
         cdr.cooperation_organ_id_,cdr.music_group_id_,
-        COUNT(DISTINCT CASE WHEN cdr.is_reserve_ = 1 THEN 1 ELSE NULL END) 'reserve_num_',
-        COUNT(DISTINCT CASE WHEN cdr.is_reserve_ = 0 THEN 1 ELSE NULL END) 'no_reserve_num_'
+        COUNT(DISTINCT cdrr.user_id_) 'reserve_num_',
+        COUNT(DISTINCT cdrn.user_id_) 'no_reserve_num_',
+        COUNT(CASE WHEN cdd.grade_price_ > 0 THEN 1 ELSE NULL END) 'instrumental_music_num_',
+        COUNT(CASE WHEN cdd.theory_price_ > 0 THEN 1 ELSE NULL END) 'music_theory_num_',
+        COUNT(CASE WHEN cdd.vip_1v1_price_ > 0 THEN 1 ELSE NULL END) 'buy_vip1_num_',
+        SUM(cdd.vip_1v1_price_) 'buy_vip1_amount_',
+        COUNT(CASE WHEN cdd.vip_1v2_price_ > 0 THEN 1 ELSE NULL END) 'buy_vip2_num_',
+        SUM(cdd.vip_1v2_price_) 'buy_vip2_amount_',
+        COUNT(CASE WHEN cdd.theory_course_price_ > 0 THEN 1 ELSE NULL END) 'buy_music_theory_num_',
+        SUM(cdd.theory_course_price_) 'buy_music_theory_amount_',
+        SUM(cdd.grade_price_) 'grade_price_',
+        SUM(cdd.theory_price_) 'theory_price_',
+        SUM(cdd.total_amount_) 'total_amount_'
         FROM children_day_reserve cdr
+        LEFT JOIN children_day_degree_info cdd ON cdr.id_ = cdd.reserve_id_
         LEFT JOIN music_group mg ON mg.id_ = cdr.music_group_id_
-        LEFT JOIN student_registration sr ON sr.music_group_id_ = cdr.music_group_id_ AND sr.music_group_status_ = 'NORMAL' AND cdr.user_id_ = sr.user_id_
         LEFT JOIN cooperation_organ co ON co.id_ = cdr.cooperation_organ_id_
         LEFT JOIN organization o ON o.id_ = cdr.organ_id_
+        LEFT JOIN (SELECT * FROM children_day_reserve cdr WHERE cdr.is_reserve_ = 1
+            <include refid="queryChildrenStatisticsSql1"/>) cdrr ON cdrr.id_ = cdr.id_
+        LEFT JOIN (SELECT * FROM children_day_reserve cdr WHERE cdr.is_reserve_ = 0
+        <include refid="queryChildrenStatisticsSql1"/>) cdrn ON cdrn.id_ = cdr.id_
         <include refid="queryChildrenStatisticsSql"/>
-        GROUP BY cdr.music_group_id_
+        GROUP BY cdr.music_group_id_,cdr.cooperation_organ_id_,cdr.organ_id_
         ORDER BY cdr.id_ DESC
         <include refid="global.limit"/>
     </select>
@@ -108,7 +132,27 @@
         SELECT COUNT(c.id_) FROM (SELECT COUNT(cdr.id_) id_
         FROM children_day_reserve cdr
         <include refid="queryChildrenStatisticsSql"/>
-        GROUP BY cdr.music_group_id_) c
+        GROUP BY cdr.music_group_id_,cdr.cooperation_organ_id_,cdr.organ_id_) c
+    </select>
+
+    <select id="childrenStatistics" resultMap="ChildrenStatisticsDtoMap">
+        SELECT SUM(CASE WHEN cdd.grade_price_ > 0 THEN 1 ELSE NULL END) 'instrumental_music_num_',
+        SUM(CASE WHEN cdd.theory_price_ > 0 THEN 1 ELSE NULL END) 'music_theory_num_',
+        SUM(CASE WHEN cdd.vip_1v1_price_ > 0 THEN 1 ELSE NULL END) 'buy_vip1_num_',
+        SUM(cdd.vip_1v1_price_) 'buy_vip1_amount_',
+        SUM(CASE WHEN cdd.vip_1v2_price_ > 0 THEN 1 ELSE NULL END) 'buy_vip2_num_',
+        SUM(cdd.vip_1v2_price_) 'buy_vip2_amount_',
+        SUM(CASE WHEN cdd.theory_course_price_ > 0 THEN 1 ELSE NULL END) 'buy_music_theory_num_',
+        SUM(cdd.theory_course_price_) 'buy_music_theory_amount_',
+        SUM(cdd.grade_price_) 'grade_price_',
+        SUM(cdd.theory_price_) 'theory_price_',
+        SUM(cdd.total_amount_) 'total_amount_'
+        FROM children_day_reserve cdr
+        LEFT JOIN children_day_degree_info cdd ON cdr.id_ = cdd.reserve_id_
+        LEFT JOIN music_group mg ON mg.id_ = cdr.music_group_id_
+        LEFT JOIN cooperation_organ co ON co.id_ = cdr.cooperation_organ_id_
+        LEFT JOIN organization o ON o.id_ = cdr.organ_id_
+        <include refid="queryChildrenStatisticsSql"/>
     </select>
     <sql id="queryChildrenStatisticsSql">
         <where>
@@ -123,6 +167,17 @@
             </if>
         </where>
     </sql>
+    <sql id="queryChildrenStatisticsSql1">
+        <if test="cooperationId != null">
+            AND cdr.cooperation_organ_id_ = #{cooperationId}
+        </if>
+        <if test="musicGroupId != null and musicGroupId != ''">
+            AND cdr.music_group_id_ = #{musicGroupId}
+        </if>
+        <if test="organId != null">
+            AND FIND_IN_SET(cdr.organ_id_,#{organId})
+        </if>
+    </sql>
 
     <select id="getByUserId" resultMap="ChildrenDayReserve">
         SELECT *
@@ -131,38 +186,151 @@
     </select>
 
     <resultMap id="ChildrenStatisticsDetailDtoMap" type="com.ym.mec.biz.dal.dto.ChildrenStatisticsDetailDto">
+        <result property="organName" column="organ_name_"/>
+        <result property="cooperationOrganName" column="cooperation_organ_name_"/>
+        <result property="musicGroupName" column="music_group_name_"/>
+        <result property="currentClass" column="current_class_"/>
+        <result property="realName" column="real_name_"/>
         <result property="username" column="username_"/>
         <result property="userId" column="user_id_"/>
         <result property="isReserve" column="is_reserve_"/>
         <result property="phone" column="phone_"/>
+        <result property="subjectName" column="subject_name_"/>
+        <result property="gradeLeave" column="grade_level_"/>
+        <result property="theoryLevel" column="theory_level_"/>
+        <result property="buyVipFlag" column="buy_vip_flag_"/>
+        <result property="buyTheoryCourseFlag" column="buy_theory_course_flag_"/>
+        <result property="totalAmount" column="total_amount_"/>
     </resultMap>
     <select id="countChildrenStatisticsDetail" resultType="int">
         SELECT COUNT(cdr.id_) FROM children_day_reserve cdr
         LEFT JOIN sys_user su ON su.id_ = cdr.user_id_
+        LEFT JOIN children_day_degree_info cdd ON cdr.id_ = cdd.reserve_id_
         <include refid="queryChildrenStatisticsDetailSql"/>
     </select>
     <select id="queryChildrenStatisticsDetail" resultMap="ChildrenStatisticsDetailDtoMap">
-        SELECT su.username_,su.phone_,cdr.user_id_,cdr.is_reserve_
+        SELECT su.username_,su.phone_,cdr.user_id_,cdr.is_reserve_,s.name_
+        subject_name_,cdd.grade_level_,cdd.theory_level_,
+        CASE WHEN cdd.vip_1v1_price_ > 0 OR cdd.vip_1v2_price_ > 0 THEN 1 ELSE 0 END buy_vip_flag_,
+        CASE WHEN cdd.theory_course_price_ > 0 THEN 1 ELSE 0 END buy_theory_course_flag_,cdd.total_amount_
         FROM children_day_reserve cdr
+        LEFT JOIN children_day_degree_info cdd ON cdr.id_ = cdd.reserve_id_
         LEFT JOIN sys_user su ON su.id_ = cdr.user_id_
+        LEFT JOIN `subject` s ON s.id_ = cdd.subject_id_
         <include refid="queryChildrenStatisticsDetailSql"/>
         ORDER BY cdr.create_time_ DESC
         <include refid="global.limit"/>
     </select>
+    <select id="exportStatisticsDetail" resultMap="ChildrenStatisticsDetailDtoMap">
+        SELECT o.name_ organ_name_,co.name_ cooperation_organ_name_,mg.name_ music_group_name_,cdr.user_id_,
+        su.username_,su.phone_,s.name_
+        subject_name_,st.current_class_,sut.real_name_,cdr.is_reserve_,cdd.grade_level_,cdd.theory_level_,
+        CASE WHEN cdd.vip_1v1_price_ > 0 OR cdd.vip_1v2_price_ > 0 THEN 1 ELSE 0 END buy_vip_flag_,
+        CASE WHEN cdd.theory_course_price_ > 0 THEN 1 ELSE 0 END buy_theory_course_flag_,cdd.total_amount_
+        FROM children_day_reserve cdr
+        LEFT JOIN children_day_degree_info cdd ON cdr.id_ = cdd.reserve_id_
+        LEFT JOIN organization o ON o.id_ = cdr.organ_id_
+        LEFT JOIN cooperation_organ co ON co.id_ = cdr.cooperation_organ_id_
+        LEFT JOIN music_group mg ON mg.id_ = cdr.music_group_id_
+        LEFT JOIN student st ON st.user_id_ = cdr.user_id_
+        LEFT JOIN sys_user sut ON sut.id_ = st.teacher_id_
+        LEFT JOIN sys_user su ON su.id_ = cdr.user_id_
+        LEFT JOIN `subject` s ON s.id_ = cdd.subject_id_
+        <where>
+            <if test="cooperationId != null">
+                AND cdr.cooperation_organ_id_ = #{cooperationId}
+            </if>
+            <if test="musicGroupId != null and musicGroupId != ''">
+                AND cdr.music_group_id_ = #{musicGroupId}
+            </if>
+            <if test="organId != null">
+                AND FIND_IN_SET(cdr.organ_id_,#{organId})
+            </if>
+        </where>
+        ORDER BY cdr.organ_id_,cdr.create_time_ DESC
+    </select>
     <sql id="queryChildrenStatisticsDetailSql">
         <where>
             <if test="search != null and search != ''">
-                AND (cdr.user_id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
+                AND (cdr.user_id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE
+                CONCAT('%',#{search},'%'))
             </if>
             <if test="isReserve != null">
                 AND cdr.is_reserve_ = #{isReserve}
             </if>
+            <if test="organId != null and organId != ''">
+                AND cdr.organ_id_ = #{organId}
+            </if>
+            <if test="cooperationId != null">
+                AND cdr.cooperation_organ_id_ = #{cooperationId}
+            </if>
+            <if test="cooperationId == null">
+                AND cdr.cooperation_organ_id_ IS NULL
+            </if>
             <if test="musicGroupId != null and musicGroupId != ''">
                 AND cdr.music_group_id_ = #{musicGroupId}
             </if>
             <if test="musicGroupId == null">
                 AND cdr.music_group_id_ IS NULL
             </if>
+            <if test="subjectId != null">
+                AND cdd.subject_id_ = #{subjectId}
+            </if>
+            <if test="gradeFlag != null">
+                <if test="gradeFlag == 1">
+                    AND cdd.grade_level_ IS NOT NULL
+                </if>
+                <if test="gradeFlag == 0">
+                    AND cdd.grade_level_ IS NULL
+                </if>
+            </if>
+            <if test="theoryFlag != null">
+                <if test="theoryFlag == 1">
+                    AND cdd.theory_level_ IS NOT NULL
+                </if>
+                <if test="theoryFlag == 0">
+                    AND cdd.theory_level_ IS NULL
+                </if>
+            </if>
+            <if test="vipFlag != null">
+                <if test="vipFlag == 1">
+                    AND (cdd.vip_1v1_price_ > 0 OR cdd.vip_1v2_price_ > 0)
+                </if>
+                <if test="vipFlag == 0">
+                    AND cdd.vip_1v1_price_ &lt;= 0 AND cdd.vip_1v2_price_ &lt;= 0
+                </if>
+            </if>
+            <if test="theoryPriceFlag != null">
+                <if test="theoryPriceFlag == 1">
+                    AND cdd.theory_course_price_ > 0
+                </if>
+                <if test="theoryPriceFlag == 0">
+                    AND cdd.theory_course_price_ &lt;= 0
+                </if>
+            </if>
         </where>
     </sql>
+
+    <select id="getSendMsgList" resultMap="ChildrenStatisticsDetailDtoMap">
+        SELECT cdr.*,su.phone_ FROM children_day_reserve cdr
+        LEFT JOIN sys_user su ON su.id_ = cdr.user_id_
+        <where>
+            (cdr.is_reserve_ = 1 AND is_send_msg_ = 0) AND
+            <foreach collection="msgDtos" item="msgDto" open="(" close=")" separator="OR">
+                <if test="msgDto.musicGroupId != null">
+                    (cdr.organ_id_=#{msgDto.organId} AND cdr.music_group_id_ = #{msgDto.musicGroupId})
+                </if>
+                <if test="msgDto.musicGroupId == null">
+                    (cdr.organ_id_=#{msgDto.organId} AND cdr.music_group_id_ IS NULL)
+                </if>
+            </foreach>
+        </where>
+    </select>
+
+    <update id="updateSendMasStatus">
+        UPDATE children_day_reserve SET is_send_msg_ = 1 WHERE user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </update>
 </mapper>

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

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

+ 26 - 23
mec-biz/src/main/resources/config/mybatis/CooperationOrganMapper.xml

@@ -6,6 +6,8 @@
     <resultMap type="com.ym.mec.biz.dal.entity.CooperationOrgan"
                id="CooperationOrgan">
         <result column="id_" property="id"/>
+        <result column="education_user_id_" property="educationUserId"/>
+        <result column="real_name_" property="realName"/>
         <result column="name_" property="name"/>
         <result column="linkman_" property="linkman"/>
         <result column="organ_id_" property="organId"/>
@@ -45,16 +47,19 @@
             useGeneratedKeys="true" keyColumn="id" keyProperty="id">
         INSERT INTO cooperation_organ
         (id_, name_, linkman_, job_, mobile_no_, address_, organ_id_, create_time_, update_time_, ownership_type_,
-         is_enable_, full_job_resource_)
+         is_enable_, full_job_resource_,education_user_id_)
         VALUES (#{id}, #{name}, #{linkman}, #{job}, #{mobileNo}, #{address}, #{organId}, now(), now(),
                 #{ownershipType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{isEnable},
-                #{fullJobResource})
+                #{fullJobResource},#{educationUserId})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.CooperationOrgan">
         UPDATE cooperation_organ
         <set>
+            <if test="educationUserId != null">
+                education_user_id_ = #{educationUserId},
+            </if>
             <if test="fullJobResource != null">
                 full_job_resource_ = #{fullJobResource},
             </if>
@@ -96,14 +101,27 @@
         WHERE id_ = #{id}
     </update>
 
+    <update id="batchUpdateEduId">
+        UPDATE cooperation_organ SET education_user_id_ = #{transferUserId} WHERE organ_id_ = #{organId} AND education_user_id_ = #{levelUserId}
+    </update>
+
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="ExtCooperationOrgan"
             parameterType="map">
-        SELECT co.*,o.name_ organ_name_ FROM cooperation_organ co left join organization o on co.organ_id_ = o.id_
+        SELECT co.*,o.name_ organ_name_,su.real_name_ FROM cooperation_organ co
+        LEFT JOIN organization o ON co.organ_id_ = o.id_
+        LEFT JOIN sys_user su ON su.id_ = co.education_user_id_
+        <include refid="queryPageSql"/>
+        ORDER BY co.update_time_ DESC
+        <include refid="global.limit"/>
+    </select>
+
+    <sql id="queryPageSql">
         <where>
             co.del_flag_ != 1
             <if test="search != null">
-                AND (co.id_ LIKE CONCAT('%',#{search},'%') OR co.name_ LIKE CONCAT('%',#{search},'%'))
+                AND (co.education_user_id_ = #{search} OR su.real_name_ LIKE CONCAT('%',#{search},'%')
+                OR co.id_ LIKE CONCAT('%',#{search},'%') OR co.name_ LIKE CONCAT('%',#{search},'%'))
             </if>
             <if test="organId != null">
                 AND FIND_IN_SET(co.organ_id_,#{organId})
@@ -115,28 +133,13 @@
                 AND co.full_job_resource_ = #{fullJobResource}
             </if>
         </where>
-        ORDER BY co.update_time_ DESC
-        <include refid="global.limit"/>
-    </select>
+    </sql>
 
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int">
-        SELECT COUNT(*) FROM cooperation_organ
-        <where>
-            del_flag_ != 1
-            <if test="search != null">
-                AND (id_ LIKE CONCAT('%',#{search},'%') OR name_ LIKE CONCAT('%',#{search},'%'))
-            </if>
-            <if test="organId != null">
-                AND FIND_IN_SET(organ_id_,#{organId})
-            </if>
-            <if test="isEnable != null">
-                AND is_enable_ = #{isEnable}
-            </if>
-            <if test="fullJobResource != null">
-                AND full_job_resource_ = #{fullJobResource}
-            </if>
-        </where>
+        SELECT COUNT(co.id_) FROM cooperation_organ co
+        LEFT JOIN sys_user su ON su.id_ = co.education_user_id_
+        <include refid="queryPageSql"/>
     </select>
 
     <select id="queryByOrganId" resultMap="CooperationOrgan">

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

@@ -531,6 +531,9 @@
             LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
             LEFT JOIN teacher_attendance ta ON cs.id_=ta.course_schedule_id_ AND ta.teacher_id_=cs.actual_teacher_id_
             LEFT JOIN school s ON cs.schoole_id_=s.id_
+            <if test="transactionTeacherId!=null">
+                LEFT JOIN music_group mg ON cs.music_group_id_=mg.id_
+            </if>
         WHERE
             (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
             <if test="organIds!=null and organIds.size()>0">
@@ -552,6 +555,9 @@
             <if test="musicGroupId!=null">
                 AND cs.music_group_id_=#{musicGroupId} AND cs.group_type_='MUSIC'
             </if>
+            <if test="transactionTeacherId!=null">
+                AND mg.transaction_teacher_id_=#{transactionTeacherId}
+            </if>
             AND cs.class_date_ = DATE_FORMAT(#{date},'%Y-%m-%d')
             ORDER BY CONCAT(cs.class_date_,' ',cs.start_class_time_)
             <include refid="global.limit"/>
@@ -565,6 +571,9 @@
             <if test="classGroupIds != null and organIdList!=null">
                 LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
             </if>
+            <if test="transactionTeacherId!=null">
+                LEFT JOIN music_group mg ON cs.music_group_id_=mg.id_
+            </if>
         WHERE
         (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
         AND cs.id_ IS NOT NULL
@@ -586,6 +595,9 @@
         <if test="musicGroupId!=null">
             AND cs.music_group_id_=#{musicGroupId} AND cs.group_type_='MUSIC'
         </if>
+        <if test="transactionTeacherId!=null">
+            AND mg.transaction_teacher_id_=#{transactionTeacherId}
+        </if>
         AND cs.class_date_ = DATE_FORMAT(#{date},'%Y-%m-%d')
     </select>
 
@@ -996,6 +1008,9 @@
             cs.class_date_
         FROM
             course_schedule cs
+            <if test="transactionTeacherId!=null">
+                LEFT JOIN music_group mg ON cs.music_group_id_=mg.id_
+            </if>
         WHERE
             (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
             <if test="organIds!=null and organIds.size()>0">
@@ -1013,6 +1028,9 @@
             <if test="type!=null and type!=''">
                 AND cs.group_type_=#{type}
             </if>
+            <if test="transactionTeacherId!=null">
+                AND mg.transaction_teacher_id_=#{transactionTeacherId}
+            </if>
         GROUP BY cs.class_date_
     </select>
 

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

@@ -261,8 +261,8 @@
 
     <select id="findByRole" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
         SELECT DISTINCT su.id_ userId,
-          su.real_name_ userName,
-          su.avatar_ avatar,
+            su.real_name_ userName,
+            su.avatar_ avatar,
             e.organ_id_list_ organIds
         FROM
             sys_user su
@@ -359,7 +359,7 @@
     <select id="queryMusicGroupIdByUserId" resultType="java.lang.String">
         SELECT DISTINCT id_ FROM music_group
         WHERE (director_user_id_ = #{levelUserId} OR educational_teacher_id_ = #{levelUserId} OR team_teacher_id_ = #{levelUserId})
-        AND status_ IN ('PROGRESS','PAUSE')
+        AND status_ IN ('PROGRESS','PAUSE','PREPARE')
     </select>
 
     <select id="queryPracticeGroupIdByUserId" resultType="java.lang.String">

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

@@ -30,6 +30,7 @@
 		<result column="teacher_id_" property="teacherId"/>
 		<result column="teacher_name_" property="teacherName"/>
 		<result column="avatar_" property="headUrl"/>
+		<result column="phone_" property="phone"/>
 		<result column="title_" property="title"/>
 		<result column="content_" property="content"/>
 		<result column="expire_date_" property="expireDate"/>
@@ -171,7 +172,8 @@
 		SELECT
 			eer.*,
 			su.username_ student_name_,
-		    su.avatar_
+		    su.avatar_,
+		    su.phone_
 		FROM
 			extracurricular_exercises_reply eer
 			LEFT JOIN sys_user su ON su.id_ = eer.user_id_
@@ -511,4 +513,94 @@
 			</foreach>
 	</select>
 
+	<sql id="getEduHomeworkListCondition">
+		<where>
+			EXISTS (SELECT user_id_ FROM student_registration sr LEFT JOIN music_group mg ON mg.id_=sr.music_group_id_ WHERE sr.user_id_ = eer.user_id_ AND sr.music_group_status_='NORMAL' AND mg.status_ = 'PROGRESS' AND mg.transaction_teacher_id_=#{transactionTeacherId})
+			<if test="startTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &gt;= DATE_FORMAT(#{startTime}, "%Y-%m-%d")
+			</if>
+			<if test="endTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &lt;= DATE_FORMAT(#{endTime}, "%Y-%m-%d")
+			</if>
+		</where>
+	</sql>
+
+    <select id="getEduHomeworkList" resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+		SELECT
+			ee.id_ homeworkId,
+			su.real_name_ teacherName,
+			ee.create_time_ createTime,
+			COUNT( eer.user_id_ ) exceptStudentNum,
+			SUM( eer.status_ ) submitStudentNum,
+			SUM( eer.is_replied_ ) repliedStudentNum
+		FROM
+			extracurricular_exercises ee
+			LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_
+			LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
+		<include refid="getEduHomeworkListCondition" />
+		GROUP BY ee.id_
+		ORDER BY ee.create_time_ DESC
+		<include refid="global.limit"></include>
+	</select>
+
+	<select id="countEduHomeworkList" resultType="int">
+		SELECT
+			COUNT(DISTINCT ee.id_)
+		FROM
+		extracurricular_exercises ee
+		LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_
+		LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
+		<include refid="getEduHomeworkListCondition" />
+	</select>
+	<select id="countEduHomeworkStudentNumWithMusicGroup"
+			resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+		SELECT
+			sr.music_group_id_ groupId,
+			COUNT( eer.user_id_ ) exceptStudentNum,
+			SUM( eer.status_ ) submitStudentNum,
+			SUM( eer.is_replied_ ) repliedStudentNum
+		FROM
+			extracurricular_exercises ee
+			LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_
+			LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
+			LEFT JOIN student_registration sr ON eer.user_id_ = sr.user_id_
+		WHERE sr.music_group_status_='NORMAL'
+			<if test="groupIds!=null and groupIds.size()>0">
+				AND sr.music_group_id_ IN
+				<foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
+					#{groupId}
+				</foreach>
+			</if>
+			<if test="startTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &gt;= DATE_FORMAT(#{startTime}, "%Y-%m-%d")
+			</if>
+			<if test="endTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &lt;= DATE_FORMAT(#{endTime}, "%Y-%m-%d")
+			</if>
+		GROUP BY sr.music_group_id_
+	</select>
+
+	<select id="countEduHomeworkSubjectStudentNumWithMusicGroup"
+			resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+		SELECT
+		sr.actual_subject_id_ subjectId,
+		COUNT( eer.user_id_ ) exceptStudentNum,
+		SUM( eer.status_ ) submitStudentNum,
+		SUM( eer.is_replied_ ) repliedStudentNum
+		FROM
+		extracurricular_exercises ee
+		LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_
+		LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
+		LEFT JOIN student_registration sr ON eer.user_id_ = sr.user_id_
+		WHERE sr.music_group_status_='NORMAL'
+			AND sr.music_group_id_ = #{groupId}
+			<if test="startTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &gt;= DATE_FORMAT(#{startTime}, "%Y-%m-%d")
+			</if>
+			<if test="endTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &lt;= DATE_FORMAT(#{endTime}, "%Y-%m-%d")
+			</if>
+		GROUP BY sr.actual_subject_id_
+	</select>
+
 </mapper>

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

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

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

@@ -112,8 +112,20 @@
             #{item.id}
         </foreach>
 	</delete>
-	
+	<delete id="batchDeleteByGroupIdAndUserId">
+		<foreach collection="list" item="item" separator=";">
+			DELETE FROM im_group_member WHERE im_group_id_ = #{item.imGroupId} AND user_id_ = #{item.userId}
+		</foreach>
+	</delete>
+	<delete id="delRepeat">
+		DELETE FROM im_group_member
+				WHERE id_ IN (SELECT a.id_ FROM (SELECT id_ FROM im_group_member GROUP BY im_group_id_,user_id_ HAVING COUNT(user_id_) > 1) a)
+	</delete>
+
 	<select id="queryByImGroupIdAndUserId" resultMap="ImGroupMember" parameterType="map">
 		SELECT * FROM im_group_member where find_in_set(im_group_id_,#{imGroupIdList}) and find_in_set(user_id_,#{userIdList})
 	</select>
+	<select id="isExit" resultType="java.lang.Boolean">
+		SELECT COUNT(DISTINCT userId) FROM im_group_member WHERE im_group_id_ = #{groupId} AND user_id_ = #{userId}
+	</select>
 </mapper>

+ 27 - 5
mec-biz/src/main/resources/config/mybatis/IndexBaseMonthDataMapper.xml

@@ -1412,7 +1412,7 @@
 		SELECT sa.user_id_ FROM student_attendance sa
 		LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
 		LEFT JOIN sys_user su ON su.id_ = sa.user_id_
-		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{totalMonth} AND sa.status_ = 'LEAVE'
+		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{currentMonth} AND sa.status_ = 'LEAVE'
 		<if test="organId != null">
 			AND FIND_IN_SET(cs.organ_id_,#{organId})
 		</if>
@@ -1438,14 +1438,14 @@
 		<result property="organName" column="organ_name_"/>
 	</resultMap>
 	<select id="queryStudentErrorLeave" resultMap="StudentErrorLeaveDto">
-		SELECT organ_id_,organ_name_,user_id_,username_,phone_,SUM(total_num_) total_num_,current_num_,class_date_
-		FROM (SELECT cs.organ_id_,o.name_ organ_name_,sa.user_id_,su.username_,su.phone_,COUNT(sa.id_) total_num_,
-		COUNT(CASE WHEN DATE_FORMAT(cs.class_date_,'%Y-%m') = #{currentMonth} THEN 1 ELSE NULL END) current_num_,cs.class_date_
+		SELECT organ_id_,organ_name_,user_id_,username_,phone_,current_num_,class_date_
+		FROM (SELECT cs.organ_id_,o.name_ organ_name_,sa.user_id_,su.username_,su.phone_,
+		COUNT(sa.id_) current_num_,cs.class_date_
 		FROM student_attendance sa
 		LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
 		LEFT JOIN organization o ON o.id_ = cs.organ_id_
 		LEFT JOIN sys_user su ON su.id_ = sa.user_id_
-		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{totalMonth} AND sa.status_ = 'LEAVE'
+		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{currentMonth} AND sa.status_ = 'LEAVE'
 		<if test="organId != null">
 			AND FIND_IN_SET(cs.organ_id_,#{organId})
 		</if>
@@ -1507,4 +1507,26 @@
 		ORDER BY cs.class_date_ DESC,cs.start_class_time_ DESC
 		<include refid="global.limit"/>
 	</select>
+	<select id="getStudentErrorLeaveNumMap" resultType="java.util.Map">
+		SELECT user_id_ 'key',SUM(total_num_) 'value'
+		FROM (SELECT sa.user_id_,COUNT(sa.id_) total_num_
+		FROM student_attendance sa
+		LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
+		LEFT JOIN sys_user su ON su.id_ = sa.user_id_
+		WHERE DATE_FORMAT(cs.class_date_,'%Y-%m') >= #{totalMonth} AND sa.status_ = 'LEAVE'
+		<if test="organId != null">
+			AND FIND_IN_SET(cs.organ_id_,#{organId})
+		</if>
+		<if test="classGroupIds != null and classGroupIds.size() > 0">
+			AND cs.class_group_id_ IN
+			<foreach collection="classGroupIds" item="classGroupId" open="(" close=")" separator=",">
+				#{classGroupId}
+			</foreach>
+		</if>
+		<if test="search != null and search != ''">
+			AND (sa.user_id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
+		</if>
+		GROUP BY sa.user_id_,DATE_FORMAT(cs.class_date_,'%Y-%m') HAVING COUNT(sa.id_) > 1 AND COUNT(sa.id_) > SUM(sa.leave_visit_flag_) ORDER BY cs.class_date_ DESC)c
+		GROUP BY c.user_id_
+	</select>
 </mapper>

+ 15 - 6
mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml

@@ -12,6 +12,7 @@
         <result column="pre_apply_expire_date_" property="preApplyExpireDate"/>
         <result column="team_teacher_id_" property="teamTeacherId"/>
         <result column="educational_teacher_id_" property="educationalTeacherId"/>
+        <result column="transaction_teacher_id_" property="transactionTeacherId"/>
         <result column="charge_type_id_" property="chargeTypeId"/>
         <result column="course_form_" property="courseForm"/>
         <result column="create_time_" property="createTime"/>
@@ -73,7 +74,7 @@
          bill_start_date_, improvent_classes_num_, enroll_classes_, payment_expire_date_, is_extra_class_,
          settlement_type_, cooperation_organ_id_, enlightenment_course_time_,
          parent_meeting_time_, img_, director_user_id_, is_classroom_lessons_, memo_, expect_start_group_date_,
-         ownership_type_, repair_user_id_, del_flag_,payment_valid_start_date_,payment_valid_end_date_,payment_pattern_,course_view_type_)
+         ownership_type_, repair_user_id_, del_flag_,payment_valid_start_date_,payment_valid_end_date_,payment_pattern_,course_view_type_,transaction_teacher_id_)
         VALUES (#{id}, #{name}, #{organId}, #{schoolId}, #{applyExpireDate},#{preApplyExpireDate}, #{teamTeacherId}, #{educationalTeacherId},
                 #{chargeTypeId}, #{courseForm}, now(), now(),
                 #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{billStartDate},
@@ -83,7 +84,8 @@
                 #{cooperationOrganId}, #{enlightenmentCourseTime}, #{parentMeetingTime}, #{img}, #{directorUserId},
                 #{isClassroomLessons}, #{memo}, #{expectStartGroupDate},
                 #{ownershipType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{repairUserId},
-                #{delFlag},#{paymentValidStartDate},#{paymentValidEndDate},#{paymentPattern},#{courseViewType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+                #{delFlag},#{paymentValidStartDate},#{paymentValidEndDate},#{paymentPattern},
+                #{courseViewType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{transactionTeacherId})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -104,6 +106,7 @@
                 status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             repair_user_id_ = #{repairUserId},
+            transaction_teacher_id_ = #{transactionTeacherId},
             <if test="organId != null">
                 organ_id_ = #{organId},
             </if>
@@ -185,6 +188,9 @@
         </set>
         WHERE id_ = #{id}
     </update>
+    <update id="batchUpdateEdu">
+        UPDATE music_group SET educational_teacher_id_ = #{educationUserId} WHERE cooperation_organ_id_ = #{cooperationOrganId}
+    </update>
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">
@@ -196,7 +202,7 @@
     <select id="queryPage" resultMap="MusicGroup" parameterType="map">
         SELECT * FROM music_group
         <include refid="musicGroupQueryPageSql"/>
-        ORDER BY create_time_ DESC
+        ORDER BY create_time_ DESC,id_
         <include refid="global.limit"/>
     </select>
 
@@ -218,6 +224,9 @@
             <if test="musicGroupId != null">
                 AND FIND_IN_SET(id_,#{musicGroupId})
             </if>
+            <if test="transactionTeacherId!=null">
+                AND transaction_teacher_id_ = #{transactionTeacherId}
+            </if>
             <if test="musicGroupIds!=null and musicGroupIds.size()>0">
                 AND id_ IN
                 <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">
@@ -739,11 +748,11 @@
         </foreach>
         AND mg.educational_teacher_id_ IS NOT NULL
     </select>
+    <select id="findByCooperationIdAndStatus" resultMap="MusicGroup">
+        SELECT * FROM music_group WHERE cooperation_organ_id_ = #{cooperationOrganId} AND status_ IN ('PROGRESS','PAUSE','PREPARE')
+    </select>
     <select id="findByCooperationId" resultMap="MusicGroup">
         SELECT * FROM music_group WHERE cooperation_organ_id_ = #{cooperationId}
-        <if test="musicStatus != null">
-            AND status_ = #{musicStatus}
-        </if>
     </select>
 
     <select id="getStudentLastMusicGroup" resultMap="MusicGroup">

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

@@ -466,7 +466,7 @@
 			edu.real_name_ edu_teacher_name_,
 			MAX( sub.name_ ) subject_name_,
 			su.gender_ gender_,
-			su.real_name_ parent_name_,
+			sut.name_ parent_name_,
 			su.phone_ phone_
 		FROM
 			music_group_payment_calender_detail mgpcd
@@ -475,6 +475,7 @@
 			LEFT JOIN student_registration sr ON sr.music_group_id_ = mgpc.music_group_id_
 			AND mgpcd.user_id_ = sr.user_id_
 			LEFT JOIN sys_user su ON mgpcd.user_id_ = su.id_
+			LEFT JOIN sys_user_tsign sut ON sut.user_id_ = su.id_
 			LEFT JOIN sys_user edu ON edu.id_ = mg.educational_teacher_id_
 			LEFT JOIN organization organ ON organ.id_ = mg.organ_id_
 			LEFT JOIN `subject` sub ON sr.actual_subject_id_ = sub.id_

+ 14 - 3
mec-biz/src/main/resources/config/mybatis/OrganizationDegreeCourseFeeMapper.xml

@@ -6,8 +6,11 @@
         <!--@Table organization_degree_course_fee-->
         <id column="id_" property="id"/>
         <result column="organ_id_" property="organId"/>
+        <result column="original_vip_1v1_" property="originalVip1v1"/>
+        <result column="original_vip_1v2_" property="originalVip1v2"/>
         <result column="vip_1v1_" property="vip1v1"/>
         <result column="vip_1v2_" property="vip1v2"/>
+        <result column="original_theory_" property="originalTheory"/>
         <result column="theory_" property="theory"/>
         <result column="create_time_" property="createTime"/>
         <result column="update_time_" property="updateTime"/>
@@ -26,8 +29,10 @@
     <insert id="insert" keyColumn="id_" keyProperty="id"
             parameterType="com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee" useGeneratedKeys="true">
         <!--@mbg.generated-->
-        insert into organization_degree_course_fee (organ_id_, vip_1v1_, vip_1v2_,theory_, create_time_, update_time_)
-        values (#{organId}, #{vip1v1},#{vip1v2}, #{theory}, #{createTime}, #{updateTime})
+        insert into organization_degree_course_fee (organ_id_,original_vip_1v1_,original_vip_1v2_, vip_1v1_,
+        vip_1v2_,theory_, create_time_, update_time_)
+        values (#{organId},#{originalVip1v1},#{originalVip1v2}, #{vip1v1},#{vip1v2}, #{theory}, #{createTime},
+        #{updateTime})
     </insert>
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.OrganizationDegreeCourseFee">
         <!--@mbg.generated-->
@@ -36,11 +41,17 @@
             <if test="organId != null">
                 organ_id_ = #{organId},
             </if>
+            <if test="originalVip1v1 != null">
+                original_vip_1v1_ = #{originalVip1v1},
+            </if>
+            <if test="originalVip1v2 != null">
+                original_vip_1v2_ = #{originalVip1v2},
+            </if>
             <if test="vip1v1 != null">
                 vip_1v1_ = #{vip1v1},
             </if>
             <if test="vip1v2 != null">
-                vip_1v12 = #{vip1v2},
+                vip_1v2_ = #{vip1v2},
             </if>
             <if test="theory != null">
                 theory_ = #{theory},

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

@@ -305,4 +305,12 @@
         LEFT JOIN organization o on o.id_ = co.organ_id_
         <include refid="queryReplacementsCondition"/>
     </select>
+
+    <select id="getActivityOrder" resultMap="com.ym.mec.biz.dal.dao.StudentPaymentOrderDao.StudentPaymentOrder">
+        SELECT * FROM student_payment_order WHERE group_type_ = 'REPLACEMENT' AND status_ = 'SUCCESS' AND music_group_id_ IN
+        <foreach collection="ids" item="id" open="(" close=")" separator=",">
+            #{id}
+        </foreach>
+        ORDER BY id_ DESC
+    </select>
 </mapper>

+ 25 - 18
mec-biz/src/main/resources/config/mybatis/SchoolMapper.xml

@@ -9,6 +9,7 @@
     <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
         <result column="id_" property="id"/>
         <result column="user_id_" property="userId"/>
+        <result column="real_name_" property="realName"/>
         <result column="name_" property="name"/>
         <result column="organ_id_" property="organId"/>
         <result column="address_" property="address"/>
@@ -92,32 +93,38 @@
 
     <!-- 分页查询 -->
     <select id="queryPage" resultMap="School" parameterType="map">
-        SELECT * FROM school where del_flag_ != 1
-        <if test="cooperationOrganId != null">
-            AND cooperation_organ_id_ = #{cooperationOrganId}
-        </if>
-        <if test="organId != null">
-            AND FIND_IN_SET(organ_id_,#{organId})
-        </if>
-        <if test="search != null">
-            AND (name_ LIKE CONCAT('%',#{search},'%') OR id_ LIKE CONCAT('%',#{search},'%'))
-        </if>
-        ORDER BY id_
+        SELECT s.*,su.real_name_ FROM school s
+        LEFT JOIN sys_user su ON su.id_ = s.user_id_
+        WHERE s.del_flag_ != 1
+        <include refid="queryPageSql"/>
+        ORDER BY s.id_
         <include refid="global.limit"/>
     </select>
-
-    <!-- 查询当前表的总记录数 -->
-    <select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM school where del_flag_ != 1
+    <sql id="queryPageSql">
         <if test="cooperationOrganId != null">
-            AND cooperation_organ_id_ = #{cooperationOrganId}
+            AND s.cooperation_organ_id_ = #{cooperationOrganId}
         </if>
         <if test="organId != null">
-            AND FIND_IN_SET(organ_id_,#{organId})
+            AND FIND_IN_SET(s.organ_id_,#{organId})
+        </if>
+        <if test="publicFlag != null">
+            <if test="publicFlag == 1">
+                AND s.user_id_ IS NULL
+            </if>
+            <if test="publicFlag == 0">
+                AND s.user_id_ IS NOT NULL
+            </if>
         </if>
         <if test="search != null">
-            AND (name_ LIKE CONCAT('%',#{search},'%') OR id_ LIKE CONCAT('%',#{search},'%'))
+            AND (s.name_ LIKE CONCAT('%',#{search},'%') OR s.id_ LIKE CONCAT('%',#{search},'%'))
         </if>
+    </sql>
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(s.id_) FROM school s
+        LEFT JOIN sys_user su ON su.id_ = s.user_id_
+        WHERE s.del_flag_ != 1
+        <include refid="queryPageSql"/>
 	</select>
     <select id="queryByOrganId" resultMap="School">
         SELECT * FROM school

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

@@ -258,12 +258,18 @@
         SELECT
         sch.*,
         su.username_,
-        su.avatar_
+        su.avatar_,
+        su.phone_
         FROM
         student_course_homework sch
         LEFT JOIN sys_user su ON sch.user_id_=su.id_
         <where>
-            sch.course_schedule_id_=#{courseScheduleId}
+            <if test="courseScheduleId!=null">
+                AND sch.course_schedule_id_=#{courseScheduleId}
+            </if>
+            <if test="homeworkId!=null">
+                AND sch.course_homework_id_=#{homeworkId}
+            </if>
             <if test="userName!=null and userName!=''">
                 AND su.username_ LIKE CONCAT('%',#{userName},'%')
             </if>
@@ -480,6 +486,107 @@
         <include refid="homeWorkCondition"/>
     </select>
 
+    <sql id="getEduCourseHomeworkListCondition">
+        <where>
+            mg.transaction_teacher_id_ = #{transactionTeacherId}
+            AND mg.status_ = "PROGRESS"
+            AND sr.music_group_status_='NORMAL'
+            <if test="startTime!=null">
+                AND cs.class_date_ &gt;= DATE_FORMAT(#{startTime}, "%Y-%m-%d")
+            </if>
+            <if test="endTime!=null">
+                AND cs.class_date_ &lt;= DATE_FORMAT(#{endTime}, "%Y-%m-%d")
+            </if>
+        </where>
+    </sql>
+
+    <select id="getEduCourseHomeworkList" resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+        SELECT
+            ch.id_ homeworkId,
+            cs.id_ courseId,
+            cs.name_ courseName,
+            CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) courseStartTime,
+            cs.actual_teacher_id_ teacherId,
+            su.real_name_ teacherName,
+            COUNT( sch.user_id_ ) exceptStudentNum,
+            SUM( sch.status_ ) submitStudentNum,
+            SUM( sch.is_replied_ ) repliedStudentNum
+        FROM
+            course_homework ch
+            LEFT JOIN music_group mg ON mg.id_ = ch.music_group_id_
+            LEFT JOIN course_schedule cs ON ch.course_schedule_id_ = cs.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+            LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+            LEFT JOIN student_registration sr ON sch.user_id_=sr.user_id_ AND ch.music_group_id_=sr.music_group_id_
+        <include refid="getEduCourseHomeworkListCondition" />
+        GROUP BY ch.id_
+        ORDER BY courseStartTime DESC
+        <include refid="global.limit"></include>
+    </select>
+
+    <select id="countEduCourseHomeworkList" resultType="int">
+        SELECT
+            COUNT(DISTINCT cs.id_)
+        FROM
+            course_homework ch
+            LEFT JOIN music_group mg ON mg.id_ = ch.music_group_id_
+            LEFT JOIN course_schedule cs ON ch.course_schedule_id_ = cs.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+            LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+            LEFT JOIN student_registration sr ON sch.user_id_=sr.user_id_ AND ch.music_group_id_=sr.music_group_id_
+        <include refid="getEduCourseHomeworkListCondition" />
+    </select>
+
+    <select id="countHomeworkStudentInfoWithMusicGroup" resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+        SELECT
+            ch.music_group_id_ groupId,
+            COUNT( sch.user_id_ ) exceptStudentNum,
+            SUM( sch.status_ ) submitStudentNum,
+            SUM( sch.is_replied_ ) repliedStudentNum
+        FROM
+            course_homework ch
+                LEFT JOIN course_schedule cs ON ch.course_schedule_id_ = cs.id_
+                LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+                LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+                LEFT JOIN student_registration sr ON sch.user_id_=sr.user_id_ AND ch.music_group_id_=sr.music_group_id_
+        WHERE sr.music_group_status_='NORMAL'
+            <if test="groupIds!=null and groupIds.size()>0">
+                AND ch.music_group_id_ IN
+                <foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
+                    #{groupId}
+                </foreach>
+            </if>
+            <if test="startTime!=null">
+                AND cs.class_date_ &gt;= DATE_FORMAT(#{startTime}, "%Y-%m-%d")
+            </if>
+            <if test="endTime!=null">
+                AND cs.class_date_ &lt;= DATE_FORMAT(#{endTime}, "%Y-%m-%d")
+            </if>
+        GROUP BY ch.music_group_id_
+    </select>
+
+    <select id="countHomeworkSubjectStudentInfoWithMusicGroup" resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+        SELECT
+            sr.actual_subject_id_ subjectId,
+            COUNT( sch.user_id_ ) exceptStudentNum,
+            SUM( sch.status_ ) submitStudentNum,
+            SUM( sch.is_replied_ ) repliedStudentNum
+        FROM course_homework ch
+            LEFT JOIN course_schedule cs ON ch.course_schedule_id_ = cs.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+            LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+            LEFT JOIN student_registration sr ON sch.user_id_=sr.user_id_ AND ch.music_group_id_=sr.music_group_id_
+        WHERE sr.music_group_status_='NORMAL'
+            AND ch.music_group_id_ = #{groupId}
+            <if test="startTime!=null">
+                AND cs.class_date_ &gt;= #{startTime}
+            </if>
+            <if test="endTime!=null">
+                AND cs.class_date_ &lt;= #{endTime}
+            </if>
+        GROUP BY sr.actual_subject_id_
+    </select>
+
     <sql id="homeWorkCondition">
         <where>
             <if test="userId!=null">

+ 9 - 8
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -157,18 +157,19 @@
     </update>
 
     <select id="findStudentsByOrganId" resultMap="studentManageListDto">
-        SELECT o.`name_` organ_name_,o.grade_type_,s.`user_id_` ,su.`username_` ,su.`phone_` parents_phone_,su.`real_name_` ,su.`gender_` , su.organ_id_,
+        SELECT o.`name_` organ_name_,o.grade_type_,s.`user_id_` ,su.`username_` ,su.`phone_` parents_phone_,
+        sut.name_ real_name_,su.`gender_` , su.organ_id_,
 		tu.`real_name_` teacher_name_,CASE s.service_tag_ WHEN 2 THEN 0 ELSE s.service_tag_ END service_tag_ ,s.`operating_tag_` ,
         s.care_package_, s.come_on_package_, suca.`course_balance_` ,suca.balance_,
 		sub.`name_` music_group_subject_ ,su.birthdate_,s.subject_id_list_,s.teacher_id_,s.current_grade_num_,s.current_class_,
-        case when su.password_ is null then false else true end isActive_,s.is_new_user_,case when sut.user_id_ is null then 0 else 1 end is_signed_contract_,
+        CASE WHEN su.password_ IS NULL THEN FALSE ELSE TRUE END isActive_,s.is_new_user_,CASE WHEN sut.user_id_ IS NULL THEN 0 ELSE 1 END is_signed_contract_,
         s.cooperation_organ_id_,co.name_ cooperation_organ_name_
-		FROM `student` s LEFT JOIN `sys_user` su on s.`user_id_` = su.`id_`
-		LEFT JOIN `organization` o on o.`id_` = su.`organ_id_`
-		LEFT JOIN `sys_user` tu on tu.`id_` = s.`teacher_id_` 
-		LEFT JOIN `sys_user_cash_account` suca on suca.`user_id_` = s.`user_id_`
-		LEFT JOIN `subject` sub on sub.id_ = s.`subject_id_list_`
-		left join sys_user_tsign sut on sut.user_id_ = s.user_id_
+		FROM `student` s LEFT JOIN `sys_user` su ON s.`user_id_` = su.`id_`
+		LEFT JOIN `organization` o ON o.`id_` = su.`organ_id_`
+		LEFT JOIN `sys_user` tu ON tu.`id_` = s.`teacher_id_`
+		LEFT JOIN `sys_user_cash_account` suca ON suca.`user_id_` = s.`user_id_`
+		LEFT JOIN `subject` sub ON sub.id_ = s.`subject_id_list_`
+		LEFT JOIN sys_user_tsign sut ON sut.user_id_ = s.user_id_
         LEFT JOIN cooperation_organ co ON s.cooperation_organ_id_=co.id_
         <include refid="findStudentsByOrganIdSql"/>
         ORDER BY su.create_time_ DESC

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

@@ -56,6 +56,12 @@
         WHERE id_ = #{userId} FOR UPDATE
     </select>
 
+    <select id="getUser" resultMap="com.ym.mec.biz.dal.dao.TeacherDao.SysUser">
+        SELECT *
+        FROM sys_user
+        WHERE id_ = #{userId}
+    </select>
+
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.Student" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
@@ -682,6 +688,13 @@
         SELECT * FROM student WHERE teacher_id_ IS NULL OR subject_id_list_ IS NULL OR cooperation_organ_id_ IS NULL;
     </select>
 
+    <select id="getHasVipCourseStudentIdsFromNewStudents" resultType="int">
+        SELECT DISTINCT s.user_id_
+        FROM student s
+        LEFT JOIN course_schedule_student_payment cssp ON s.user_id_=cssp.user_id_
+        WHERE s.is_new_user_=1 AND cssp.group_type_='VIP'
+    </select>
+
     <update id="updateGrade"><![CDATA[
         UPDATE student SET current_grade_num_=current_grade_num_+1
         WHERE current_grade_num_>=1
@@ -689,4 +702,12 @@
         ]]>
     </update>
 
+    <update id="updateNewStudentsToOld">
+        UPDATE student SET is_new_user_=0
+        WHERE user_id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </update>
+
 </mapper>

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

@@ -408,11 +408,13 @@
     </update>
 
     <select id="queryStudentInfo" resultMap="StudentInfo">
-        SELECT u.*,sr.name_,sr.current_class_,sr.current_grade_,sr.actual_subject_id_,sr.parents_name_,s.name_ subject_name_
-        FROM sys_user u left join
-        student_registration sr on u.id_ = sr.user_id_ left join subject s on sr.actual_subject_id_ = s.id_
-        where u.id_ = #{userId}
-        order by sr.create_time_ desc limit 1
+        SELECT sut.name_ real_name_,sut.card_no_ id_card_no_,u.*,sr.name_,sr.current_class_,sr.current_grade_,sr.actual_subject_id_,sr.parents_name_,s.name_ subject_name_
+        FROM sys_user u
+        LEFT JOIN student_registration sr ON u.id_ = sr.user_id_
+        LEFT JOIN subject s ON sr.actual_subject_id_ = s.id_
+        LEFT JOIN sys_user_tsign sut ON sut.user_id_ = u.id_
+        WHERE u.id_ = #{userId}
+        ORDER BY sr.create_time_ DESC limit 1
     </select>
 
     <select id="queryByUserIdAndMusicGroupId" resultMap="StudentRegistration">
@@ -483,6 +485,7 @@
         SELECT sr.*,cg.name_ class_group_name_,su.gender_ gender_,su.username_ FROM student_registration sr
         LEFT JOIN class_group cg ON cg.id_ = sr.class_group_id_
         LEFT JOIN sys_user su on sr.user_id_ = su.id_
+        LEFT JOIN sys_user_tsign sut ON sut.user_id_ = su.id_
         WHERE sr.music_group_id_ = #{musicGroupId}
         <if test="actualSubjectId != null">
             AND FIND_IN_SET(sr.actual_subject_id_,#{actualSubjectId})
@@ -610,9 +613,11 @@
         GROUP BY sr.music_group_id_
     </select>
     <select id="queryUserByPhone" resultMap="StudentRegistration">
-        SELECT su.id_,su.real_name_ parents_name_,su.phone_,sr.current_grade_,sr.current_grade_num_,
+        SELECT su.id_,CASE WHEN sut.name_ IS NULL THEN su.real_name_ ELSE sut.name_ END parents_name_,
+        su.phone_,sr.current_grade_,sr.current_grade_num_,
         sr.current_class_,su.username_ name_,su.birthdate_,su.gender_
         FROM sys_user su
+        LEFT JOIN sys_user_tsign sut ON sut.user_id_ = su.id_
         LEFT JOIN student_registration sr ON sr.user_id_ = su.id_
         WHERE su.phone_ = #{mobile} ORDER BY sr.id_ DESC
         LIMIT 1
@@ -986,6 +991,16 @@
         </foreach>
         LIMIT 1
     </select>
+    <select id="findByMusicGroupIds" resultMap="StudentRegistration">
+        SELECT * FROM student_registration
+        WHERE music_group_id_ IN
+        <foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
+            #{groupId}
+        </foreach>
+        <if test="musicGroupStatus!=null">
+            AND music_group_status_=#{musicGroupStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        </if>
+    </select>
 
     <update id="quitAllStudent">
         UPDATE student_registration SET music_group_status_ = 'QUIT',remark_=#{remark} WHERE music_group_id_ = #{musicGroupId}

+ 7 - 16
mec-biz/src/main/resources/config/mybatis/SysMusicScoreAccompanimentMapper.xml

@@ -76,16 +76,10 @@
 		<if test="speed != null">
 			speed_ = #{speed},
 		</if>
-		<if test="xmlUrl != null">
-			xml_url_ = #{xmlUrl},
-		</if>
 		<if test="examSongId != null">
 			exam_song_id_ = #{examSongId},
 		</if>
-		<if test="mp3Url != null">
-			mp3_url_ = #{mp3Url},
-		</if>
-		update_time_ = NOW()
+			xml_url_ = #{xmlUrl},mp3_url_ = #{mp3Url}, update_time_ = NOW()
 	</set>WHERE id_ = #{id}
 	</update>
 	<update id="batchDel">
@@ -110,16 +104,10 @@
 				<if test="item.subjectId != null">
 					subject_id_ = #{item.subjectId},
 				</if>
-				<if test="item.xmlUrl != null">
-					xml_url_ = #{item.xmlUrl},
-				</if>
 				<if test="item.examSongId != null">
 					exam_song_id_ = #{item.examSongId},
 				</if>
-				<if test="item.mp3Url != null">
-					mp3_url_ = #{item.mp3Url},
-				</if>
-				update_time_ = NOW()
+				xml_url_ = #{item.xmlUrl},mp3_url_ = #{item.mp3Url}, update_time_ = NOW()
 			</set> WHERE id_ = #{item.id}
 		</foreach>
 	</update>
@@ -196,8 +184,11 @@
 			<if test="sysMusicScoreId != null">
 				AND sesa.exam_song_id_ = #{sysMusicScoreId}
 			</if>
-			<if test="categoriesId != null">
-				AND sesc.id_ = #{categoriesId}
+			<if test="categoriesIdList != null">
+				AND sesc.id_ IN
+				<foreach collection="categoriesIdList" separator="," item="item" open="(" close=")">
+					#{item}
+				</foreach>
 			</if>
 			<if test="parentId != null">
 				AND sesc.parent_id_ = #{parentId}

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

@@ -74,7 +74,7 @@
 	<select id="findByParentId" resultMap="SysMusicScoreCategories">
 		SELECT sm.* FROM sys_music_score_categories sm
 		<include refid="queryTree"/>
-		ORDER BY sm.id_ DESC
+		ORDER BY sm.id_
 	</select>
 	<sql id="queryTree">
 		<where>

Some files were not shown because too many files changed in this diff