Selaa lähdekoodia

Merge branch 'master' of http://git.dayaedu.com/yonge/mec into zouxuan

# Conflicts:
#	mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloseQueryInfo.java
#	mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
zouxuan 5 vuotta sitten
vanhempi
commit
a15a6a6ef4
58 muutettua tiedostoa jossa 1066 lisäystä ja 606 poistoa
  1. 1 0
      cms/src/main/java/com/ym/mec/cms/controller/NewsController.java
  2. 63 39
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  3. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  4. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesDao.java
  5. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  6. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java
  7. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  8. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  9. 19 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendancesDto.java
  10. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroup.java
  11. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentExtracurricularExercisesSituation.java
  12. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  13. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloseQueryInfo.java
  14. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesService.java
  15. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java
  16. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  17. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  18. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  19. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java
  20. 338 320
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  21. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  22. 18 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  23. 6 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  24. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  25. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  26. 9 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  27. 17 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  28. 38 27
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  29. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OnlineMusicGroupServiceImpl.java
  30. 44 32
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  31. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  32. 6 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  33. 28 44
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  34. 26 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  35. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  36. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  37. 27 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  38. 0 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  39. 7 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  40. 25 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  41. 1 3
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  42. 4 4
      mec-biz/src/main/resources/config/mybatis/MusicGroupStudentFeeMapper.xml
  43. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  44. 18 6
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  45. 25 2
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  46. 17 6
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  47. 6 3
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  48. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  49. 22 5
      mec-student/src/main/java/com/ym/mec/student/controller/ClassGroupController.java
  50. 16 14
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  51. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/PushTeacherExceptionAttendanceTask.java
  52. 10 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java
  53. 53 2
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  54. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/ExtracurricularExercisesReplyController.java
  55. 21 14
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  56. 5 3
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java
  57. 17 0
      mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java
  58. 11 1
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 1 - 0
cms/src/main/java/com/ym/mec/cms/controller/NewsController.java

@@ -45,6 +45,7 @@ public class NewsController extends BaseController {
 	@ApiOperation("资讯列表分页查询")
 	@GetMapping(value = "/homeList")
 	public Object getHomeList(NewsInformationQueryInfo queryInfo) {
+		queryInfo.setRows(5);
 		SysUser user = sysUserFeignService.queryUserInfo();
 		return succeed(sysNewsInformationService.getHomeList(user, queryInfo));
 	}

+ 63 - 39
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java

@@ -39,7 +39,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @params [musicGroupId]
      * @describe 获取所有班级
      */
-    List<ClassGroup> findAllClassGroupByMusicGroup(@Param("musicGroupId") String musicGroupId,@Param("classGroupType") String classGroupType);
+    List<ClassGroup> findAllClassGroupByMusicGroup(@Param("musicGroupId") String musicGroupId, @Param("classGroupType") String classGroupType);
 
     /**
      * 根据合奏班ID查询该合奏班下的子班级
@@ -74,11 +74,11 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<ClassGroup> findClassGroupByIds(@Param("ids") String ids);
 
     /**
+     * @param classGroupIds: 班级编号列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroup>
      * @describe 获取班级列表
      * @author Joburgess
      * @date 2020/2/20
-     * @param classGroupIds: 班级编号列表
-     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroup>
      */
     List<ClassGroup> findClassGroupWithIds(@Param("classGroupIds") List<Integer> classGroupIds);
 
@@ -149,7 +149,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @param vipIds
      * @return
      */
-    List<Map<String, String>> findVipStuNames(@Param("vipIds") String vipIds,@Param("groupType") String groupType);
+    List<Map<String, String>> findVipStuNames(@Param("vipIds") String vipIds, @Param("groupType") String groupType);
 
     /**
      * 获取班级下的学员列表
@@ -506,11 +506,11 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     int batchUpdateClassGroupCourseTimes(@Param("classGroupCourseTimes") Map<Integer, Integer> classGroupCourseTimes);
 
     /**
+     * @param classGroups:
+     * @return int
      * @describe
      * @author Joburgess
      * @date 2020/2/20
-     * @param classGroups:
-     * @return int
      */
     int batchUpdate(@Param("classGroups") List<ClassGroup> classGroups);
 
@@ -524,23 +524,23 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
 
     /**
+     * @param musicGroupId: 编号
+     * @param groupType:    类型
+     * @return com.ym.mec.biz.dal.entity.ClassGroup
      * @describe 根据乐团编号和类型获取班级
      * @author Joburgess
      * @date 2019/11/17
-     * @param musicGroupId: 编号
-     * @param groupType: 类型
-     * @return com.ym.mec.biz.dal.entity.ClassGroup
      */
     ClassGroup findByMusicGroupAndType(@Param("musicGroupId") String musicGroupId,
                                        @Param("groupType") String groupType);
 
     /**
+     * @param musicGroupId: 编号
+     * @param groupType:    类型
+     * @return com.ym.mec.biz.dal.entity.ClassGroup
      * @describe 根据乐团编号和类型获取班级
      * @author Joburgess
      * @date 2019/11/17
-     * @param musicGroupId: 编号
-     * @param groupType: 类型
-     * @return com.ym.mec.biz.dal.entity.ClassGroup
      */
     ClassGroup lockByMusicGroupAndType(@Param("musicGroupId") String musicGroupId,
                                        @Param("groupType") String groupType);
@@ -566,33 +566,33 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     List<ClassGroupTeachersDto> findClassGroupByType(@Param("musicGroupId") String musicGroupId, @Param("type") ClassGroupTypeEnum type);
 
     /**
+     * @param groupIds:  乐团或vip课编号
+     * @param groupType: 类型
+     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Integer>>
      * @describe 统计指定乐团或vip课的总课次
      * @author Joburgess
      * @date 2019/11/21
-     * @param groupIds: 乐团或vip课编号
-     * @param groupType: 类型
-     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Integer>>
      */
-    List<Map<String,Integer>> countGroupTotalClassTimes(@Param("groupIds") List<String> groupIds,
-                                                        @Param("groupType") String groupType);
+    List<Map<String, Integer>> countGroupTotalClassTimes(@Param("groupIds") List<String> groupIds,
+                                                         @Param("groupType") String groupType);
 
     /**
+     * @param groupIds:  乐团或vip课编号
+     * @param groupType: 类型
+     * @return java.util.List<java.util.Map < java.lang.String, java.lang.Integer>>
      * @describe 统计指定乐团或vip课的已上课次
      * @author Joburgess
      * @date 2019/11/21
-     * @param groupIds: 乐团或vip课编号
-     * @param groupType: 类型
-     * @return java.util.List<java.util.Map<java.lang.String,java.lang.Integer>>
      */
-    List<Map<String,Integer>> countGroupOverClassTimes(@Param("groupIds") List<String> groupIds,
+    List<Map<String, Integer>> countGroupOverClassTimes(@Param("groupIds") List<String> groupIds,
                                                         @Param("groupType") String groupType);
 
     /**
+     * @param classGroupIds: 班级编号列表
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroup>
      * @describe 获取班级列表
      * @author Joburgess
      * @date 2019/11/21
-     * @param classGroupIds: 班级编号列表
-     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroup>
      */
     List<ClassGroup> findByClassGroupIds(@Param("classGroupIds") List<Integer> classGroupIds);
 
@@ -604,6 +604,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 批量更新班级学生数减一
+     *
      * @param classGroupIdList
      * @return
      */
@@ -612,46 +613,48 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
     int updateTest(@Param("delFlag") YesOrNoEnum delFlag);
 
     /**
+     * @param groupId:   乐团编号
+     * @param groupType: 乐团类型
+     * @return com.ym.mec.biz.dal.entity.ClassGroup
      * @describe 根据乐团编号和类型获取班级
      * @author Joburgess
      * @date 2019/12/11
-     * @param groupId: 乐团编号
-     * @param groupType: 乐团类型
-     * @return com.ym.mec.biz.dal.entity.ClassGroup
      */
     ClassGroup findByGroupAndType(@Param("groupId") String groupId,
                                   @Param("groupType") String groupType);
 
     /**
+     * @param params: 查询条件
+     * @return java.util.List<com.ym.mec.biz.dal.dto.SuperClassGroupDtio>
      * @describe 终极班级查询
      * @author Joburgess
      * @date 2019/12/30
-     * @param params: 查询条件
-     * @return java.util.List<com.ym.mec.biz.dal.dto.SuperClassGroupDtio>
      */
     List<SuperClassGroupDto> superFindClassGroups(Map<String, Object> params);
+
     int superCountClassGroups(Map<String, Object> params);
 
     /**
+     * @param search:
+     * @return java.util.List<java.lang.Integer>
      * @describe 根据关键字查询学生相关的班级编号
      * @author Joburgess
      * @date 2019/12/31
-     * @param search:
-     * @return java.util.List<java.lang.Integer>
      */
     List<Integer> findClassGroupIdsByStudent(@Param("search") String search);
 
     /**
+     * @param search:
+     * @return java.util.List<java.lang.Integer>
      * @describe 根据关键字查询教师相关的班级编号
      * @author Joburgess
      * @date 2019/12/31
-     * @param search:
-     * @return java.util.List<java.lang.Integer>
      */
     List<Integer> findClassGroupIdsByTeacher(@Param("search") String search);
 
     /**
      * 获取基础技能版数量
+     *
      * @param musicGroupId
      * @return
      */
@@ -659,35 +662,37 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 获取对应班级的声部名称列表
+     *
      * @param courseScheduleIds
      * @return
      */
     List<Map<Integer, String>> findClassGroupSubjectNameMaps(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 
     /**
-     * @describe 根据团体删除班级
-     * @author Joburgess
-     * @date 2020/2/17
      * @param groupId:
      * @param groupType:
      * @return int
+     * @describe 根据团体删除班级
+     * @author Joburgess
+     * @date 2020/2/17
      */
     int deleteByGroup(@Param("groupId") String groupId,
-                      @Param("groupType")GroupType groupType);
+                      @Param("groupType") GroupType groupType);
 
     /**
-     * @describe 根据团体删除班级-逻辑删除
-     * @author Joburgess
-     * @date 2020/3/4
      * @param groupId:
      * @param groupType:
      * @return int
+     * @describe 根据团体删除班级-逻辑删除
+     * @author Joburgess
+     * @date 2020/3/4
      */
     int deleteByGroupWithLogic(@Param("groupId") String groupId,
                                @Param("groupType") GroupType groupType);
 
     /**
      * 获取vip所有班级列表
+     *
      * @param vipGroupIds
      * @return
      */
@@ -695,8 +700,27 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
 
     /**
      * 根据群编号,修改群名称
+     *
      * @param groupId
      * @param groupName
      */
     void updateGroupName(@Param("groupId") Integer groupId, @Param("groupName") String groupName);
+
+    /**
+     * 获取进行中乐团报名中基础技能班
+     *
+     * @param musicGroupId
+     * @param subjectId
+     * @param type
+     * @return
+     */
+    List<HighClassGroupDto> findHighClassGroupByTypeAndSubjectId(@Param("musicGroupId") String musicGroupId, @Param("subjectId") Integer subjectId, @Param("type") String type);
+
+    /**
+     * 根据班级id获取基础技能班
+     * @param musicGroupId
+     * @param classGroupIds
+     * @return
+     */
+    List<HighClassGroupDto> findHighClassGroup(@Param("musicGroupId") String musicGroupId, @Param("classGroupIds") String classGroupIds);
 }

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

@@ -470,4 +470,11 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
      * @return java.util.List<java.util.Map<java.lang.Long,java.util.Date>>
      */
     List<Map<Long, String>> getCoursesSettlementTime(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+
+	/**
+	 * 获取课程是否有课酬
+	 * @param courseScheduleIds
+	 * @return
+	 */
+	int getHasTeacherSalaryCount(@Param("courseScheduleIds") List<Long> courseScheduleIds);
 }

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -23,4 +24,17 @@ public interface ExtracurricularExercisesDao extends BaseDAO<Long, Extracurricul
                              @Param("studentIdList") String studentIdList,
                              @Param("content") String content);
 
+    /**
+     * @describe 获取教师在指定时间后未服务的学员
+     * @author Joburgess
+     * @date 2020.05.28
+     * @param teacherId:
+     * @param startDate:
+     * @param search:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
+     */
+    List<SimpleUserDto> findNoExercisesStudentsInThisWeekWithTeacher(@Param("teacherId") Integer teacherId,
+                                                                     @Param("startDate") String startDate,
+                                                                     @Param("search") String search);
+
 }

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

@@ -80,4 +80,19 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
      * @return java.util.List<com.ym.mec.biz.dal.dto.StudentServeDto>
      */
     List<StudentServeDto> getBeServiceStudents(@Param("monday") String monday);
+
+    /**
+     * @describe 更新指定学员的服务指标或运营指标
+     * @author Joburgess
+     * @date 2020.05.28
+     * @param studentId: 学生编号
+     * @param serviceTag: 服务指标
+     * @param operatingTag: 运营指标
+     * @return int
+     */
+    int updateStudentServiceOrOperatingTag(@Param("studentId") Integer studentId,
+                                           @Param("studentIds") List<Integer> studentIds,
+                                           @Param("serviceTag") Integer serviceTag,
+                                           @Param("operatingTag") Integer operatingTag);
+
 }

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

@@ -29,6 +29,15 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
      */
     int deleteByMonday(@Param("monday") String monday);
 
+    /**
+     * @describe 删除指定学员的服务指标
+     * @author Joburgess
+     * @date 2020.05.28
+     * @param studentId: 学员编号
+     * @return int
+     */
+    int deleteByStudent(@Param("studentId") Integer studentId);
+
     List<StudentExercisesSituationDto> findExercisesSituations(Map<String, Object> params);
     int countExercisesSituations(Map<String, Object> params);
 

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

@@ -212,4 +212,11 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	 * @param courseId
 	 */
 	void cleanCourseTeacherSignOut(@Param("courseId") Long courseId);
+
+	/**
+	 * 获取当天有异常考勤的老师列表
+	 * @param format
+	 * @return
+	 */
+    Set<Integer> queryTeacherExceptionAttendance(String format);
 }

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

@@ -35,10 +35,10 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "班级编号,房间号",required = false)
     private String sealClassId;
 
-    @ApiModelProperty(value = "签到状态(1已签到,0未签到)",required = false)
+    @ApiModelProperty(value = "签到状态(1正常,0异常,3未签到)",required = false)
     private Integer signInStatus;
 
-    @ApiModelProperty(value = "签退状态(1已签到,0未签到)",required = false)
+    @ApiModelProperty(value = "签退状态(11正常,0异常,3未签到)",required = false)
     private Integer signOutStatus;
 
     @ApiModelProperty(value = "教师角色")

+ 19 - 6
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendancesDto.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
+import com.ym.mec.biz.dal.enums.SignInStatusEnum;
+import com.ym.mec.biz.dal.enums.SignOutStatusEnum;
 import io.swagger.annotations.ApiModelProperty;
 
 import java.util.Date;
@@ -11,6 +13,9 @@ public class TeacherAttendancesDto {
     @ApiModelProperty(value = "老师名",required = false)
 	private String teacherName;
 
+    @ApiModelProperty(value = "分部名",required = false)
+	private String organName;
+
     @ApiModelProperty(value = "教师编号",required = false)
     private Integer teacherId;
 
@@ -36,11 +41,11 @@ public class TeacherAttendancesDto {
     private CourseSchedule.CourseScheduleType courseScheduleType;
 
     @ApiModelProperty(value = "签到状态(1正常签到,0异常签到) ",required = false)
-    private Integer signInStatus;
+    private SignInStatusEnum signInStatus;
 
     /** 状态(正常签到,异常签到) */
     @ApiModelProperty(value = "签退状态(1正常签到,0异常签到) ",required = false)
-    private Integer signOutStatus;
+    private SignOutStatusEnum signOutStatus;
 
     /** 备注 */
     @ApiModelProperty(value = "备注",required = false)
@@ -52,6 +57,14 @@ public class TeacherAttendancesDto {
     @ApiModelProperty(value = "签退时间",required = false)
     private Date signOutTime;
 
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
     public String getClassDate() {
         return classDate;
     }
@@ -124,19 +137,19 @@ public class TeacherAttendancesDto {
         this.courseScheduleType = courseScheduleType;
     }
 
-    public Integer getSignInStatus() {
+    public SignInStatusEnum getSignInStatus() {
         return signInStatus;
     }
 
-    public void setSignInStatus(Integer signInStatus) {
+    public void setSignInStatus(SignInStatusEnum signInStatus) {
         this.signInStatus = signInStatus;
     }
 
-    public Integer getSignOutStatus() {
+    public SignOutStatusEnum getSignOutStatus() {
         return signOutStatus;
     }
 
-    public void setSignOutStatus(Integer signOutStatus) {
+    public void setSignOutStatus(SignOutStatusEnum signOutStatus) {
         this.signOutStatus = signOutStatus;
     }
 

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

@@ -86,6 +86,9 @@ public class ClassGroup {
 	@ApiModelProperty(value = "班级图标",required = false)
 	private String img;
 	
+	@ApiModelProperty(value = "备注",required = false)
+	private String memo;
+	
 	private List<ClassGroupTeacherMapper> teacherMapperList = new ArrayList<ClassGroupTeacherMapper>();
 	
 	private List<CourseSchedule> courseScheduleList = new ArrayList<CourseSchedule>();
@@ -250,6 +253,14 @@ public class ClassGroup {
 		this.img = img;
 	}
 
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
 	public List<ClassGroupTeacherMapper> getTeacherMapperList() {
 		return teacherMapperList;
 	}

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

@@ -50,6 +50,16 @@ public class StudentExtracurricularExercisesSituation {
 
 	private Date lastSubmitTime;
 
+	private String serveType;
+
+	public String getServeType() {
+		return serveType;
+	}
+
+	public void setServeType(String serveType) {
+		this.serveType = serveType;
+	}
+
 	public Date getLastSubmitTime() {
 		return lastSubmitTime;
 	}

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

@@ -96,6 +96,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     TEACHER_PUSH_STUDENT_LEAVE("TEACHER_PUSH_STUDENT_LEAVE", "学员请假"),
     TEACHER_PUSH_CLASS_MESSAGE("TEACHER_PUSH_CLASS_MESSAGE", "班级消息"),
     COURSE_SALARY_COMPLAINTS_RESULT("COURSE_SALARY_COMPLAINTS_RESULT", "课酬申述结果"),
+    PUSH_TEACHER_EXCEPTION_ATTENDANCE("PUSH_TEACHER_EXCEPTION_ATTENDANCE", "异常考勤通知"),
 
     EDUCATION_PUSH_MUSIC_GROUP_FOUND("EDUCATION_PUSH_MUSIC_GROUP_FOUND", "乐团成立"),
     EDUCATION_PUSH_MUSIC_GROUP_CLOSE("EDUCATION_PUSH_MUSIC_GROUP_CLOSE", "乐团关闭"),

+ 3 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloseQueryInfo.java

@@ -19,6 +19,9 @@ public class TeacherCloseQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "课程类型")
     private String courseScheduleType;
 
+    @ApiModelProperty(value = "课程状态")
+    private String courseScheduleStatus;
+
     @ApiModelProperty(value = "课程名称")
     private String classGroupName;
 

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.common.service.BaseService;
@@ -27,4 +28,13 @@ public interface ExtracurricularExercisesService extends BaseService<Long, Extra
      */
     List<Map<String, Object>> findExtraExercilses(ExtraExercilseQueryInfo queryInfo);
 
+    /**
+     * @describe 获取待布置学员列表
+     * @author Joburgess
+     * @date 2020.05.28
+     * @param search:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
+     */
+    List<SimpleUserDto> getDontServeStudents(Integer teacherId, String search);
+
 }

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

@@ -2,6 +2,7 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.service.BaseService;
 
 import java.math.BigDecimal;
@@ -21,7 +22,7 @@ public interface MusicGroupPaymentCalenderDetailService extends BaseService<Long
      * 开启缴费
      * @param ids
      */
-    void openPayment(String ids);
+    String openPayment(String ids);
 
     /**
      * 根据声部获取乐团下完成缴费的学员

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

@@ -273,7 +273,7 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * 乐团筹备结束后,3.0乐团推送小班课缴费信息
 	 * @param musicGroupId
 	 */
-	void pushMessage(String musicGroupId) throws IOException;
+	void pushMessage(String musicGroupId, String classGroupIds) throws IOException;
 
 	/**
 	 * 补全musicGroupStudentFee表数据

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

@@ -304,4 +304,5 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
      * @return
      */
     boolean isPurchasedPracticeCourse(Integer userId);
+
 }

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

@@ -187,6 +187,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 
     String HOLIDAY_SETTING = "holiday_setting";
 
+    String PRACTICE_FREE_APPLY_EXPIRE_DATE = "practice_free_apply_expire_date";
+
     /**
      * @return com.ym.mec.biz.dal.entity.SysConfig
      * @params paramName

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

@@ -132,4 +132,9 @@ public interface TeacherAttendanceService extends BaseService<Long, TeacherAtten
 	 * @return
 	 */
 	TeacherAttendanceDetailDto getTeacherPersonalAttendanceDetail(Integer courseScheduleId);
+
+	/**
+	 * 推送教师异常考勤
+	 */
+    void pushTeacherExceptionAttendanceTask();
 }

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 338 - 320
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java


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

@@ -245,9 +245,12 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
                         salary = classGroupTeacherMapper.getTeacherRole().equals(TeachTypeEnum.BISHOP) ? teacherDefaultMusicGroupSalary.getMainTeacher90MinSalary() : teacherDefaultMusicGroupSalary.getAssistantTeacher90MinSalary();
                     }
                 }
-                if(StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())){
-                	throw new BizException("请设置老师默认课酬");
-                }
+				if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)
+						|| classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) {
+					if (StringUtils.isBlank(teacherDefaultMusicGroupSalary.getSalaryRuleJson())) {
+						throw new BizException("请设置老师默认课酬");
+					}
+				}
                 //线上小班课
                 if (classGroupNoStartCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.HIGH_ONLINE)) {
                     Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(classGroupTeacherMapper.getClassGroupId());

+ 18 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -2654,9 +2654,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 							}
 							ts.setExpectSalary(salary);
 						}
-	                    if(StringUtils.isBlank(tdms.getSalaryRuleJson())){
-	                    	throw new BizException("请设置老师默认课酬");
-	                    }
+
+						if((newCourseSchedule.getType() == CourseScheduleType.HIGH_ONLINE ||
+								newCourseSchedule.getType().equals(CourseSchedule.CourseScheduleType.MUSIC_NETWORK)) &&
+										StringUtils.isBlank(tdms.getSalaryRuleJson())
+								){
+								throw new BizException("请设置老师默认课酬");
+						}
+
 						//线上小班课
 						if(newCourseSchedule.getType() == CourseScheduleType.HIGH_ONLINE){
 							Integer studentNum = classGroupStudentMapperDao.countClassGroupNormalStudentNum(ts.getClassGroupId());
@@ -3671,7 +3676,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             List<Long> courseScheduleIds = results.stream().map(CourseScheduleEndDto::getId).collect(Collectors.toList());
 //            List<TeacherAttendance> teacherAttendances = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
 //            Map<Long, List<TeacherAttendance>> courseTeacherAttendanceMap = teacherAttendances.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
-//            Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds));
+            Map<Integer, Long> studentNumCourseMap = MapUtil.convertIntegerMap(studentAttendanceDao.countStudentAttendancesByCourses(courseScheduleIds));
             Map<Long, String> studentIdMap = MapUtil.convertIntegerMap(courseScheduleStudentPaymentDao.getStudentIdMap(courseScheduleIds));
             List<Integer> teacherIds=results.stream().filter(t->Objects.nonNull(t.getActualTeacherId())).map(CourseSchedule::getActualTeacherId).collect(Collectors.toList());
 
@@ -3699,13 +3704,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					result.setSignInTime(teacherAttendance.getSignInTime());
 					result.setSignOutTime(teacherAttendance.getSignOutTime());
 					result.setRemark(teacherAttendance.getRemark());
-				}
+				}*/
 				Long studentNum = studentNumCourseMap.get(result.getId());
 				if (Objects.nonNull(studentNum)) {
 					result.setIsCallNames(studentNum > 0 ? YesOrNoEnum.YES : YesOrNoEnum.NO);
 				} else {
 					result.setIsCallNames(YesOrNoEnum.NO);
-				}*/
+				}
 				result.setSettlementTime(coursesSettlementTimeMap.get(result.getId()));
 			}
         }
@@ -4194,11 +4199,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			throw new BizException("课程有效时间不能早于开始时间");
 		}
 
-		LocalDate courseStartDay = LocalDateTime.ofInstant(practiceGroup.getCoursesStartDate().toInstant(), DateUtil.zoneId).toLocalDate();
-		LocalDate currentExpiredDay = courseStartDay.plusMonths(practiceGroup.getBuyMonths()).plusDays(-1);
-		Date courseExpiredDateTemp=Date.from(currentExpiredDay.atStartOfDay(DateUtil.zoneId).toInstant());
-		if(coursesExpireDate.before(courseExpiredDateTemp)){
-			throw new BizException("课程结束时间不得早于,{}", DateUtil.dateToString(courseExpiredDateTemp, "yyyy年MM月dd日"));
+		if(Objects.nonNull(practiceGroup.getBuyMonths())){
+			LocalDate courseStartDay = LocalDateTime.ofInstant(practiceGroup.getCoursesStartDate().toInstant(), DateUtil.zoneId).toLocalDate();
+			LocalDate currentExpiredDay = courseStartDay.plusMonths(practiceGroup.getBuyMonths()).plusDays(-1);
+			Date courseExpiredDateTemp=Date.from(currentExpiredDay.atStartOfDay(DateUtil.zoneId).toInstant());
+			if(coursesExpireDate.before(courseExpiredDateTemp)){
+				throw new BizException("课程结束时间不得早于,{}", DateUtil.dateToString(courseExpiredDateTemp, "yyyy年MM月dd日"));
+			}
 		}
 
 		practiceGroup.setCoursesExpireDate(DateUtil.addSeconds(DateUtil.addDays(coursesExpireDate, 1),-1));

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

@@ -414,7 +414,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         teacherAttendanceDao.batchInsert(teacherAttendances);
 
         try {
-            courseScheduleService.checkNewCourseSchedulesWithoutMusicGroup(practiceCourses,false);
+            courseScheduleService.checkNewCourseSchedules(practiceCourses,false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage=new String();
@@ -605,6 +605,8 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             e.printStackTrace();
         }
 
+        studentDao.updateStudentServiceOrOperatingTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         imGroupMemberList.add(new ImGroupMember(practiceGroup.getUserId().toString()));
         imGroupMemberList.add(new ImGroupMember(practiceGroup.getStudentId().toString()));
@@ -1088,7 +1090,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
         teacherAttendanceDao.batchInsert(teacherAttendances);
 
         try {
-            courseScheduleService.checkNewCourseSchedulesWithoutMusicGroup(practiceCourses,false);
+            courseScheduleService.checkNewCourseSchedules(practiceCourses,false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage;
@@ -1143,6 +1145,8 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             e.printStackTrace();
         }
 
+        studentDao.updateStudentServiceOrOperatingTag(practiceGroupBuyParams.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(practiceGroupBuyParams.getEducationalTeacherId())){
             imGroupMemberList.add(new ImGroupMember(practiceGroupBuyParams.getEducationalTeacherId().toString()));

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

@@ -138,7 +138,7 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
 			throw new BizException("作业不存在");
 		}
 		Date now=new Date();
-		if (DateUtil.daysBetween(extracurricularExercises.getCreateTime(), now)>14){
+		if (DateUtil.daysBetween(extracurricularExercises.getCreateTime(), now)>=14){
 			throw new BizException("该作业已超出可提交时间范围,无法提交作业。");
 		}
 		existExtra.setAttachments(extracurricularExercisesReply.getAttachments());

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.biz.dal.dao.ExtracurricularExercisesDao;
 import com.ym.mec.biz.dal.dao.ExtracurricularExercisesReplyDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.Teacher;
@@ -24,6 +25,8 @@ import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.time.DayOfWeek;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.*;
@@ -155,4 +158,11 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 		}
 		return result;
 	}
+
+	@Override
+	public List<SimpleUserDto> getDontServeStudents(Integer teacherId, String search) {
+		LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
+		LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+		return extracurricularExercisesDao.findNoExercisesStudentsInThisWeekWithTeacher(teacherId, monDayDate.toString(), search);
+	}
 }

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

@@ -14,7 +14,6 @@ import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
-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;
@@ -24,7 +23,6 @@ import java.math.BigDecimal;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import static com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender.FeeType.ONLINE;
 import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.NON_PAYMENT;
 import static com.ym.mec.biz.dal.entity.MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
 import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.OPEN;
@@ -113,15 +111,16 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 
 	@Override
 	@Transactional(rollbackFor = Exception.class)
-	public void openPayment(String ids) {
+	public String openPayment(String ids) {
 		if(StringUtils.isEmpty(ids)){
 			throw new BizException("参数校验失败");
 		}
 		//获取可开启缴费列表
 		List<MusicGroupPaymentCalenderDetail> calenderDetails = musicGroupPaymentCalenderDetailDao.queryCanOpenList(ids);
 		if(calenderDetails.size() == 0){
-			return;
+			return "操作失败,没有可以开启缴费的学员";
 		}
+		int length = ids.split(",").length;
 		Date date = new Date();
 		Iterator<MusicGroupPaymentCalenderDetail> iterator = calenderDetails.iterator();
 		MusicGroupPaymentCalenderDetail next;
@@ -134,7 +133,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 			}
 		}
 		if(calenderDetails.size() == 0){
-			return;
+			return "操作失败,学员有未完成的订单";
 		}
 		String musicGroupId = calenderDetails.get(0).getMusicGroupId();
 		calenderDetails.forEach(e->{
@@ -160,6 +159,8 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 			// 发送续费通知
 			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.STUDENT_PUSH_WAIT_RENEW_MESSAGE, push, null, 0, memo,"STUDENT",musicGroup.getName());
 		}
+		StringBuffer append = new StringBuffer("操作成功: 成功开启缴费").append(studentIds.size()).append("条,失败").append(length - studentIds.size()).append("条");
+		return append.toString();
 	}
 
 	@Override
@@ -191,6 +192,9 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 		}
 		Date date = new Date();
 		MusicGroupStudentFee studentFee = musicGroupStudentFeeDao.findByUser(userId, calender.getMusicGroupId());
+		if(studentFee.getPaymentStatus() != PAID_COMPLETED){
+			throw new BizException("操作失败: 学员有未完成的缴费");
+		}
 		calender.setUpdateTime(date);
 		//生成详情
 		MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();

+ 17 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java

@@ -1,29 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.NO;
-
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-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 com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDao;
-import com.ym.mec.biz.dal.dao.MusicGroupPaymentCalenderDetailDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
-import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalender;
 import com.ym.mec.biz.dal.entity.MusicGroupPaymentCalenderDetail;
@@ -42,6 +19,16 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
+import 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.*;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.enums.PaymentStatusEnum.NO;
 
 @Service
 public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long, MusicGroupPaymentCalender> implements MusicGroupPaymentCalenderService {
@@ -112,6 +99,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				MusicGroupPaymentCalenderDetail musicGroupPaymentCalenderDetail = null;
 				// 创建缴费明细
 				for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
+					if (mgsf.getPaymentStatus() != PaymentStatus.PAID_COMPLETED) {
+						continue;
+					}
 					musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 					musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(musicGroupPaymentCalender.getId());
 					musicGroupPaymentCalenderDetail.setCreateTime(date);
@@ -237,6 +227,9 @@ public class MusicGroupPaymentCalenderServiceImpl extends BaseServiceImpl<Long,
 				Set<Integer> studentIds = new HashSet<Integer>();
 				// 创建缴费明细
 				for (MusicGroupStudentFee mgsf : musicGroupStudentFeeList) {
+					if (mgsf.getPaymentStatus() != PaymentStatus.PAID_COMPLETED) {
+						continue;
+					}
 					musicGroupPaymentCalenderDetail = new MusicGroupPaymentCalenderDetail();
 					musicGroupPaymentCalenderDetail.setMusicGroupPaymentCalenderId(mgpc.getId());
 					musicGroupPaymentCalenderDetail.setCreateTime(date);

+ 38 - 27
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -25,13 +25,11 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.http.HttpUtil;
-
 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.io.IOException;
 import java.math.BigDecimal;
@@ -940,15 +938,15 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         }
 //        updateTeamTeacher(musicGroup, musicGroup);
         //生成学员费用表
-		List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
-		if (musicGroupStudentFees != null && musicGroupStudentFees.size() > 0) {
-			if (musicGroup.getFeeType() != FeeType.OFFLINE) {
-				for (MusicGroupStudentFee sf : musicGroupStudentFees) {
-					sf.setRemainNetworkClassTimes(sf.getRemainNetworkClassTimes() + 1);
-				}
-			}
-			musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees, null, "PAID_COMPLETED");
-		}
+        List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
+        if (musicGroupStudentFees != null && musicGroupStudentFees.size() > 0) {
+            if (musicGroup.getFeeType() != null && musicGroup.getFeeType() != FeeType.OFFLINE) {
+                for (MusicGroupStudentFee sf : musicGroupStudentFees) {
+                    sf.setRemainNetworkClassTimes(sf.getRemainNetworkClassTimes() + 1);
+                }
+            }
+            musicGroupStudentFeeDao.batchInsert(musicGroupStudentFees, null, "PAID_COMPLETED");
+        }
         musicGroupStudentFeeDao.batchUpdateCalenders(musicGroupId);
         //记录操作日志
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId, "确认开团(筹备中 -> 进行中)", sysUser.getId(), ""));
@@ -1041,21 +1039,34 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     }
 
     @Override
-    public void pushMessage(String musicGroupId) throws IOException {
+    public void pushMessage(String musicGroupId, String classGroupIds) throws IOException {
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
-            //是否有基础训练班
-            Integer num = classGroupDao.countClassNumByType(musicGroupId);
-            if (num != null && num > 0) {
-                Map<Integer, String> studentMap = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertMybatisMap(studentRegistrationDao.findIdMapByMusicGroupId(musicGroupId, 2))), HashMap.class);
-                if (studentMap != null && studentMap.size() > 0) {
-                    String baseURL = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
-                    String url = baseURL + "/#/smallRegister?musicGroupId=" + musicGroupId;
-                    String serverPhone = sysConfigDao.findConfigValue(SysConfigService.SERVER_PHONE);
-                    sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.SMS_BASICS_SKILL_APPLY_MESSAGE,
-                            studentMap, null, 0, "5?" + url, "STUDENT", musicGroup.getName(), HttpUtil.getSortUrl(url), serverPhone);
-                }
+            List<HighClassGroupDto> highClassGroup = classGroupDao.findHighClassGroup(musicGroupId, classGroupIds);
+            Set<ClassGroupTypeEnum> classGroupTypeSet = highClassGroup.stream().map(HighClassGroupDto::getType).collect(Collectors.toSet());
+
+            List<StudentRegistration> students = new ArrayList<>();
+            if (classGroupTypeSet.contains(ClassGroupTypeEnum.HIGH)) {
+                List<StudentRegistration> noHighClassGroupStudents = studentRegistrationService.findMusicGroupStuNoClassType(musicGroupId, ClassGroupTypeEnum.HIGH, null);
+                students.addAll(noHighClassGroupStudents);
             }
+            if (classGroupTypeSet.contains(ClassGroupTypeEnum.HIGH_ONLINE)) {
+                List<StudentRegistration> noHighOnlineClassGroupStudents = studentRegistrationService.findMusicGroupStuNoClassType(musicGroupId, ClassGroupTypeEnum.HIGH_ONLINE, null);
+                students.addAll(noHighOnlineClassGroupStudents);
+            }
+            if (students.size() == 0) {
+                return;
+            }
+            Map<Integer, String> studentMap = new HashMap<>();
+            for (StudentRegistration student : students) {
+                studentMap.put(student.getUserId(), student.getUserId().toString());
+            }
+
+            String baseURL = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+            String url = baseURL + "/#/smallRegister?musicGroupId=" + musicGroupId;
+            String serverPhone = sysConfigDao.findConfigValue(SysConfigService.SERVER_PHONE);
+            sysMessageService.batchSendMessage(MessageSender.JIGUANG, MessageTypeEnum.SMS_BASICS_SKILL_APPLY_MESSAGE,
+                    studentMap, null, 0, "5?" + url, "STUDENT", musicGroup.getName(), HttpUtil.getSortUrl(url), serverPhone);
         }
     }
 
@@ -1370,9 +1381,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             //更新学员在班级的状态
             for (Integer classGroupId : classGroupIdList) {
                 ClassGroup classGroup = classGroupService.get(classGroupId);
-                if(classGroup.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)){
+                if (classGroup.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)) {
                     classGroupService.delSingle(classGroupId);
-                }else {
+                } else {
                     classGroupStudentMapperService.delClassGroupStudent(userId, classGroupId);
                 }
             }
@@ -1471,9 +1482,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         List<Integer> classGroupIdList = classGroupStudentMapperDao.queryClassGroupIdList(musicGroupId, userId, GroupType.MUSIC);
         for (Integer classGroupId : classGroupIdList) {
             ClassGroup classGroup = classGroupService.get(classGroupId);
-            if(classGroup.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)){
+            if (classGroup.getType().equals(ClassGroupTypeEnum.MUSIC_NETWORK)) {
                 classGroupService.delSingle(classGroupId);
-            }else {
+            } else {
                 classGroupStudentMapperService.delClassGroupStudent(userId, classGroupId);
             }
         }

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

@@ -282,6 +282,8 @@ public class OnlineMusicGroupServiceImpl implements OnlineMusicGroupService {
             e.printStackTrace();
         }
 
+        studentDao.updateStudentServiceOrOperatingTag(onlineMusicGroupCourseInfo.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(musicGroup.getEducationalTeacherId())){
             imGroupMemberList.add(new ImGroupMember(musicGroup.getEducationalTeacherId().toString()));

+ 44 - 32
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -233,6 +233,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     @Override
     public Map<String, Object> checkCanApplyFreePracticeGroup(Integer userId) {
         Map<String,Object> result=new HashMap<>();
+        SysConfig practiceFreeApplyExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
+        result.put("practiceFreeApplyExpireDate", practiceFreeApplyExpireDateConfig.getParanValue());
         return result;
     }
 
@@ -754,6 +756,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         SysConfig practiceApplyEndTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_END_TIME);
         SysConfig practiceApplyIntervalTimeConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_APPLY_INTERVAL_TIME);
         SysConfig practiceCourseMinutesConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_COURSE_MINUTES);
+        SysConfig practiceFreeApplyExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
         Student student = studentDao.get(userId);
         List<Subject> subjects = subjectDao.findBySubjectByIdList(practiceSubjectIdListConfig.getParanValue());
         List<Integer> subjectIds = Arrays.asList(practiceSubjectIdListConfig.getParanValue().split(",")).stream().mapToInt(idStr -> Integer.valueOf(idStr)).boxed().collect(Collectors.toList());
@@ -772,6 +775,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         result.put("userDefaultSubjectIds", StringUtils.join(userDefaultSubjectIds.toArray(), ","));
         result.put("practiceApplyIntervalMinutes", practiceApplyIntervalTimeConfig.getParanValue(Integer.class));
         result.put("practiceCourseMinutes", practiceCourseMinutesConfig.getParanValue(Integer.class));
+        result.put("practiceFreeApplyExpireDate", practiceFreeApplyExpireDateConfig.getParanValue());
         return result;
     }
 
@@ -941,6 +945,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             return result;
         }
 
+        SysConfig practiceFreeApplyExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
+        Date practiceFreeApplyExpireDate = DateUtil.stringToDate(practiceFreeApplyExpireDateConfig.getParanValue());
+
         Date now = new Date();
         Calendar calendar = Calendar.getInstance();
         calendar.setFirstDayOfWeek(Calendar.MONDAY);
@@ -951,7 +958,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         calendar.set(Calendar.MILLISECOND, 0);
         calendar.add(Calendar.DATE, 1);
         Date applyStartDate = calendar.getTime();
-        Date applyEndDate = DateUtil.stringToDate("2020-05-24", "yyyy-MM-dd");
+        Date applyEndDate = practiceFreeApplyExpireDate;
         Date firstMonday = DateUtil.getWeekDayWithDate(applyStartDate, Calendar.MONDAY);
         Date secondSunday = DateUtil.getWeekDayWithDate(applyEndDate, Calendar.SUNDAY);
 
@@ -1294,7 +1301,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (Objects.isNull(subjectId)) {
             throw new BizException("请选择声部");
         }
-        SysUser sysUser = sysUserFeignService.queryUserById(userId);
+        SysUser sysUser = teacherDao.getUser(userId);
         if (Objects.isNull(sysUser)) {
             throw new BizException("用户不存在");
         }
@@ -1342,6 +1349,9 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             checkTeacherLeaveDate = false;
         }
 
+        SysConfig practiceFreeApplyExpireDateConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_FREE_APPLY_EXPIRE_DATE);
+        Date practiceFreeApplyExpireDate = DateUtil.stringToDate(practiceFreeApplyExpireDateConfig.getParanValue());
+
         Date now = new Date();
         if (now.before(applyStartDay)) {
             now = applyStartDay;
@@ -1352,13 +1362,13 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         calendar.set(Calendar.MINUTE, 0);
         calendar.set(Calendar.SECOND, 0);
         calendar.set(Calendar.MILLISECOND, 0);
-        while (calendar.getTime().before(activityEndDate)) {
+        while (calendar.getTime().before(practiceFreeApplyExpireDate)) {
             calendar.add(Calendar.DATE, 1);
             Date applyStartDay = calendar.getTime();
             calendar.add(Calendar.DATE, 6);
             Date applyEndDay = calendar.getTime();
-            if (applyEndDay.after(activityEndDate)) {
-                applyEndDay = activityEndDate;
+            if (applyEndDay.after(practiceFreeApplyExpireDate)) {
+                applyEndDay = practiceFreeApplyExpireDate;
             }
             Date firstMonday = DateUtil.getWeekDayWithDate(applyStartDay, Calendar.MONDAY);
             Date secondMonday = DateUtil.getWeekDayWithDate(applyEndDay, Calendar.MONDAY);
@@ -1694,18 +1704,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             practiceGroup.setSecondCourseTime(practiceGroup.getFirstCourseTime());
             practiceGroup.setFirstCourseTime(tmp);
         }
-        if (practiceGroup.getFirstCourseTime().before(now)
-                || practiceGroup.getFirstCourseTime().after(activityEndDate)) {
-            result.put("status", "APPLY_DATE_OVERFLOW");
-            result.put("info", "预约失败,网管课的时间超出活动时间范围(2020-5-31之前),请重试。");
-            return result;
-        }
-        if (practiceGroup.getSecondCourseTime().before(now)
-                || practiceGroup.getSecondCourseTime().after(activityEndDate)) {
-            result.put("status", "APPLY_DATE_OVERFLOW");
-            result.put("info", "预约失败,网管课的时间超出活动时间范围(2020-5-31之前),请重试。");
-            return result;
-        }
+//        if (practiceGroup.getFirstCourseTime().before(now)
+//                || practiceGroup.getFirstCourseTime().after(activityEndDate)) {
+//            result.put("status", "APPLY_DATE_OVERFLOW");
+//            result.put("info", "预约失败,网管课的时间超出活动时间范围(2020-5-31之前),请重试。");
+//            return result;
+//        }
+//        if (practiceGroup.getSecondCourseTime().before(now)
+//                || practiceGroup.getSecondCourseTime().after(activityEndDate)) {
+//            result.put("status", "APPLY_DATE_OVERFLOW");
+//            result.put("info", "预约失败,网管课的时间超出活动时间范围(2020-5-31之前),请重试。");
+//            return result;
+//        }
         if (DateUtil.isSameDay(practiceGroup.getFirstCourseTime(), practiceGroup.getSecondCourseTime())) {
             result.put("status", "TWO_DATE_ON_ONE_DAY");
             result.put("info", "预约失败,网管课选择时间重复,请重试。");
@@ -1754,18 +1764,18 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             allCourseDates.remove(3);
             allCourseDates.add(DateUtil.addDays(tempDate, 7));
         }
-        if (allCourseDates.get(2).before(now)
-                || allCourseDates.get(2).after(courseExpireDate)) {
-            result.put("status", "APPLY_DATE_OVERFLOW");
-            result.put("info", "预约失败,网管课的时间超出活动时间范围(2020-5-31之前),请重试。");
-            return result;
-        }
-        if (allCourseDates.get(3).before(now)
-                || allCourseDates.get(3).after(courseExpireDate)) {
-            result.put("status", "APPLY_DATE_OVERFLOW");
-            result.put("info", "预约失败,网管课的时间超出活动时间范围(2020-5-31之前),请重试。");
-            return result;
-        }
+//        if (allCourseDates.get(2).before(now)
+//                || allCourseDates.get(2).after(courseExpireDate)) {
+//            result.put("status", "APPLY_DATE_OVERFLOW");
+//            result.put("info", "预约失败,网管课的时间超出活动时间范围(2020-5-31之前),请重试。");
+//            return result;
+//        }
+//        if (allCourseDates.get(3).before(now)
+//                || allCourseDates.get(3).after(courseExpireDate)) {
+//            result.put("status", "APPLY_DATE_OVERFLOW");
+//            result.put("info", "预约失败,网管课的时间超出活动时间范围(2020-5-31之前),请重试。");
+//            return result;
+//        }
         allCourseDates.sort(Comparator.comparing(Date::getTime));
 
         studentDao.lockUser(practiceGroup.getStudentId());
@@ -1783,7 +1793,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         SysUser sysUser = sysUserFeignService.queryUserById(practiceGroup.getStudentId());
 
         practiceGroup.setCoursesStartDate(allCourseDates.get(0));
-        practiceGroup.setCoursesExpireDate(courseExpireDate);
+        practiceGroup.setCoursesExpireDate(allCourseDates.get(3));
         Teacher teacher = teacherService.getDetail(practiceGroup.getUserId());
         if (Objects.isNull(teacher)) {
             throw new BizException("老师不存在");
@@ -3006,8 +3016,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         teacherAttendanceDao.batchInsert(teacherAttendances);
 
         try {
-//            courseScheduleService.checkNewCourseSchedules(practiceCourses,false);
-            courseScheduleService.checkNewCourseSchedulesWithoutMusicGroup(practiceCourses,false);
+            courseScheduleService.checkNewCourseSchedules(practiceCourses,false);
+//            courseScheduleService.checkNewCourseSchedulesWithoutMusicGroup(practiceCourses,false);
         } catch (Exception e) {
             TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
             String errMessage=new String();
@@ -3273,6 +3283,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             e.printStackTrace();
         }
 
+        studentDao.updateStudentServiceOrOperatingTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
             imGroupMemberList.add(new ImGroupMember(practiceGroup.getEducationalTeacherId().toString()));

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

@@ -95,7 +95,7 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
             throw new BizException("作业不存在");
         }
         Date now=new Date();
-        if (DateUtil.daysBetween(existHomework.getCreateTime(), now)>14){
+        if (DateUtil.daysBetween(existHomework.getCreateTime(), now)>=14){
             throw new BizException("该作业已超出可提交时间范围,无法提交作业。");
         }
 

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

@@ -7,6 +7,7 @@ import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -15,18 +16,6 @@ import org.springframework.transaction.annotation.Transactional;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleStudentPaymentDao;
-import com.ym.mec.biz.dal.dao.MusicGroupDao;
-import com.ym.mec.biz.dal.dao.MusicGroupStudentFeeDao;
-import com.ym.mec.biz.dal.dao.OrganizationDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentManageDao;
-import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
-import com.ym.mec.biz.dal.dao.StudentRegistrationDao;
-import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
-import com.ym.mec.biz.dal.dao.VipGroupDao;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
@@ -85,6 +74,8 @@ public class StudentManageServiceImpl implements StudentManageService {
     private SysUserCashAccountDao sysUserCashAccountDao;
     @Autowired
     private StudentDao studentDao;
+    @Autowired
+    private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 
     @Override
     public PageInfo<StudentManageListDto> findStudentsByOrganId(StudentManageQueryInfo queryInfo) {
@@ -434,6 +425,9 @@ public class StudentManageServiceImpl implements StudentManageService {
         student.setServiceTag(sysUser.getServiceTag());
         student.setTeacherId(sysUser.getTeacherId());
         studentService.upSet(student);
+        if(new Integer(0).equals(student.getServiceTag())){
+            studentExtracurricularExercisesSituationDao.deleteByStudent(sysUser.getId());
+        }
         return userId;
     }
 

+ 28 - 44
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java

@@ -1,54 +1,18 @@
 package com.ym.mec.biz.service.impl;
 
-import java.io.IOException;
-import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import javax.annotation.Resource;
-
-import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.*;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.auth.api.entity.SysUserRole;
+import com.ym.mec.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.entity.*;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.StudentRegistrationQueryInfo;
-import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.ClassGroupStudentMapperService;
-import com.ym.mec.biz.service.ContractService;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
-import com.ym.mec.biz.service.MusicGroupPaymentCalenderService;
-import com.ym.mec.biz.service.MusicGroupSubjectPlanService;
-import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
-import com.ym.mec.biz.service.StudentPaymentOrderService;
-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.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.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
@@ -62,6 +26,18 @@ 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.http.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 @Service
 public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, StudentRegistration> implements StudentRegistrationService {
@@ -644,9 +620,13 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentPaymentOrder.setActualAmount(reduce);
                 studentPaymentOrder.setPayTime(date);
             }
-            musicGroupStudentFeeDao.insert(new MusicGroupStudentFee(musicGroupId,
+            MusicGroupStudentFee musicGroupStudentFee = new MusicGroupStudentFee(musicGroupId,
                     userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
-                    null, studentAddDto.getTemporaryCourseFee(), paymentStatus));
+                    null, studentAddDto.getTemporaryCourseFee(), paymentStatus);
+            if(musicGroup.getFeeType() != null && musicGroup.getFeeType() != MusicGroupPaymentCalender.FeeType.OFFLINE && musicGroupStudentFee.getTemporaryCourseFee().doubleValue() * 100 == 0){
+            	musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
+            }
+            musicGroupStudentFeeDao.insert(musicGroupStudentFee);
 //            musicGroupStudentFeeDao.insert(new MusicGroupStudentFee(musicGroupId,
 //                    userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
 //                    nextPaymentDate, studentAddDto.getTemporaryCourseFee(), paymentStatus));
@@ -784,6 +764,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         MusicGroupSubjectPlan musicOneSubjectClassPlan = musicGroupSubjectPlanService.getMusicOneSubjectClassPlan(studentRegistration.getMusicGroupId(), studentRegistration.getActualSubjectId());
 
         if (studentPaymentOrder.getStatus().equals(DealStatusEnum.SUCCESS)) {
+
+            MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
+            
             if (studentRegistration.getTemporaryCourseFee() != null) {
                 studentRegistration.setTemporaryCourseFee(new BigDecimal(0));
             }
@@ -801,6 +784,9 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 musicGroupStudentFee.setLatestPaidTime(nowDate);
                 musicGroupStudentFee.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
                 musicGroupStudentFee.setTemporaryCourseFee(BigDecimal.ZERO);
+                if(musicGroup.getFeeType() != null && musicGroup.getFeeType() != MusicGroupPaymentCalender.FeeType.OFFLINE){
+                	musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
+                }
                 musicGroupStudentFee.setUpdateTime(nowDate);
                 musicGroupStudentFeeDao.update(musicGroupStudentFee);
                 //添加学生
@@ -844,8 +830,6 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             }
 
             sysUserCashAccountDetailService.insert(paymentDetail);
-
-            MusicGroup musicGroup = musicGroupDao.get(studentRegistration.getMusicGroupId());
             //三方乐团不发送缴费通知
             if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
                 //发送缴费成功通知(短信 + push)

+ 26 - 9
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -19,6 +19,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -45,11 +46,9 @@ public class StudentServeServiceImpl implements StudentServeService {
     public void exercisesSituationStatistics(String monday) {
         LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
 
-        if(nowDate.getDayOfWeek()== DayOfWeek.MONDAY){
-            int lastWeekTodayUpdateNum = studentExtracurricularExercisesSituationDao.findLastWeekTodayUpdateNum(nowDate.plusDays(-1).toString());
-            if(lastWeekTodayUpdateNum<=0){
-                nowDate = nowDate.plusDays(-1);
-            }
+        int lastWeekTodayUpdateNum = studentExtracurricularExercisesSituationDao.findLastWeekTodayUpdateNum(nowDate.plusDays(-nowDate.getDayOfWeek().getValue()).toString());
+        if(lastWeekTodayUpdateNum<=0){
+            nowDate = nowDate.plusDays(-nowDate.getDayOfWeek().getValue());
         }
 
         if(StringUtils.isNotBlank(monday)){
@@ -111,6 +110,7 @@ public class StudentServeServiceImpl implements StudentServeService {
             studentExtracurricularExercisesSituation.setSunday(DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"));
 
             if(haveClassStudentIds.contains(serviceStudent.getUserId())){
+                studentExtracurricularExercisesSituation.setServeType("HOMEWORK");
                 List<StudentServeCourseHomeworkDto> studentHomeworks = studentHomeworkMap.get(serviceStudent.getUserId());
                 if(CollectionUtils.isEmpty(studentHomeworks)){
                     studentExtracurricularExercisesSituation.setActualExercisesNum(0);
@@ -122,9 +122,11 @@ public class StudentServeServiceImpl implements StudentServeService {
                 }else{
                     studentExtracurricularExercisesSituation.setActualExercisesNum(1);
                     long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
-                    Date lastSubmitTime = studentHomeworks.stream().max(Comparator.comparing(StudentServeCourseHomeworkDto::getSubmitTime)).get().getSubmitTime();
-                    studentExtracurricularExercisesSituation.setLastSubmitTime(lastSubmitTime);
                     studentExtracurricularExercisesSituation.setExercisesReplyNum(replyNum>0?1:0);
+                    if(replyNum>0){
+                        Date lastSubmitTime = studentHomeworks.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(StudentServeCourseHomeworkDto::getSubmitTime)).get().getSubmitTime();
+                        studentExtracurricularExercisesSituation.setLastSubmitTime(lastSubmitTime);
+                    }
                     int exercisesMessageNum=0;
                     int exercisesMessageTimelyNum=0;
                     for (StudentServeCourseHomeworkDto studentHomework : studentHomeworks) {
@@ -146,6 +148,7 @@ public class StudentServeServiceImpl implements StudentServeService {
             }
 
             if(noClassStudentIds.contains(serviceStudent.getUserId())){
+                studentExtracurricularExercisesSituation.setServeType("EXERCISE");
                 List<ExtracurricularExercisesReply> studentExercises = studentExercisesMap.get(serviceStudent.getUserId());
                 if(CollectionUtils.isEmpty(studentExercises)){
                     studentExtracurricularExercisesSituation.setActualExercisesNum(0);
@@ -157,9 +160,11 @@ public class StudentServeServiceImpl implements StudentServeService {
                 }
                 studentExtracurricularExercisesSituation.setActualExercisesNum(1);
                 long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
-                Date lastSubmitTime = studentExercises.stream().max(Comparator.comparing(ExtracurricularExercisesReply::getSubmitTime)).get().getSubmitTime();
-                studentExtracurricularExercisesSituation.setLastSubmitTime(lastSubmitTime);
                 studentExtracurricularExercisesSituation.setExercisesReplyNum(replyNum>0?1:0);
+                if(replyNum>0){
+                    Date lastSubmitTime = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(ExtracurricularExercisesReply::getSubmitTime)).get().getSubmitTime();
+                    studentExtracurricularExercisesSituation.setLastSubmitTime(lastSubmitTime);
+                }
                 int exercisesMessageNum=0;
                 int exercisesMessageTimelyNum=0;
                 for (ExtracurricularExercisesReply studentHomework : studentExercises) {
@@ -179,5 +184,17 @@ public class StudentServeServiceImpl implements StudentServeService {
                 results.add(studentExtracurricularExercisesSituation);
             }
         }
+
+        studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString());
+
+        BigDecimal currentPage=BigDecimal.ONE,
+                pageSize=new BigDecimal(10000),
+                total=new BigDecimal(results.size()),
+                totalPage=total.divide(pageSize, BigDecimal.ROUND_UP);
+        while (currentPage.compareTo(totalPage)<=0){
+            List<StudentExtracurricularExercisesSituation> rows=results.stream().skip(pageSize.multiply(currentPage.subtract(BigDecimal.ONE)).longValue()).limit(pageSize.longValue()).collect(Collectors.toList());
+            studentExtracurricularExercisesSituationDao.batchInsert(rows);
+            currentPage=currentPage.add(BigDecimal.ONE);
+        }
     }
 }

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

@@ -587,4 +587,21 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		}
 		return result;
 	}
+
+	@Override
+	public void pushTeacherExceptionAttendanceTask() {
+		//获取前一天的日期
+		Date date = new Date();
+		String format = DateUtil.format(DateUtil.addDays(date,-1), DateUtil.DEFAULT_PATTERN);
+		Set<Integer> teacherId = teacherAttendanceDao.queryTeacherExceptionAttendance(format);
+		if(teacherId == null || teacherId.size() == 0){
+			return;
+		}
+		Map<Integer,String> receivers = new HashMap(teacherId.size());
+		teacherId.forEach(e->{
+			receivers.put(e,e.toString());
+		});
+		String url = new StringBuffer("8?").append(sysConfigDao.findConfigValue(SysConfigService.TEACHER_BASE_URL)).append("/#/appealResult?date=").append(format).toString();
+		sysMessageService.batchSendMessage(MessageSender.JIGUANG,MessageTypeEnum.PUSH_TEACHER_EXCEPTION_ATTENDANCE,receivers,null,0,url,"TEACHER",format);
+	}
 }

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

@@ -128,6 +128,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private GroupDao groupDao;
 	@Autowired
 	private TeacherCourseRewardService teacherCourseRewardService;
+	@Autowired
+	private StudentDao studentDao;
 
 	private static final Logger LOGGER = LoggerFactory
 			.getLogger(VipGroup.class);
@@ -1138,6 +1140,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				e.printStackTrace();
 			}
 			imGroupMemberList.add(new ImGroupMember(classGroupStudent.getUserId().toString()));
+			studentDao.updateStudentServiceOrOperatingTag(classGroupStudent.getUserId(), null, YesOrNoEnum.YES.getCode(),null);
 		}
 
 		try {
@@ -2708,6 +2711,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),null);
 
+		studentDao.updateStudentServiceOrOperatingTag(null, studentIds, YesOrNoEnum.YES.getCode(),null);
+
 		try {
 			ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
 			// 创建群组

+ 27 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml

@@ -21,6 +21,7 @@
         <result column="expect_student_num_" property="expectStudentNum"/>
         <result column="total_class_times_" property="totalClassTimes"/>
         <result column="img_" property="img"/>
+        <result column="memo_" property="memo"/>
         <result column="current_class_times_" property="currentClassTimes"/>
     </resultMap>
 
@@ -55,6 +56,7 @@
             <if test="totalClassTimes!=null">total_class_times_,</if>
             <if test="currentClassTimes!=null">current_class_times_,</if>
             <if test="img!=null">img_,</if>
+            <if test="memo!=null">memo_,</if>
             <if test="delFlag!=null">del_flag_,</if>
         </trim>
         VALUES
@@ -72,6 +74,7 @@
             <if test="totalClassTimes!=null">#{totalClassTimes},</if>
             <if test="currentClassTimes!=null">#{currentClassTimes},</if>
             <if test="img!=null">#{img},</if>
+            <if test="memo!=null">#{memo},</if>
             <if test="delFlag!=null">#{delFlag},</if>
         </trim>
     </insert>
@@ -133,6 +136,9 @@
             <if test="img!=null">
                 img_=#{img},
             </if>
+            <if test="memo!=null">
+                memo_=#{memo},
+            </if>
             <if test="delFlag != null">
                 del_flag_ = #{delFlag},
             </if>
@@ -1141,6 +1147,9 @@
                 <if test="classGroup.img!=null">
                     img_=#{classGroup.img},
                 </if>
+                <if test="classGroup.memo!=null">
+                    memo_=#{classGroup.memo},
+                </if>
                 <if test="classGroup.delFlag != null">
                     del_flag_ = #{classGroup.delFlag},
                 </if>
@@ -1264,4 +1273,22 @@
             #{classGroupId}
         </foreach>
     </select>
+    <select id="findHighClassGroupByTypeAndSubjectId" resultMap="HighClassGroup">
+        SELECT * FROM class_group WHERE music_group_id_=#{musicGroupId}
+        <if test="subjectId != null and type=='HIGH'">
+            AND FIND_IN_SET(#{subjectId},subject_id_list_)
+        </if>
+        <if test="subjectId != null and type=='HIGH_ONLINE'">
+            AND FIND_IN_SET(#{subjectId},memo_)
+        </if>
+        AND type_ = #{type} AND total_class_times_=0 AND del_flag_='0';
+    </select>
+
+    <select id="findHighClassGroup" resultMap="HighClassGroup">
+        SELECT * FROM class_group WHERE music_group_id_=#{musicGroupId}
+        <if test="classGroupIds != null">
+            AND FIND_IN_SET(id_,#{classGroupIds})
+        </if>
+        AND type_ IN ('HIGH','HIGH_ONLINE') AND del_flag_ = '0'
+    </select>
 </mapper>

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

@@ -2461,7 +2461,6 @@
         FROM course_schedule_teacher_salary csts
                  LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
         WHERE (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
-          AND cs.group_type_ != 'MUSIC'
           AND cs.class_date_ BETWEEN DATE_FORMAT(#{startTime}, "%Y-%m-%d") AND DATE_FORMAT(#{endTime}, "%Y-%m-%d")
           AND csts.user_id_ = #{userId}
     </select>

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

@@ -951,4 +951,11 @@
 		</foreach>
 		GROUP BY course_schedule_id_;
 	</select>
+    <select id="getHasTeacherSalaryCount" resultType="int">
+		SELECT COUNT(*) FROM course_schedule_teacher_salary
+		WHERE course_schedule_id_ IN
+		<foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+			#{courseScheduleId}
+		</foreach>
+	</select>
 </mapper>

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

@@ -160,4 +160,29 @@
 			AND content_ = #{content}
 		ORDER BY create_time_ DESC LIMIT 1
 	</select>
+    <select id="findNoExercisesStudentsInThisWeekWithTeacher"
+            resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
+		SELECT
+			su.id_ userId,
+			su.username_ userName,
+			su.avatar_ avatar,
+			GROUP_CONCAT(sub.name_) subjectNames
+		FROM
+			student_extracurricular_exercises_situation_ sees
+			LEFT JOIN extracurricular_exercises_reply eer ON sees.student_id_ = eer.user_id_
+			AND DATE_FORMAT( eer.create_time_, '%Y-%m-%d' ) &gt;= #{startDate}
+			LEFT JOIN student stu ON stu.user_id_ = sees.student_id_
+			LEFT JOIN sys_user su ON su.id_ = sees.student_id_
+			LEFT JOIN `subject` sub ON FIND_IN_SET( sub.id_, stu.subject_id_list_ )
+		WHERE
+			sees.monday_ = #{startDate}
+			AND sees.teacher_id_ = #{teacherId}
+			AND eer.id_ IS NULL
+			<if test="search!=null">
+				AND (su.username_ LIKE CONCAT('%', #{search}, '%') OR su.phone_ LIKE CONCAT(#{search}, '%'))
+			</if>
+		GROUP BY su.id_
+		ORDER BY
+			su.id_;
+	</select>
 </mapper>

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

@@ -78,9 +78,7 @@
 			<if test="status != null">
 				status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
-			<if test="repairUserId != null">
-				repair_user_id_ = #{repairUserId},
-			</if>
+			repair_user_id_ = #{repairUserId},
 			<if test="organId != null">
 				organ_id_ = #{organId},
 			</if>

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

@@ -42,15 +42,15 @@
     <!-- 向数据库增加一条记录 -->
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentFee" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
-		INSERT INTO music_group_student_fee_ (id_,music_group_id_,user_id_,course_fee_,create_time_,update_time_,next_payment_date_,latest_paid_time_,continuous_absenteeism_times_,subject_id_,payment_status_,temporary_course_fee_,payment_period_list_)
-		VALUES(#{id},#{musicGroupId},#{userId},#{courseFee},now(),now(),#{nextPaymentDate},#{latestPaidTime},#{continuousAbsenteeismTimes},#{subjectId},#{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{temporaryCourseFee},#{paymentPeriodList})
+		INSERT INTO music_group_student_fee_ (id_,music_group_id_,user_id_,course_fee_,create_time_,update_time_,next_payment_date_,latest_paid_time_,continuous_absenteeism_times_,subject_id_,payment_status_,temporary_course_fee_,payment_period_list_,remain_network_class_times_)
+		VALUES(#{id},#{musicGroupId},#{userId},#{courseFee},now(),now(),#{nextPaymentDate},#{latestPaidTime},#{continuousAbsenteeismTimes},#{subjectId},#{paymentStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{temporaryCourseFee},#{paymentPeriodList},#{remainNetworkClassTimes})
 	</insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.MusicGroupStudentFee">
-        INSERT INTO music_group_student_fee_ (music_group_id_,user_id_,create_time_,update_time_,next_payment_date_,subject_id_,payment_status_,course_fee_,payment_period_list_)
+        INSERT INTO music_group_student_fee_ (music_group_id_,user_id_,create_time_,update_time_,next_payment_date_,subject_id_,payment_status_,course_fee_,payment_period_list_,remain_network_class_times_)
 		VALUES
 		<foreach collection="musicGroupStudentFees" item="item" separator=",">
-            (#{item.musicGroupId},#{item.userId},NOW(),NOW(),#{nextPaymentDate},#{item.subjectId},#{paymentStatus},#{item.courseFee},#{item.paymentPeriodList})
+            (#{item.musicGroupId},#{item.userId},NOW(),NOW(),#{nextPaymentDate},#{item.subjectId},#{paymentStatus},#{item.courseFee},#{item.paymentPeriodList},#{item.remainNetworkClassTimes})
         </foreach>
     </insert>
 

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

@@ -353,7 +353,7 @@
         SELECT
             sch.*,
             DATE_FORMAT(sch.create_time_, '%Y-%m-%d') homework_create_time_,
-            cs.class_date_
+            cs.class_date_ course_start_time_
         FROM
             student_course_homework sch
             LEFT JOIN course_schedule cs ON sch.course_schedule_id_ = cs.id_

+ 18 - 6
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -20,6 +20,8 @@
 		<result column="exercises_message_timely_num_" property="exercisesMessageTimelyNum" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
+		<result column="last_submit_time_" property="lastSubmitTime"/>
+		<result column="serve_type_" property="serveType"/>
 	</resultMap>
 
 	<resultMap id="StudentExercisesSituationDto" type="com.ym.mec.biz.dal.dto.StudentExercisesSituationDto" extends="StudentExtracurricularExercisesSituation">
@@ -46,15 +48,15 @@
 		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
 		</selectKey>
 		-->
-		INSERT INTO student_extracurricular_exercises_situation_ (id_,student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,actual_exercises_num_,exercises_reply_num_,exercises_message_num_,exercises_message_timely_num_,create_time_,update_time_)
-		VALUES(#{id},#{studentId},#{weekOfYear},#{monday},#{sunday},#{teacherId},#{expectExercisesNum},#{actualExercisesNum},#{exercisesReplyNum},#{exercisesMessageNum},#{exercisesMessageTimelyNum},NOW(),NOW())
+		INSERT INTO student_extracurricular_exercises_situation_ (id_,student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,actual_exercises_num_,exercises_reply_num_,exercises_message_num_,exercises_message_timely_num_,create_time_,update_time_,last_submit_time_,serve_type_)
+		VALUES(#{id},#{studentId},#{weekOfYear},#{monday},#{sunday},#{teacherId},#{expectExercisesNum},#{actualExercisesNum},#{exercisesReplyNum},#{exercisesMessageNum},#{exercisesMessageTimelyNum},NOW(),NOW(),#{lastSubmitTime},#{serveType})
 	</insert>
 
     <insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		INSERT INTO student_extracurricular_exercises_situation_ (student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,actual_exercises_num_,exercises_reply_num_,exercises_message_num_,exercises_message_timely_num_,create_time_,update_time_)
+		INSERT INTO student_extracurricular_exercises_situation_ (student_id_,week_of_year_,monday_,sunday_,teacher_id_,expect_exercises_num_,actual_exercises_num_,exercises_reply_num_,exercises_message_num_,exercises_message_timely_num_,create_time_,update_time_,last_submit_time_,serve_type_)
 		VALUES
 		<foreach collection="situations" item="situation" separator=",">
-			(#{situation.studentId},#{situation.weekOfYear},#{situation.monday},#{situation.sunday},#{situation.teacherId},#{situation.expectExercisesNum},#{situation.actualExercisesNum},#{situation.exercisesReplyNum},#{situation.exercisesMessageNum},#{situation.exercisesMessageTimelyNum},NOW(),NOW())
+			(#{situation.studentId},#{situation.weekOfYear},#{situation.monday},#{situation.sunday},#{situation.teacherId},#{situation.expectExercisesNum},#{situation.actualExercisesNum},#{situation.exercisesReplyNum},#{situation.exercisesMessageNum},#{situation.exercisesMessageTimelyNum},NOW(),NOW(),#{situation.lastSubmitTime},#{situation.serveType})
 		</foreach>
 	</insert>
 
@@ -98,6 +100,12 @@
 			<if test="sunday != null">
 				sunday_ = #{sunday},
 			</if>
+			<if test="lastSubmitTime!=null">
+				last_submit_time_=#{lastSubmitTime}
+			</if>
+			<if test="serveType!=null">
+				serve_type_=#{serveType}
+			</if>
 			update_time_ = #{updateTime}
 		</set> WHERE id_ = #{id}
 	</update>
@@ -109,8 +117,11 @@
 	<delete id="deleteByMonday">
 		DELETE FROM student_extracurricular_exercises_situation_ WHERE monday_ = #{monday}
 	</delete>
+    <delete id="deleteByStudent">
+		DELETE FROM student_extracurricular_exercises_situation_ WHERE student_id_ = #{studentId}
+	</delete>
 
-	<!-- 分页查询 -->
+    <!-- 分页查询 -->
 	<select id="queryPage" resultMap="StudentExtracurricularExercisesSituation" parameterType="map">
 		SELECT * FROM student_extracurricular_exercises_situation_ ORDER BY id_ <include refid="global.limit"/>
 	</select>
@@ -131,7 +142,8 @@
 			SUM( actual_exercises_num_ ) actual_exercises_num_,
 			SUM( exercises_reply_num_ ) exercises_reply_num_,
 			SUM( exercises_message_num_ ) exercises_message_num_,
-			SUM( exercises_message_timely_num_ ) exercises_message_timely_num_
+			SUM( exercises_message_timely_num_ ) exercises_message_timely_num_,
+			MAX(last_submit_time_) last_submit_time_
 		FROM
 			student_extracurricular_exercises_situation_ sees
 			LEFT JOIN sys_user stu ON stu.id_=sees.student_id_

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

@@ -167,6 +167,28 @@
             WHERE user_id_ = #{item.userId}
         </foreach>
     </update>
+    <update id="updateStudentServiceOrOperatingTag">
+        UPDATE student
+        <set>
+            <if test="serviceTag != null">
+                service_tag_ = #{serviceTag},
+            </if>
+            <if test="operatingTag != null">
+                operating_tag_ = #{operatingTag},
+            </if>
+                update_time_ = NOW()
+        </set>
+        WHERE
+        <if test="studentId!=null">
+            user_id_ = #{studentId}
+        </if>
+        <if test="studentIds!=null and studentIds.size()>0">
+            user_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                #{studentId}
+            </foreach>
+        </if>
+    </update>
 
     <resultMap id="student4operating" type="com.ym.mec.biz.dal.dto.Student4operating">
         <result column="organ_name_" property="organName"/>
@@ -336,7 +358,8 @@
     </resultMap>
     <select id="getBeServiceStudents" resultMap="StudentServeDto">
         SELECT
-            s.*,
+            s.user_id_,
+	        s.teacher_id_,
             MIN( CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) ) course_start_time_
         FROM
             student s
@@ -347,6 +370,6 @@
         WHERE
             s.service_tag_ = 1
         GROUP BY
-            s.user_id_
+            s.user_id_,s.teacher_id_
     </select>
 </mapper>

+ 17 - 6
mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml

@@ -174,9 +174,10 @@
         <result column="course_schedule_status_" property="courseScheduleStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="course_schedule_name_" property="courseScheduleName"/>
         <result column="teacher_name_" property="teacherName"/>
+        <result column="organ_name_" property="organName"/>
         <result column="teacher_id_" property="teacherId"/>
-        <result column="sign_in_status_" property="signInStatus"/>
-        <result column="sign_out_status_" property="signOutStatus"/>
+        <result column="sign_in_status_" property="signInStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="sign_out_status_" property="signOutStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="sign_in_time_" property="signInTime"/>
         <result column="sign_out_time_" property="signOutTime"/>
         <result column="remark_" property="remark"/>
@@ -221,10 +222,10 @@
             <if test="search != null and search != ''">
                 AND (su.id_ = #{search} OR su.real_name_ LIKE CONCAT('%',#{search},'%') OR cs.id_ = #{search} OR cs.name_ LIKE CONCAT('%',#{search},'%'))
             </if>
-            <if test="courseStartDate != null">
+            <if test="courseStartDate != null and courseStartDate != ''">
                 AND cs.class_date_ &gt;= #{courseStartDate}
             </if>
-            <if test="courseEndDate != null">
+            <if test="courseEndDate != null and courseEndDate != ''">
                 AND cs.class_date_ &lt;= #{courseEndDate}
             </if>
             <if test="signInStatus != null and signInStatus != '' and signInStatus != 3">
@@ -239,9 +240,12 @@
             <if test="signInStatus != null and signInStatus != '' and signInStatus == 3">
                 AND ta.sign_in_status_ IS NULL
             </if>
-            <if test="courseScheduleType != null">
+            <if test="courseScheduleType != null  and courseScheduleType != ''">
                 AND cs.type_ = #{courseScheduleType}
             </if>
+            <if test="courseScheduleStatus != null  and courseScheduleStatus != ''">
+                AND cs.status_ = #{courseScheduleStatus}
+            </if>
             <if test="organId != null and organId != ''">
                 AND FIND_IN_SET(t.organ_id_,#{organId})
             </if>
@@ -268,11 +272,12 @@
         cs.class_date_,cs.start_class_time_,cs.end_class_time_,cs.type_ course_schedule_type_,
         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_,
-        ta.sign_in_time_,ta.sign_out_time_,ta.remark_
+        ta.sign_in_time_,ta.sign_out_time_,ta.remark_,o.name_ organ_name_
         FROM course_schedule cs
         LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
         LEFT JOIN teacher t ON t.id_ = ta.teacher_id_
         LEFT JOIN sys_user su ON su.id_ = t.id_
+        LEFT JOIN organization o ON o.id_ = t.organ_id_
         <include refid="queryTeacherAttendancesCondition"/>
         ORDER BY cs.class_date_ ASC,cs.start_class_time_ ASC
         <include refid="global.limit"/>
@@ -427,6 +432,12 @@
         LEFT JOIN course_schedule cs ON cs.id_ = ta.course_schedule_id_
         WHERE ta.course_schedule_id_ = #{courseId} AND ta.teacher_id_ = #{teacherId}
     </select>
+    <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_
+        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>
 
     <update id="updateViPSignOutStatus" parameterType="string">
     	UPDATE teacher_attendance SET sign_out_status_ = 1,sign_out_time_= now()

+ 6 - 3
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -1,14 +1,17 @@
 package com.ym.mec.task;
 
-import org.springframework.cloud.openfeign.FeignClient;
-import org.springframework.web.bind.annotation.GetMapping;
-
 import com.ym.mec.common.config.FeignConfiguration;
 import com.ym.mec.task.fallback.TaskRemoteServiceFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
 
 @FeignClient(name = "web-server", contextId = "TaskRemoteService", configuration = { FeignConfiguration.class }, fallback = TaskRemoteServiceFallback.class)
 public interface TaskRemoteService {
 
+	@GetMapping(value = "task/pushTeacherExceptionAttendanceTask")
+	// 教师异常考勤推送
+	public void pushTeacherExceptionAttendanceTask();
+
 	@GetMapping(value = "task/refreshPaymentFeeStatus")
 	// 刷新付费状态
 	public void refreshPaymentFeeStatus();

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -150,4 +150,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void updateMusicGroupPaymentCalenderStatus() {
 		logger.info("更新乐团缴费日历的状态失败");
 	}
+
+	@Override
+	public void pushTeacherExceptionAttendanceTask() {
+		logger.info("教师异常考勤推送失败");
+	}
 }

+ 22 - 5
mec-student/src/main/java/com/ym/mec/student/controller/ClassGroupController.java

@@ -2,13 +2,17 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.ClassGroupDao;
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dao.MusicGroupDao;
 import com.ym.mec.biz.dal.dto.HighClassGroupDto;
 import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
+import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
 import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.StudentRegistrationService;
 import com.ym.mec.common.controller.BaseController;
@@ -24,6 +28,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -42,14 +47,18 @@ public class ClassGroupController extends BaseController {
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
     @Autowired
     private StudentRegistrationService studentRegistrationService;
+    @Autowired
+    private MusicGroupDao musicGroupDao;
+    @Autowired
+    private ClassGroupDao classGroupDao;
 
     @ApiOperation(value = "基础提高班报名")
     @PostMapping("/highReg")
     @ApiImplicitParams({@ApiImplicitParam(name = "classGroupId", value = "班级id", required = true, dataType = "int")})
     public HttpResponseResult highReg(Integer classGroupId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        ClassGroup classGroup = classGroupService.get(classGroupId);
-        if (classGroup == null || (!classGroup.getType().equals(ClassGroupTypeEnum.HIGH)&&!classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) || classGroup.getDelFlag().equals(1)) {
+        ClassGroup classGroup = classGroupDao.lockClassGroup(classGroupId.longValue());
+        if (classGroup == null || (!classGroup.getType().equals(ClassGroupTypeEnum.HIGH) && !classGroup.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)) || classGroup.getDelFlag().equals(1)) {
             return failed("报名的班级不存在");
         }
         if (classGroup.getStudentNum().compareTo(classGroup.getExpectStudentNum()) >= 0) {
@@ -73,10 +82,18 @@ public class ClassGroupController extends BaseController {
         if (studentRegistration == null || studentRegistration.getActualSubjectId() == null) {
             return failed("学生不在该乐团");
         }
+        MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         Map<String, Object> classGroupAndStatusMap = new HashMap<>();
-        List<HighClassGroupDto> highClassGroups = classGroupService.findClassGroupByMusicGroupIdAndSubjectId(musicGroupId, studentRegistration.getActualSubjectId());
-        List<ClassGroupStudentMapper> ClassGroupStudentMapper = classGroupStudentMapperDao.findHighClassGroupHasUser(musicGroupId, userId,ClassGroupTypeEnum.HIGH);
-        List<ClassGroupStudentMapper> highOnlineClassGroupStudentMapper = classGroupStudentMapperDao.findHighClassGroupHasUser(musicGroupId, userId,ClassGroupTypeEnum.HIGH_ONLINE);
+        List<HighClassGroupDto> highClassGroups = new ArrayList<>();
+        if (musicGroup.getStatus().equals(MusicGroupStatusEnum.PROGRESS)) {
+            highClassGroups = classGroupDao.findHighClassGroupByTypeAndSubjectId(musicGroupId, studentRegistration.getActualSubjectId(), "HIGH");
+            List<HighClassGroupDto> highOnlineClassGroup = classGroupDao.findHighClassGroupByTypeAndSubjectId(musicGroupId, studentRegistration.getActualSubjectId(), "HIGH_ONLINE");
+            highClassGroups.addAll(highOnlineClassGroup);
+        } else {
+            highClassGroups = classGroupService.findClassGroupByMusicGroupIdAndSubjectId(musicGroupId, studentRegistration.getActualSubjectId());
+        }
+        List<ClassGroupStudentMapper> ClassGroupStudentMapper = classGroupStudentMapperDao.findHighClassGroupHasUser(musicGroupId, userId, ClassGroupTypeEnum.HIGH);
+        List<ClassGroupStudentMapper> highOnlineClassGroupStudentMapper = classGroupStudentMapperDao.findHighClassGroupHasUser(musicGroupId, userId, ClassGroupTypeEnum.HIGH_ONLINE);
         classGroupAndStatusMap.put("highClassGroups", highClassGroups);
         classGroupAndStatusMap.put("hasReg", false);
         classGroupAndStatusMap.put("onlineHasReg", false);

+ 16 - 14
mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java

@@ -10,9 +10,11 @@ import com.ym.mec.biz.dal.dto.PracticeGroupBuyDto;
 import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
 import com.ym.mec.biz.dal.entity.PracticeGroup;
+import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.service.PracticeGroupService;
+import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -53,7 +55,7 @@ public class PracticeGroupController extends BaseController {
     @Autowired
     private CourseScheduleEvaluateDao courseScheduleEvaluateDao;
 
-    private static final Set<Integer> ENABLE_APPLY_ORGANIDS = new HashSet<>(Arrays.asList(new Integer[]{28,34,37}));
+//    private static final Set<Integer> ENABLE_APPLY_ORGANIDS = new HashSet<>(Arrays.asList(new Integer[]{28,34,37}));
 
     @ApiOperation("获取学生的陪练课")
     @GetMapping(value = "/findUserPracticeCourses")
@@ -73,12 +75,12 @@ public class PracticeGroupController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         Map<String,Object> result=practiceGroupService.checkCanApplyFreePracticeGroup(sysUser.getId());
-        if(ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
-            Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(sysUser.getId());
-            result.put("canApply", applyTimes < 1 ? 1 : 0);
-        }else{
-            result.put("canApply", 0);
-        }
+//        if(ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
+        Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(sysUser.getId());
+        result.put("canApply", applyTimes < 1 ? 1 : 0);
+//        }else{
+//            result.put("canApply", 0);
+//        }
         result.put("organId", sysUser.getOrganId());
         return succeed(result);
     }
@@ -91,12 +93,12 @@ public class PracticeGroupController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         Map<String,Object> result=practiceGroupService.getPracticeApplyParams(sysUser.getId());
-        if(ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
+//        if(ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
             Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(sysUser.getId());
             result.put("enableApply", applyTimes < 1 ? 1 : 0);
-        }else{
-            result.put("enableApply", 0);
-        }
+//        }else{
+//            result.put("enableApply", 0);
+//        }
         return succeed(result);
     }
 
@@ -150,9 +152,9 @@ public class PracticeGroupController extends BaseController {
         if(excludeOrganIds.contains(sysUser.getOrganId())){
             throw new BizException("请联系老师确认您的所属分部");
         }
-        if(!ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
-            throw new BizException("陪练课预约活动已结束");
-        }
+//        if(!ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
+//            throw new BizException("陪练课预约活动已结束");
+//        }
         practiceGroup.setStudentId(sysUser.getId());
         return succeed(practiceGroupService.practiceApply(practiceGroup));
     }

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/PushTeacherExceptionAttendanceTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PushTeacherExceptionAttendanceTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.pushTeacherExceptionAttendanceTask();
+	}
+}

+ 10 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java

@@ -66,4 +66,14 @@ public class ExtracurricularExercisesController extends BaseController {
         }
         return succeed(extracurricularExercisesReplyService.findStudentExtraExerciseDetail(studentExerciseId));
     }
+
+    @ApiOperation(value = "获取待布置学员列表")
+    @GetMapping("/getDontServeStudents")
+    public HttpResponseResult getDontServeStudents(String search){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        return succeed(extracurricularExercisesService.getDontServeStudents(sysUser.getId(), search));
+    }
 }

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

@@ -81,8 +81,59 @@ public class ExportController extends BaseController {
     @Autowired
     private TeacherSalaryComplaintsService teacherSalaryComplaintsService;
     @Autowired
+    private TeacherAttendanceService teacherAttendanceService;
+    @Autowired
     private TeacherCourseRewardService teacherCourseRewardService;
 
+    @ApiOperation(value = "导出教师考勤列表")
+    @PostMapping("export/queryTeacherAttendances")
+    @PreAuthorize("@pcs.hasPermissions('export/queryTeacherAttendances')")
+    public void exportTeacherAttendances(HttpServletResponse response, TeacherCloseQueryInfo queryInfo) throws IOException {
+        queryInfo.setRows(49999);
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            throw new BizException("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+                throw new BizException("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                    throw new BizException("非法请求");
+                }
+            }
+        }
+        List rows = teacherAttendanceService.queryTeacherAttendances(queryInfo).getRows();
+        OutputStream outputStream = response.getOutputStream();
+        try {
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "老师编号", "老师姓名", "课程编号", "课程名称", "上课日期",
+                    "课程开始时间","课程结束时间","课程类型","签到时间","签到状态","签退时间","签退状态","备注"}, new String[]{
+                    "organName", "teacherId", "teacherName", "courseScheduleId", "courseScheduleName", "classDate",
+                    "startClassTime", "endClassTime", "courseScheduleType", "signInTime", "signInStatus", "signOutTime", "signOutStatus",
+                    "remark"}, rows);
+            response.setContentType("application/octet-stream");
+            response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
+            response.flushBuffer();
+            outputStream = response.getOutputStream();
+            workbook.write(outputStream);
+            outputStream.flush();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (outputStream != null) {
+                try {
+                    outputStream.close();
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }
+        }
+    }
+
     @ApiOperation(value = "导出申述处理列表")
     @PostMapping("export/teacherSalaryComplaints")
     @PreAuthorize("@pcs.hasPermissions('export/teacherSalaryComplaints')")
@@ -478,9 +529,9 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部名称", "课程编号", "开始时间", "结束时间",
                     "班级名称", "班级声部", "课程名称", "课程类型", "教学模式",
-                    "教学点", "课程状态", "指导老师", "学员编号"}, new String[]{
+                    "教学点", "课程状态", "指导老师", "学员编号", "是否点名"}, new String[]{
                     "organName", "id", "startClassTime", "endClassTime", "classGroupName", "subjectName", "name",
-                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId"}, rows);
+                    "groupType.desc", "teachMode.msg", "schoolName", "status.msg", "teacherName", "studentId","isCallNames.msg"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();

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

@@ -60,7 +60,7 @@ public class ExtracurricularExercisesReplyController extends BaseController {
         if(StringUtils.isNotBlank(monday)){
             extracurricularExercisesReplyService.exercisesSituationStatistics2(monday);
         }else{
-            String[] mondays=new String[]{"2020-03-30","2020-04-06","2020-04-13","2020-04-20","2020-04-27"};
+            String[] mondays=new String[]{"2020-05-13","2020-05-20","2020-05-27"};
             for (String mondayStr : mondays) {
                 extracurricularExercisesReplyService.exercisesSituationStatistics2(mondayStr);
             }

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

@@ -1,5 +1,24 @@
 package com.ym.mec.web.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.EmployeeDao;
@@ -10,18 +29,6 @@ import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
 import com.ym.mec.biz.service.MusicGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.exception.BizException;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiImplicitParam;
-import io.swagger.annotations.ApiImplicitParams;
-import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.web.bind.annotation.*;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
 
 @RequestMapping("musicGroup")
 @Api(tags = "乐团服务")
@@ -130,7 +137,7 @@ public class MusicGroupController extends BaseController {
 	@ApiOperation(value = "乐团筹备结束后,3.0乐团推送小班课缴费信息")
 	@PostMapping("/pushMessage")
 	@PreAuthorize("@pcs.hasPermissions('musicGroup/pushMessage')")
-	public Object pushMessage(String musicGroupId) throws Exception {
+	public Object pushMessage(String musicGroupId,String classGroupIds) throws Exception {
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null || sysUser.getId() == null) {
 			return failed("获取用户信息失败");
@@ -138,7 +145,7 @@ public class MusicGroupController extends BaseController {
 		if(StringUtils.isEmpty(musicGroupId)){
 			throw new BizException("参数校验错误");
 		}
-		musicGroupService.pushMessage(musicGroupId);
+		musicGroupService.pushMessage(musicGroupId,classGroupIds);
 		return succeed();
 	}
 

+ 5 - 3
mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.dal.page.MusicCalenderDetailQueryInfo;
 import com.ym.mec.biz.service.MusicGroupPaymentCalenderDetailService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -48,8 +49,9 @@ public class MusicGroupPaymentCalenderDetailController extends BaseController {
     @ApiOperation(value = "开启缴费")
     @PostMapping("/openPayment")
     @PreAuthorize("@pcs.hasPermissions('musicGroupPaymentCalenderDetail/openPayment')")
-    public Object openPayment(String ids) {
-        musicGroupPaymentCalenderDetailService.openPayment(ids);
-        return succeed();
+    public HttpResponseResult openPayment(String ids) {
+        HttpResponseResult<Object> succeed = succeed();
+        succeed.setMsg(musicGroupPaymentCalenderDetailService.openPayment(ids));
+        return succeed;
     }
 }

+ 17 - 0
mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java

@@ -10,6 +10,7 @@ import com.ym.mec.biz.dal.page.StudentServiceDetailQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesMessageService;
 import com.ym.mec.biz.service.StudentCourseHomeworkReplyService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
+import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
@@ -46,6 +47,9 @@ public class StudentExtracurricularExercisesSituationController extends BaseCont
     private StudentCourseHomeworkReplyService studentCourseHomeworkReplyService;
 
     @Autowired
+    private StudentServeService studentServeService;
+
+    @Autowired
     private EmployeeDao employeeDao;
 
     @ApiOperation(value = "课外训练-教学")
@@ -89,4 +93,17 @@ public class StudentExtracurricularExercisesSituationController extends BaseCont
         }
     }
 
+    @GetMapping("/exercisesSituationStatistics")
+    public HttpResponseResult exercisesSituationStatistics(String monday){
+        if(StringUtils.isNotBlank(monday)){
+            studentServeService.exercisesSituationStatistics(monday);
+        }else{
+            String[] mondays=new String[]{"2020-05-13","2020-05-20","2020-05-27"};
+            for (String mondayStr : mondays) {
+                studentServeService.exercisesSituationStatistics(mondayStr);
+            }
+        }
+        return succeed();
+    }
+
 }

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

@@ -68,6 +68,9 @@ public class TaskController extends BaseController {
 	@Autowired
 	private MusicGroupPaymentCalenderDetailService musicGroupPaymentCalenderDetailService;
 
+	@Autowired
+	private StudentServeService studentServeService;
+
 	@GetMapping(value = "/refreshUserMusicGroupPaymentStatusTask")
 	// 刷新学员乐团付费状态
 	public void refreshUserMusicGroupPaymentStatusTask(){
@@ -227,7 +230,8 @@ public class TaskController extends BaseController {
 	//学生服务信息统计
 	@GetMapping("/exercisesSituationStatistics")
 	public void exercisesSituationStatistics(){
-		extracurricularExercisesReplyService.exercisesSituationStatistics2(null);
+//		extracurricularExercisesReplyService.exercisesSituationStatistics2(null);
+		studentServeService.exercisesSituationStatistics(null);
 	}
 
 	//更新学生运营指标
@@ -241,4 +245,10 @@ public class TaskController extends BaseController {
 	public void updateMusicGroupPaymentCalenderStatus() {
 		musicGroupPaymentCalenderService.autoUpdateMusicGroupPaymentCalenderStatus();
 	}
+
+	// 推送教师异常考勤
+	@GetMapping("/pushTeacherExceptionAttendanceTask")
+	public void pushTeacherExceptionAttendanceTask() {
+		teacherAttendanceService.pushTeacherExceptionAttendanceTask();
+	}
 }

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä