Browse Source

Merge branch 'master' into review-zjh

# Conflicts:
#	mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
#	mec-thirdparty/src/main/java/com/ym/mec/thirdparty/adapay/Pay.java
周箭河 5 years ago
parent
commit
003fd6d03b
100 changed files with 2589 additions and 604 deletions
  1. 1 1
      cms/src/main/resources/bootstrap-dev.properties
  2. 8 8
      codegen/src/main/resources/generateConfigration.xml
  3. 10 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysMenu.java
  4. 4 6
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebMvcConfig.java
  5. 1 1
      mec-auth/mec-auth-server/src/main/resources/bootstrap-dev.properties
  6. 6 2
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysMenuMapper.xml
  7. 5 24
      mec-auth/mec-auth-server/src/main/resources/logback-spring.xml
  8. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  9. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  10. 22 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  11. 19 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  12. 28 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  13. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CoursesGroupModifyLogDao.java
  14. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DegreeRegistrationDao.java
  15. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java
  16. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDetailDao.java
  17. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java
  18. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java
  19. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  20. 8 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  21. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  22. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  23. 19 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  24. 75 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/FeeStudentDto.java
  25. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java
  26. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupDto.java
  27. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RongyunBasicUserDto.java
  28. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  29. 87 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentMusicDetailDto.java
  30. 40 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeCourseDto.java
  31. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendanceDetailDto.java
  32. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassHeadInfo.java
  33. 27 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherMusicClassInfoDto.java
  34. 0 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java
  35. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleModifyLog.java
  36. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroup.java
  37. 79 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroupModifyLog.java
  38. 253 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java
  39. 11 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java
  40. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroupPaymentCalender.java
  41. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SporadicChargeInfo.java
  42. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java
  43. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  44. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ProbationPeriodEnum.java
  45. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SporadicChargeTypeEnum.java
  46. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SporadicChargeInfoQueryInfo.java
  47. 6 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentExercisesSituationQueryInfo.java
  48. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  49. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupTeacherMapperService.java
  50. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  51. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CoursesGroupModifyLogService.java
  52. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/DegreeRegistrationService.java
  53. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java
  54. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SporadicChargeInfoService.java
  55. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentRegistrationService.java
  56. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentServeService.java
  57. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentService.java
  58. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  59. 71 71
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  60. 69 97
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  61. 6 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  62. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseReviewServiceImpl.java
  63. 154 46
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  64. 49 35
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  65. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupModifyLogServiceImpl.java
  66. 178 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java
  67. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  68. 28 32
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  69. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  70. 23 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java
  71. 13 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  72. 59 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  73. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  74. 6 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  75. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  76. 100 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  77. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServiceImpl.java
  78. 6 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  79. 29 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  80. 70 42
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  81. 12 7
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  82. 6 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  83. 88 45
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  84. 20 21
      mec-biz/src/main/resources/config/mybatis/CourseScheduleReviewMapper.xml
  85. 29 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  86. 22 7
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  87. 70 0
      mec-biz/src/main/resources/config/mybatis/CoursesGroupModifyLogDao.xml
  88. 126 0
      mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml
  89. 13 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  90. 9 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml
  91. 28 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  92. 5 4
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  93. 8 1
      mec-biz/src/main/resources/config/mybatis/SporadicChargeInfo.xml
  94. 14 0
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  95. 27 25
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  96. 12 14
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  97. 21 8
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  98. 23 0
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  99. 9 4
      mec-biz/src/main/resources/config/mybatis/StudentRepairMapper.xml
  100. 16 3
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

+ 1 - 1
cms/src/main/resources/bootstrap-dev.properties

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.99.212.176:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=e246d169-227d-4012-8c34-e90e057d95d2
+spring.cloud.nacos.config.namespace=23b30a79-e16f-4583-a787-c7223a91252b
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 8 - 8
codegen/src/main/resources/generateConfigration.xml

@@ -2,16 +2,16 @@
 <GenerateConfiguration>
 	<dbConfiguration>
 		<driverClass>com.mysql.jdbc.Driver</driverClass>
-		<url>jdbc:mysql://47.99.212.176:3306/mec_data_online</url>
-		<username>dayaData</username>
-		<password>dayaDataOnline2019</password>
-		<catalog>mec_data_online</catalog>
-		<schema>mec_data_online</schema>
+		<url>jdbc:mysql://47.99.212.176:3306/edu_saas</url>
+		<username>edu_saas</username>
+		<password>edu_saas</password>
+		<catalog>edu_saas</catalog>
+		<schema>edu_saas</schema>
 	</dbConfiguration>
 	<srcBase>e:/javabean</srcBase>
-	<pojoPackageName>com.ym.mec.biz.dal.entity</pojoPackageName>
-	<daoPackageName>com.ym.mec.biz.dal.dao</daoPackageName>
-	<servicePackageName>com.ym.mec.biz.service</servicePackageName>
+	<pojoPackageName>com.keao.edu.datasource.dal.entity</pojoPackageName>
+	<daoPackageName>com.keao.edu.datasource.dal.dao</daoPackageName>
+	<servicePackageName>com.keao.edu.datasource.service</servicePackageName>
 	<sqlmapPackageName>resources</sqlmapPackageName>
 	<sqlmapConfigPackageName>resources/config</sqlmapConfigPackageName>
 </GenerateConfiguration>

+ 10 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysMenu.java

@@ -69,6 +69,16 @@ public class SysMenu {
 	@ApiModelProperty(value = "子节点列表",required = false)
 	private List<SysMenu> sysMenus;
 
+	private String memo;
+
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
 	public String getParentPermission() {
 		return parentPermission;
 	}

+ 4 - 6
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebMvcConfig.java

@@ -1,8 +1,7 @@
 package com.ym.mec.auth.config;
 
-import java.util.ArrayList;
-import java.util.List;
-
+import com.ym.mec.common.config.EnumConverterFactory;
+import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -10,8 +9,8 @@ import org.springframework.format.FormatterRegistry;
 import org.springframework.http.MediaType;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
-import com.ym.mec.common.config.EnumConverterFactory;
-import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
+import java.util.ArrayList;
+import java.util.List;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {
@@ -32,5 +31,4 @@ public class WebMvcConfig implements WebMvcConfigurer {
         converter.setSupportedMediaTypes(fastMediaTypes);
         return new HttpMessageConverters(converter);
     }
-
 }

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

@@ -3,7 +3,7 @@
 #\u670d\u52a1\u5668\u5730\u5740
 spring.cloud.nacos.config.server-addr=47.99.212.176:8848
 #\u9ed8\u8ba4\u4e3aPublic\u547d\u540d\u7a7a\u95f4,\u53ef\u4ee5\u7701\u7565\u4e0d\u5199
-spring.cloud.nacos.config.namespace=e246d169-227d-4012-8c34-e90e057d95d2
+spring.cloud.nacos.config.namespace=23b30a79-e16f-4583-a787-c7223a91252b
 #\u6307\u5b9a\u914d\u7f6e\u7fa4\u7ec4 --\u5982\u679c\u662fPublic\u547d\u540d\u7a7a\u95f4 \u5219\u53ef\u4ee5\u7701\u7565\u7fa4\u7ec4\u914d\u7f6e
 spring.cloud.nacos.config.group=DEFAULT_GROUP
 #\u6587\u4ef6\u540d -- \u5982\u679c\u6ca1\u6709\u914d\u7f6e\u5219\u9ed8\u8ba4\u4e3a ${spring.appliction.name}

+ 6 - 2
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysMenuMapper.xml

@@ -23,6 +23,7 @@
         <result column="update_time_" property="updateTime"/>
         <result column="del_flag_" property="delFlag"/>
         <result column="hidden_" property="hid"/>
+        <result column="memo_" property="memo"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -39,8 +40,8 @@
     <insert id="insert" parameterType="com.ym.mec.auth.api.entity.SysMenu" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
         INSERT INTO sys_menu
-        (id_,name_,permission_,path_,parent_id_,icon_,component_,sort_,type_,create_time_,update_time_,hidden_,parent_permission_)
-        VALUES(#{id},#{name},#{permission},#{path},#{parentId},#{icon},#{component},#{sort},#{type},now(),now(),#{hid},#{parentPermission})
+        (id_,name_,permission_,path_,parent_id_,icon_,component_,sort_,type_,create_time_,update_time_,hidden_,parent_permission_,memo_)
+        VALUES(#{id},#{name},#{permission},#{path},#{parentId},#{icon},#{component},#{sort},#{type},now(),now(),#{hid},#{parentPermission},#{memo})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -86,6 +87,9 @@
             <if test="hid != null">
                 hidden_ = #{hid},
             </if>
+            <if test="memo != null">
+                memo_ = #{memo},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

+ 5 - 24
mec-auth/mec-auth-server/src/main/resources/logback-spring.xml

@@ -27,29 +27,10 @@
 		</encoder>
 	</appender>
 
-	<logger name="com.ym.mec" level="INFO" />
-
-	<!--开发环境:打印控制台 -->
-	<springProfile name="dev">
-		<root level="INFO">
-			<appender-ref ref="stdout" />
-			<appender-ref ref="file" />
-		</root>
-	</springProfile>
-	
-	<springProfile name="test">
-		<root level="INFO">
-			<appender-ref ref="stdout" />
-			<appender-ref ref="file" />
-		</root>
-	</springProfile>
-
-	<!--生产环境:输出到文件 -->
-	<springProfile name="prod">
-		<root level="WARN">
-			<appender-ref ref="stdout" />
-			<appender-ref ref="file" />
-		</root>
-	</springProfile>
+	<logger name="com.ym.mec" level="DEBUG" />
+	<root level="DEBUG">
+		<appender-ref ref="stdout" />
+		<appender-ref ref="file" />
+	</root>
 
 </configuration>

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

@@ -724,4 +724,12 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @return
      */
     List<HighClassGroupDto> findHighClassGroup(@Param("musicGroupId") String musicGroupId, @Param("classGroupIds") String classGroupIds);
+
+    /**
+     * 获取班级列表
+     * @param practiceGroupId
+     * @param groupType
+     * @return
+     */
+    List<ClassGroup> queryClassGroups(@Param("practiceGroupId") String practiceGroupId, @Param("groupType") String groupType);
 }

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

@@ -128,4 +128,11 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @return
      */
     List<ClassGroupTeacherMapper> findByClassGroupIdsAndType(@Param("classGroupIds") List<Integer> classGroupIds, @Param("teacherRole") String teacherRole);
+
+    /**
+     * 批量修改班级关联的老师
+     * @param classGroupIds
+     * @param newTeacherId
+     */
+    void batchUpdateTeacherByClassId(@Param("classGroupIds") List<Integer> classGroupIds, @Param("oldTeacherId") Integer oldTeacherId, @Param("newTeacherId") Integer newTeacherId);
 }

+ 22 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -776,7 +776,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @author Joburgess
      * @date 2019/11/3
      */
-    List<CourseSchedule> findCourseScheduleWithDate(@Param("date") Date date);
+    List<CourseSchedule> findCourseScheduleWithDate(@Param("startDate") String startDate, @Param("endDate") String endDate);
 
     /**
      * @param classGroupId: 班级编号
@@ -1313,8 +1313,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Integer>>
      */
     List<Map<Integer, Long>> countStudentVipCoursesWithDate(@Param("studentIds") List<Integer> studentIds,
-                                                               @Param("startTime") Date startTime,
-                                                               @Param("endTime") Date endTime,
+                                                            @Param("startTime") Date startTime,
+                                                            @Param("endTime") Date endTime,
                                                             @Param("groupType") GroupType groupType);
 
 
@@ -1328,8 +1328,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Long>>
      */
     List<Map<Integer, Long>> countStudentPayPracticeCoursesWithDate(@Param("studentIds") List<Integer> studentIds,
-                                                            @Param("startTime") Date startTime,
-                                                            @Param("endTime") Date endTime);
+                                                                    @Param("startTime") Date startTime,
+                                                                    @Param("endTime") Date endTime);
 
     /**
      * @describe 统计学生在未来的vip课数量
@@ -1521,4 +1521,21 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @param courseScheduleId
      */
     void resetStudentNum(@Param("courseScheduleId") List<Long> courseScheduleId);
+
+    /**
+     * 获取当前班级列表的所有未开始的课程
+     * @param classGroupIds
+     * @param teacherId
+     * @param teacherRole
+     * @return
+     */
+    List<CourseSchedule> queryNoStartCourseByTeacherId(@Param("classGroupIds") String classGroupIds, @Param("teacherId") Integer teacherId, @Param("teacherRole") String teacherRole);
+
+    /**
+     * 当前班级是否有未开始的课程
+     * @param classGroupIds
+     * @param teacherId
+     * @return
+     */
+    List<Map<Integer, Integer>> queryHasReatClass(@Param("classGroupIds") Set<String> classGroupIds, @Param("teacherId") String teacherId);
 }

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

@@ -295,4 +295,23 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @return
      */
     String getMidiByCourseIdAndUserId(@Param("courseScheduleId") String courseScheduleId, @Param("userId") String userId);
+
+    /**
+     * @describe 统计课程组下的课程单价
+     * @author Joburgess
+     * @date 2020.06.11
+     * @param groupType:
+     * @param groupIds:
+     * @return java.util.List<java.util.Map<java.lang.String,java.math.BigDecimal>>
+     */
+    List<Map<String, BigDecimal>> findGroupCoursesUnitPrice(@Param("groupType") GroupType groupType,
+                                                            @Param("groupIds") List<String> groupIds);
+
+    /**
+     * 获取未进入教室的学员列表
+     * @param roomId
+     * @param courseScheduleId
+     * @return
+     */
+    List<RongyunBasicUserDto> queryNoJoinStu(@Param("roomId") String roomId, @Param("courseScheduleId") String courseScheduleId);
 }

+ 28 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java

@@ -62,7 +62,7 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @params [days:天数]
 	 * @describe 获取多少天之前的未结算教师课酬记录(vip课)
 	 */
-	List<CourseScheduleTeacherSalary> findSomeDayAgoTeacherCourseSalaryNoSettlement(@Param("days") Integer days);
+	List<CourseScheduleTeacherSalary> findSomeDayAgoTeacherCourseSalaryNoSettlement(@Param("startDate") String startDate,@Param("endDate") String endDate);
 
 	List<CourseScheduleTeacherSalary> findTemp();
 
@@ -73,7 +73,7 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @params [days:天数]
 	 * @describe 获取多少天之前的未结算教师课酬记录(陪练课课)
 	 */
-	List<CourseScheduleTeacherSalary> findTeacherCourseSalaryNoSettlement(@Param("days") Integer days,@Param("groupType") String groupType);
+	List<CourseScheduleTeacherSalary> findTeacherCourseSalaryNoSettlement(@Param("startDate") String startDate,@Param("endDate") String endDate);
 
 	/**
 	 * 查询老师指定课程的课酬
@@ -120,6 +120,17 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	int batchUpdate(@Param("courseScheduleTeacherSalaries") List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries);
 
 	/**
+	 * @describe 更新指定课程的课酬
+	 * @author Joburgess
+	 * @date 2020.06.10
+	 * @param courseIds:
+	 * @param salary:
+	 * @return int
+	 */
+	int batchUpdateCourseSalarys(@Param("courseIds") List<Long> courseIds,
+								 @Param("salary") BigDecimal salary);
+
+	/**
 	 * @describe 根据课程编号与老师编号删除对应教师课酬记录
 	 * @author Joburgess
 	 * @date 2019/12/2
@@ -358,7 +369,7 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @param endDate
 	 * @return
 	 */
-	List<TeacherVipSalaryDto> queryOnlineCourseByGroupType(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
+	List<TeacherVipSalaryDto> queryOnlineCourseByGroupType(@Param("startDate") String startDate, @Param("endDate") String endDate);
 	/**
 	 * 该用户是不是这个群组的老师
 	 * @param groupId
@@ -477,4 +488,18 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @return
 	 */
 	int getHasTeacherSalaryCount(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+
+	/**
+	 * 根据助教主教获取教师列表
+	 * @param classGroupId
+	 * @return
+	 */
+    List<Integer> queryTeacherByTeaching(@Param("classGroupId") Integer classGroupId);
+
+	/**
+	 * 根据助教主教获取教师列表
+	 * @param classGroupId
+	 * @return
+	 */
+    Integer queryTeacherByBishop(@Param("classGroupId") Integer classGroupId);
 }

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

@@ -0,0 +1,8 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.CoursesGroupModifyLog;
+import com.ym.mec.common.dal.BaseDAO;
+
+public interface CoursesGroupModifyLogDao extends BaseDAO<Long, CoursesGroupModifyLog> {
+
+}

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/DegreeRegistrationDao.java

@@ -0,0 +1,13 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.DegreeRegistration;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+public interface DegreeRegistrationDao extends BaseDAO<Integer, DegreeRegistration> {
+
+    DegreeRegistration findByMobileAndSporadicId(@Param("mobile") String mobile, @Param("sporadicId") Integer sporadicId);
+
+    DegreeRegistration getLock(@Param("id") Integer id);
+
+}

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

@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, ExtracurricularExercisesReply> {
 
@@ -109,4 +110,16 @@ public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, Extracur
 	List<ExtracurricularExercisesReply> getStudentExercisesWithTimeZone(@Param("startDate") String startDate,
                                                                         @Param("endDate") String endDate,
                                                                         @Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * @describe
+     * @date 2020.06.15
+     * @param startDate:
+     * @param endDate:
+     * @param studentIds:
+     * @return java.util.Set<java.lang.Integer>
+     */
+    Set<Integer> checkStudentHaveExercisesInDateRange(@Param("startDate") String startDate,
+                                                     @Param("endDate") String endDate,
+                                                     @Param("studentIds") List<Integer> studentIds);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentCalenderDetailDao.java

@@ -100,4 +100,17 @@ public interface MusicGroupPaymentCalenderDetailDao extends BaseDAO<Long, MusicG
 	 * @return
 	 */
 	List<Map<Integer, String>> queryPaymentPushMap();
+
+	/**
+	 * 删除缴费详情
+	 * @param musicGroupPaymentCalenderIds
+	 */
+	void batchDel(String musicGroupPaymentCalenderIds);
+
+	/**
+	 * 删除未缴费的明细
+	 * @param userId
+	 * @param musicGroupId
+	 */
+	void deleteByUserIdAndMusicGroupId(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
 }

+ 9 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupStudentFeeDao.java

@@ -5,6 +5,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 
+import com.ym.mec.biz.dal.dto.FeeStudentDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
 import org.apache.ibatis.annotations.Param;
 
@@ -142,7 +143,7 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @param musicGroupId
 	 * @return
 	 */
-	List<MusicGroupStudentFee> queryByMusicGroupId(String musicGroupId);
+	List<MusicGroupStudentFee> queryByMusicGroupId(@Param("musicGroupId") String musicGroupId, @Param("studentIds") String studentIds);
 
 	/**
 	 * 修改学员缴费周期锁定状态
@@ -194,4 +195,11 @@ public interface MusicGroupStudentFeeDao extends BaseDAO<Long, MusicGroupStudent
 	 * @param musicGroupPaymentCalenderDetailIds
 	 */
 	void remainNetworkClassTimesAdd(@Param("musicGroupPaymentCalenderDetailIds") String musicGroupPaymentCalenderDetailIds);
+
+	/**
+	 * 获取fee表学员列表
+	 * @param musicGroupId
+	 * @return
+	 */
+    List<FeeStudentDto> queryFeeStudents(@Param("musicGroupId") String musicGroupId, @Param("search") String search, @Param("subjectId") Integer subjectId);
 }

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

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHomework> {
 
@@ -121,4 +122,16 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
     List<StudentServeCourseHomeworkDto> findStudentHomeworkWithCourseDateRange(@Param("startDate") String startDate,
                                                                                @Param("endDate") String endDate,
                                                                                @Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * @describe
+     * @date 2020.06.15
+     * @param startDate:
+     * @param endDate:
+     * @param studentIds:
+     * @return java.util.Set<java.lang.Integer>
+     */
+    Set<Integer> checkStudentHaveHomeworkInDateRange(@Param("startDate") String startDate,
+                                                     @Param("endDate") String endDate,
+                                                     @Param("studentIds") List<Integer> studentIds);
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.Student4operating;
+import com.ym.mec.biz.dal.dto.StudentServeCourseDto;
 import com.ym.mec.biz.dal.dto.StudentServeDto;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.enums.GroupType;
@@ -81,6 +82,8 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      */
     List<Integer> getServeStudentIds();
 
+    List<StudentServeCourseDto> getServeStudentCourseStartTimes(@Param("monday") String monday);
+
     /**
      * @describe 查询被服务学员信息
      * @author Joburgess
@@ -126,4 +129,9 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
                                            @Param("studentIds") List<Integer> studentIds,
                                            @Param("serviceTag") Integer serviceTag);
 
+    /**
+     * 修改学员的指导老师
+     * @param teacherId
+     */
+    void batchUpdateAdviser(@Param("teacherId") Integer teacherId, @Param("studentIds") String studentIds);
 }

+ 8 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java

@@ -4,14 +4,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.Subject;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
-import com.ym.mec.biz.dal.dto.StudentFeeDetailDto;
-import com.ym.mec.biz.dal.dto.StudentInfo;
-import com.ym.mec.biz.dal.dto.StudentRegisterPerDto;
 import com.ym.mec.biz.dal.entity.MusicGroupSubjectPlan;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
@@ -328,4 +325,11 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     List<Subject> findMusicGroupAllStudentSubjects(@Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取学员详情页,包含所在乐团信息
+     * @param studentId
+     * @return
+     */
+    StudentMusicDetailDto getStudentDetail(Integer studentId);
 }

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

@@ -230,4 +230,18 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	 * @return
 	 */
 	int countTeacherAttendanceComplaints(Map<String, Object> params);
+
+	/**
+	 * 删除老师考勤
+	 * @param courseScheduleIds
+	 * @param teacherId
+	 */
+	void deleteByCourseAndTeacherId(@Param("courseScheduleIds") Set<Long> courseScheduleIds, @Param("teacherId") Integer teacherId);
+
+	/**
+	 * 获取上课时间
+	 * @param courseScheduleId
+	 * @return
+	 */
+    Integer getAttendClassTime(Integer courseScheduleId);
 }

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

@@ -458,4 +458,17 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @return
      */
     List<String> queryMusicLeaderIds(Integer teacherId);
+
+    /**
+     * 获取和当前指导老师关联的学员
+     * @return
+     */
+    List<BasicUserDto> queryStudent(Map<String, Object> params);
+
+    /**
+     * COUNT当前指导老师关联的学员
+     * @param params
+     * @return
+     */
+    int countStudent(Map<String, Object> params);
 }

+ 19 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java

@@ -35,12 +35,12 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "班级编号,房间号",required = false)
     private String sealClassId;
 
-    /*@ApiModelProperty(value = "签到状态(1正常,0异常,3未签到)",required = false)
+    @ApiModelProperty(value = "签到状态(1正常,0异常,3未签到)",required = false)
     private Integer signInStatus;
 
-    @ApiModelProperty(value = "签退状态(11正常,0异常,3未签到)",required = false)
+    @ApiModelProperty(value = "签退状态(1正常,0异常,3未签到)",required = false)
     private Integer signOutStatus;
-*/
+
     @ApiModelProperty(value = "教师角色")
     private TeachTypeEnum teacherRole;
 
@@ -80,6 +80,22 @@ public class CourseScheduleDto extends CourseSchedule {
 
     private int isNew;
 
+    public Integer getSignInStatus() {
+        return signInStatus;
+    }
+
+    public void setSignInStatus(Integer signInStatus) {
+        this.signInStatus = signInStatus;
+    }
+
+    public Integer getSignOutStatus() {
+        return signOutStatus;
+    }
+
+    public void setSignOutStatus(Integer signOutStatus) {
+        this.signOutStatus = signOutStatus;
+    }
+
     public Integer getComplaintsStatus() {
         return complaintsStatus;
     }

+ 75 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/FeeStudentDto.java

@@ -0,0 +1,75 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.math.BigDecimal;
+
+public class FeeStudentDto {
+    private Integer id;
+
+    private Integer userId;
+
+    private String username;
+
+    private Integer gender;
+
+    private String subjectName;
+
+    private BigDecimal courseFee;
+
+    private String musicGroupId;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Integer getGender() {
+        return gender;
+    }
+
+    public void setGender(Integer gender) {
+        this.gender = gender;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public BigDecimal getCourseFee() {
+        return courseFee;
+    }
+
+    public void setCourseFee(BigDecimal courseFee) {
+        this.courseFee = courseFee;
+    }
+
+    public String getMusicGroupId() {
+        return musicGroupId;
+    }
+
+    public void setMusicGroupId(String musicGroupId) {
+        this.musicGroupId = musicGroupId;
+    }
+}

+ 4 - 4
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/MusicGroupStudentsDto.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.math.BigDecimal;
@@ -40,8 +41,7 @@ public class MusicGroupStudentsDto{
     @ApiModelProperty(value = "学员状态 NORMAL(NORMAL, 在读), LEAVE(LEAVE, 请假), QUIT(QUIT, 退班)",required = false)
     private String studentStatus;
 
-    @ApiModelProperty(value = "缴费状态  PAID_COMPLETED(完成缴费), NON_PAYMENT(未缴费), PROCESSING(缴费中)",required = false)
-    private String paymentStatus;
+    private PaymentStatusEnum paymentStatus;
 
     @ApiModelProperty(value = "是否新增学员(1是0否)",required = false)
     private Integer isNewStudent;
@@ -170,11 +170,11 @@ public class MusicGroupStudentsDto{
         this.studentStatus = studentStatus;
     }
 
-    public String getPaymentStatus() {
+    public PaymentStatusEnum getPaymentStatus() {
         return paymentStatus;
     }
 
-    public void setPaymentStatus(String paymentStatus) {
+    public void setPaymentStatus(PaymentStatusEnum paymentStatus) {
         this.paymentStatus = paymentStatus;
     }
 

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

@@ -28,8 +28,18 @@ public class PracticeGroupDto extends PracticeGroup {
 
     private Integer evaluateStatus;
 
+    private Integer hasRestClass;
+
     private String educationalTeacherName;
 
+    public Integer getHasRestClass() {
+        return hasRestClass;
+    }
+
+    public void setHasRestClass(Integer hasRestClass) {
+        this.hasRestClass = hasRestClass;
+    }
+
     public String getEducationalTeacherName() {
         return educationalTeacherName;
     }

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/RongyunBasicUserDto.java

@@ -0,0 +1,33 @@
+package com.ym.mec.biz.dal.dto;
+
+public class RongyunBasicUserDto {
+    private Integer userId;
+
+    private String userName;
+
+    private String headUrl;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public String getHeadUrl() {
+        return headUrl;
+    }
+
+    public void setHeadUrl(String headUrl) {
+        this.headUrl = headUrl;
+    }
+}

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

@@ -44,6 +44,9 @@ public class StudentManageListDto {
 
     @ApiModelProperty(value = "课程余额")
     private BigDecimal courseBalance;
+
+    @ApiModelProperty(value = "账户余额")
+    private BigDecimal balance;
     
     private YesOrNoEnum isActive;
 
@@ -74,6 +77,14 @@ public class StudentManageListDto {
     
     private Integer teacherId;
 
+    public BigDecimal getBalance() {
+        return balance;
+    }
+
+    public void setBalance(BigDecimal balance) {
+        this.balance = balance;
+    }
+
     public YesOrNoEnum getServiceTag() {
         return serviceTag;
     }

+ 87 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentMusicDetailDto.java

@@ -0,0 +1,87 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.MusicGroup;
+
+import java.util.List;
+
+public class StudentMusicDetailDto {
+    private Integer userId;
+
+    private String username;
+
+    private Integer gender;
+
+    private String subjectName;
+
+    private String phone;
+
+    private String avatar;
+
+    private String imToken;
+
+    private List<MusicGroup> musicGroups;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Integer getGender() {
+        return gender;
+    }
+
+    public void setGender(Integer gender) {
+        this.gender = gender;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getImToken() {
+        return imToken;
+    }
+
+    public void setImToken(String imToken) {
+        this.imToken = imToken;
+    }
+
+    public List<MusicGroup> getMusicGroups() {
+        return musicGroups;
+    }
+
+    public void setMusicGroups(List<MusicGroup> musicGroups) {
+        this.musicGroups = musicGroups;
+    }
+}

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeCourseDto.java

@@ -0,0 +1,40 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.06.15
+ */
+public class StudentServeCourseDto {
+
+    private Integer studentId;
+
+    private Date courseStartTime;
+
+    private Date serviceTagUpdateTime;
+
+    public Date getServiceTagUpdateTime() {
+        return serviceTagUpdateTime;
+    }
+
+    public void setServiceTagUpdateTime(Date serviceTagUpdateTime) {
+        this.serviceTagUpdateTime = serviceTagUpdateTime;
+    }
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public Date getCourseStartTime() {
+        return courseStartTime;
+    }
+
+    public void setCourseStartTime(Date courseStartTime) {
+        this.courseStartTime = courseStartTime;
+    }
+}

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

@@ -30,6 +30,16 @@ public class TeacherAttendanceDetailDto {
 
     private Date signOutTime;
 
+    private Integer attendClassTime;
+
+    public Integer getAttendClassTime() {
+        return attendClassTime;
+    }
+
+    public void setAttendClassTime(Integer attendClassTime) {
+        this.attendClassTime = attendClassTime;
+    }
+
     public String getTeacherName() {
         return teacherName;
     }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassHeadInfo.java

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import io.swagger.annotations.ApiModelProperty;
+import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
 
 import java.util.Date;
 
@@ -49,6 +51,9 @@ public class TeacherClassHeadInfo {
     @ApiModelProperty(value = "班级名称",required = false)
     private String classGroupName;
 
+    @ApiModelProperty(value = "课程类型",required = false)
+    private CourseScheduleType CourseScheduleType;
+
 
     public Integer getTotalClassTimes() {
         return totalClassTimes;
@@ -153,4 +158,12 @@ public class TeacherClassHeadInfo {
     public void setClassGroupName(String classGroupName) {
         this.classGroupName = classGroupName;
     }
+
+    public CourseSchedule.CourseScheduleType getCourseScheduleType() {
+        return CourseScheduleType;
+    }
+
+    public void setCourseScheduleType(CourseSchedule.CourseScheduleType courseScheduleType) {
+        CourseScheduleType = courseScheduleType;
+    }
 }

+ 27 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherMusicClassInfoDto.java

@@ -1,13 +1,12 @@
 package com.ym.mec.biz.dal.dto;
 
+import com.ym.mec.biz.dal.enums.JobNatureEnum;
 import com.ym.mec.biz.dal.enums.JobTypeEnum;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.List;
 
-import com.ym.mec.biz.dal.enums.JobNatureEnum;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-
 /**
  * 老师乐团课程信息
  */
@@ -31,7 +30,10 @@ public class TeacherMusicClassInfoDto {
     private String teacherRole;
 
     @ApiModelProperty(value = "执教班级名称", required = false)
-    private List<String> classGroupNames;
+    private String classGroupNames;
+
+    @ApiModelProperty(value = "执教班级编号", required = false)
+    private String classGroupIds;
 
     @ApiModelProperty(value = "教师乐团职务类型", required = false)
     private JobTypeEnum jobType;
@@ -42,6 +44,17 @@ public class TeacherMusicClassInfoDto {
     @ApiModelProperty(value = "出勤次数",required = false)
     private Integer attendanceNum;
 
+    @ApiModelProperty(value = "是否又剩余课时",required = false)
+    private Integer hasRestClass;
+
+    public Integer getHasRestClass() {
+        return hasRestClass;
+    }
+
+    public void setHasRestClass(Integer hasRestClass) {
+        this.hasRestClass = hasRestClass;
+    }
+
     public String getTeacherRole() {
         return teacherRole;
     }
@@ -106,14 +119,22 @@ public class TeacherMusicClassInfoDto {
         this.teamTeacherId = teamTeacherId;
     }
 
-    public List<String> getClassGroupNames() {
+    public String getClassGroupNames() {
         return classGroupNames;
     }
 
-    public void setClassGroupNames(List<String> classGroupNames) {
+    public void setClassGroupNames(String classGroupNames) {
         this.classGroupNames = classGroupNames;
     }
 
+    public String getClassGroupIds() {
+        return classGroupIds;
+    }
+
+    public void setClassGroupIds(String classGroupIds) {
+        this.classGroupIds = classGroupIds;
+    }
+
     public MusicGroupStatusEnum getStatus() {
         return status;
     }

+ 0 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseSchedule.java

@@ -4,9 +4,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.common.enums.BaseEnum;
-
 import io.swagger.annotations.ApiModelProperty;
-
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 

+ 2 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleModifyLog.java

@@ -21,10 +21,10 @@ public class CourseScheduleModifyLog {
 	
 	/**  */
 	private String currentCourseSchedule;
-	
+
 	/**  */
 	private java.util.Date createTime;
-	
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroup.java

@@ -8,7 +8,7 @@ import java.math.BigDecimal;
 /**
  * 对应数据库表(courses_group):
  */
-public class CoursesGroup {
+public class CoursesGroup{
 
 	/**  */
 	private Long id;

+ 79 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroupModifyLog.java

@@ -0,0 +1,79 @@
+package com.ym.mec.biz.dal.entity;
+
+import java.util.Date;
+
+/**
+ * 对应数据库表(courses_group_modify_log):
+ */
+public class CoursesGroupModifyLog{
+
+	private Long id;
+
+	private String groupId;
+
+	private Integer operatorId;
+
+	private String groupType;
+
+	private String previousGroup;
+
+	private String currentGroup;
+
+	private Date createTime;
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public String getGroupId() {
+		return groupId;
+	}
+
+	public void setGroupId(String groupId) {
+		this.groupId = groupId;
+	}
+
+	public Integer getOperatorId() {
+		return operatorId;
+	}
+
+	public void setOperatorId(Integer operatorId) {
+		this.operatorId = operatorId;
+	}
+
+	public String getGroupType() {
+		return groupType;
+	}
+
+	public void setGroupType(String groupType) {
+		this.groupType = groupType;
+	}
+
+	public String getPreviousGroup() {
+		return previousGroup;
+	}
+
+	public void setPreviousGroup(String previousGroup) {
+		this.previousGroup = previousGroup;
+	}
+
+	public String getCurrentGroup() {
+		return currentGroup;
+	}
+
+	public void setCurrentGroup(String currentGroup) {
+		this.currentGroup = currentGroup;
+	}
+
+	public Date getCreateTime() {
+		return createTime;
+	}
+
+	public void setCreateTime(Date createTime) {
+		this.createTime = createTime;
+	}
+}

+ 253 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/DegreeRegistration.java

@@ -0,0 +1,253 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+public class DegreeRegistration {
+    private Integer id;
+
+    /**
+     * 零星支付id
+     */
+    @ApiModelProperty(value = "零星支付id",required = true)
+    private Integer sporadicId;
+
+    /**
+     * 姓名
+     */
+    @ApiModelProperty(value = "名字",required = true)
+    private String name;
+
+    /**
+     * 性别
+     */
+    @ApiModelProperty(value = "性别",required = true)
+    private String gender;
+
+    /**
+     * 身份证号
+     */
+    @ApiModelProperty(value = "身份证号",required = true)
+    private String idcard;
+
+    /**
+     * 城市
+     */
+    @ApiModelProperty(value = "城市",required = true)
+    private String city;
+
+    /**
+     * 学校
+     */
+    @ApiModelProperty(value = "学校",required = true)
+    private String school;
+
+    /**
+     * 乐器
+     */
+    @ApiModelProperty(value = "乐器",required = true)
+    private String subject;
+
+    /**
+     * 考试级别
+     */
+    @ApiModelProperty(value = "考试级别",required = true)
+    private String level;
+
+    /**
+     * 乐理级别
+     */
+    @ApiModelProperty(value = "乐理级别",required = true)
+    private String theoryLevel;
+
+    /**
+     * 家长联系电话
+     */
+    @ApiModelProperty(value = "家长联系电话",required = true)
+    private String mobile;
+
+    /**
+     * 考级费用
+     */
+    @ApiModelProperty(value = "收费标准",required = false)
+    private BigDecimal money;
+
+    /**
+     * 备注
+     */
+    @ApiModelProperty(value = "备注",required = false)
+    private String memo;
+
+    /**
+     * 乐理费用
+     */
+    @ApiModelProperty(value = "乐理费用",required = true)
+    private BigDecimal theoryMoney;
+
+    /**
+     * 报名时间
+     */
+    private Date createTime;
+
+    /**
+     * 更新时间
+     */
+    private Date updateTime;
+
+    /**
+     * 0-未支付 1-支付中 2-支付中
+     */
+    private Integer status;
+
+    /**
+     *  是否重新支付
+     */
+    @ApiModelProperty(value = "是否重新支付",required = false)
+    private Boolean isRepay = false;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getSporadicId() {
+        return sporadicId;
+    }
+
+    public void setSporadicId(Integer sporadicId) {
+        this.sporadicId = sporadicId;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getGender() {
+        return gender;
+    }
+
+    public void setGender(String gender) {
+        this.gender = gender;
+    }
+
+    public String getIdcard() {
+        return idcard;
+    }
+
+    public void setIdcard(String idcard) {
+        this.idcard = idcard;
+    }
+
+    public String getCity() {
+        return city;
+    }
+
+    public void setCity(String city) {
+        this.city = city;
+    }
+
+    public String getSchool() {
+        return school;
+    }
+
+    public void setSchool(String school) {
+        this.school = school;
+    }
+
+    public String getSubject() {
+        return subject;
+    }
+
+    public void setSubject(String subject) {
+        this.subject = subject;
+    }
+
+    public String getTheoryLevel() {
+        return theoryLevel;
+    }
+
+    public void setTheoryLevel(String theoryLevel) {
+        this.theoryLevel = theoryLevel;
+    }
+
+    public String getMobile() {
+        return mobile;
+    }
+
+    public void setMobile(String mobile) {
+        this.mobile = mobile;
+    }
+
+    public BigDecimal getMoney() {
+        return money;
+    }
+
+    public void setMoney(BigDecimal money) {
+        this.money = money;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    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;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Boolean getIsRepay() {
+        return isRepay;
+    }
+
+    public void setIsRepay(Boolean repay) {
+        isRepay = repay;
+    }
+
+    public String getLevel() {
+        return level;
+    }
+
+    public void setLevel(String level) {
+        this.level = level;
+    }
+
+    public BigDecimal getTheoryMoney() {
+        return theoryMoney;
+    }
+
+    public void setTheoryMoney(BigDecimal theoryMoney) {
+        this.theoryMoney = theoryMoney;
+    }
+}

+ 11 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java

@@ -15,7 +15,7 @@ import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 /**
  * 对应数据库表(music_group):
  */
-public class MusicGroup{
+public class MusicGroup {
 
 	/**  */
 	private String id;
@@ -152,6 +152,16 @@ public class MusicGroup{
 	
 	private FeeType feeType;
 
+	private String subjectName;
+
+	public String getSubjectName() {
+		return subjectName;
+	}
+
+	public void setSubjectName(String subjectName) {
+		this.subjectName = subjectName;
+	}
+
 	public Integer getRepairUserId() {
 		return repairUserId;
 	}

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

@@ -57,6 +57,16 @@ public class MusicGroupPaymentCalender implements Comparable<MusicGroupPaymentCa
 	/**  */
 	private java.util.Date updateTime;
 
+	private String studentIds;
+
+	public String getStudentIds() {
+		return studentIds;
+	}
+
+	public void setStudentIds(String studentIds) {
+		this.studentIds = studentIds;
+	}
+
 	public void setId(Long id) {
 		this.id = id;
 	}

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

@@ -47,9 +47,20 @@ public class SporadicChargeInfo {
 	@ApiModelProperty(value = "操作人", required = true)
 	private String operatorName;
 
+	@ApiModelProperty(value = "是否关闭", required = true)
+	private Integer openFlag;
+
 	@ApiModelProperty(value = "是否删除", required = true)
 	private Integer delFlag;
 
+	public Integer getOpenFlag() {
+		return openFlag;
+	}
+
+	public void setOpenFlag(Integer openFlag) {
+		this.openFlag = openFlag;
+	}
+
 	public String getUserName() {
 		return userName;
 	}

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/Teacher.java

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.entity;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.enums.JobNatureEnum;
 import com.ym.mec.biz.dal.enums.JobTypeEnum;
+import com.ym.mec.biz.dal.enums.ProbationPeriodEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
 import org.apache.commons.lang3.builder.ToStringBuilder;
@@ -26,7 +27,7 @@ public class Teacher extends SysUser {
 
 	/** 是否试用期 */
 	@ApiModelProperty(value = "是否试用期1是,0否", required = false)
-	private YesOrNoEnum isProbationPeriod;
+	private ProbationPeriodEnum isProbationPeriod;
 
 	/** 学历 */
 	@ApiModelProperty(value = "学历", required = false)
@@ -214,11 +215,11 @@ public class Teacher extends SysUser {
 		this.jobType = jobType;
 	}
 
-	public YesOrNoEnum getIsProbationPeriod() {
+	public ProbationPeriodEnum getIsProbationPeriod() {
 		return isProbationPeriod;
 	}
 
-	public void setIsProbationPeriod(YesOrNoEnum isProbationPeriod) {
+	public void setIsProbationPeriod(ProbationPeriodEnum isProbationPeriod) {
 		this.isProbationPeriod = isProbationPeriod;
 	}
 

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

@@ -132,6 +132,16 @@ public class VipGroup {
 
 	private String lastOverTime;
 
+	private BigDecimal courseUnitPrice;
+
+	public BigDecimal getCourseUnitPrice() {
+		return courseUnitPrice;
+	}
+
+	public void setCourseUnitPrice(BigDecimal courseUnitPrice) {
+		this.courseUnitPrice = courseUnitPrice;
+	}
+
 	public String getLastOverTime() {
 		return lastOverTime;
 	}

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ProbationPeriodEnum.java

@@ -0,0 +1,36 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+//人事状态(1-试用 0-正式,2离职)',
+public enum ProbationPeriodEnum implements BaseEnum<Integer, ProbationPeriodEnum> {
+    NORMAL(0,"正式"),
+    TRY(1,"试用"),
+    LEAVE(2,"离职");
+
+    private Integer code;
+
+    private String msg;
+
+    ProbationPeriodEnum(Integer code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public Integer getCode() {
+        return this.code;
+    }
+}

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

@@ -11,7 +11,8 @@ public enum SporadicChargeTypeEnum implements BaseEnum<Integer, SporadicChargeTy
     LUCKY_BAG_ACTIVE(6,"福袋活动"),
     VISITING_FEE(7,"上门费"),
     VIP_BUY(8,"VIP课购买"),
-    RECHARGE(9,"账户余额");
+    RECHARGE(9,"账户余额"),
+    MUSIC_UPKEEP(10,"乐保服务");
 
     private Integer code;
 

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

@@ -17,6 +17,17 @@ public class SporadicChargeInfoQueryInfo extends QueryInfo {
 
     private boolean isExport = false;
 
+    @ApiModelProperty(value = "是否关闭", required = true)
+    private Integer openFlag;
+
+    public Integer getOpenFlag() {
+        return openFlag;
+    }
+
+    public void setOpenFlag(Integer openFlag) {
+        this.openFlag = openFlag;
+    }
+
     public boolean getIsExport() {
         return isExport;
     }

+ 6 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentExercisesSituationQueryInfo.java

@@ -43,24 +43,24 @@ public class StudentExercisesSituationQueryInfo extends QueryInfo {
     private Integer existPracticeCourse;
 
     @ApiModelProperty(value = "作业提交起始时间")
-    private Date submitStartDate;
+    private String submitStartDate;
 
     @ApiModelProperty(value = "作业提交截至时间")
-    private Date submitEndDate;
+    private String submitEndDate;
 
-    public Date getSubmitStartDate() {
+    public String getSubmitStartDate() {
         return submitStartDate;
     }
 
-    public void setSubmitStartDate(Date submitStartDate) {
+    public void setSubmitStartDate(String submitStartDate) {
         this.submitStartDate = submitStartDate;
     }
 
-    public Date getSubmitEndDate() {
+    public String getSubmitEndDate() {
         return submitEndDate;
     }
 
-    public void setSubmitEndDate(Date submitEndDate) {
+    public void setSubmitEndDate(String submitEndDate) {
         this.submitEndDate = submitEndDate;
     }
 

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

@@ -429,4 +429,11 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param groupName
      */
     void updateGroupName(Integer groupId, String groupName);
+
+    /**
+     * @params @param courseId:课程编号
+     * @return com.ym.mec.biz.dal.dto.TeacherClassHeadInfo
+     * @describe 获取班级信息
+     */
+    TeacherClassHeadInfo findTeacherClassGroupInfoByCourseId(Integer courseId);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupTeacherMapperService.java

@@ -68,4 +68,11 @@ public interface ClassGroupTeacherMapperService extends BaseService<Long, ClassG
      * @param teacherId
      */
     void updateTeacher(String groupId, Integer teacherId,String groupType);
+
+    /**
+     * 批量修改班级关联的老师
+     * @param classGroupIds
+     * @param newTeacherId
+     */
+    void batchUpdateTeacherByClassId(List<Integer> classGroupIds, Integer oldTeacherId,Integer newTeacherId);
 }

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

@@ -513,4 +513,30 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @param coursesExpireDate
 	 */
 	void updateCoursesExpireDate(String practiceGroupId, Date coursesExpireDate);
+
+	/**
+	 * 获取当前班级列表的所有未开始的课程
+	 * @param classGroupIds
+	 * @param teacherId
+	 * @param teacherRole
+	 * @return
+	 */
+	List<CourseSchedule> queryNoStartCourseByTeacherId(String classGroupIds, Integer teacherId, String teacherRole);
+
+	/**
+	 * 根据班级列表调整课程
+	 * @param classGroupIds
+	 * @param teacherId
+	 * @param targetTeacherId
+	 */
+	void classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId);
+
+	/**
+	 * 网管课批量调整
+	 * @param practiceGroupId
+	 * @param teacherId
+	 * @param subjectId
+	 * @param educationalTeacherId
+	 */
+	void batchPracticeGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId,Integer oldTeacherId);
 }

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

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

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/DegreeRegistrationService.java

@@ -0,0 +1,13 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.DegreeRegistration;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.Map;
+
+public interface DegreeRegistrationService extends BaseService<Integer, DegreeRegistration> {
+
+    Map pay(DegreeRegistration degreeRegistration) throws Exception;
+
+    Boolean updateStatus(Integer id , Integer status);
+}

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.FeeStudentDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -43,4 +44,17 @@ public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long
      * @param userId
      */
     void add(Long musicGroupPaymentCalenderId, Integer userId);
+
+    /**
+     * 获取fee表学员列表
+     * @param musicGroupId
+     * @return
+     */
+    List<FeeStudentDto> queryFeeStudents(String musicGroupId,String search,Integer subjectId);
+
+    /**
+     * 批量删除缴费信息
+     * @param musicGroupPaymentCalenderIds
+     */
+    void batchDel(String musicGroupPaymentCalenderIds);
 }

+ 7 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SporadicChargeInfoService.java

@@ -29,4 +29,11 @@ public interface SporadicChargeInfoService extends BaseService<Integer, Sporadic
     SporadicChargeInfo getDetail(Integer id);
 
     SporadicChargeInfo findByOrganIdAndType(Integer organId,Integer type);
+
+    /**
+     * 开启/关闭缴费
+     * @param sporadicId
+     * @param openFlag
+     */
+    void updateOpenFlag(Integer sporadicId, Integer openFlag);
 }

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

@@ -242,4 +242,11 @@ public interface StudentRegistrationService extends BaseService<Long, StudentReg
 	 * @return
 	 */
 	List<Subject> findMusicGroupAllStudentSubjects(String musicGroupId);
+
+	/**
+	 * 获取学员详情页,包含所在乐团信息
+	 * @param studentId
+	 * @return
+	 */
+	StudentMusicDetailDto getStudentDetail(Integer studentId);
 }

+ 12 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/StudentServeService.java

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.service;
 
+import java.util.Map;
+
 /**
  * @Author Joburgess
  * @Date 2020.05.27
@@ -15,4 +17,14 @@ public interface StudentServeService {
      */
     void exercisesSituationStatistics(String monday);
 
+    /**
+     * @describe
+     * @author Joburgess
+     * @date 2020.06.15
+     * @param courseScheduleId:
+     * @param studentIds:
+     * @return int
+     */
+    Map<String, Object> checkeIsAssignHomework(Long courseScheduleId, String studentIds);
+
 }

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

@@ -27,4 +27,10 @@ public interface StudentService extends BaseService<Integer, Student> {
      * @return void
      */
     void initTeacherId();
+
+    /**
+     * 修改学员的指导老师
+     * @param teacherId
+     */
+    void batchUpdateAdviser(Integer teacherId,String studentIds);
 }

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

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 import org.apache.ibatis.annotations.Param;
 
@@ -180,4 +181,9 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      */
 	boolean realNameAuthentication(Integer userId, String realName, String idcardNo, String idcardFrontImg, String idcardBackImg, String idcardHandImg);
 
+    /**
+     * 获取和当前指导老师关联的学员
+     * @return
+     */
+    PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo);
 }

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

@@ -245,62 +245,62 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
     void orderCallback(StudentPaymentOrder order);
 
     /**
-	 * @Author: Joburgess
-	 * @Date: 2019/10/3
-	 * @params [vipGroupId, studentId]
-	 * @return void
-	 * @describe 申请退课
-	 */
-	void applyRefund(Long vipGroupId);
-
-	/**
-	 * @describe 给指定学生退课
-	 * @author Joburgess
-	 * @date 2019/11/15
-	 * @param vipGroupId: vip课程
-	 * @param studentId: 学生编号
-	 * @return void
-	 */
-	void applyRefundForStudent(Long vipGroupId, Integer studentId, BigDecimal amount);
-
-	/**
-	 * @describe 对某个学生进行休学
-	 * @author Joburgess
-	 * @date 2019/12/18
-	 * @param vipGroupId: vip课编号
-	 * @param studentId: 学生编号
-	 * @return void
-	 */
-	void pauseForStudent(Long vipGroupId, Integer studentId);
-
-	/**
-	 * @describe 恢复休学的学生
-	 * @author Joburgess
-	 * @date 2019/12/18
-	 * @param studentRecoverInfo:
-	 * @return void
-	 */
-	void recoverForStudent(StudentRecoverDto studentRecoverInfo);
-
-	/**
-	 * @describe 获取学生休学信息
-	 * @author Joburgess
-	 * @date 2019/12/24
-	 * @param vipGroupId:
-	 * @param studentId:
-	 * @return com.ym.mec.biz.dal.dto.StudentRecoverInfoDto
-	 */
-	StudentRecoverInfoDto getStudentPauseInfo(Long vipGroupId, Integer studentId);
-
-	/**
-	 * @describe 获取指定学生的剩余课时费用
-	 * @author Joburgess
-	 * @date 2019/11/15
-	 * @param vipGroupId: VIP课编号
-	 * @param studentId: 学生编号
-	 * @return java.util.Map<java.lang.String,java.math.BigDecimal>
-	 */
-	Map<String,BigDecimal> getStudentSurplusCourseFee(Long vipGroupId, Integer studentId);
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [vipGroupId, studentId]
+     * @return void
+     * @describe 申请退课
+     */
+    void applyRefund(Long vipGroupId);
+
+    /**
+     * @describe 给指定学生退课
+     * @author Joburgess
+     * @date 2019/11/15
+     * @param vipGroupId: vip课程
+     * @param studentId: 学生编号
+     * @return void
+     */
+    void applyRefundForStudent(Long vipGroupId, Integer studentId, BigDecimal amount);
+
+    /**
+     * @describe 对某个学生进行休学
+     * @author Joburgess
+     * @date 2019/12/18
+     * @param vipGroupId: vip课编号
+     * @param studentId: 学生编号
+     * @return void
+     */
+    void pauseForStudent(Long vipGroupId, Integer studentId);
+
+    /**
+     * @describe 恢复休学的学生
+     * @author Joburgess
+     * @date 2019/12/18
+     * @param studentRecoverInfo:
+     * @return void
+     */
+    void recoverForStudent(StudentRecoverDto studentRecoverInfo);
+
+    /**
+     * @describe 获取学生休学信息
+     * @author Joburgess
+     * @date 2019/12/24
+     * @param vipGroupId:
+     * @param studentId:
+     * @return com.ym.mec.biz.dal.dto.StudentRecoverInfoDto
+     */
+    StudentRecoverInfoDto getStudentPauseInfo(Long vipGroupId, Integer studentId);
+
+    /**
+     * @describe 获取指定学生的剩余课时费用
+     * @author Joburgess
+     * @date 2019/11/15
+     * @param vipGroupId: VIP课编号
+     * @param studentId: 学生编号
+     * @return java.util.Map<java.lang.String,java.math.BigDecimal>
+     */
+    Map<String,BigDecimal> getStudentSurplusCourseFee(Long vipGroupId, Integer studentId);
 
     /**
      * @Author: Joburgess
@@ -344,7 +344,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @return
      */
     boolean awardedMonthlyRewards();
-    
+
     /**
      * 根据老师查询vip课教学点
      * @param userId
@@ -379,19 +379,19 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      */
     void addVipGroupStudents(Long vipGroupId,List<Integer> studentIds);
 
-	/**
-	 * 更新vipgroup至完成状态
-	 */
-	void updateVipGroupStatusToFinished();
-
-	/**
-	 * @describe 获取vip课购买信息
-	 * @author Joburgess
-	 * @date 2019/11/29
-	 * @param vipGroupId: vip课编号
-	 * @param userId: 用户编号
-	 * @return void
-	 */
+    /**
+     * 更新vipgroup至完成状态
+     */
+    void updateVipGroupStatusToFinished();
+
+    /**
+     * @describe 获取vip课购买信息
+     * @author Joburgess
+     * @date 2019/11/29
+     * @param vipGroupId: vip课编号
+     * @param userId: 用户编号
+     * @return void
+     */
     VipGroupPayInfoDto getVipGroupPayInfo(Integer vipGroupId,Integer userId);
 
     /**
@@ -418,5 +418,5 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @param endDate
      * @return
      */
-    void updateHistoryTeacherSalaryOfOnline(Date startDate, Date endDate);
+    void updateHistoryTeacherSalaryOfOnline(String startDate, String endDate);
 }

+ 69 - 97
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1,105 +1,15 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.GroupType.COMM;
-import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
-import static com.ym.mec.biz.dal.enums.GroupType.VIP;
-
-import java.math.BigDecimal;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import com.ym.mec.biz.dal.dao.*;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dto.ClassGroup4MixDto;
-import com.ym.mec.biz.dal.dto.ClassGroupImGroupDto;
-import com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto;
-import com.ym.mec.biz.dal.dto.ClassGroupTeachersDto;
-import com.ym.mec.biz.dal.dto.CourseListDto;
-import com.ym.mec.biz.dal.dto.CourseTimeDto;
-import com.ym.mec.biz.dal.dto.HighClassGroupDto;
-import com.ym.mec.biz.dal.dto.MusicGroupClassGroupDto;
-import com.ym.mec.biz.dal.dto.MusicGroupCourseScheduleDto;
-import com.ym.mec.biz.dal.dto.StudentAttendanceViewDto;
-import com.ym.mec.biz.dal.dto.StudentPayInfoDto;
-import com.ym.mec.biz.dal.dto.SuperClassGroupDto;
-import com.ym.mec.biz.dal.dto.TeacherClassGroupDto;
-import com.ym.mec.biz.dal.dto.TeacherClassHeadInfo;
-import com.ym.mec.biz.dal.dto.TeacherMusicClassInfoDto;
-import com.ym.mec.biz.dal.dto.TeacherVipClassInfoDto;
-import com.ym.mec.biz.dal.dto.UserMusicGroupQueryInfo;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.ClassGroupRelation;
-import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
-import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
-import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
-import com.ym.mec.biz.dal.entity.CoursesGroup;
-import com.ym.mec.biz.dal.entity.Group;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
-import com.ym.mec.biz.dal.entity.PracticeGroup;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
-import com.ym.mec.biz.dal.entity.Subject;
-import com.ym.mec.biz.dal.entity.SysConfig;
-import com.ym.mec.biz.dal.entity.Teacher;
-import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
-import com.ym.mec.biz.dal.entity.VipGroup;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
-import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.page.ClassGroupQueryInfo;
-import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
-import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
-import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherMusicClassQueryInfo;
-import com.ym.mec.biz.dal.page.VipClassQueryInfo;
-import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
-import com.ym.mec.biz.service.ClassGroupRelationService;
-import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
-import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
-import com.ym.mec.biz.service.StudentRegistrationService;
-import com.ym.mec.biz.service.SubjectService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.TeacherDefaultMusicGroupSalaryService;
+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.*;
+import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -115,6 +25,20 @@ import com.ym.mec.jiari.JiaRiFeignService;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateConvertor;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.enums.GroupType.*;
 
 @Service
 public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> implements ClassGroupService {
@@ -618,9 +542,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             HashMap<String, Object> param = new HashMap<>();
             param.put("teacherId", queryInfo.getSearch());
             param.put("attendanceStatus", YesOrNoEnum.YES);
+            Set<String> classGroupIds = dataList.stream().map(e -> e.getClassGroupIds()).collect(Collectors.toSet());
+            Map<Integer,Long> hasRestClassMap = MapUtil.convertIntegerMap(courseScheduleDao.queryHasReatClass(classGroupIds,queryInfo.getSearch()));
+            int teacherPersonalAttendancesCount = teacherAttendanceDao.getTeacherPersonalAttendancesCount(param);
             dataList.forEach(e -> {
                 param.put("musicGroupId", e.getMusicGroupId());
-                e.setAttendanceNum(teacherAttendanceDao.getTeacherPersonalAttendancesCount(param));
+                e.setAttendanceNum(teacherPersonalAttendancesCount);
+                e.setHasRestClass(hasRestClassMap.get(Integer.parseInt(e.getClassGroupIds())).intValue());
             });
         }
         if (count == 0) {
@@ -2932,6 +2860,50 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         classGroupDao.updateGroupName(groupId, groupName);
     }
 
+    @Override
+    public TeacherClassHeadInfo findTeacherClassGroupInfoByCourseId(Integer courseId) {
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseId.longValue());
+        Integer classGroupId = courseSchedule.getClassGroupId();
+
+        ClassGroup classGroup = classGroupDao.get(classGroupId);
+
+        if (Objects.isNull(classGroup)) {
+            throw new BizException("未找到该班级");
+        }
+
+        String subjectNames = subjectDao.findNames(classGroup.getSubjectIdList());
+
+        TeacherClassHeadInfo teacherClassHeadInfo = new TeacherClassHeadInfo();
+        teacherClassHeadInfo.setStudentNum(classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId()));
+        teacherClassHeadInfo.setCurrentClassTimes(courseScheduleDao.countCurrentTimes(classGroup.getId(), new Date()));
+        teacherClassHeadInfo.setTotalClassTimes(courseScheduleDao.countClassGroupCourses(classGroup.getId()));
+        if (subjectNames != null && !subjectNames.isEmpty()) {
+            teacherClassHeadInfo.setSubjectNames(subjectNames);
+        }
+        ClassGroupTeacherMapper bishopTeacher = classGroupTeacherMapperDao.findByClassGroupAndRole(classGroupId, TeachTypeEnum.BISHOP);
+        if (Objects.nonNull(bishopTeacher)) {
+            teacherClassHeadInfo.setBishopTeacherId(bishopTeacher.getId());
+            teacherClassHeadInfo.setBishopTeacher(bishopTeacher.getUserName());
+        }
+
+        String name = classGroupTeacherMapperDao.queryTeachingNames(classGroupId);
+        teacherClassHeadInfo.setTeachingTeacher(name);
+
+        if (classGroup.getType() == ClassGroupTypeEnum.VIP) {
+            String[] studentNums = classGroupStudentMapperDao.findCourseStudentName(courseId);
+            teacherClassHeadInfo.setStudentNames(StringUtils.join(studentNums, ","));
+        }
+        if (classGroup.getType() == ClassGroupTypeEnum.PRACTICE) {
+            String[] studentNums = classGroupStudentMapperDao.findCourseStudentName(courseId);
+            teacherClassHeadInfo.setStudentNames(StringUtils.join(studentNums, ","));
+        }
+        if (classGroup.getType() == ClassGroupTypeEnum.COMM) {
+            String[] studentNums = classGroupStudentMapperDao.findCourseStudentName(courseId);
+            teacherClassHeadInfo.setStudentNames(StringUtils.join(studentNums, ","));
+        }
+        return teacherClassHeadInfo;
+    }
+
 
     @Override
     public ClassGroup findGroupById(Integer groupId) {

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

@@ -621,4 +621,10 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
     public void updateTeacher(String groupId, Integer teacherId, String groupType) {
         classGroupTeacherMapperDao.updateTeacher(groupId, teacherId, groupType);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void batchUpdateTeacherByClassId(List<Integer> classGroupIds, Integer oldTeacherId, Integer newTeacherId) {
+        classGroupTeacherMapperDao.batchUpdateTeacherByClassId(classGroupIds,oldTeacherId,newTeacherId);
+    }
 }

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

@@ -303,11 +303,12 @@ public class CourseReviewServiceImpl extends BaseServiceImpl<Integer, CourseSche
     public TeacherClassHeadInfo getCourseInfoHead(Integer id) {
         CourseSchedule courseSchedule = courseScheduleDao.get(id.longValue());
         ClassGroup classGroup = classGroupService.get(courseSchedule.getClassGroupId());
-        TeacherClassHeadInfo teacherClassGroupInfo = classGroupService.findTeacherClassGroupInfo(courseSchedule.getClassGroupId());
+        TeacherClassHeadInfo teacherClassGroupInfo = classGroupService.findTeacherClassGroupInfoByCourseId(id);
         teacherClassGroupInfo.setClassDate(DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日"));
         teacherClassGroupInfo.setStartClassTime(DateUtil.dateToString(courseSchedule.getStartClassTime(), "HH:mm"));
         teacherClassGroupInfo.setEndClassTime(DateUtil.dateToString(courseSchedule.getEndClassTime(), "HH:mm"));
         teacherClassGroupInfo.setClassGroupName(classGroup.getName());
+        teacherClassGroupInfo.setCourseScheduleType(courseSchedule.getType());
         return teacherClassGroupInfo;
     }
 

+ 154 - 46
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -23,14 +23,12 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
-import com.ym.mec.jiari.JiaRiFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.ListUtil;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.json.JsonUtil;
 import org.apache.commons.collections.ListUtils;
-import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -49,10 +47,8 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static com.ym.mec.biz.dal.enums.GroupType.MUSIC;
-import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
+import static com.ym.mec.biz.dal.enums.GroupType.*;
 import static com.ym.mec.biz.dal.enums.PracticeGroupType.*;
-import static com.ym.mec.biz.dal.enums.SignInStatusEnum.*;
 
 @Service
 public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSchedule> implements CourseScheduleService {
@@ -75,10 +71,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private StudentAttendanceDao studentAttendanceDao;
     @Autowired
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
-
     @Autowired
     private TeacherDefaultPracticeGroupSalaryDao teacherDefaultPracticeGroupSalaryDao;
-
     @Autowired
     private SysMessageService sysMessageService;
     @Autowired
@@ -112,8 +106,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     @Autowired
     private PracticeGroupDao practiceGroupDao;
     @Autowired
-    private JiaRiFeignService jiaRiFeignService;
-    @Autowired
     private VipGroupService vipGroupService;
     @Autowired
     private MusicGroupService musicGroupService;
@@ -123,10 +115,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private SchoolDao schoolDao;
     @Autowired
 	private ImFeignService imFeignService;
-
     @Autowired
     private CourseHomeworkService courseHomeworkService;
-
     @Autowired
     private GroupDao groupDao;
     @Autowired
@@ -135,6 +125,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	private CourseScheduleReviewDao courseScheduleReviewDao;
     @Autowired
 	private PracticeGroupService practiceGroupService;
+    @Autowired
+	private CoursesGroupModifyLogDao coursesGroupModifyLogDao;
 
     private final Logger LOGGER = LoggerFactory
             .getLogger(this.getClass());
@@ -1912,7 +1904,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             throw new BizException("排课起始时间不能小于当前时间");
         }
 
-        boolean needSchoolId = Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode()) && vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE) && Objects.isNull(vipGroupCourseAdjustInfo.getTeachMode());
+        boolean needSchoolId = Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode()) && vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE) && Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId());
         if (needSchoolId) {
             throw new BizException("请设置教学点");
         }
@@ -2039,8 +2031,9 @@ 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)){
-                            throw new BizException("暂不支持线上课程转为线下课");
+                            &&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)
+							&&Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId())){
+                            throw new BizException("请选择教学点");
                         }
                         courseSchedules.get(courseStartDates.size() - 1).setTeachMode(vipGroupCourseAdjustInfo.getTeachMode());
                         if (vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
@@ -2082,12 +2075,34 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 }
             }
         }
+        if(groupType == VIP){
+			VipGroup vipGroup = vipGroupDao.get(vipGroupCourseAdjustInfo.getVipGroupId().longValue());
+
+			BigDecimal teacherSalary=BigDecimal.ZERO;
+
+			ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroupCourseAdjustInfo.getVipGroupId().intValue(), courseSchedules.get(0).getActualTeacherId());
+
+			if(Objects.nonNull(classGroupTeacherSalary)){
+				teacherSalary=vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)?classGroupTeacherSalary.getSalary():classGroupTeacherSalary.getOnlineClassesSalary();
+			}
+			if(Objects.isNull(teacherSalary)||teacherSalary.compareTo(BigDecimal.ZERO)<=0){
+				TeacherDefaultVipGroupSalary tdvs = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(courseSchedules.get(0).getActualTeacherId(),vipGroup.getVipGroupCategoryId());
+				if (tdvs == null||Objects.isNull(tdvs.getOfflineClassesSalary())) {
+					throw new BizException("老师[]没有设置默认课酬,请先设置", courseSchedules.get(0).getActualTeacherId());
+				}
+				teacherSalary=tdvs.getOfflineClassesSalary();
+			}
+
+			courseScheduleTeacherSalaryDao.batchUpdateCourseSalarys(courseScheduleIds, teacherSalary);
+
+		}
+
         courseScheduleDao.batchUpdate(courseSchedules);
         classGroupService.updateClassGroupInfo(classGroup.getId());
         if(vipGroupCourseAdjustInfo.getCourseCreateStartTime().after(now)){
             teacherAttendanceDao.batchCleanCourseTeacherSignInfo(courseScheduleIds);
         }
-		// 删除作业
+		//删除作业
 		courseHomeworkService.delHomwworkByCourseScheduleId(courseScheduleIds);
 		//删除评论
 		courseScheduleReviewDao.delByCourseScheduleIds(courseScheduleIds);
@@ -2368,10 +2383,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 newCourseSchedule.setTeachMode(oldCourseSchedule.getTeachMode());
             }
 
-			if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-				if (newCourseSchedule.getTeachMode() != oldCourseSchedule.getTeachMode() && newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
-					throw new BizException("不允许将线上课调整为线下课");
-				}
+			if (newCourseSchedule.getTeachMode() != oldCourseSchedule.getTeachMode()
+					&& newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE
+					&& Objects.isNull(newCourseSchedule.getSchoolId())) {
+				throw new BizException("请设置教学点");
 			}
 
             if (Objects.isNull(newCourseSchedule.getSchoolId())) {
@@ -2471,9 +2486,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			List<TeacherAttendance> teacherAttendanceList = teacherAttendanceMap.get(courseScheduleId);
 
 			List<Integer> oldTeacherIdList = teacherAttendanceList.stream().map(TeacherAttendance::getTeacherId).distinct().collect(Collectors.toList());
-
-			List<Integer> newTeacherIdList = newCourseSchedule.getTeachingTeacherIdList();
-			newTeacherIdList.add(newCourseSchedule.getActualTeacherId());
+            List<Integer> newTeacherIdList = new ArrayList<>();
+            newTeacherIdList.addAll(newCourseSchedule.getTeachingTeacherIdList());
+            newTeacherIdList.add(newCourseSchedule.getActualTeacherId());
 
 			if (newCourseSchedule.getStatus() != CourseStatusEnum.OVER) {
 				// 清理原来考勤
@@ -2561,7 +2576,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 
 				// 所有老师默认vip课酬
-				/*List<TeacherDefaultVipGroupSalary> teacherDefaultVipGroupSalaries = teacherDefaultVipGroupSalaryDao.queryByUserIdList(newTeacherIdList);
+				List<TeacherDefaultVipGroupSalary> teacherDefaultVipGroupSalaries = teacherDefaultVipGroupSalaryDao.queryByUserIdList(newTeacherIdList);
 				Map<Integer, Map<Integer, TeacherDefaultVipGroupSalary>> vipGroupSalaryMap = new HashMap<Integer, Map<Integer, TeacherDefaultVipGroupSalary>>();
 				for (TeacherDefaultVipGroupSalary tdvs : teacherDefaultVipGroupSalaries) {
 					Map<Integer, TeacherDefaultVipGroupSalary> map = vipGroupSalaryMap.get(tdvs.getUserId());
@@ -2572,7 +2587,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					vipGroupSalaryMap.put(tdvs.getUserId(), map);
 				}
 
-				VipGroup vipGroup = vipGroupDao.findByCourseSchedule(courseScheduleId);*/
+				VipGroup vipGroup = vipGroupDao.findByCourseSchedule(courseScheduleId);
 
 				// 删除课酬
 				List<Long> courseScheduleIdList = new ArrayList<Long>();
@@ -2599,12 +2614,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						Map<CourseScheduleType, TeacherDefaultMusicGroupSalary> map = musicGroupSalaryMap.get(teacherId);
 
 						if (map == null) {
-							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+							throw new BizException("老师{}没有设置默认课酬,请先设置", teacherId);
 						}
 
 						TeacherDefaultMusicGroupSalary tdms = map.get(newCourseSchedule.getType());
 						if (tdms == null) {
-							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+							throw new BizException("老师{}没有设置默认课酬,请先设置", teacherId);
 						}
 
 						// 乐团结算方式
@@ -2677,31 +2692,31 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						}
 
 					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-						/*Map<Integer, TeacherDefaultVipGroupSalary> map = vipGroupSalaryMap.get(teacherId);
+						Map<Integer, TeacherDefaultVipGroupSalary> map = vipGroupSalaryMap.get(teacherId);
 						if (map == null) {
 							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
 						}
 						if (vipGroup == null) {
 							throw new BizException("课程[{}]记录存在异常,请联系管理员", courseScheduleId);
 						}
-						TeacherDefaultVipGroupSalary tdvs = map.get(vipGroup.getVipGroupCategoryId());
-						if (tdvs == null) {
-							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+
+						BigDecimal teacherSalary=BigDecimal.ZERO;
+
+						ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroup.getId().intValue(), teacherId);
+
+						if(Objects.nonNull(classGroupTeacherSalary)){
+							teacherSalary=newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?classGroupTeacherSalary.getSalary():classGroupTeacherSalary.getOnlineClassesSalary();
 						}
-						if (newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
-							ts.setExpectSalary(tdvs.getOfflineClassesSalary());
-						} else {
-							ts.setExpectSalary(tdvs.getOnlineClassesSalary());
-						}*/
-
-						ts.setExpectSalary(new BigDecimal(0));
-						Map<Integer, CourseScheduleTeacherSalary> tsMap = courseScheduleTeacherSalaryMap.get(courseScheduleId);
-						if(tsMap != null){
-							CourseScheduleTeacherSalary oldTS = tsMap.get(teacherId);
-							if(oldTS != null){
-								ts.setExpectSalary(oldTS.getExpectSalary());
+						if(Objects.isNull(teacherSalary)||teacherSalary.compareTo(BigDecimal.ZERO)<=0){
+							TeacherDefaultVipGroupSalary tdvs = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(teacherId,vipGroup.getVipGroupCategoryId());
+							if (tdvs == null||Objects.isNull(tdvs.getOfflineClassesSalary())) {
+								throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
 							}
+							teacherSalary=tdvs.getOfflineClassesSalary();
 						}
+
+						ts.setExpectSalary(teacherSalary);
+
 					} else if (newCourseSchedule.getGroupType() == PRACTICE) {
 						List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
 								.queryByUserId(teacherId);
@@ -3764,6 +3779,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         }
 
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(oldCourseSchedule.getMusicGroupId()));
+        CoursesGroupModifyLog coursesGroupModifyLog = new CoursesGroupModifyLog();
+        coursesGroupModifyLog.setGroupId(oldCourseSchedule.getMusicGroupId());
+        coursesGroupModifyLog.setGroupType(PRACTICE.getCode());
+        coursesGroupModifyLog.setOperatorId(user.getId());
+        coursesGroupModifyLog.setPreviousGroup(JSONObject.toJSONString(practiceGroup));
         String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
         String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
         Date startDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
@@ -3828,6 +3848,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			practiceGroup.setCoursesExpireDate(courseScheduleDao.getLastTime(practiceGroup.getId(),PRACTICE.getCode()));
 			practiceGroup.setUpdateTime(date);
 			practiceGroupDao.update(practiceGroup);
+			coursesGroupModifyLog.setCurrentGroup(JSONObject.toJSONString(practiceGroup));
+			coursesGroupModifyLogDao.insert(coursesGroupModifyLog);
 		}
     }
 
@@ -3874,7 +3896,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(oldCourseSchedule.getMusicGroupId()));
 		if(practiceGroup.getType() != TRIAL){
-			if(practiceGroup.getType() == FREE){
+			if(practiceGroup.getType() != FREE){
 				List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
 				if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
 					throw new BizException("请设置老师默认课酬");
@@ -3923,6 +3945,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             courseSchedules = courseSchedules.stream().filter(courseSchedule -> !courseSchedule.getActualTeacherId().equals(teacherId)).collect(Collectors.toList());
         }
 		PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(practiceGroupId));
+		CoursesGroupModifyLog coursesGroupModifyLog = new CoursesGroupModifyLog();
+		coursesGroupModifyLog.setGroupId(practiceGroupId);
+		coursesGroupModifyLog.setGroupType(PRACTICE.getCode());
+		coursesGroupModifyLog.setOperatorId(user.getId());
+		coursesGroupModifyLog.setPreviousGroup(JSONObject.toJSONString(practiceGroup));
 		ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(practiceGroupId, PRACTICE.getCode());
         if(Objects.nonNull(educationalTeacherId)&&!educationalTeacherId.equals(practiceGroup.getEducationalTeacherId())){
 			if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
@@ -3947,10 +3974,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			classGroupDao.update(classGroup);
 			courseScheduleDao.updateCourseNameByGroup(practiceGroupId, PRACTICE,groupName);
 		}
+		practiceGroup.setUserId(teacherId);
 		practiceGroupDao.update(practiceGroup);
+		coursesGroupModifyLog.setCurrentGroup(JSONObject.toJSONString(practiceGroup));
+		coursesGroupModifyLogDao.insert(coursesGroupModifyLog);
         classGroupTeacherMapperService.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
         classGroupTeacherSalaryDao.updateTeacher(practiceGroupId,teacherId, PRACTICE.getCode());
-        practiceGroupDao.updateUserId(practiceGroupId,teacherId);
+//        practiceGroupDao.updateUserId(practiceGroupId,teacherId);
         if(courseSchedules == null || courseSchedules.size() == 0){
             return;
         }
@@ -4201,6 +4231,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void updateCoursesExpireDate(String practiceGroupId, Date coursesExpireDate) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (null == user) {
+			throw new BizException("获取用户信息失败");
+		}
     	if(practiceGroupId == null || coursesExpireDate == null ){
     		throw new BizException("参数校验失败");
 		}
@@ -4211,7 +4245,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		if(practiceGroup.getCoursesStartDate().after(coursesExpireDate)){
 			throw new BizException("课程有效时间不能早于开始时间");
 		}
-
 		if(Objects.nonNull(practiceGroup.getBuyMonths())){
 			LocalDate courseStartDay = LocalDateTime.ofInstant(practiceGroup.getCoursesStartDate().toInstant(), DateUtil.zoneId).toLocalDate();
 			LocalDate currentExpiredDay = courseStartDay.plusMonths(practiceGroup.getBuyMonths()).plusDays(-1);
@@ -4220,10 +4253,85 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				throw new BizException("课程结束时间不得早于,{}", DateUtil.dateToString(courseExpiredDateTemp, "yyyy年MM月dd日"));
 			}
 		}
-
+		CoursesGroupModifyLog coursesGroupModifyLog = new CoursesGroupModifyLog();
+		coursesGroupModifyLog.setGroupId(practiceGroupId);
+		coursesGroupModifyLog.setGroupType(PRACTICE.getCode());
+		coursesGroupModifyLog.setOperatorId(user.getId());
+		coursesGroupModifyLog.setPreviousGroup(JSONObject.toJSONString(practiceGroup));
 		practiceGroup.setCoursesExpireDate(DateUtil.addSeconds(DateUtil.addDays(coursesExpireDate, 1),-1));
 		practiceGroup.setUpdateTime(new Date());
 		practiceGroupDao.update(practiceGroup);
+		coursesGroupModifyLog.setCurrentGroup(JSONObject.toJSONString(practiceGroup));
+		coursesGroupModifyLogDao.insert(coursesGroupModifyLog);
+	}
+
+	@Override
+	public List<CourseSchedule> queryNoStartCourseByTeacherId(String classGroupIds, Integer teacherId, String teacherRole) {
+		return courseScheduleDao.queryNoStartCourseByTeacherId(classGroupIds,teacherId,teacherRole);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId) {
+		List<Integer> teachingTeacherIdList = new ArrayList<Integer>();
+		teachingTeacherIdList.add(targetTeacherId);
+		List<CourseSchedule> courseSchedules = this.queryNoStartCourseByTeacherId(classGroupIds,teacherId,"BISHOP");
+		//获取助教老师列表
+		if(courseSchedules.size() > 0){
+			courseSchedules.forEach(e->{
+				e.setTeachingTeacherIdList(courseScheduleTeacherSalaryDao.queryTeacherByTeaching(e.getClassGroupId()));
+				e.setActualTeacherId(targetTeacherId);
+			});
+			this.courseAdjust(courseSchedules);
+			//修改老师考勤
+			Set<Integer> collect1 = courseSchedules.stream().map(e -> e.getClassGroupId()).collect(Collectors.toSet());
+//			teacherAttendanceDao.deleteByCourseAndTeacherId(collect1,teacherId);
+			batchUpdateClassTeacher(new ArrayList<>(collect1),teacherId,targetTeacherId);
+		}
+		List<CourseSchedule> courseSchedules1 = this.queryNoStartCourseByTeacherId(classGroupIds, teacherId, "TEACHING");
+		if(courseSchedules1.size() > 0){
+			courseSchedules1.forEach(e->{
+				e.setActualTeacherId(courseScheduleTeacherSalaryDao.queryTeacherByBishop(e.getClassGroupId()));
+				e.setTeachingTeacherIdList(teachingTeacherIdList);
+			});
+			this.courseAdjust(courseSchedules1);
+			Set<Integer> collect1 = courseSchedules1.stream().map(e -> e.getClassGroupId()).collect(Collectors.toSet());
+////			teacherAttendanceDao.deleteByCourseAndTeacherId(collect1,teacherId);
+			batchUpdateClassTeacher(new ArrayList<>(collect1),teacherId,targetTeacherId);
+		}
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void batchPracticeGroupTeacherAdjust(String practiceGroupId, Integer teacherId, Integer subjectId, Integer educationalTeacherId,Integer oldTeacherId) {
+		String[] split = practiceGroupId.split(",");
+		for (int i = 0; i < split.length; i++) {
+			this.practiceGroupTeacherAdjust(split[i],teacherId,subjectId,educationalTeacherId);
+		}
+		List<ClassGroup> classGroups = classGroupDao.queryClassGroups(practiceGroupId,"PRACTICE");
+		if(classGroups.size() > 0){
+			List<Integer> collect = classGroups.stream().map(e -> e.getId()).collect(Collectors.toList());
+			batchUpdateClassTeacher(collect,oldTeacherId,teacherId);
+		}
+	}
+
+	@Transactional(rollbackFor = Exception.class)
+	public void batchUpdateClassTeacher(List<Integer> classGroupIds,Integer oldTeacherId,Integer newTeacherId){
+		//修改班级老师
+		List<ClassGroup> classGroupList = classGroupDao.findByClassGroupIds(classGroupIds);
+		classGroupList.forEach(e->{
+			e.setUserIds(newTeacherId.toString());
+		});
+		classGroupTeacherMapperService.batchUpdateTeacherByClassId(classGroupIds,oldTeacherId,newTeacherId);
+		//旧老师退群,新老师加群
+		if(classGroupList != null && classGroupIds.size() > 0){
+			ImGroupMember[] oldImGroupMembers = {new ImGroupMember(oldTeacherId.toString())};
+			ImGroupMember[] imGroupMembers = {new ImGroupMember(newTeacherId.toString())};
+			for (ClassGroup classGroup:classGroupList) {
+				imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), oldImGroupMembers, classGroup.getName()));
+				imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+			}
+		}
 	}
 
 	@Override

+ 49 - 35
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java

@@ -109,7 +109,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         //获取活动信息
         VipGroupActivity vipGroupActivity = null;
         if(vipGroup.getVipGroupActivityId() != null){
-        	vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+            vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
         }
 
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
@@ -203,10 +203,13 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Transactional(rollbackFor = Exception.class)
     public void practiceTeacherSalarySettlement() {
 //        int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
-        int days = 0;
+//        int days = 0;
         //获取教师未结算课程记录
         Date now = new Date();
-        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(days,GroupType.PRACTICE.getCode());
+        Date date = DateUtil.addMonths(now, -1);
+        String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(startDate,endDate);
         if (!CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
             someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
                 courseScheduleTeacherSalary.setActualSalary(courseScheduleTeacherSalary.getTeacherActualSalary());
@@ -284,16 +287,20 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Transactional(rollbackFor = Exception.class)
     public void teacherSalarySettlement() {
 //        int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
-        int days = 0;
+//        int days = 0;
         BigDecimal percent = new BigDecimal(10);
-
+        Date now = new Date();
+        Date date = DateUtil.addMonths(now, -1);
+        String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
         //获取教师未结算课程记录
-        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findSomeDayAgoTeacherCourseSalaryNoSettlement(days);
+        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findSomeDayAgoTeacherCourseSalaryNoSettlement(startDate,endDate);
         if (CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
             LOGGER.info("未获取到未结算课酬记录!");
             return;
         }
-        Date now = new Date();
+
+        vipGroupService.updateHistoryTeacherSalaryOfOnline(startDate, endDate);
         //获取未结算课程编号列表
         List<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
 
@@ -302,8 +309,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 //        Map<Long, List<StudentAttendance>> courseStudentAttendancesMap = studentAttendances.stream().collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId));
 
         //所有课程的教师考勤记录
-        List<TeacherAttendance> teacherAttendancesByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
-        Map<Long, List<TeacherAttendance>> courseTeacherAttendancesMap = teacherAttendancesByCourseSchedule.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
+//        List<TeacherAttendance> teacherAttendancesByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
+//        Map<Long, List<TeacherAttendance>> courseTeacherAttendancesMap = teacherAttendancesByCourseSchedule.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
 
         //获取未结算课程投诉记录
         List<CourseScheduleComplaints> courseScheduleComplaints = courseScheduleComplaintsDao.findByCourseScheduleIds(courseScheduleIds);
@@ -347,19 +354,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 //                return;
 //            }
 
-            List<TeacherAttendance> teacherAttendances = courseTeacherAttendancesMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-            if(CollectionUtils.isEmpty(teacherAttendances)){
-                return;
-            }
-            int teacherAttendanceNum=0;
-            for (TeacherAttendance teacherAttendance : teacherAttendances) {
-                if(Objects.nonNull(teacherAttendance.getSignInTime())||Objects.nonNull(teacherAttendance.getSignOutTime())){
-                    teacherAttendanceNum+=1;
-                }
-            }
-            if(teacherAttendanceNum==0){
-                return;
-            }
+//            List<TeacherAttendance> teacherAttendances = courseTeacherAttendancesMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+//            if(CollectionUtils.isEmpty(teacherAttendances)){
+//                return;
+//            }
+//            int teacherAttendanceNum=0;
+//            for (TeacherAttendance teacherAttendance : teacherAttendances) {
+//                if(Objects.nonNull(teacherAttendance.getSignInTime())||Objects.nonNull(teacherAttendance.getSignOutTime())){
+//                    teacherAttendanceNum+=1;
+//                }
+//            }
+//            if(teacherAttendanceNum==0){
+//                return;
+//            }
 
             //当前课程缴费学生数量
 //            BigDecimal courseStudentNum = new BigDecimal(studentPaymentsWithCourse.size());
@@ -375,7 +382,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             List<CourseScheduleComplaints> courseStudentComplaints = complaintsGroupByCourse.get(courseScheduleTeacherSalary.getCourseScheduleId());
 
             //如果存在投诉记录,需要扣除相应费用
-            if (Objects.nonNull(courseStudentComplaints)) {
+            /*if (Objects.nonNull(courseStudentComplaints)) {
                 //获取审批中的投诉
                 List<CourseScheduleComplaints> auditIng = courseStudentComplaints.stream().filter(courseScheduleComplaint -> courseScheduleComplaint.getStatus() == AuditStatusEnum.ING).collect(Collectors.toList());
                 if (!CollectionUtils.isEmpty(auditIng)) {
@@ -383,12 +390,12 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     return;
                 }
                 //计算教师责任总占比
-//                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint -> Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio()) ? 0 : courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
-//                teacherLiabilityAllratio = new BigDecimal(teacherLiabilityRatioSum).divide(percent,CommonConstants.DECIMAL_PLACE,BigDecimal.ROUND_DOWN);
+                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint -> Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio()) ? 0 : courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
+                teacherLiabilityAllratio = new BigDecimal(teacherLiabilityRatioSum).divide(percent,CommonConstants.DECIMAL_PLACE,BigDecimal.ROUND_DOWN);
             } else {
                 //如果没有投诉,则教师和学生的责任占比为0
-//                teacherLiabilityAllratio = new BigDecimal(0);
-            }
+                teacherLiabilityAllratio = new BigDecimal(0);
+            }*/
 
             //教师应扣除费用
             /*BigDecimal deductPrice = avgSalary.multiply(teacherLiabilityAllratio);
@@ -492,12 +499,15 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Transactional(rollbackFor = Exception.class)
     public void musicGroupTeacherSalarySettlement() {
         Date now = new Date();
-        Date settleTime = DateUtil.addDays1(now, -sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_DAY).getParanValue(Integer.class));
+        Date date = DateUtil.addMonths(now, -1);
+        String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+//        Date settleTime = DateUtil.addDays1(now, -sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_DAY).getParanValue(Integer.class));
         Integer settlementClassMinutes = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_CLASS_MINUTES).getParanValue());
         Integer singleClassTime = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_SINGLE_CLASS_MINUTES).getParanValue());
         Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(),"yyyy-MM-dd");
-        //获取昨天的课程计划
-        List<CourseSchedule> yesterdayCourseSchedules = courseScheduleDao.findCourseScheduleWithDate(settleTime);
+        //获取上个月的课程计划
+        List<CourseSchedule> yesterdayCourseSchedules = courseScheduleDao.findCourseScheduleWithDate(startDate,endDate);
         //课程编号列表
         List<Long> courseScheduleIds = yesterdayCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(courseScheduleIds)) {
@@ -581,14 +591,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             teacherClassMinutesMap.put(teacherId, schoolClassMinutesMap);
         });
         //用户账户自己变动信息列表
-        List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
+//        List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
         //计算课酬
         courseScheduleTeacherSalaries.forEach(courseScheduleTeacherSalary -> {
-            TeacherAttendance teacherAttendanceInfo = teacherAttendanceDao.findByTeacherAttendanceInfo(courseScheduleTeacherSalary.getUserId().longValue(), courseScheduleTeacherSalary.getCourseScheduleId());
+            /*TeacherAttendance teacherAttendanceInfo = teacherAttendanceDao.findByTeacherAttendanceInfo(courseScheduleTeacherSalary.getUserId().longValue(), courseScheduleTeacherSalary.getCourseScheduleId());
             if(Objects.isNull(teacherAttendanceInfo)
                 ||(Objects.isNull(teacherAttendanceInfo.getSignInTime())&&Objects.isNull(teacherAttendanceInfo.getSignOutTime()))){
                 return;
-            }
+            }*/
             boolean durationIsChange = false;
             //当前课酬对应的课程信息
             CourseSchedule courseSchedule = courseScheduleIdMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
@@ -751,13 +761,17 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
         onlineTeacherSalary=classGroupTeacherSalary.getOnlineClassesSalary();
         if(Objects.isNull(onlineTeacherSalary)){
-            onlineTeacherSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary();
+            onlineTeacherSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
         }
         offlineTeacherSalary=classGroupTeacherSalary.getSalary();
         if(Objects.isNull(offlineTeacherSalary)){
             offlineTeacherSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
         }
 
+        if(Objects.isNull(onlineTeacherSalary)||Objects.isNull(offlineTeacherSalary)){
+            throw new BizException("教师课酬异常");
+        }
+
         VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
 
         BigDecimal studentNumDecimal = new BigDecimal(studentNum);
@@ -997,7 +1011,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         BigDecimal totalSalary = BigDecimal.ZERO;
         for (CourseTeacherSalaryStatisticsDto teacherMonthSalary : teacherMonthSalarys) {
             if(Objects.nonNull(teacherMonthSalary.getTotalReduceSalary())){
-                teacherMonthSalary.setTotalActualSalary(teacherMonthSalary.getTotalReduceSalary().subtract(teacherMonthSalary.getTotalReduceSalary()));
+                teacherMonthSalary.setTotalActualSalary(teacherMonthSalary.getTotalActualSalary().subtract(teacherMonthSalary.getTotalReduceSalary()));
             }
             totalSalary = totalSalary.add(teacherMonthSalary.getTotalActualSalary());
         }

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

@@ -0,0 +1,22 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.CoursesGroupModifyLogDao;
+import com.ym.mec.biz.dal.entity.CoursesGroupModifyLog;
+import com.ym.mec.biz.service.CoursesGroupModifyLogService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class CoursesGroupModifyLogServiceImpl extends BaseServiceImpl<Long, CoursesGroupModifyLog>  implements CoursesGroupModifyLogService {
+	
+	@Autowired
+	private CoursesGroupModifyLogDao coursesGroupModifyLogDao;
+
+	@Override
+	public BaseDAO<Long, CoursesGroupModifyLog> getDAO() {
+		return coursesGroupModifyLogDao;
+	}
+
+}

+ 178 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/DegreeRegistrationServiceImpl.java

@@ -0,0 +1,178 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.DegreeRegistrationDao;
+import com.ym.mec.biz.dal.dao.SporadicChargeInfoDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.OrderTypeEnum;
+import com.ym.mec.biz.service.DegreeRegistrationService;
+import com.ym.mec.biz.service.PayService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.*;
+
+@Service
+public class DegreeRegistrationServiceImpl extends BaseServiceImpl<Integer, DegreeRegistration> implements DegreeRegistrationService {
+
+    @Autowired
+    private DegreeRegistrationDao degreeRegistrationDao;
+
+    @Autowired
+    private SporadicChargeInfoDao sporadicChargeInfoDao;
+
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+
+    @Autowired
+    private SysConfigDao sysConfigDao;
+
+    @Autowired
+    private PayService payService;
+
+    @Override
+    public BaseDAO<Integer, DegreeRegistration> getDAO() {
+        return degreeRegistrationDao;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Map pay(DegreeRegistration degreeRegistration) throws Exception {
+        Date nowDate = new Date();
+        //获取收费项价格
+        SporadicChargeInfo chargeInfo = sporadicChargeInfoDao.get(degreeRegistration.getSporadicId());
+        if (chargeInfo == null) {
+            throw new BizException("你选的考试级别不存在");
+        }
+        degreeRegistration.setLevel(chargeInfo.getTitle());
+        BigDecimal theoryMoney = BigDecimal.ZERO;
+        if(degreeRegistration.getTheoryLevel().equals("一级")){
+            theoryMoney = new BigDecimal(200);
+        }else if(degreeRegistration.getTheoryLevel().equals("二级")){
+            theoryMoney = new BigDecimal(240);
+        }else if(degreeRegistration.getTheoryLevel().equals("三级")){
+            theoryMoney = new BigDecimal(280);
+        }else if(degreeRegistration.getTheoryLevel().equals("四级")){
+            theoryMoney = new BigDecimal(320);
+        }else if(degreeRegistration.getTheoryLevel().equals("免考")){
+
+        }else {
+            throw new BizException("您选择的乐理级别不存在,请核对");
+        }
+        degreeRegistration.setTheoryMoney(theoryMoney);
+        DegreeRegistration degree = degreeRegistrationDao.findByMobileAndSporadicId(degreeRegistration.getMobile(), degreeRegistration.getSporadicId());
+        if (degree == null) {
+            degreeRegistration.setMoney(chargeInfo.getAmount());
+            degreeRegistration.setStatus(1);
+            degreeRegistration.setCreateTime(nowDate);
+            degreeRegistration.setUpdateTime(nowDate);
+            degreeRegistrationDao.insert(degreeRegistration);
+        }else if (degree.getStatus().equals(2)){
+           throw  new BizException("您本次已报名,请勿重复报名");
+        }else {
+            degreeRegistration.setId(degree.getId());
+            degreeRegistration.setStatus(1);
+            degreeRegistration.setUpdateTime(nowDate);
+            degreeRegistrationDao.update(degreeRegistration);
+        }
+        degreeRegistrationDao.getLock(degreeRegistration.getId());
+
+
+
+        BigDecimal amount = chargeInfo.getAmount();
+        amount = amount.add(theoryMoney);
+
+        OrderTypeEnum type = OrderTypeEnum.SPORADIC;
+
+        Integer userId = degreeRegistration.getId();
+        String orderNo = idGeneratorService.generatorId("payment") + "";
+        String channelType = "";
+        StudentPaymentOrder studentPaymentOrder = new StudentPaymentOrder();
+        studentPaymentOrder.setUserId(userId);
+        studentPaymentOrder.setGroupType(GroupType.SPORADIC);
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setType(type);
+        studentPaymentOrder.setExpectAmount(amount);
+        studentPaymentOrder.setActualAmount(amount);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setMusicGroupId(degreeRegistration.getSporadicId().toString());
+        studentPaymentOrder.setOrganId(chargeInfo.getOrganId());
+        studentPaymentOrder.setRoutingOrganId(chargeInfo.getOrganId());
+        if(theoryMoney.compareTo(BigDecimal.ZERO) >0){
+            studentPaymentOrder.setMemo("乐理"+degreeRegistration.getTheoryLevel()+",费用:"+theoryMoney);
+        }
+        studentPaymentOrderService.insert(studentPaymentOrder);
+        studentPaymentOrder.setVersion(0);
+
+        if (amount.compareTo(BigDecimal.ZERO) == 0) {
+            Map<String, String> notifyMap = new HashMap<>();
+            notifyMap.put("tradeState", "1");
+            notifyMap.put("merOrderNo", studentPaymentOrder.getOrderNo());
+            notifyMap.put("channelType", channelType);
+            notifyMap.put("orderNo", "");
+            studentPaymentOrderService.updateOrder(notifyMap);
+            return notifyMap;
+        }
+
+        String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+
+        Map<String, BigDecimal> classFee = new HashMap<>();
+        classFee.put("course", BigDecimal.ZERO);
+        classFee.put("instrument", BigDecimal.ZERO);
+        classFee.put("accessories", BigDecimal.ZERO);
+        classFee.put("other", amount);
+
+        String receiver = "daya";
+        Map payMap = payService.getPayMap(
+                amount,
+                orderNo,
+                baseApiUrl + "/api-student/studentOrder/notify",
+                baseApiUrl + "/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                chargeInfo.getDetail(),
+                chargeInfo.getDetail(),
+                userId,
+                classFee,
+                chargeInfo.getOrganId(),
+                receiver
+        );
+
+        Map<String, BigDecimal> routingFee = (Map<String, BigDecimal>) payMap.get("routingFee");
+        studentPaymentOrder.setOrganId(chargeInfo.getOrganId());
+        studentPaymentOrder.setRoutingOrganId((Integer) payMap.get("routingOrganId"));
+        studentPaymentOrder.setComAmount(routingFee.get("COM"));
+        studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+        studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+        studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+        studentPaymentOrder.setUpdateTime(nowDate);
+        studentPaymentOrderService.update(studentPaymentOrder);
+        return payMap;
+    }
+
+    @Override
+    public Boolean updateStatus(Integer id, Integer status) {
+        DegreeRegistration degree = degreeRegistrationDao.getLock(id);
+        if (degree == null || degree.getStatus().equals(2)) {
+            return true;
+        }
+        degree.setStatus(status);
+        degree.setUpdateTime(new Date());
+        if (degreeRegistrationDao.update(degree) <= 0) {
+            throw new BizException("更新支付状态失败");
+        }
+        return true;
+    }
+}

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.FeeStudentDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
@@ -221,4 +222,23 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 		musicGroupPaymentCalenderDao.update(calender);
 		musicGroupStudentFeeDao.update(studentFee);
 	}
+
+	@Override
+	public List<FeeStudentDto> queryFeeStudents(String musicGroupId,String search,Integer subjectId) {
+		return musicGroupStudentFeeDao.queryFeeStudents(musicGroupId,search,subjectId);
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void batchDel(String musicGroupPaymentCalenderIds) {
+		List<MusicGroupPaymentCalenderDetail> details = musicGroupPaymentCalenderDetailDao.queryListByIds(musicGroupPaymentCalenderIds);
+		if(details == null || details.size() == 0){
+			throw new BizException("删除失败: 数据不可为空");
+		}
+		long count = details.stream().filter(e -> e.getPaymentStatus() == PAID_COMPLETED).count();
+		if(count > 0){
+			throw new BizException("删除失败: 存在已缴费的学员");
+		}
+		musicGroupPaymentCalenderDetailDao.batchDel(musicGroupPaymentCalenderIds);
+	}
 }

+ 28 - 32
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -78,44 +78,40 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 			musicGroupPaymentCalender.setPaymentStatus(PaymentStatusEnum.YES);
 		} else if (date.after(musicGroupPaymentCalender.getStartPaymentDate())) {
 			musicGroupPaymentCalender.setPaymentStatus(PaymentStatusEnum.OPEN);
-			// 统计缴费人数
-			musicGroupStudentFeeList = musicGroupStudentFeeDao.queryByMusicGroupId(musicGroupId);
-			if (musicGroupStudentFeeList == null) {
-				musicGroupStudentFeeList = new ArrayList<>();
-			}
-			musicGroupPaymentCalender.setExpectNum(musicGroupStudentFeeList.size());
 		} else {
 			musicGroupPaymentCalender.setPaymentStatus(PaymentStatusEnum.NO);
 		}
+		// 统计缴费人数
+		musicGroupStudentFeeList = musicGroupStudentFeeDao.queryByMusicGroupId(musicGroupId,musicGroupPaymentCalender.getStudentIds());
+		if (musicGroupStudentFeeList == null) {
+			musicGroupStudentFeeList = new ArrayList<>();
+		}
+		musicGroupPaymentCalender.setExpectNum(musicGroupStudentFeeList.size());
 
 		this.insert(musicGroupPaymentCalender);
 
 		List<MusicGroupStudentFee> updateMusicGroupStudentFeeList = new ArrayList<MusicGroupStudentFee>();
 
 		List<MusicGroupPaymentCalenderDetail> musicGroupPaymentCalenderDetailList = new ArrayList<MusicGroupPaymentCalenderDetail>();
-		if (musicGroupPaymentCalender.getPaymentStatus() == PaymentStatusEnum.OPEN) {
-			if (musicGroupStudentFeeList != null && musicGroupStudentFeeList.size() > 0) {
-				Set<Integer> studentIds = new HashSet<Integer>();
-				MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
-				// 创建缴费明细
-				for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
-					/*if (mgsf.getPaymentStatus() != PaymentStatus.PAID_COMPLETED) {
-						continue;
-					}*/
-					musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
-					musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
-					musicGroupPaymentCalenderDetail.setCreateTime(date);
-					musicGroupPaymentCalenderDetail.setExpectAmount(mgsf.getCourseFee());
-					musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
-					if (mgsf.getCourseFee().doubleValue() != 0) {
-						studentIds.add(mgsf.getUserId());
-					}
-					musicGroupPaymentCalenderDetail.setUpdateTime(date);
-					musicGroupPaymentCalenderDetail.setUserId(mgsf.getUserId());
 
-					musicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
+		if (musicGroupStudentFeeList != null && musicGroupStudentFeeList.size() > 0) {
+			Set<Integer> studentIds = new HashSet<>();
+			MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
+			// 创建缴费明细
+			for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
+				musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
+				musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
+				musicGroupPaymentCalenderDetail.setCreateTime(date);
+				musicGroupPaymentCalenderDetail.setExpectAmount(mgsf.getCourseFee());
+				musicGroupPaymentCalenderDetail.setPaymentStatus(PaymentStatus.NON_PAYMENT);
+				if (mgsf.getCourseFee().doubleValue() != 0) {
+					studentIds.add(mgsf.getUserId());
 				}
-
+				musicGroupPaymentCalenderDetail.setUpdateTime(date);
+				musicGroupPaymentCalenderDetail.setUserId(mgsf.getUserId());
+				musicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
+			}
+			if (musicGroupPaymentCalender.getPaymentStatus() == PaymentStatusEnum.OPEN) {
 				// 更新学员缴费状态
 				for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
 					mgsf.setPaymentStatus(PaymentStatus.NON_PAYMENT);
@@ -187,7 +183,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 
 		for (MusicGroupPaymentCalender mgpc : musicGroupPaymentCalenderList) {
 
-			List<MusicGroupStudentFee> musicGroupStudentFeeList = musicGroupStudentFeeDao.queryByMusicGroupId(mgpc.getMusicGroupId());
+			List<MusicGroupStudentFee> musicGroupStudentFeeList = musicGroupStudentFeeDao.queryByMusicGroupId(mgpc.getMusicGroupId(),null);
 			Map<Integer, MusicGroupStudentFee> feeMap = musicGroupStudentFeeList.stream()
 					.collect(Collectors.toMap(MusicGroupStudentFee::getUserId, fee -> fee));
 
@@ -226,10 +222,10 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				// 学生状态更新进行中
 				Set<Integer> studentIds = new HashSet<Integer>();
 				// 创建缴费明细
-				for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
-					/*if (mgsf.getPaymentStatus() != PaymentStatus.PAID_COMPLETED) {
+				/*for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
+					if (mgsf.getPaymentStatus() != PaymentStatus.PAID_COMPLETED) {
 						continue;
-					}*/
+					}
 					musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 					musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(mgpc.getId());
 					musicGroupPaymentCalenderDetail.setCreateTime(date);
@@ -242,7 +238,7 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 					musicGroupPaymentCalenderDetail.setUserId(mgsf.getUserId());
 
 					musicGroupPaymentCalenderDetailList.add(musicGroupPaymentCalenderDetail);
-				}
+				}*/
 
 				// 更新学员缴费状态
 				for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {

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

@@ -1433,7 +1433,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
             //删除续费周期
             musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
-
+            //删除缴费明细
+            musicGroupPaymentCalenderDetailDao.deleteByUserIdAndMusicGroupId(userId,musicGroupId);
             // 退团
             studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
             studentRegistration.setUpdateTime(date);
@@ -1534,6 +1535,8 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
 
         //删除续费周期
         musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
+        //删除缴费明细
+        musicGroupPaymentCalenderDetailDao.deleteByUserIdAndMusicGroupId(userId,musicGroupId);
 
         // 退团
         studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);

+ 23 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/SporadicChargeInfoImpl.java

@@ -13,11 +13,9 @@ import com.ym.mec.biz.dal.entity.SysUserCashAccountDetail;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.enums.SporadicChargeTypeEnum;
 import com.ym.mec.biz.dal.page.SporadicChargeInfoQueryInfo;
-import com.ym.mec.biz.service.SporadicChargeInfoService;
-import com.ym.mec.biz.service.SysMessageService;
-import com.ym.mec.biz.service.SysUserCashAccountDetailService;
-import com.ym.mec.biz.service.SysUserCashAccountService;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -53,6 +51,8 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
     private SysUserCashAccountService sysUserCashAccountService;
     @Autowired
     private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+    @Autowired
+    private DegreeRegistrationService degreeRegistrationService;
 
     @Override
     public BaseDAO<Integer, SporadicChargeInfo> getDAO() {
@@ -76,9 +76,12 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
         if (studentPaymentOrder.getStatus() == DealStatusEnum.SUCCESS) {
             //福袋活动,增加课程余额
             if (info.getChargeType().getCode() == 6) {
-                sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getActualAmount(),PlatformCashAccountDetailTypeEnum.SPORADIC, "活动");
+                sysUserCashAccountService.appendCourseBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.SPORADIC, "活动");
             } else if (info.getChargeType().getCode() == 9) { //零星收费账户充值
-                sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费账户充值",studentPaymentOrder.getTransNo());
+                sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getActualAmount(), PlatformCashAccountDetailTypeEnum.RECHARGE, "零星收费账户充值", studentPaymentOrder.getTransNo());
+            } else if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)) {
+                degreeRegistrationService.updateStatus(studentPaymentOrder.getUserId(), 2);
+                return true;
             } else {
                 //插入交易明细
                 BigDecimal amount = studentPaymentOrder.getActualAmount();
@@ -127,6 +130,11 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
             return true;
         }
         if (studentPaymentOrder.getStatus() == DealStatusEnum.CLOSE || studentPaymentOrder.getStatus() == DealStatusEnum.FAILED) {
+            if (info.getOrganId().equals(42) && info.getChargeType().equals(SporadicChargeTypeEnum.LEVEL)){
+                degreeRegistrationService.updateStatus(studentPaymentOrder.getUserId(),0);
+                return true;
+            }
+
             if (studentPaymentOrder.getBalancePaymentAmount() != null && studentPaymentOrder.getBalancePaymentAmount().compareTo(BigDecimal.ZERO) > 0) {
                 sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(), studentPaymentOrder.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, info.getTitle() + "支付失败");
             }
@@ -182,4 +190,13 @@ public class SporadicChargeInfoImpl extends BaseServiceImpl<Integer, SporadicCha
     public SporadicChargeInfo findByOrganIdAndType(Integer organId, Integer type) {
         return sporadicChargeInfoDao.findByOrganIdAndType(organId, type);
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateOpenFlag(Integer sporadicId, Integer openFlag) {
+        SporadicChargeInfo sporadicChargeInfo = sporadicChargeInfoDao.get(sporadicId);
+        sporadicChargeInfo.setOpenFlag(openFlag);
+        sporadicChargeInfo.setUpdateTime(new Date());
+        sporadicChargeInfoDao.update(sporadicChargeInfo);
+    }
 }

+ 13 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java

@@ -487,22 +487,23 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		if(signStatusEnum == SignStatusEnum.SIGN_IN && studentAttendance.getSignInTime() == null){
 			//判断是否在签到时间段内(课程开始前20~结束前)
 //			int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
-			String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
-			String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-			String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+//			String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+//			String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+//			String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 			//上课时间
-			Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-			Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-			Date addMinutes = DateUtil.addMinutes(classStartDateTime, -60);
+//			Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+//			Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+//			Date addMinutes = DateUtil.addMinutes(classStartDateTime, -60);
 			//课程结束前进入,算正常
-			if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
-				studentAttendance.setStatus(statusEnum);
-				studentAttendance.setSignInTime(date);
+			studentAttendance.setStatus(statusEnum);
+			studentAttendance.setSignInTime(date);
 
-				courseSchedule.setUpdateTime(date);
+			courseSchedule.setUpdateTime(date);
 //				courseSchedule.setStudentNum((courseSchedule.getStudentNum() == null?0:courseSchedule.getStudentNum()) + 1);
-				courseScheduleDao.update(courseSchedule);
-			}
+			courseScheduleDao.update(courseSchedule);
+			/*if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
+
+			}*/
 		}else if(signStatusEnum == SignStatusEnum.SIGN_OUT){
 			String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 			String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);

+ 59 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -32,8 +32,10 @@ import org.springframework.util.CollectionUtils;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+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 {
@@ -113,9 +115,28 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
 
         LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
         LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-        LocalDate createDateTime = LocalDateTime.ofInstant(existHomework.getCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+        LocalDate createDateTime = LocalDateTime.ofInstant(courseSchedule.getClassDate().toInstant(), DateUtil.zoneId).toLocalDate();
         LocalDate createMonday = createDateTime.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-        if(createDateTime.isBefore(monDayDate)){
+        LocalDate homeworkCreateDateTime = LocalDateTime.ofInstant(existHomework.getCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+        boolean isOk=false;
+        switch (createDateTime.getDayOfWeek()){
+            case SATURDAY:
+                if(createDateTime.until(homeworkCreateDateTime, ChronoUnit.DAYS)<4){
+                    isOk=true;
+                }
+                break;
+            case SUNDAY:
+                if(createDateTime.until(homeworkCreateDateTime, ChronoUnit.DAYS)<3){
+                    isOk=true;
+                }
+                break;
+            default:
+                if(createDateTime.get(DateUtil.weekFields.weekOfYear())==homeworkCreateDateTime.get(DateUtil.weekFields.weekOfYear())){
+                    isOk=true;
+                }
+                break;
+        }
+        if(createDateTime.isBefore(monDayDate)&&isOk){
             StudentExtracurricularExercisesSituation studentExercisesSituation = studentExtracurricularExercisesSituationDao.findStudentExercisesSituationsWithMonDay(createMonday.toString(), existHomework.getUserId());
             if(Objects.nonNull(studentExercisesSituation)){
                 studentExercisesSituation.setExercisesReplyNum(1);
@@ -124,14 +145,19 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
             }
         }
 
-        CourseHomework temp = courseHomeworkService.get(courseHomework.getId());
-        if (temp.getExpectNum().equals(courseHomework.getCompletedNum())) {
-            CourseScheduleReview review = courseScheduleReviewDao.findByCourseScheduleAndStudent(bean.getCourseScheduleId(), bean.getUserId());
-            if (Objects.nonNull(review)) {
-                review.setHandHomework(YesOrNoEnum.YES.getCode());
-                courseScheduleReviewDao.update(review);
-            }
+//        CourseHomework temp = courseHomeworkService.get(courseHomework.getId());
+//        if (temp.getExpectNum().equals(courseHomework.getCompletedNum())) {
+        Integer userId = bean.getUserId();
+        if(courseSchedule.getType().equals(CourseScheduleType.VIP)){
+            userId = null;
+        }
+
+        CourseScheduleReview review = courseScheduleReviewDao.findByCourseScheduleAndStudent(bean.getCourseScheduleId(), userId);
+        if (Objects.nonNull(review)) {
+            review.setHandHomework(YesOrNoEnum.YES.getCode());
+            courseScheduleReviewDao.update(review);
         }
+//        }
 
         if(push){
             Map<Integer, String> userMap = new HashMap<>();
@@ -190,11 +216,33 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
             byStudentAndCourseHomewok.setIsReplied(YesOrNoEnum.YES);
             studentCourseHomeworkDao.update(byStudentAndCourseHomewok);
 
+            CourseSchedule courseSchedule = courseScheduleDao.get(byStudentAndCourseHomewok.getCourseScheduleId());
+
             LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
             LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-            LocalDate createDateTime = LocalDateTime.ofInstant(byStudentAndCourseHomewok.getCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+            LocalDate createDateTime = LocalDateTime.ofInstant(courseSchedule.getClassDate().toInstant(), DateUtil.zoneId).toLocalDate();
             LocalDate createMonday = createDateTime.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
-            if(createDateTime.isBefore(monDayDate)){
+
+            LocalDate homeworkCreateDateTime = LocalDateTime.ofInstant(byStudentAndCourseHomewok.getCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+            boolean isOk=false;
+            switch (createDateTime.getDayOfWeek()){
+                case SATURDAY:
+                    if(createDateTime.until(homeworkCreateDateTime, ChronoUnit.DAYS)<4){
+                        isOk=true;
+                    }
+                    break;
+                case SUNDAY:
+                    if(createDateTime.until(homeworkCreateDateTime, ChronoUnit.DAYS)<3){
+                        isOk=true;
+                    }
+                    break;
+                default:
+                    if(createDateTime.get(DateUtil.weekFields.weekOfYear())==homeworkCreateDateTime.get(DateUtil.weekFields.weekOfYear())){
+                        isOk=true;
+                    }
+                    break;
+            }
+            if(createDateTime.isBefore(monDayDate)&&isOk){
                 StudentExtracurricularExercisesSituation studentExercisesSituation = studentExtracurricularExercisesSituationDao.findStudentExercisesSituationsWithMonDay(createMonday.toString(), byStudentAndCourseHomewok.getUserId());
                 if(Objects.nonNull(studentExercisesSituation)){
                     if(YesOrNoEnum.YES.equals(byStudentAndCourseHomewok.getIsReplied())){

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

@@ -278,10 +278,10 @@ public class StudentManageServiceImpl implements StudentManageService {
             pageInfo.setTotal(count);
             params.put("offset", pageInfo.getOffset());
             dataList = studentManageDao.queryMusicGroupStudent(params);
-            Map<Integer,String> maps = MapUtil.convertIntegerMap(musicGroupStudentFeeDao.findPaymentStatusMap(queryInfo.getMusicGroupId()));
-            dataList.forEach(e->{
-                e.setPaymentStatus(maps.get(e.getUserId()));
-            });
+//            Map<Integer,String> maps = MapUtil.convertIntegerMap(musicGroupStudentFeeDao.findPaymentStatusMap(queryInfo.getMusicGroupId()));
+//            dataList.forEach(e->{
+//                e.setPaymentStatus(maps.get(e.getUserId()));
+//            });
         }
         if (count == 0) {
             dataList = new ArrayList<>();

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

@@ -5,10 +5,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.StudentAddDto;
-import com.ym.mec.biz.dal.dto.StudentApplyDetailDto;
-import com.ym.mec.biz.dal.dto.StudentFeeDetailDto;
-import com.ym.mec.biz.dal.dto.StudentInfo;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
@@ -1028,4 +1025,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
     public List<Subject> findMusicGroupAllStudentSubjects(String musicGroupId) {
         return studentRegistrationDao.findMusicGroupAllStudentSubjects(musicGroupId);
     }
+
+    @Override
+    public StudentMusicDetailDto getStudentDetail(Integer studentId) {
+        return studentRegistrationDao.getStudentDetail(studentId);
+    }
 }

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

@@ -267,7 +267,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentRepair.setContactMobile(repairInfo.getContactMobile());
         studentRepair.setAddress(repairInfo.getAddress());
         studentRepair.setUpdateTime(date);
-        studentRepairDao.update(repairInfo);
+        studentRepairDao.update(studentRepair);
 
         String channelType = "";
 
@@ -370,6 +370,9 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         if (repairInfo == null) {
             throw new BizException("维修单不存在");
         }
+        if(repairInfo.getPayStatus().equals(2)){
+            return true;
+        }
 
         Integer userId = studentPaymentOrder.getUserId();
 

+ 100 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -1,24 +1,22 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.ExtracurricularExercisesReplyDao;
-import com.ym.mec.biz.dal.dao.StudentCourseHomeworkDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentExtracurricularExercisesSituationDao;
+import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.StudentServeCourseDto;
 import com.ym.mec.biz.dal.dto.StudentServeCourseHomeworkDto;
 import com.ym.mec.biz.dal.dto.StudentServeDto;
 import com.ym.mec.biz.dal.dto.StudentServiceHomeworkDto;
-import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.service.StudentServeService;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 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;
@@ -36,6 +34,10 @@ import java.util.stream.Collectors;
 public class StudentServeServiceImpl implements StudentServeService {
 
     @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+    @Autowired
     private StudentDao studentDao;
     @Autowired
     private StudentCourseHomeworkDao studentCourseHomeworkDao;
@@ -45,6 +47,7 @@ public class StudentServeServiceImpl implements StudentServeService {
     private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void exercisesSituationStatistics(String monday) {
         LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
 
@@ -62,15 +65,34 @@ public class StudentServeServiceImpl implements StudentServeService {
         Date nextMonday = Date.from(sunDayDate.plusDays(1).atStartOfDay(DateUtil.zoneId).toInstant());
 
         List<Integer> beServeStudentIds=studentDao.getServeStudentIds();
+        List<Integer> serveStudentIds=new ArrayList<>();
+        List<StudentServeCourseDto> serveStudentCourseStartTimes = studentDao.getServeStudentCourseStartTimes(monDayDate.toString());
+        Map<Integer, List<StudentServeCourseDto>> studentTimesMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(serveStudentCourseStartTimes)){
+            studentTimesMap = serveStudentCourseStartTimes.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getStudentId));
+        }
+        for (Integer beServeStudentId : beServeStudentIds) {
+            List<StudentServeCourseDto> studentServeCourseDtos = studentTimesMap.get(beServeStudentId);
+            if(CollectionUtils.isEmpty(studentServeCourseDtos)
+                    ||Objects.isNull(studentServeCourseDtos.get(0).getServiceTagUpdateTime())){
+                serveStudentIds.add(beServeStudentId);
+                continue;
+            }
+            long thisWeekCourses = studentServeCourseDtos.stream().filter(e -> !e.getCourseStartTime().before(e.getServiceTagUpdateTime()) && e.getCourseStartTime().compareTo(nextMonday) <= 0).count();
+            if(thisWeekCourses>0){
+                serveStudentIds.add(beServeStudentId);
+            }
+        }
+
         BigDecimal currentPage=BigDecimal.ONE,
                 pageSize=new BigDecimal(1000),
-                total=new BigDecimal(beServeStudentIds.size()),
+                total=new BigDecimal(serveStudentIds.size()),
                 totalPage=total.divide(pageSize, BigDecimal.ROUND_UP);
 
         List<StudentExtracurricularExercisesSituation> results=new ArrayList<>();
 
         while (currentPage.compareTo(totalPage)<=0){
-            List<Integer> studentIds=beServeStudentIds.stream().skip(pageSize.multiply(currentPage.subtract(BigDecimal.ONE)).longValue()).limit(pageSize.longValue()).collect(Collectors.toList());
+            List<Integer> studentIds=serveStudentIds.stream().skip(pageSize.multiply(currentPage.subtract(BigDecimal.ONE)).longValue()).limit(pageSize.longValue()).collect(Collectors.toList());
 
             List<StudentServeDto> serviceStudents;
             if(sunDayDate.isBefore(LocalDate.now())){
@@ -107,7 +129,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                     continue;
                 }
                 long count = haveCourseStudents.stream().filter(e -> (GroupType.PRACTICE.equals(e.getGroupType()) ||
-                        (GroupType.MUSIC.equals(e.getGroupType()) && TeachModeEnum.OFFLINE.equals(e.getTeachMode())))
+                        GroupType.VIP.equals(e.getGroupType()))
                         &&nextMonday.after(e.getCourseStartTime())).count();
                 if(count>0){
                     haveClassStudentIds.add(studentCoursesEntry.getKey());
@@ -125,7 +147,30 @@ public class StudentServeServiceImpl implements StudentServeService {
 
             if (!CollectionUtils.isEmpty(allServeStudentIds)){
                 List<StudentServeCourseHomeworkDto> studentHomeworks = studentCourseHomeworkDao.findStudentHomeworkWithCourseDateRange(monDayDate.toString(), sunDayDate.toString(), new ArrayList<>(allServeStudentIds));
-                studentHomeworkMap = studentHomeworks.stream().filter(h -> DateUtil.daysBetween(h.getCourseStartTime(), h.getHomeworkCreateTime())<3).collect(Collectors.groupingBy(StudentServeCourseHomeworkDto::getUserId));
+                List<StudentServeCourseHomeworkDto> studentHomeworksTmp =new ArrayList<>();
+                for (StudentServeCourseHomeworkDto studentHomework : studentHomeworks) {
+                    LocalDate courseStartLocalDate = LocalDateTime.ofInstant(studentHomework.getCourseStartTime().toInstant(), DateUtil.zoneId).toLocalDate();
+                    switch (courseStartLocalDate.getDayOfWeek()){
+                        case SATURDAY:
+                            if(DateUtil.daysBetween(studentHomework.getCourseStartTime(), studentHomework.getHomeworkCreateTime())<4){
+                                studentHomeworksTmp.add(studentHomework);
+                            }
+                            break;
+                        case SUNDAY:
+                            if(DateUtil.daysBetween(studentHomework.getCourseStartTime(), studentHomework.getHomeworkCreateTime())<3){
+                                studentHomeworksTmp.add(studentHomework);
+                            }
+                            break;
+                        default:
+                            LocalDate homeworkCreateTime = LocalDateTime.ofInstant(studentHomework.getHomeworkCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+                            if(courseStartLocalDate.get(DateUtil.weekFields.weekOfYear())==homeworkCreateTime.get(DateUtil.weekFields.weekOfYear())){
+                                studentHomeworksTmp.add(studentHomework);
+                            }
+                            break;
+                    }
+                }
+                studentHomeworkMap = studentHomeworksTmp.stream()
+                        .collect(Collectors.groupingBy(StudentServeCourseHomeworkDto::getUserId));
             }
 
             if(!CollectionUtils.isEmpty(allServeStudentIds)){
@@ -241,4 +286,48 @@ public class StudentServeServiceImpl implements StudentServeService {
             currentPage1=currentPage1.add(BigDecimal.ONE);
         }
     }
+
+    @Override
+    public Map<String, Object> checkeIsAssignHomework(Long courseScheduleId, String studentIdsStr) {
+        Map<String, Object> result=new HashMap<>();
+        if(Objects.isNull(courseScheduleId)&&Objects.isNull(studentIdsStr)){
+            result.put("isAssignHomework", 0);
+            return result;
+        }
+        List<Integer> studentIds=new ArrayList<>();
+        if(StringUtils.isNotBlank(studentIdsStr)){
+            studentIds= Arrays.asList(studentIdsStr.split(",")).stream().map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }
+
+        LocalDate localDate=LocalDate.now();
+
+        if(Objects.nonNull(courseScheduleId)){
+            CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
+            if(Objects.isNull(courseSchedule)){
+                result.put("isAssignHomework", 0);
+                return result;
+            }
+            localDate=LocalDateTime.ofInstant(courseSchedule.getClassDate().toInstant(), DateUtil.zoneId).toLocalDate();
+            List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByCourseSchedule(courseScheduleId);
+            if(CollectionUtils.isEmpty(courseScheduleStudentPayments)){
+                result.put("isAssignHomework", 0);
+                return result;
+            }
+            studentIds = courseScheduleStudentPayments.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
+        }
+
+        LocalDate monDayDate = localDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+        LocalDate sunDayDate = localDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
+
+        Set<Integer> hss = studentCourseHomeworkDao.checkStudentHaveHomeworkInDateRange(monDayDate.toString(), sunDayDate.toString(), studentIds);
+        Set<Integer> ess = extracurricularExercisesReplyDao.checkStudentHaveExercisesInDateRange(monDayDate.toString(), sunDayDate.toString(), studentIds);
+        for (Integer studentId : studentIds) {
+            if(!hss.contains(studentId)&&!ess.contains(studentId)){
+                result.put("isAssignHomework", 0);
+                return result;
+            }
+        }
+        result.put("isAssignHomework", 1);
+        return result;
+    }
 }

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

@@ -162,4 +162,9 @@ public class StudentServiceImpl extends BaseServiceImpl<Integer, Student> implem
 		studentCoursesMap=null;
 		allStudentCourseInfo=null;
 	}
+
+	@Override
+	public void batchUpdateAdviser(Integer teacherId,String studentIds) {
+		studentDao.batchUpdateAdviser(teacherId,studentIds);
+	}
 }

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

@@ -21,6 +21,7 @@ import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
@@ -74,10 +75,11 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		return teacherAttendanceDao;
 	}
 
-	@Transactional(rollbackFor = Exception.class)
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	@Override
 	public Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto) {
 		SysUser user = sysUserFeignService.queryUserInfo();
+		teacherDao.getLocked(user.getId());
 		if(Objects.isNull(user)){
 			throw new BizException("请登录");
 		}
@@ -572,6 +574,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		result.setTeachMode(courseSchedule.getTeachMode());
 		result.setType(courseSchedule.getType());
 		result.setTeacherName(teacherDao.queryNameById(courseSchedule.getActualTeacherId()));
+		result.setAttendClassTime(teacherAttendanceDao.getAttendClassTime(courseScheduleId));
 		if(teacherAttendance != null){
 			result.setIsSignIn(Objects.isNull(teacherAttendance.getSignInStatus())?3:teacherAttendance.getSignInStatus().getCode());
 			result.setIsSignOut(Objects.isNull(teacherAttendance.getSignOutStatus())?3:teacherAttendance.getSignOutStatus().getCode());
@@ -594,7 +597,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	public void pushTeacherExceptionAttendanceTask() {
 		//获取前一天的日期
 		Date date = new Date();
-		String format = DateUtil.format(DateUtil.addDays(date,-1), DateUtil.DEFAULT_PATTERN);
+//		String format = DateUtil.format(DateUtil.addDays(date,-1), DateUtil.DEFAULT_PATTERN);
+		String format = DateUtil.format(date, DateUtil.DEFAULT_PATTERN);
 		Set<Integer> teacherId = teacherAttendanceDao.queryTeacherExceptionAttendance(format);
 		if(teacherId == null || teacherId.size() == 0){
 			return;

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

@@ -18,6 +18,7 @@ import com.ym.mec.common.entity.ImResult;
 import com.ym.mec.common.entity.ImUserModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
@@ -27,6 +28,7 @@ import org.apache.commons.lang3.StringUtils;
 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.time.DayOfWeek;
@@ -450,15 +452,18 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
 			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
 			List<TeacherExercisesServiceDto> teacherExercisesServiceSituations = studentExtracurricularExercisesSituationDao.findTeacherExercisesServiceSituations(monDayDate.toString(), new ArrayList<>(teachers));
-			Map<Integer, TeacherExercisesServiceDto> teacherServiceMap = teacherExercisesServiceSituations.stream().collect(Collectors.toMap(TeacherExercisesServiceDto::getTeacherId, t -> t));
+			Map<Integer, TeacherExercisesServiceDto> teacherServiceMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(teacherExercisesServiceSituations)){
+				teacherServiceMap = teacherExercisesServiceSituations.stream().collect(Collectors.toMap(TeacherExercisesServiceDto::getTeacherId, t -> t));
+			}
 
 			Map<Integer,String> operatingStudentsNum = MapUtil.convertMybatisMap(studentDao.getTeacherOperatingStudentsNum(teacherIds));
 			Map<Integer,String> practiceStudentsNum = MapUtil.convertMybatisMap(studentDao.getBuyNums(teacherIds, GroupType.PRACTICE));
 			Map<Integer,String> vipStudentsNum = MapUtil.convertMybatisMap(studentDao.getBuyNums(teacherIds, GroupType.VIP));
 			Map<Integer,String> practiceAndVipStudentsNum = MapUtil.convertMybatisMap(studentDao.getPracticeAndVipNums(teacherIds));
 
-			rows.forEach(e->{
-//				e.setSubjectName(subjectDao.findBySubIds(e.getSubjectId()));
+			for (Teacher e : rows) {
+				e.setSubjectName(subjectDao.findBySubIds(e.getSubjectId()));
 				e.setOrganName(organNames.get(e.getTeacherOrganId()));
 				if(StringUtils.isNotEmpty(e.getSplitSubjectName())){
 					e.setSubjectName(Arrays.asList(e.getSplitSubjectName().split(",")));
@@ -487,8 +492,7 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 				}else {
 					e.setOperatingIndex(BigDecimal.ZERO);
 				}
-
-			});
+			}
 		}
 		return pageInfo;
 	}
@@ -557,4 +561,24 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		return true;
 	}
 
+	@Override
+	public PageInfo<BasicUserDto> queryStudent(QueryInfo queryInfo) {
+		PageInfo<BasicUserDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<BasicUserDto> dataList = null;
+		int count = teacherDao.countStudent(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = teacherDao.queryStudent(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
 }

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

@@ -24,7 +24,6 @@ import com.ym.mec.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
-
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -405,6 +404,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			throw new BizException("该用户不存在");
 		}
 		Set<Integer> userIds = musicGroupDao.queryUserIdByRoleId(roleIds,teacher.getTeacherOrganId());
+		if(CollectionUtils.isEmpty(userIds)){
+			throw new BizException("当前分部没有运营主管,无法创建,请联系总部工作人员!");
+		}
 //		if (vipGroup.getVipGroupApplyBaseInfo().getUserId() != null){
 //			sysMessageService.batchSeoMessage(userIds,MessageTypeEnum.BACKSTAGE_VIP_COURSE_APPLY, JSONObject.toJSONString(memo),sysUser.getUsername(),sysUser.getUsername());
 //		}else {
@@ -591,6 +593,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				Map<String,Long> currentClassTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.countCourseScheduleNum(vipGroupIds,"VIP"));
 				Map<String,String> lastOverTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.findLastOverTime(vipGroupIds));
 
+				List<Map<String, BigDecimal>> groupCoursesUnitPriceMaps = courseScheduleStudentPaymentDao.findGroupCoursesUnitPrice(GroupType.VIP, vipGroupIds);
+				Map<String,BigDecimal> groupCoursesUnitPrice=new HashMap<>();
+				if(!CollectionUtils.isEmpty(groupCoursesUnitPriceMaps)){
+					groupCoursesUnitPrice=MapUtil.convertIntegerMap(groupCoursesUnitPriceMaps);
+				}
+
 				Map<Integer, String> idNameMap=new HashMap<>();
 				if(!CollectionUtils.isEmpty(educationalTeacherIds)){
 					List<SimpleUserDto> educationalUsers = employeeDao.findByIds(educationalTeacherIds);
@@ -617,6 +625,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 					vipGroup.setEducationalTeacherName(idNameMap.get(vipGroup.getEducationalTeacherId()));
 
+					vipGroup.setCourseUnitPrice(groupCoursesUnitPrice.get(String.valueOf(vipGroup.getId())));
+
 					if(queryInfo.getIsExport()){
 						List<GroupUserDto> groupStudents = groupStudentsMap.get(vipGroup.getId().toString());
 						if(!CollectionUtils.isEmpty(groupStudents)){
@@ -968,21 +978,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		totalPrice=totalPrice.setScale(0,BigDecimal.ROUND_CEILING);
 		results.put("totalPrice",totalPrice);
 
-		Teacher teacher = teacherDao.get(teacherId);
-		if(!JobNatureEnum.FULL_TIME.equals(teacher.getJobNature())){
-			if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOnlineClassesSalary())){
-				results.put("onlineTeacherSalary", BigDecimal.ZERO);
-			}else{
-				results.put("onlineTeacherSalary", teacherDefaultVipGroupSalary.getOnlineClassesSalary());
-			}
-			if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
-				results.put("offlineTeacherSalary", BigDecimal.ZERO);
-			}else{
-				results.put("offlineTeacherSalary", teacherDefaultVipGroupSalary.getOfflineClassesSalary());
-			}
-			return results;
-		}
-
 		//教师课酬线上单课酬计算
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
 			if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
@@ -993,17 +988,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(Objects.isNull(teacherOnlineSalary)){
 				switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 					case TEACHER_DEFAULT:
-						if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOnlineClassesSalary())){
+						if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
 							teacherOnlineSalary=new BigDecimal(0);
 						}else{
-							teacherOnlineSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary();
+							teacherOnlineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 						}
-//                        teacherOnlineSalary=teacherOnlineSalary.multiply(classTimeDuty);
 						results.put("onlineTeacherSalary",teacherOnlineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
 						break;
 					case RATIO_DISCOUNT:
-//						results.put("onlineTeacherSalary",onlineClassesUnitPrice.multiply((vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue())).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
-
 						results.put("onlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
 
 						break;
@@ -1037,8 +1029,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 						results.put("offlineTeacherSalary",teacherOfflineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
 						break;
 					case RATIO_DISCOUNT:
-//						results.put("offlineTeacherSalary",offlineClassesUnitPrice.multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
-
 						results.put("offlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
 
 						break;
@@ -1088,7 +1078,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			classGroup.setStudentNum(classGroup.getStudentNum()+num);
 		}
 
-		Integer studentPaymentNum=studentPaymentOrderDao.countStudentPaymentNum(vipGroupId.toString());
+//		Integer studentPaymentNum=studentPaymentOrderDao.countStudentPaymentNum(vipGroupId.toString());
+
+		Integer studentPaymentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
 
 		if(studentPaymentNum.equals(classGroup.getExpectStudentNum())&&updateVipStatus){
 			classGroup.setStudentNum(studentPaymentNum);
@@ -1541,6 +1533,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT);
 			classGroupStudentMapperDao.update(classStudentMapperByUserIdAndClassGroupId);
 			studentPauseInfoDao.deleteUserPauseInfoWithGroup(GroupType.VIP, vipGroupId.toString(), studentId);
+
+			classGroup.setStudentNum(classGroup.getStudentNum()-1);
+			classGroupDao.update(classGroup);
 			return;
         }
 		if(Objects.isNull(amount)){
@@ -1572,6 +1567,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(), vipGroup.getUserId());
 		}
 
+		classGroup.setStudentNum(classGroup.getStudentNum()-1);
+
+        classGroupDao.update(classGroup);
+
 		//学员退出班级群
 		ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentId.toString())};
 		imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, null));
@@ -1587,11 +1586,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroup)){
 			throw new BizException("指定的课程不存在");
 		}
-		if(vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)){
-			throw new BizException("不能对已停止的课程进行此操作");
-		}
-		if(vipGroup.getStatus().equals(VipGroupStatusEnum.FINISHED)){
-			throw new BizException("此课程已结束");
+		if(!VipGroupStatusEnum.PROGRESS.equals(vipGroup.getStatus())){
+			throw new BizException("当前课程组状态非进行中,无法进行该操作");
 		}
 		List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(), GroupType.VIP.getCode(), studentId);
 		if(!CollectionUtils.isEmpty(studentApplyRefunds)){
@@ -1749,6 +1745,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				if(newCourseSchedules.get(i).getStartClassTime().before(now)){
 					throw new BizException("排课起始时间不得小于当前时间");
 				}
+				newCourseSchedules.get(i).setName(vipGroup.getName());
 				newCourseSchedules.get(i).setGroupType(GroupType.VIP);
 				newCourseSchedules.get(i).setMusicGroupId(vipGroup.getId().toString());
 				newCourseSchedules.get(i).setClassGroupId(classGroup.getId());
@@ -2476,8 +2473,22 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroup)){
 			throw new BizException("未找到指定的vip课程");
 		}
+
 		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId, null);
 
+		if(classGroup.getExpectStudentNum()>1
+				&&(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.APPLYING_END.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.NOT_START.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.FINISHED.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.CANCEL.equals(vipGroup.getStatus()))){
+			throw new BizException("VIP课程组尚未成立,无法添加学员,请走学员购买流程!");
+		}
+
+		if(VipGroupStatusEnum.PAUSE.equals(vipGroup.getStatus())){
+			throw new BizException("当前课程组已经停止,无法进行添加学员操作。");
+		}
+
         Integer studentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
         if(studentNum.compareTo(classGroup.getExpectStudentNum())>=0){
             throw new BizException("该班级人数已达上限");
@@ -2542,6 +2553,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(!CollectionUtils.isEmpty(classGroupStudentMappers)){
 				classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
 			}
+
+			Integer currentStudentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
+			if((!vipGroup.getStatus().equals(VipGroupStatusEnum.FINISHED)
+					||!vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL))
+					&&currentStudentNum.compareTo(classGroup.getExpectStudentNum())>=0){
+				vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
+				vipGroupDao.update(vipGroup);
+			}
+			classGroup.setStudentNum(currentStudentNum);
+			classGroup.setDelFlag(0);
+			classGroupDao.update(classGroup);
+
 			try {
 				ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
 				// 创建群组
@@ -2705,12 +2728,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		VipGroupStatusEnum vipGroupStatus = vipGroup.getStatus();
 
         Integer currentStudentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
-		if((!vipGroup.getStatus().equals(VipGroupStatusEnum.PAUSE)
+		if((!vipGroup.getStatus().equals(VipGroupStatusEnum.FINISHED)
 				||!vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL))
             &&currentStudentNum.compareTo(classGroup.getExpectStudentNum())>=0){
             vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
             vipGroupDao.update(vipGroup);
         }
+		classGroup.setStudentNum(currentStudentNum);
 		classGroup.setDelFlag(0);
 		classGroupDao.update(classGroup);
 		classGroupService.updateClassGroupInfo(classGroup.getId());
@@ -2740,7 +2764,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		for (VipGroup noCreateSuccessVipGroup : noCreateSuccessVipGroups) {
 			int i = courseScheduleStudentPaymentDao.countStudentCourseNumWithGroup(GroupType.VIP, noCreateSuccessVipGroup.getId().toString());
 			if(i>0){
-				break;
+				continue;
 			}
 			noCreateSuccessVipGroup.setStatus(VipGroupStatusEnum.CANCEL);
 			List<StudentPaymentOrder> studentPaymentOrders = studentPaymentOrderDao.queryByDealStatus(noCreateSuccessVipGroup.getId().toString(),
@@ -2748,16 +2772,20 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 			for (StudentPaymentOrder studentPaymentOrder:studentPaymentOrders){
 				//生成账户资金明细
-				sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(),studentPaymentOrder.getActualAmount());
-				SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(studentPaymentOrder.getUserId());
-				SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
-				sysUserIncomeCashAccountDetail.setUserId(studentPaymentOrder.getUserId());
-				sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
-				sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
-				sysUserIncomeCashAccountDetail.setAmount(studentPaymentOrder.getActualAmount());
-				sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
-				sysUserIncomeCashAccountDetail.setAttribute(studentPaymentOrder.getTransNo());
-				userCashAccountDetails.add(sysUserIncomeCashAccountDetail);
+				if(studentPaymentOrder.getExpectAmount().compareTo(BigDecimal.ZERO)>0){
+					sysUserCashAccountService.updateBalance(studentPaymentOrder.getUserId(),studentPaymentOrder.getExpectAmount());
+					SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(studentPaymentOrder.getUserId());
+					SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
+					sysUserIncomeCashAccountDetail.setUserId(studentPaymentOrder.getUserId());
+					sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.REFUNDS);
+					sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+					sysUserIncomeCashAccountDetail.setAmount(studentPaymentOrder.getExpectAmount());
+					sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
+					sysUserIncomeCashAccountDetail.setAttribute(studentPaymentOrder.getTransNo());
+					sysUserIncomeCashAccountDetail.setDescription("达到报名截止时间,未满员系统自动取消课程组,并退费");
+					sysUserIncomeCashAccountDetail.setComment("达到报名截止时间,未满员系统自动取消课程组,并退费");
+					userCashAccountDetails.add(sysUserIncomeCashAccountDetail);
+				}
 			}
 			classGroupStudentMapperDao.updateVipGroupStudentStatus(noCreateSuccessVipGroup.getId().toString(),GroupType.VIP.getCode(),ClassGroupStudentStatusEnum.QUIT.getCode());
 		}
@@ -2875,7 +2903,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Override
 	@Async
-	public void updateHistoryTeacherSalaryOfOnline(Date startDate, Date endDate) {
+	public void updateHistoryTeacherSalaryOfOnline(String startDate, String endDate) {
 		// 查询所有含有线上课的课程组,线上课节数,实付金额
 		List<VipCourseStudentInfoDto> list = vipGroupDao.queryVipCourseStudentInfo();
 		Map<String, VipCourseStudentInfoDto> map = list.stream().collect(Collectors.toMap(VipCourseStudentInfoDto::getMusicGroupId, e -> e));

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

@@ -253,25 +253,27 @@
         <result column="educational_teacher_id_" property="educationalTeacherId"/>
         <result column="team_teacher_id_" property="teamTeacherId"/>
         <result column="teacher_role_" property="teacherRole"/>
+        <result column="class_group_name_" property="classGroupNames"/>
+        <result column="class_group_id_" property="classGroupIds"/>
+        <result column="hasRestClass" property="hasRestClass"/>
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="job_type_" property="jobType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="job_nature_" property="jobNature" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <collection property="classGroupNames" ofType="string">
-            <result column="class_group_name_"/>
-        </collection>
     </resultMap>
     <select id="queryGroupCourses" resultMap="getTeaCourseInfosMap">
         SELECT mg.id_ music_group_id_,mg.name_ music_group_name_,
-        mg.team_teacher_id_,mg.educational_teacher_id_,cg.name_ class_group_name_,
-        mg.status_,t.job_type_,t.job_nature_,cgtm.teacher_role_
+        mg.team_teacher_id_,mg.educational_teacher_id_,GROUP_CONCAT(DISTINCT cg.name_) class_group_name_,GROUP_CONCAT(DISTINCT cg.id_) class_group_id_,
+        mg.status_,t.job_type_,t.job_nature_,cgtm.teacher_role_,CASE WHEN COUNT(cs.id_) > 0 THEN 1 ELSE 0 END hasRestClass
         FROM class_group_teacher_mapper cgtm
         LEFT JOIN music_group mg ON cgtm.music_group_id_ = mg.id_
         LEFT JOIN class_group cg ON cg.id_ = cgtm.class_group_id_
         LEFT JOIN teacher t ON t.id_ = cgtm.user_id_
+        LEFT JOIN course_schedule cs ON (FIND_IN_SET(cs.class_group_id_,cg.id_) AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW())
         WHERE cgtm.user_id_ = #{search} AND cg.del_flag_ = 0 AND cg.group_type_ = 'MUSIC'
         <if test="status != null">
             AND mg.status_ = #{status}
         </if>
+        GROUP BY cgtm.id_
         <include refid="global.limit"/>
     </select>
 
@@ -623,7 +625,7 @@
         vg.id_,cg.id_
     </select>
     <select id="countGroupCourses" resultType="java.lang.Integer">
-        SELECT COUNT(DISTINCT mg.id_)
+        SELECT COUNT(DISTINCT cgtm.id_)
         FROM class_group_teacher_mapper cgtm
         LEFT JOIN music_group mg ON cgtm.music_group_id_ = mg.id_
         LEFT JOIN class_group cg ON cg.id_ = cgtm.class_group_id_
@@ -1098,7 +1100,7 @@
         WHERE su.id_ IS NOT NULL
     </select>
     <select id="findByGroupAndType" resultMap="ClassGroup">
-        SELECT * FROM class_group WHERE music_group_id_=#{groupId} AND group_type_=#{groupType}
+        SELECT * FROM class_group WHERE music_group_id_=#{groupId} AND group_type_=#{groupType} LIMIT 1
     </select>
 
     <update id="batchUpdateStudentNumMinusOne" parameterType="java.util.List">
@@ -1295,4 +1297,7 @@
         </if>
         AND type_ IN ('HIGH','HIGH_ONLINE') AND del_flag_ = '0'
     </select>
+    <select id="queryClassGroups" resultMap="ClassGroup">
+        SELECT cg.* FROM class_group cg WHERE cg.music_group_id_ = #{practiceGroupId} AND cg.group_type_ = #{groupType}
+    </select>
 </mapper>

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

@@ -83,6 +83,12 @@
         UPDATE class_group_teacher_mapper SET user_id_ = #{teacherId},update_time_ = NOW()
         WHERE teacher_role_ = 'BISHOP' AND music_group_id_ = #{groupId} AND group_type_ = #{groupType}
     </update>
+    <update id="batchUpdateTeacherByClassId">
+      UPDATE class_group_teacher_mapper SET user_id_ = #{newTeacherId},update_time_ = NOW() WHERE user_id_ = #{oldTeacherId} AND class_group_id_ IN
+        <foreach collection="classGroupIds" item="item" open="(" close=")" separator=",">
+            #{item}
+        </foreach>
+    </update>
 
     <!-- 根据主键删除一条记录 -->
     <delete id="delete">

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

@@ -53,8 +53,10 @@
         <result column="name_" property="classGroupName"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="school_name_" property="schoolName"/>
-        <result column="sign_in_status_" property="signInStatusEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="sign_out_status_" property="signOutStatusEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="sign_in_status_enum_" property="signInStatusEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="sign_out_status_enum_" property="signOutStatusEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="sign_in_status_" property="signInStatus"/>
+        <result column="sign_out_status_" property="signOutStatus"/>
         <result column="sign_in_time_" property="signInTime"/>
         <result column="sign_out_time_" property="signOutTime"/>
         <result column="is_complaints_" property="isComplaints"/>
@@ -623,8 +625,10 @@
         cg.expect_student_num_,
         cs.schoole_id_,
         s.name_ school_name_,
-        if(ta.sign_in_status_ IS NULL,0,1) sign_in_status_,
-        if(ta.sign_out_status_ IS NULL,0,1) sign_out_status_,
+        IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_enum_,
+        IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_enum_,
+        IF(ta.sign_in_status_ IS NULL,0,1) sign_in_status_,
+        IF(ta.sign_out_status_ IS NULL,0,1) sign_out_status_,
         cs.teach_mode_
         FROM
         course_schedule_teacher_salary csts
@@ -703,8 +707,10 @@
                csts.teacher_role_,
                cs.schoole_id_,
                s.name_                                           school_name_,
-               IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
-               IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_,
+               IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_enum_,
+               IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_enum_,
+               IF(ta.sign_in_status_ IS NULL,0,1) sign_in_status_,
+               IF(ta.sign_out_status_ IS NULL,0,1) sign_out_status_,
                ta.is_complaints_,
                ta.sign_out_time_,
                ta.sign_in_time_,
@@ -1782,7 +1788,7 @@
                cs.leave_student_num_,
                cs.schoole_id_
         FROM course_schedule cs
-        WHERE cs.class_date_ &lt;= DATE_FORMAT(#{date}, '%Y-%m-%d')
+        WHERE cs.class_date_ BETWEEN #{startDate} AND #{endDate}
           AND cs.group_type_ = 'MUSIC'
           AND (cs.del_flag_ IS NULL OR cs.del_flag_ = 0)
     </select>
@@ -2255,24 +2261,24 @@
 
     <select id="endFindCourseSchedules" resultMap="CourseScheduleEndDto">
         SELECT
-            cs.id_,
-            cs.group_type_,
-            cs.music_group_id_,
-            cs.class_group_id_,
-            cs.status_,
-            cs.name_,
-            CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
-            CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
-            cs.actual_teacher_id_,
-            cs.teach_mode_,
-            cs.type_,
-            cs.schoole_id_,
-            s.name_ schoole_name_,
-            o.name_ organ_name_
+        cs.id_,
+        cs.group_type_,
+        cs.music_group_id_,
+        cs.class_group_id_,
+        cs.status_,
+        cs.name_,
+        CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
+        CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
+        cs.actual_teacher_id_,
+        cs.teach_mode_,
+        cs.type_,
+        cs.schoole_id_,
+        s.name_ schoole_name_,
+        o.name_ organ_name_
         FROM
-            course_schedule cs
-            LEFT JOIN school s ON cs.schoole_id_=s.id_
-            LEFT JOIN organization o ON cs.organ_id_=o.id_
+        course_schedule cs
+        LEFT JOIN school s ON cs.schoole_id_=s.id_
+        LEFT JOIN organization o ON cs.organ_id_=o.id_
         <include refid="endFindCourseSchedulesCondition"/>
         ORDER BY course_start_time_,cs.id_
         <include refid="global.limit"/>
@@ -2856,14 +2862,14 @@
     </resultMap>
     <select id="findCourseRate" resultMap="CourseScheduleRateDtoMap">
         SELECT cs.class_date_,
-               cs.start_class_time_,
-               cs.end_class_time_,
-               cs.id_,
-               cs.teaching_content_,
-               GROUP_CONCAT(cse.comment_ SEPARATOR ";") comment_,
-               cs.status_
+        cs.start_class_time_,
+        cs.end_class_time_,
+        cs.id_,
+        cs.teaching_content_,
+        GROUP_CONCAT(cse.comment_ SEPARATOR ";") comment_,
+        cs.status_
         FROM course_schedule cs
-                 LEFT JOIN course_schedule_evaluate cse ON cs.id_ = cse.course_schedule_id_
+        LEFT JOIN course_schedule_evaluate cse ON cs.id_ = cse.course_schedule_id_
         WHERE cs.group_type_ = #{groupType}
         <if test="groupId != null">
             AND cs.music_group_id_ = #{groupId}
@@ -3054,18 +3060,18 @@
     </select>
     <select id="countStudentVipCoursesWithDate" resultType="map">
         SELECT
-          cssp.user_id_ as 'key',
-          COUNT( cs.id_ ) as 'value'
+        cssp.user_id_ as 'key',
+        COUNT( cs.id_ ) as 'value'
         FROM
-            course_schedule_student_payment cssp
-            LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        course_schedule_student_payment cssp
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         WHERE
-            cssp.user_id_ IN
-            <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
-                #{studentId}
-            </foreach>
-            AND cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-            AND cs.class_date_ BETWEEN #{startTime} AND #{endTime}
+        cssp.user_id_ IN
+        <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+            #{studentId}
+        </foreach>
+        AND cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        AND cs.class_date_ BETWEEN #{startTime} AND #{endTime}
         GROUP BY
         cssp.user_id_
     </select>
@@ -3091,11 +3097,11 @@
 
     <select id="countStudentVipCoursesInFuture" resultType="map">
         SELECT
-          cssp.user_id_ as 'key',
-          COUNT( cs.id_ ) as 'value'
+        cssp.user_id_ as 'key',
+        COUNT( cs.id_ ) as 'value'
         FROM
-          course_schedule_student_payment cssp
-          LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        course_schedule_student_payment cssp
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         WHERE
         cssp.user_id_ IN
         <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
@@ -3106,5 +3112,42 @@
         GROUP BY
         cssp.user_id_
     </select>
+    <select id="queryNoStartCourseByTeacherId" resultMap="CourseSchedule">
+        SELECT cs.id_,
+               cs.music_group_id_,
+               cs.group_type_,
+               cs.class_group_id_,
+               cs.status_,
+               cs.subsidy_,
+               cs.class_date_,
+               CONCAT(cs.class_date_, ' ', cs.start_class_time_) start_class_time_,
+               CONCAT(cs.class_date_, ' ', cs.end_class_time_)   end_class_time_,
+               cs.teacher_id_,
+               cs.actual_teacher_id_,
+               cs.create_time_,
+               cs.update_time_,
+               cs.teach_mode_,
+               cs.type_,
+               cs.name_,
+               cs.student_num_,
+               cs.leave_student_num_,
+               cs.teaching_content_,
+               cs.note_,
+               cs.schoole_id_,
+               cs.organ_id_ FROM course_schedule cs
+        LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
+        WHERE FIND_IN_SET(cs.class_group_id_,#{classGroupIds}) AND csts.teacher_role_ = #{teacherRole}
+        AND csts.user_id_ = #{teacherId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW() AND cs.del_flag_ = 0
+    </select>
+    <select id="queryHasReatClass" resultType="java.util.Map">
+        SELECT cgtm.class_group_id_ 'key',CASE WHEN COUNT(cs.id_) > 0 THEN 1 ELSE 0 END 'value'
+        FROM class_group_teacher_mapper cgtm
+        LEFT JOIN course_schedule cs ON cs.class_group_id_ = cgtm.class_group_id_ AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW() AND cs.del_flag_ = 0
+        WHERE cgtm.user_id_ = #{teacherId} AND cgtm.group_type_ = 'MUSIC' AND cgtm.class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" separator="," open="(" close=")">
+            #{classGroupId}
+        </foreach>
+        GROUP BY cgtm.class_group_id_
+    </select>
 
 </mapper>

+ 20 - 21
mec-biz/src/main/resources/config/mybatis/CourseScheduleReviewMapper.xml

@@ -40,7 +40,9 @@
         where id_ = #{id,jdbcType=INTEGER}
     </delete>
     <delete id="delByCourseScheduleId">
-        DELETE FROM course_schedule_review WHERE course_schedule_id_ = #{courseScheduleId}
+        DELETE
+        FROM course_schedule_review
+        WHERE course_schedule_id_ = #{courseScheduleId}
     </delete>
     <delete id="delByCourseScheduleIds">
         DELETE FROM course_schedule_review WHERE course_schedule_id_ IN
@@ -318,6 +320,7 @@
         LEFT JOIN course_schedule cs on cs.id_ = csr.course_schedule_id_
         LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
         <include refid="practiceGroupReviews4EduQueryCondition"/>
+        ORDER BY cs.class_date_ DESC
         <include refid="global.limit"/>
     </select>
 
@@ -333,7 +336,7 @@
         FROM course_schedule_review
         WHERE course_schedule_id_ = #{courseScheduleId}
         <if test="studentId != null">
-          AND student_id_ = #{studentId}
+            AND student_id_ = #{studentId}
         </if>
     </select>
 
@@ -388,17 +391,16 @@
     </select>
 
     <select id="getOnlineCourseReviewList" resultMap="CourseReviewDto">
-        SELECT cs.id_,cs.class_date_,cs.name_ course_name_,csr.id_ review_id_, csc.score_ student_review_,
+        SELECT cs.id_,cs.class_date_,cs.name_ course_name_,csr.id_ review_id_,
         csr.hand_homework_,csr.course_review_,csr.teaching_material_,csr.pronunciation_,csr.tempo_,
-        csr.music_theory_,csr.song_,csr.memo_,csr.create_time_,csr.has_liaison_,csr.update_time_,sa.id_
-        attendance_id_,sch.is_replied_ home_work_replied_,
-        CASE WHEN sch.id_ IS NULL THEN 0 ELSE 1 END assign_homework_
+        csr.music_theory_,csr.song_,csr.memo_,csr.create_time_,csr.has_liaison_,csr.update_time_,
+        sa.id_ attendance_id_
         FROM course_schedule cs
         LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
         LEFT JOIN course_schedule_review csr on cs.id_ = csr.course_schedule_id_
-        LEFT JOIN course_schedule_complaints csc on csc.course_schedule_id_ = cs.id_
-        LEFT JOIN student_attendance sa on sa.course_schedule_id_ = cs.id_
-        LEFT JOIN student_course_homework sch on cs.id_ = sch.course_schedule_id_
+        LEFT JOIN (
+        SELECT course_schedule_id_,id_ FROM student_attendance LIMIT 1
+        ) sa ON sa.course_schedule_id_ = cs.id_
         <include refid="courseReviewsQueryCondition"/>
         ORDER BY cs.class_date_ DESC
         <include refid="global.limit"/>
@@ -407,15 +409,16 @@
     <select id="countOnlineCourseReviews" resultType="java.lang.Integer">
         SELECT count(*) FROM course_schedule cs
         LEFT JOIN course_schedule_review csr on cs.id_ = csr.course_schedule_id_
-        LEFT JOIN course_schedule_complaints csc on csc.course_schedule_id_ = cs.id_
-        LEFT JOIN student_attendance sa on sa.course_schedule_id_ = cs.id_
-        LEFT JOIN student_course_homework sch on cs.id_ = sch.course_schedule_id_
+        LEFT JOIN(
+        SELECT course_schedule_id_,id_ FROM student_attendance LIMIT 1
+        ) sa ON sa.course_schedule_id_ = cs.id_
         <include refid="courseReviewsQueryCondition"/>
     </select>
 
     <sql id="courseReviewsQueryCondition">
         <where>
-            AND cs.type_ IN ('PRACTICE','VIP') AND cs.teach_mode_='ONLINE' AND cs.status_='OVER' AND (cs.del_flag_ = 0 OR cs.del_flag_ IS NULL)
+            AND cs.type_ IN ('PRACTICE','VIP') AND cs.teach_mode_='ONLINE' AND cs.status_='OVER' AND (cs.del_flag_ = 0
+            OR cs.del_flag_ IS NULL)
             <if test="search!=null and search!=''">
                 AND (cs.name_ LIKE CONCAT('%',#{search},'%') OR cs.id_= #{search})
             </if>
@@ -467,20 +470,16 @@
             <if test='hasArrived !=null and hasArrived=="0"'>
                 AND sa.id_ IS NULL
             </if>
-            <if test='homeWorkReplied !=null and homeWorkReplied =="1"'>
-                AND sch.is_replied_ > 0
-            </if>
-            <if test='homeWorkReplied !=null and homeWorkReplied =="0"'>
-                AND (sch.is_replied_ = 0 OR sch.is_replied_ IS NULL)
-            </if>
         </where>
     </sql>
 
     <select id="getVipCourseReviewList" resultMap="CourseReviewDto">
-        SELECT cs.id_,cs.actual_teacher_id_ teacher_id ,cs.class_date_, (SELECT group_concat(name_) FROM subject sb WHERE FIND_IN_SET(id_,cg.subject_id_list_)) AS
+        SELECT cs.id_,cs.actual_teacher_id_ teacher_id ,cs.class_date_, (SELECT group_concat(name_) FROM subject sb
+        WHERE FIND_IN_SET(id_,cg.subject_id_list_)) AS
         subject_name_ ,vg.organ_id_,cs.name_
         course_name_,su.real_name_ teacher_name_,edsu.real_name_
-        edu_teacher_name_,csr.id_ review_id_,csr.hand_homework_,csr.course_review_,csr.teaching_material_,csr.pronunciation_,csr.tempo_,
+        edu_teacher_name_,csr.id_
+        review_id_,csr.hand_homework_,csr.course_review_,csr.teaching_material_,csr.pronunciation_,csr.tempo_,
         csr.music_theory_,csr.song_,csr.memo_,csr.create_time_,csr.has_liaison_,csr.update_time_,
         CASE WHEN ch.id_ IS NULL THEN 0 ELSE 1 END assign_homework_
         FROM course_schedule cs

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

@@ -464,4 +464,33 @@
 		SELECT cssp.open_play_midi_ FROM course_schedule_student_payment cssp
 		WHERE cssp.user_id_ = #{userId} AND cssp.course_schedule_id_ = #{courseScheduleId}
 	</select>
+
+    <select id="findGroupCoursesUnitPrice" resultType="java.util.Map">
+		SELECT
+			music_group_id_ AS 'key',
+			CONVERT ( SUM( expect_price_ ) / COUNT(DISTINCT course_schedule_id_ ), DECIMAL ( 10, 2 ) ) AS 'value'
+		FROM
+			course_schedule_student_payment
+		WHERE
+			group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			AND music_group_id_ IN
+			<foreach collection="groupIds" item="groupId" separator="," open="(" close=")">
+				#{groupId}
+			</foreach>
+		GROUP BY
+			music_group_id_;
+	</select>
+    <resultMap id="RongyunBasicUserDto" type="com.ym.mec.biz.dal.dto.RongyunBasicUserDto">
+        <result property="userName" column="username_"/>
+        <result property="userId" column="user_id_"/>
+        <result property="headUrl" column="avatar_"/>
+    </resultMap>
+    <select id="queryNoJoinStu" resultMap="RongyunBasicUserDto">
+		SELECT CASE WHEN su.username_ IS NULL THEN su.real_name_ ELSE su.username_ END username_,
+		su.avatar_,cssp.user_id_
+		FROM course_schedule_student_payment cssp
+		LEFT JOIN sys_user su ON su.id_ = cssp.user_id_
+		WHERE cssp.course_schedule_id_ = #{courseScheduleId}
+		AND NOT EXISTS (SELECT * FROM rongyun_room_member rrm WHERE rrm.rid = #{roomId} AND rrm.uid = cssp.user_id_)
+	</select>
 </mapper>

+ 22 - 7
mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml

@@ -273,8 +273,8 @@
 		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
 		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
 		WHERE 1=1
-		<if test="days!=null">
-			AND cs.class_date_ &lt;= DATE_FORMAT(DATE_ADD( NOW( ), INTERVAL - #{days} DAY ),'%Y-%m-%d')
+		<if test="startDate != null">
+			AND cs.class_date_ BETWEEN #{startDate} AND #{endDate}
 		</if>
 		AND cs.group_type_ = 'VIP' AND vg.organ_id_ != 41
 		AND csts.settlement_time_ IS NULL
@@ -303,10 +303,10 @@
 		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
 		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
 		WHERE ta.id_ IS NOT NULL
-		<if test="days!=null">
-			AND cs.class_date_ &lt;= DATE_FORMAT(DATE_ADD( NOW( ), INTERVAL - #{days} DAY ),'%Y-%m-%d')
+		<if test="startDate != null">
+			AND cs.class_date_ BETWEEN #{startDate} AND #{endDate}
 		</if>
-		AND cs.type_ = #{groupType}
+		AND cs.type_ = 'PRACTICE'
 		AND csts.settlement_time_ IS NULL
 		AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
     </select>
@@ -477,8 +477,14 @@
 			#{id}
 		</foreach>
 	</update>
+    <update id="batchUpdateCourseSalarys">
+		UPDATE course_schedule_teacher_salary SET expect_salary_ = #{salary} WHERE course_schedule_id_ IN
+		<foreach collection="courseIds" item="courseId" separator="," open="(" close=")">
+			#{courseId}
+		</foreach>
+	</update>
 
-	<select id="findCourseScheduleTeacherSalaryByMusicGroupId" resultMap="CourseScheduleTeacherSalary">
+    <select id="findCourseScheduleTeacherSalaryByMusicGroupId" resultMap="CourseScheduleTeacherSalary">
 		SELECT * FROM course_schedule_teacher_salary WHERE music_group_id_=#{musicGroupId} AND group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 	</select>
 	<select id="countActualAmount" resultType="java.util.Map">
@@ -632,7 +638,8 @@
 		CASE WHEN t.job_nature_ = 'PART_TIME' THEN '兼职' WHEN t.job_nature_ = 'FULL_TIME' THEN '全职' ELSE '零时工' END jobType,
 		CASE WHEN cs.type_ = 'SINGLE' THEN '单技课' WHEN cs.type_ = 'MIX' THEN '合奏课' WHEN cs.type_ = 'HIGH' THEN '小班课'  WHEN cs.type_ = 'VIP' THEN 'vip课'
 		WHEN cs.type_ = 'DEMO' THEN '试听课'  WHEN cs.type_ = 'COMPREHENSIVE' THEN '综合课'  WHEN cs.type_ = 'PRACTICE' THEN '练习课'  WHEN cs.type_ = 'ENLIGHTENMENT' THEN '启蒙课'
-		WHEN cs.type_ = 'TRAINING_SINGLE' THEN '集训单技课'  WHEN cs.type_ = 'TRAINING_MIX' THEN '集训合奏课'  ELSE '课堂课' END courseScheduleType,
+		WHEN cs.type_ = 'TRAINING_SINGLE' THEN '集训单技课'  WHEN cs.type_ = 'TRAINING_MIX' THEN '集训合奏课' WHEN cs.type_ = 'CLASSROOM' THEN '课堂课'
+		WHEN cs.type_ = 'COMM' THEN '对外课程'  WHEN cs.type_ = 'HIGH_ONLINE' THEN '线上基础技能课'  ELSE '乐团网管课' END courseScheduleType,
 		cs.class_date_ classDate,cs.start_class_time_ courseScheduleStartTime,cs.end_class_time_ courseScheduleEndTime,
 		ROUND((UNIX_TIMESTAMP(cs.end_class_time_)-UNIX_TIMESTAMP(cs.start_class_time_))/60) signCourseScheduleTime,
 		ts.actual_salary_ price,CASE WHEN s.name_ IS NULL THEN '网络教室' ELSE s.name_ END address,
@@ -959,4 +966,12 @@
 			#{courseScheduleId}
 		</foreach>
 	</select>
+    <select id="queryTeacherByTeaching" resultType="java.lang.Integer">
+		SELECT DISTINCT cgtm.user_id_ FROM class_group_teacher_mapper cgtm
+		WHERE cgtm.class_group_id_ = #{classGroupId} AND cgtm.teacher_role_ = 'TEACHING' AND cgtm.group_type_ = 'MUSIC';
+	</select>
+    <select id="queryTeacherByBishop" resultType="java.lang.Integer">
+		SELECT DISTINCT cgtm.user_id_ FROM class_group_teacher_mapper cgtm
+		WHERE cgtm.class_group_id_ = #{classGroupId} AND cgtm.teacher_role_ = 'BISHOP' AND cgtm.group_type_ = 'MUSIC';
+	</select>
 </mapper>

+ 70 - 0
mec-biz/src/main/resources/config/mybatis/CoursesGroupModifyLogDao.xml

@@ -0,0 +1,70 @@
+<?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.CoursesGroupModifyLogDao">
+
+    <resultMap type="com.ym.mec.biz.dal.entity.CoursesGroupModifyLog" id="CoursesGroupModifyLog">
+        <result column="id_" property="id"/>
+        <result column="group_id_" property="groupId"/>
+        <result column="group_type_" property="groupType"/>
+        <result column="operator_id_" property="operatorId"/>
+        <result column="previous_group_" property="previousGroup"/>
+        <result column="current_group_" property="currentGroup"/>
+        <result column="create_time_" property="createTime"/>
+    </resultMap>
+
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="CoursesGroupModifyLog">
+		SELECT * FROM courses_group_modify_log WHERE id_ = #{id}
+	</select>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="CoursesGroupModifyLog">
+		SELECT * FROM courses_group_modify_log ORDER BY id_
+	</select>
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CoursesGroupModifyLog" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        INSERT INTO courses_group_modify_log (group_id_,group_type_,operator_id_,previous_group_,current_group_,create_time_)
+        VALUES(#{groupId},#{groupType},#{operatorId},#{previousGroup},#{currentGroup},now())
+    </insert>
+
+    <!-- 根据主键查询一条记录 -->
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.CoursesGroupModifyLog">
+        UPDATE courses_group_modify_log
+        <set>
+            <if test="groupId != null">
+                group_id_ = #{groupId},
+            </if>
+            <if test="groupType != null">
+                group_type_ = #{groupType},
+            </if>
+            <if test="operatorId != null">
+                operator_id_ = #{operatorId},
+            </if>
+            <if test="previousGroup != null">
+                previous_group_ = #{previousGroup},
+            </if>
+            <if test="currentGroup != null">
+                current_group_ = #{currentGroup},
+            </if>
+        </set>
+        WHERE id_ = #{id}
+    </update>
+
+    <!-- 根据主键删除一条记录 -->
+    <delete id="delete">
+	</delete>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="CoursesGroupModifyLog" parameterType="map">
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+	</select>
+</mapper>

+ 126 - 0
mec-biz/src/main/resources/config/mybatis/DegreeRegistrationMapper.xml

@@ -0,0 +1,126 @@
+<?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.DegreeRegistrationDao">
+  <resultMap id="DegreeRegistration" type="com.ym.mec.biz.dal.entity.DegreeRegistration">
+    <!--@mbg.generated-->
+    <!--@Table degree_registration-->
+    <id column="id_" jdbcType="INTEGER" property="id" />
+    <result column="sporadic_id_" jdbcType="INTEGER" property="sporadicId" />
+    <result column="name_" jdbcType="VARCHAR" property="name" />
+    <result column="gender_" jdbcType="VARCHAR" property="gender" />
+    <result column="idcard_" jdbcType="VARCHAR" property="idcard" />
+    <result column="city_" jdbcType="VARCHAR" property="city" />
+    <result column="school_" jdbcType="VARCHAR" property="school" />
+    <result column="subject_" jdbcType="VARCHAR" property="subject" />
+    <result column="level_" jdbcType="VARCHAR" property="level" />
+    <result column="theory_level_" jdbcType="VARCHAR" property="theoryLevel" />
+    <result column="theory_money_" jdbcType="DECIMAL" property="theoryMoney" />
+    <result column="mobile_" jdbcType="VARCHAR" property="mobile" />
+    <result column="money_" jdbcType="DECIMAL" property="money" />
+    <result column="memo_" jdbcType="VARCHAR" property="memo" />
+    <result column="create_time_" jdbcType="TIMESTAMP" property="createTime" />
+    <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime" />
+    <result column="status_" jdbcType="TINYINT" property="status" />
+  </resultMap>
+
+  <select id="get" parameterType="java.lang.Integer" resultMap="DegreeRegistration">
+    select * from degree_registration where id_ = #{id,jdbcType=INTEGER}
+  </select>
+
+  <!-- 全查询 -->
+  <select id="findAll" resultMap="DegreeRegistration">
+    SELECT *
+    FROM degree_registration
+    ORDER BY id_
+  </select>
+
+  <!-- 分页查询 -->
+  <select id="queryPage" resultMap="DegreeRegistration" parameterType="map">
+    SELECT * FROM degree_registration ORDER BY id_ <include refid="global.limit"/>
+  </select>
+
+  <!-- 查询当前表的总记录数 -->
+  <select id="queryCount" resultType="int">
+    SELECT COUNT(*) FROM degree_registration
+  </select>
+
+  <delete id="delete" parameterType="java.lang.Integer">
+    delete from degree_registration
+    where id_ = #{id,jdbcType=INTEGER}
+  </delete>
+  <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration" useGeneratedKeys="true">
+    <!--@mbg.generated-->
+    insert into degree_registration (sporadic_id_, name_, gender_, 
+      idcard_, city_, school_, 
+      subject_,level_, theory_level_,theory_money_, mobile_,
+      money_, memo_, create_time_, 
+      update_time_, status_)
+    values (#{sporadicId,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{gender,jdbcType=VARCHAR}, 
+      #{idcard,jdbcType=VARCHAR}, #{city,jdbcType=VARCHAR}, #{school,jdbcType=VARCHAR}, 
+      #{subject,jdbcType=VARCHAR},#{level,jdbcType=VARCHAR}, #{theoryLevel,jdbcType=VARCHAR},#{theoryMoney,jdbcType=DECIMAL}, #{mobile,jdbcType=VARCHAR},
+      #{money,jdbcType=DECIMAL}, #{memo,jdbcType=VARCHAR}, #{createTime},
+      #{updateTime}, #{status,jdbcType=TINYINT})
+  </insert>
+  <update id="update" parameterType="com.ym.mec.biz.dal.entity.DegreeRegistration">
+    <!--@mbg.generated-->
+    update degree_registration
+    <set>
+      <if test="sporadicId != null">
+        sporadic_id_ = #{sporadicId,jdbcType=INTEGER},
+      </if>
+      <if test="name != null">
+        name_ = #{name,jdbcType=VARCHAR},
+      </if>
+      <if test="gender != null">
+        gender_ = #{gender,jdbcType=VARCHAR},
+      </if>
+      <if test="idcard != null">
+        idcard_ = #{idcard,jdbcType=VARCHAR},
+      </if>
+      <if test="city != null">
+        city_ = #{city,jdbcType=VARCHAR},
+      </if>
+      <if test="school != null">
+        school_ = #{school,jdbcType=VARCHAR},
+      </if>
+      <if test="subject != null">
+        subject_ = #{subject,jdbcType=VARCHAR},
+      </if>
+      <if test="level != null">
+        level_ = #{level,jdbcType=VARCHAR},
+      </if>
+      <if test="theoryLevel != null">
+        theory_level_ = #{theoryLevel,jdbcType=VARCHAR},
+      </if>
+      <if test="theoryLevel != null">
+        theory_money_ = #{theoryMoney,jdbcType=DECIMAL},
+      </if>
+      <if test="mobile != null">
+        mobile_ = #{mobile,jdbcType=VARCHAR},
+      </if>
+      <if test="money != null">
+        money_ = #{money,jdbcType=DECIMAL},
+      </if>
+      <if test="memo != null">
+        memo_ = #{memo,jdbcType=VARCHAR},
+      </if>
+      <if test="createTime != null">
+        create_time_ = #{createTime},
+      </if>
+      <if test="updateTime != null">
+        update_time_ = #{updateTime},
+      </if>
+      <if test="status != null">
+        status_ = #{status,jdbcType=INTEGER},
+      </if>
+    </set>
+    where id_ = #{id,jdbcType=INTEGER}
+  </update>
+
+  <select id="findByMobileAndSporadicId" resultMap="DegreeRegistration">
+    SELECT * FROM degree_registration WHERE mobile_ = #{mobile} AND sporadic_id_ = #{sporadicId} FOR UPDATE
+  </select>
+  <select id="getLock" resultMap="DegreeRegistration">
+    SELECT * FROM degree_registration WHERE id_ = #{id} FOR UPDATE
+  </select>
+</mapper>

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

@@ -490,4 +490,17 @@
 			DATE_FORMAT( eer.create_time_, '%Y-%m-%d' ) BETWEEN #{startDate} AND #{endDate}
 	</select>
 
+	<select id="checkStudentHaveExercisesInDateRange" resultType="java.lang.Integer">
+		SELECT
+			DISTINCT user_id_
+		FROM
+			extracurricular_exercises_reply
+		WHERE
+			DATE_FORMAT( create_time_, '%Y-%m-%d' ) BETWEEN #{startDate} AND #{endDate}
+			AND user_id_ IN
+			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+				#{studentId}
+			</foreach>
+	</select>
+
 </mapper>

+ 9 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderDetailMapper.xml

@@ -154,6 +154,15 @@
 	<delete id="delete">
 		DELETE FROM music_group_payment_calender_detail WHERE id_ = #{id}
 	</delete>
+	<delete id="batchDel">
+		DELETE FROM music_group_payment_calender_detail WHERE FIND_IN_SET(id_,#{musicGroupPaymentCalenderIds})
+	</delete>
+	<delete id="deleteByUserIdAndMusicGroupId">
+		DELETE FROM music_group_payment_calender_detail
+		WHERE music_group_payment_calender_id_ IN (SELECT mgpc.id_ FROM music_group_payment_calender mgpc
+		WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpc.payment_status_ != 2)
+		AND user_id_ = #{userId} AND payment_status_ = 'NON_PAYMENT'
+	</delete>
 
 	<!-- 分页查询 -->
 	<select id="queryPage" resultMap="MusicGroupPaymentCalenderDetail"

+ 28 - 0
mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml

@@ -228,6 +228,34 @@
     </select>
     <select id="queryByMusicGroupId" resultMap="MusicGroupStudentFee">
         SELECT * FROM music_group_student_fee_ WHERE music_group_id_ = #{musicGroupId}
+        <if test="studentIds != null and studentIds != ''">
+            AND FIND_IN_SET(user_id_,#{studentIds})
+        </if>
+    </select>
+    <resultMap id="FeeStudentDto" type="com.ym.mec.biz.dal.dto.FeeStudentDto">
+        <result property="userId" column="id_"/>
+        <result property="username" column="username_"/>
+        <result property="musicGroupId" column="music_group_id_"/>
+        <result property="subjectName" column="name_"/>
+        <result property="courseFee" column="course_fee_"/>
+        <result property="gender" column="gender_"/>
+        <result property="gender" column="gender_"/>
+        <result property="id" column="music_group_student_fee_id_"/>
+    </resultMap>
+    <select id="queryFeeStudents" resultMap="FeeStudentDto">
+        SELECT su.id_,su.username_,su.gender_,s.name_,mgsf.course_fee_,mgsf.music_group_id_,mgsf.id_ music_group_student_fee_id_
+        FROM music_group_student_fee_ mgsf
+        LEFT JOIN student_registration sr ON sr.music_group_id_ = mgsf.music_group_id_
+        LEFT JOIN sys_user su ON su.id_ = mgsf.user_id_
+        LEFT JOIN `subject` s ON s.id_ = mgsf.subject_id_
+        WHERE mgsf.music_group_id_ = #{musicGroupId} AND sr.user_id_ = mgsf.user_id_ AND sr.music_group_status_ = 'NORMAL'
+        <if test="search != null and search != ''">
+            AND (su.id_ = #{search} OR su.username_ LIKE CONCAT('%',#{search},'%')
+            OR su.phone_ LIKE CONCAT('%',#{search},'%'))
+        </if>
+        <if test="subjectId != null">
+            AND mgsf.subject_id_ = #{subjectId}
+        </if>
     </select>
 
     <update id="batchUpdate" parameterType="java.util.List">

+ 5 - 4
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -54,6 +54,7 @@
         <result column="teacher_name_" property="teacherName"/>
         <result column="evaluate_id_" property="evaluateId"/>
         <result column="evaluate_status_" property="evaluateStatus"/>
+        <result column="hasRestClass" property="hasRestClass"/>
     </resultMap>
     <update id="updateUserId">
         UPDATE practice_group
@@ -71,6 +72,9 @@
             <if test="memo!=null">
                 memo_=#{memo},
             </if>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
             <if test="name!=null">
                 name_=#{name},
             </if>
@@ -184,7 +188,7 @@
         practice_group pg
         LEFT JOIN sys_user su ON pg.user_id_ = su.id_
         <include refid="practiceGroupQueryCondition"/>
-        ORDER BY pg.id_ DESC
+        GROUP BY pg.id_ ORDER BY pg.id_ DESC
         <include refid="global.limit"/>
     </select>
     <select id="countPracticeGroupOverCourse" resultType="java.util.Map">
@@ -266,9 +270,6 @@
             <if test="groupStatus != null and groupStatus != ''">
                 AND pg.group_status_ = #{groupStatus}
             </if>
-            <if test="groupStatus == null or groupStatus == ''">
-                AND pg.group_status_ IN ('NORMAL', 'FINISH')
-            </if>
             <if test="organId != null">
                 AND FIND_IN_SET(pg.organ_id_,#{organId})
             </if>

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

@@ -15,6 +15,7 @@
 		<result column="update_time_" property="updateTime" />
 		<result column="operator_id_" property="operatorId" />
 		<result column="del_flag_" property="delFlag" />
+		<result column="open_flag_" property="openFlag" />
 		<result column="organ_name_" property="organName" />
 		<result column="user_id_" property="userId" />
 	</resultMap>
@@ -45,6 +46,9 @@
 			<if test="title != null">
 				title_ = #{title},
 			</if>
+			<if test="openFlag != null">
+				open_flag_ = #{openFlag},
+			</if>
 			<if test="chargeType != null">
 				charge_type_ = #{chargeType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
@@ -83,7 +87,7 @@
 		SELECT sci.* FROM sporadic_charge_info sci
 		LEFT JOIN sys_user su ON su.id_ = sci.user_id_
 		<include refid="queryPageSql"/>
-		ORDER BY sci.id_ DESC
+		<include refid="global.orderby"/>
 		<include refid="global.limit" />
 	</select>
 
@@ -102,6 +106,9 @@
 			<if test="type == 'common'">
 				AND sci.user_id_ IS NULL
 			</if>
+			<if test="openFlag != null">
+				AND sci.open_flag_ = #{openFlag}
+			</if>
 			<if test="search != null">
 				AND (sci.title_ LIKE CONCAT('%',#{search},'%') OR su.username_ LIKE CONCAT('%',#{search},'%'))
 			</if>

+ 14 - 0
mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml

@@ -364,6 +364,20 @@
                 #{studentId}
             </foreach>
     </select>
+    <select id="checkStudentHaveHomeworkInDateRange" resultType="java.lang.Integer">
+        SELECT
+            DISTINCT sch.user_id_
+        FROM
+            student_course_homework sch
+            LEFT JOIN course_schedule cs ON sch.course_schedule_id_ = cs.id_
+        WHERE
+            cs.class_date_ BETWEEN #{startDate}
+            AND #{endDate}
+            AND sch.user_id_ IN
+            <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+                #{studentId}
+            </foreach>
+    </select>
 
     <delete id="delByCourseScheduleId">
 		DELETE FROM student_course_homework WHERE course_schedule_id_ = #{courseScheduleId} 

+ 27 - 25
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -144,13 +144,14 @@
 			SUM( exercises_reply_num_ ) exercises_reply_num_,
 			SUM( exercises_message_num_ ) exercises_message_num_,
 			SUM( exercises_message_timely_num_ ) exercises_message_timely_num_,
+			MAX(last_submit_time_) last_submit_time_
 		</if>
 		<if test="submitStartDate!=null and submitEndDate!=null">
 			SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) exercises_reply_num_,
 			SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) exercises_message_num_,
 			SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) exercises_message_timely_num_,
+			MAX(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},last_submit_time_, NULL)) last_submit_time_
 		</if>
-		MAX(last_submit_time_) last_submit_time_
 		FROM
 		student_extracurricular_exercises_situation_ sees
 		LEFT JOIN sys_user stu ON stu.id_=sees.student_id_
@@ -193,42 +194,42 @@
 			</if>
 			<if test="submitStartDate==null or submitEndDate==null">
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					SUM( exercises_reply_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_reply_num_ ) &lt; SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					SUM( exercises_reply_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_reply_num_ ) &gt;= SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					SUM( exercises_message_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_num_ ) &lt; SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					SUM( exercises_message_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_num_ ) &gt;= SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					SUM( exercises_message_timely_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_timely_num_ ) &lt; SUM( exercises_message_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					SUM( exercises_message_timely_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_timely_num_ ) &gt;= SUM( exercises_message_num_ ) and
 				</if>
 			</if>
 			<if test="submitStartDate!=null and submitEndDate!=null">
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_reply_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &lt; SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_reply_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &gt;= SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_message_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &lt; SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_message_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &gt;= SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_message_timely_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &lt; SUM( exercises_message_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_message_timely_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &gt;= SUM( exercises_message_num_ ) and
 				</if>
 			</if>
 		</trim>
@@ -282,42 +283,42 @@
 			</if>
 			<if test="submitStartDate==null or submitEndDate==null">
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					SUM( exercises_reply_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_reply_num_ ) &lt; SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					SUM( exercises_reply_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_reply_num_ ) &gt;= SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					SUM( exercises_message_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_num_ ) &lt; SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					SUM( exercises_message_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_num_ ) &gt;= SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					SUM( exercises_message_timely_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_timely_num_ ) &lt; SUM( exercises_message_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					SUM( exercises_message_timely_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_timely_num_ ) &gt;= SUM( exercises_message_num_ ) and
 				</if>
 			</if>
 			<if test="submitStartDate!=null and submitEndDate!=null">
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_reply_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &lt; SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_reply_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &gt;= SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d')},exercises_message_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &lt; SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_message_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &gt;= SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_message_timely_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &lt; SUM( exercises_message_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN DATE_FORMAT(#{submitStartDate}, '%Y-%m-%d') AND DATE_FORMAT(#{submitEndDate}, '%Y-%m-%d'),exercises_message_timely_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &gt;= SUM( exercises_message_num_ ) and
 				</if>
 			</if>
 		</trim>
@@ -336,6 +337,7 @@
 		COUNT( CASE WHEN actual_exercises_num_ = 1 THEN 1 ELSE NULL END ) actualExercisesNum
 		FROM
 		student_extracurricular_exercises_situation_
+		FORCE INDEX(monday_)
 		WHERE monday_ = #{monday}
 		AND teacher_id_ IN
 		<foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">

+ 12 - 14
mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml

@@ -115,10 +115,11 @@
         SELECT su.id_ user_id_,su.username_,su.gender_,su.phone_ parents_phone_,su.real_name_,
         su.birthdate_,su.nation_,su.organ_id_,
         CASE WHEN su.password_ IS NULL THEN 0 ELSE 1 END isActive_,
-        IF(st.service_tag_=2,0,st.service_tag_) service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_
+        IF(st.service_tag_=2,0,st.service_tag_) service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_,suca.balance_
         FROM sys_user su
         LEFT JOIN student st ON st.user_id_ = su.id_
-        left join sys_user tu on tu.id_ = st.teacher_id_
+        LEFT JOIN sys_user tu ON tu.id_ = st.teacher_id_
+        LEFT JOIN sys_user_cash_account suca ON su.id_ = suca.user_id_
         <include refid="findStudentsByOrganIdSql"/>
         ORDER BY su.create_time_ DESC
         <include refid="global.limit"/>
@@ -273,7 +274,8 @@
                 AND sa.status_ = #{attendanceStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="attendanceStatus != null and attendanceStatus == @com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum@TRUANT">
-                AND (sa.status_ = #{attendanceStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} OR sa.status_ IS NULL)
+                AND (sa.status_ = #{attendanceStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+                OR (sa.status_ IS NULL AND cs.status_!='NOT_START'))
             </if>
             <if test="classGroupName!=null">
                 AND (cg.name_ LIKE CONCAT("%",#{classGroupName},"%") OR cs.name_ LIKE CONCAT("%",#{classGroupName},"%"))
@@ -294,7 +296,7 @@
             CONCAT(cs.class_date_," ",cs.end_class_time_) course_end_date_,
             cssp.course_schedule_id_,
             su.real_name_ teacher_name_,
-            IF(sa.status_ IS NULL,'TRUANT',sa.status_) status_,
+            IF(sa.status_ IS NULL AND cs.status_!='NOT_START','TRUANT',sa.status_) status_,
             sa.current_class_times_,
             cg.total_class_times_,
             cs.status_ courseStatus,
@@ -398,10 +400,7 @@
                 AND sr.music_group_status_ = #{studentStatus}
             </if>
             <if test="paymentStatus != null">
-                AND mgsf.payment_status_ = #{paymentStatus}
-            </if>
-            <if test="isLock != null">
-                AND mgsf.is_lock_ = #{isLock}
+                AND sr.payment_status_ = #{paymentStatus}
             </if>
             <if test="musicGroupId != null and musicGroupId != ''">
                 AND sr.music_group_id_ = #{musicGroupId}
@@ -422,7 +421,7 @@
         <result property="currentGrade" column="current_grade_"/>
         <result property="currentClass" column="current_class_"/>
         <result property="subjectName" column="subject_name_"/>
-        <result property="studentStatus" column="music_group_status_"/>
+        <result property="studentStatus" column="music_group_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="paymentStatus" column="payment_status_"/>
         <result property="musicGroupId" column="music_group_id_"/>
         <result property="isNewStudent" column="is_new_student_"/>
@@ -433,9 +432,9 @@
         <result property="paymentPeriodList" column="payment_period_list_"/>
     </resultMap>
     <select id="queryMusicGroupStudent" resultMap="MusicGroupStudentsDto">
-        SELECT sr.user_id_,su.username_ real_name_,su.gender_,su.phone_ parents_phone_,sr.current_grade_,mgsf.payment_status_,
-        sr.current_class_,sr.music_group_status_,mgsf.next_payment_date_,mgsf.course_fee_,mgsf.payment_period_list_,
-        s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,mgsf.is_lock_,
+        SELECT sr.user_id_,su.username_ real_name_,su.gender_,su.phone_ parents_phone_,sr.current_grade_,
+        sr.current_class_,sr.music_group_status_,sr.payment_status_,
+        s.name_ subject_name_,sr.music_group_id_,case when su.password_ is null then 0 else 1 end isActive_,
         IF(DATE_FORMAT(sr.create_time_,'%Y-%m-%d') > DATE_FORMAT(mg.payment_expire_date_,'%Y-%m-%d'),1,0) is_new_student_
         FROM student_registration sr
         LEFT JOIN sys_user su ON sr.user_id_ = su.id_
@@ -444,7 +443,6 @@
         <if test="classGroupId != null">
             LEFT JOIN class_group_student_mapper cgsm ON cgsm.music_group_id_ = sr.music_group_id_
         </if>
-        LEFT JOIN music_group_student_fee_ mgsf ON mgsf.music_group_id_ = mg.id_ AND mgsf.user_id_ = su.id_
         <include refid="queryMusicGroupStudentSql"/>
         ORDER BY sr.id_ DESC
         <include refid="global.limit"/>
@@ -459,7 +457,6 @@
         <if test="classGroupId != null">
             LEFT JOIN class_group_student_mapper cgsm ON cgsm.music_group_id_ = sr.music_group_id_
         </if>
-        LEFT JOIN music_group_student_fee_ mgsf ON mgsf.music_group_id_ = mg.id_ AND mgsf.user_id_ = su.id_
         <include refid="queryMusicGroupStudentSql"/>
     </select>
 
@@ -746,6 +743,7 @@
         <result property="organId" column="organ_id_"/>
         <result property="subjectName" column="music_group_subject_"/>
         <result property="courseBalance" column="course_balance_"/>
+        <result property="balance" column="balance_"/>
         <result property="serviceTag" column="service_tag_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="operatingTag" column="operating_tag_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="teacherName" column="teacher_name_"/>

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

@@ -56,7 +56,7 @@
         <if test="operatingTempTag != null">
             operating_temp_tag_,
         </if>
-        teacher_id_,create_time_,update_time_)
+        teacher_id_,create_time_,update_time_,service_tag_update_time_)
         VALUES
         (#{userId},#{subjectIdList},
         <if test="serviceTag != null">
@@ -65,7 +65,7 @@
         <if test="operatingTag != null">
             #{operatingTag},
         </if>
-        #{teacherId},NOW(),NOW())
+        #{teacherId},NOW(),NOW(),NOW())
     </insert>
 
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.Student">
@@ -75,6 +75,7 @@
                 subject_id_list_ = #{subjectIdList},
             </if>
             <if test="serviceTag != null">
+                service_tag_update_time_=IF(service_tag_ = #{serviceTag}, service_tag_update_time_, NOW()),
                 service_tag_ = #{serviceTag},
             </if>
             <if test="operatingTag != null">
@@ -86,12 +87,7 @@
             <if test="teacherId != null">
                 teacher_id_=#{teacherId},
             </if>
-            <if test="updateTime != null">
-                update_time_ = #{updateTime},
-            </if>
-            <if test="updateTime == null">
                 update_time_ = NOW()
-            </if>
         </set>
         WHERE user_id_ = #{userId}
     </update>
@@ -194,6 +190,7 @@
         UPDATE student
         <set>
             <if test="serviceTag != null">
+                service_tag_update_time_ = IF(service_tag_=#{serviceTag}, service_tag_update_time_, NOW()),
                 service_tag_ = #{serviceTag},
             </if>
             update_time_ = NOW()
@@ -210,6 +207,9 @@
             </foreach>
         </if>
     </update>
+    <update id="batchUpdateAdviser">
+      UPDATE student s SET s.teacher_id_ = #{teacherId},s.update_time_ = NOW() WHERE FIND_IN_SET(s.user_id_,#{studentIds})
+    </update>
 
     <resultMap id="student4operating" type="com.ym.mec.biz.dal.dto.Student4operating">
         <result column="organ_name_" property="organName"/>
@@ -447,6 +447,19 @@
         </foreach>
     </select>
     <select id="getServeStudentIds" resultType="int">
-        SELECT user_id_ FROM student WHERE service_tag_=1
+        SELECT user_id_
+        FROM student stu
+          LEFT JOIN sys_user su ON stu.user_id_=su.id_
+        WHERE service_tag_=1 AND su.del_flag_=0
+    </select>
+    <select id="getServeStudentCourseStartTimes" resultType="com.ym.mec.biz.dal.dto.StudentServeCourseDto">
+        SELECT
+            cssp.user_id_ studentId,
+            stu.service_tag_update_time_ serviceTagUpdateTime,
+            CONCAT(cs.class_date_, ' ', cs.start_class_time_) courseStartTime
+        FROM course_schedule_student_payment cssp
+            LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_
+            LEFT JOIN student stu ON cssp.user_id_ = stu.user_id_
+        WHERE stu.service_tag_=1 AND class_date_&gt;=#{monday}
     </select>
 </mapper>

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

@@ -610,4 +610,27 @@
         LEFT JOIN subject s ON sr.actual_subject_id_=s.id_
         WHERE sr.music_group_id_=#{musicGroupId} ORDER BY s.id_
     </select>
+    <resultMap id="getStudentDetail" type="com.ym.mec.biz.dal.dto.StudentMusicDetailDto">
+        <result property="gender" column="gender_"/>
+        <result property="username" column="username_"/>
+        <result property="userId" column="id_"/>
+        <result property="phone" column="phone_"/>
+        <result property="avatar" column="avatar_"/>
+        <result property="imToken" column="im_token_"/>
+        <collection property="musicGroups" ofType="com.ym.mec.biz.dal.entity.MusicGroup">
+            <result property="name" column="music_group_name_"/>
+            <result column="music_group_id_" property="id"/>
+            <result column="subject_name_" property="subjectName"/>
+        </collection>
+    </resultMap>
+    <select id="getStudentDetail" resultMap="getStudentDetail">
+        SELECT su.username_,su.gender_,su.phone_,su.avatar_,su.id_,su.im_token_,
+        mg.name_ music_group_name_,mg.id_ music_group_id_,sj.name_ subject_name_
+        FROM student s
+        LEFT JOIN music_group_student_fee_ mgsf ON mgsf.user_id_ = s.user_id_
+        LEFT JOIN music_group mg ON mg.id_ = mgsf.music_group_id_
+        LEFT JOIN `subject` sj ON sj.id_ = mgsf.subject_id_
+        LEFT JOIN sys_user su ON su.id_ = s.user_id_
+        WHERE s.user_id_ = #{studentId}
+    </select>
 </mapper>

+ 9 - 4
mec-biz/src/main/resources/config/mybatis/StudentRepairMapper.xml

@@ -29,6 +29,7 @@
         <result column="repair_status_" jdbcType="INTEGER" property="repairStatus"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="username_" jdbcType="VARCHAR" property="studentName"/>
     </resultMap>
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="StudentRepair">
@@ -138,6 +139,7 @@
         <if test="search">
             AND (username_ LIKE CONCAT(#{search},'%') OR phone_ LIKE CONCAT(#{search},'%'))
         </if>
+        AND del_flag_ = 0
         <include refid="global.limit"/>
     </select>
 
@@ -148,11 +150,13 @@
         <if test="search">
             AND (username_ LIKE CONCAT(#{search},'%') OR phone_ LIKE CONCAT(#{search},'%'))
         </if>
+        AND del_flag_ = 0
     </select>
 
     <select id="queryPage" resultMap="StudentRepair">
-        SELECT sr.*,o.name_ FROM student_repair sr
+        SELECT sr.*,o.name_,su.username_ FROM student_repair sr
         LEFT JOIN organization o ON o.id_ = sr.organ_id_
+        LEFT JOIN sys_user su on sr.student_id_ = su.id_
         <include refid="queryPageSql"/>
         ORDER BY id_ DESC
         <include refid="global.limit"/>
@@ -160,7 +164,7 @@
     <sql id="queryPageSql">
         <where>
             <if test="search != null and search != ''">
-                AND (sr.trans_no_ LIKE CONCAT('%',#{search},'%') OR sr.student_id_ = #{search} OR sr.student_name_ LIKE
+                AND (sr.trans_no_ LIKE CONCAT('%',#{search},'%') OR sr.student_id_ = #{search} OR su.username_ LIKE
                 CONCAT('%',#{search},'%'))
             </if>
             <if test="employeeId != null">
@@ -193,7 +197,8 @@
         </where>
     </sql>
     <select id="queryCount" resultType="int">
-        SELECT COUNT(id_) FROM student_repair sr
+        SELECT COUNT(*) FROM student_repair sr
+        LEFT JOIN sys_user su on sr.student_id_ = su.id_
         <include refid="queryPageSql"/>
     </select>
 
@@ -214,7 +219,7 @@
                su.gender_,
                mg.id_     music_group_id_,
                mg.name_   music_group_name_,
-               sr.subject_id_
+               sr.actual_subject_id_ subject_id_
         FROM sys_user su
                  LEFT JOIN student_registration sr ON sr.user_id_ = su.id_
                  LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_

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

@@ -210,7 +210,7 @@
 
     <sql id="queryCondition">
         <where>
-            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL) AND cs.actual_teacher_id_ = ta.teacher_id_
             <if test="teacherId != null">
                 AND cs.actual_teacher_id_ = #{teacherId}
             </if>
@@ -459,7 +459,7 @@
     <select id="queryTeacherExceptionAttendance" resultType="java.lang.Integer">
         SELECT DISTINCT ta.teacher_id_ FROM teacher_attendance ta
         LEFT JOIN course_schedule cs ON cs.id_ = ta.course_schedule_id_
-        WHERE cs.class_date_ = #{format} AND ta.teacher_id_ = cs.actual_teacher_id_
+        WHERE cs.class_date_ = #{format} AND ta.teacher_id_ = cs.actual_teacher_id_ AND CONCAT(cs.class_date_,' ',cs.end_class_time_) &lt; NOW()
         AND (ta.sign_in_status_ IS NULL OR ta.sign_in_status_ = 0 OR ta.sign_out_status_ IS NULL OR ta.sign_out_status_ = 0)
     </select>
     <resultMap id="TeacherAttendanceComplaintsDtoMap" type="com.ym.mec.biz.dal.dto.TeacherAttendanceComplaintsDto">
@@ -500,7 +500,7 @@
         <where>
             cs.actual_teacher_id_ = ta.teacher_id_ AND ta.is_complaints_ = 1
             <if test="organId != null and organId != ''">
-                AND t.organ_id_ = #{organId}
+                AND FIND_IN_SET(t.organ_id_, #{organId})
             </if>
             <if test="complaintsTime != null and complaintsTime != ''">
                 AND ta.complaints_time_ = #{complaintsTime}
@@ -527,6 +527,13 @@
         LEFT JOIN course_schedule cs ON cs.id_ = ta.course_schedule_id_
         <include refid="queryTeacherAttendanceComplaintsSql"/>
     </select>
+    <select id="getAttendClassTime" resultType="java.lang.Integer">
+        SELECT ROUND((UNIX_TIMESTAMP(CASE WHEN MIN(ta.sign_out_time_) &lt; MIN(sa.sign_out_time_) THEN MIN(ta.sign_out_time_) ELSE MIN(sa.sign_out_time_) END)-
+        UNIX_TIMESTAMP(CASE WHEN MAX(ta.sign_in_time_) > MAX(sa.sign_in_time_) THEN MAX(ta.sign_in_time_) ELSE MAX(sa.sign_in_time_) END))/60)
+        FROM teacher_attendance ta
+        LEFT JOIN student_attendance sa ON ta.course_schedule_id_ = sa.course_schedule_id_
+        WHERE ta.course_schedule_id_ = #{courseScheduleId}
+    </select>
 
     <update id="updateViPSignOutStatus" parameterType="string">
     	UPDATE teacher_attendance SET sign_out_status_ = 1,sign_out_time_= now()
@@ -582,4 +589,10 @@
     <delete id="deleteByGroup">
         DELETE FROM teacher_attendance WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </delete>
+    <delete id="deleteByCourseAndTeacherId">
+        DELETE FROM teacher_attendance WHERE teacher_id_ = #{teacherId} AND course_schedule_id_ IN
+        <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+            #{courseScheduleId}
+        </foreach>
+    </delete>
 </mapper>

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