瀏覽代碼

Merge remote-tracking branch 'origin/online1' into online1

Joburgess 5 年之前
父節點
當前提交
280866a03b
共有 62 個文件被更改,包括 1023 次插入598 次删除
  1. 1 0
      cms/src/main/java/com/ym/mec/cms/controller/NewsController.java
  2. 2 1
      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. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesDao.java
  5. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java
  6. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentDao.java
  7. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentManageDao.java
  8. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  9. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  10. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/Student4operating.java
  11. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeDto.java
  12. 8 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherAttendancesDto.java
  13. 3 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ClassGroup.java
  14. 9 11
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRegistration.java
  15. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  16. 33 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/StudentMusicGroupStatusEnum.java
  17. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentOperatingQueryInfo.java
  18. 0 8
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloseQueryInfo.java
  19. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesService.java
  20. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupPaymentCalenderDetailService.java
  21. 1 2
      mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java
  22. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/PracticeGroupService.java
  23. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherAttendanceService.java
  24. 319 317
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  25. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  26. 17 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  27. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/EduPracticeGroupServiceImpl.java
  28. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  29. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderDetailServiceImpl.java
  30. 11 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupPaymentCalenderServiceImpl.java
  31. 56 30
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  32. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/OnlineMusicGroupServiceImpl.java
  33. 23 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  34. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  35. 17 26
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  36. 26 57
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  37. 37 18
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  38. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  39. 10 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultMusicGroupSalaryServiceImpl.java
  40. 5 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  41. 5 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  42. 2 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  43. 7 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  44. 3 3
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  45. 6 5
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  46. 1 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  47. 28 2
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  48. 4 2
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  49. 12 2
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  50. 42 9
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  51. 4 7
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  52. 8 2
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  53. 8 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  54. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  55. 8 5
      mec-student/src/main/java/com/ym/mec/student/controller/ClassGroupController.java
  56. 3 3
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  57. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/PushTeacherExceptionAttendanceTask.java
  58. 60 4
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  59. 20 14
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupController.java
  60. 5 3
      mec-web/src/main/java/com/ym/mec/web/controller/MusicGroupPaymentCalenderDetailController.java
  61. 14 5
      mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java
  62. 8 2
      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));
 	}

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

@@ -714,10 +714,11 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @param type
      * @return
      */
-    List<HighClassGroupDto> findHighClassGroupByTypeAndSubjectId(@Param("musicGroupId") String musicGroupId, @Param("subjectId") Integer subjectId, @Param("type") String type);
+    List<HighClassGroupDto> findHighClassGroupByTypeAndSubjectId(@Param("musicGroupId") String musicGroupId, @Param("subjectId") Integer subjectId, @Param("type") String type, @Param("classGroupIds") String classGroupIds);
 
     /**
      * 根据班级id获取基础技能班
+     *
      * @param musicGroupId
      * @param classGroupIds
      * @return

+ 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);
 }

+ 4 - 3
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.BasicUserDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.common.dal.BaseDAO;
@@ -33,8 +34,8 @@ public interface ExtracurricularExercisesDao extends BaseDAO<Long, Extracurricul
      * @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);
+    List<BasicUserDto> findNoExercisesStudentsInThisWeekWithTeacher(@Param("teacherId") Integer teacherId,
+                                                                    @Param("startDate") String startDate,
+                                                                    @Param("search") String search);
 
 }

+ 28 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java

@@ -323,4 +323,32 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
      */
     int countStudentAndTeacherTrialPractices(@Param("studentId") Integer studentId,
                                              @Param("teacherId") Integer teacherId);
+
+    /**
+     * @describe 获取需要提醒续费网管课的用户列表
+     * @author Joburgess
+     * @date 2020.05.29
+     * @return java.util.List<com.ym.mec.biz.dal.entity.PracticeGroup>
+     */
+    List<Integer> getNeedRemindPracticeUsers();
+
+    /**
+     * @describe 获取用户和需要提醒的网管课map
+     * @author Joburgess
+     * @date 2020.05.29
+     * @param studentIds:
+     * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.String>>
+     */
+    List<Map<Integer, String>> getUserNeedRemindPracticeIdMap(@Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * @describe 批量修改网管课续费提醒状态
+     * @author Joburgess
+     * @date 2020.05.29
+     * @param practiceIds:
+     * @param remindStatus:
+     * @return int
+     */
+    int batchUpdatePracticeRemindStatus(@Param("practiceIds") List<Integer> practiceIds,
+                                        @Param("remindStatus") Integer remindStatus);
 }

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

@@ -95,4 +95,16 @@ public interface StudentDao extends com.ym.mec.common.dal.BaseDAO<Integer, Stude
                                            @Param("serviceTag") Integer serviceTag,
                                            @Param("operatingTag") Integer operatingTag);
 
+    /**
+     * @describe 更新指定学员的服务指标
+     * @author Joburgess
+     * @date 2020.05.28
+     * @param studentId: 学生编号
+     * @param serviceTag: 服务指标
+     * @return int
+     */
+    int updateStudentServiceTag(@Param("studentId") Integer studentId,
+                                           @Param("studentIds") List<Integer> studentIds,
+                                           @Param("serviceTag") Integer serviceTag);
+
 }

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

@@ -288,4 +288,11 @@ public interface StudentManageDao {
      * @return
      */
     List<BasicUserDto> queryCanAddStudent(@Param("musicGroupId") String musicGroupId, @Param("musicGroupPaymentCalenderId") Long musicGroupPaymentCalenderId);
+
+    /**
+     * 学员是否有课
+     * @param userIds
+     * @return
+     */
+    List<Map<Integer,Integer>> queryHasCourseMap(@Param("userIds") Set<Integer> userIds);
 }

+ 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 = "教师角色")

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/Student4operating.java

@@ -14,11 +14,13 @@ public class Student4operating {
     private Integer vipTimes;
     private Integer freePracticeTimes;
     private Integer buyPracticeTimes;
+    private Integer musicNetWorkTimes;
 
     private String operatingTagStr;
     private String vipTimesStr;
     private String freePracticeTimesStr;
     private String buyPracticeTimesStr;
+    private String musicNetWorkTimesStr;
     private Integer studentNum;
 
     public String getOrganName() {
@@ -145,4 +147,20 @@ public class Student4operating {
 	public void setStudentNum(Integer studentNum) {
 		this.studentNum = studentNum;
 	}
+
+    public Integer getMusicNetWorkTimes() {
+        return musicNetWorkTimes;
+    }
+
+    public void setMusicNetWorkTimes(Integer musicNetWorkTimes) {
+        this.musicNetWorkTimes = musicNetWorkTimes;
+    }
+
+    public String getMusicNetWorkTimesStr() {
+        return musicNetWorkTimesStr;
+    }
+
+    public void setMusicNetWorkTimesStr(String musicNetWorkTimesStr) {
+        this.musicNetWorkTimesStr = musicNetWorkTimesStr;
+    }
 }

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

@@ -1,6 +1,8 @@
 package com.ym.mec.biz.dal.dto;
 
 import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
 
 import java.util.Date;
 
@@ -10,8 +12,28 @@ import java.util.Date;
  */
 public class StudentServeDto extends Student {
 
+    private GroupType groupType;
+
+    private TeachModeEnum teachMode;
+
     private Date courseStartTime;
 
+    public GroupType getGroupType() {
+        return groupType;
+    }
+
+    public void setGroupType(GroupType groupType) {
+        this.groupType = groupType;
+    }
+
+    public TeachModeEnum getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(TeachModeEnum teachMode) {
+        this.teachMode = teachMode;
+    }
+
     public Date getCourseStartTime() {
         return courseStartTime;
     }

+ 8 - 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;
@@ -39,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)
@@ -135,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;
     }
 

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

@@ -75,13 +75,13 @@ public class ClassGroup {
 
 	/** 班级类型(普通班级、合奏班级) */
 	@ApiModelProperty(value = "是否删除,1是 0否", required = false)
-	private Integer delFlag;
+	private Integer delFlag = 0;
 
 	@ApiModelProperty(value = "总统课次",required = false)
-	private Integer totalClassTimes;
+	private Integer totalClassTimes = 0;
 
 	@ApiModelProperty(value = "当前课次",required = false)
-	private Integer currentClassTimes;
+	private Integer currentClassTimes = 0;
 	
 	@ApiModelProperty(value = "班级图标",required = false)
 	private String img;

+ 9 - 11
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentRegistration.java

@@ -1,18 +1,16 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.entity.CooperationOrgan.OwnershipType;
+import com.ym.mec.biz.dal.enums.KitPurchaseMethodEnum;
+import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
 
 import java.math.BigDecimal;
 import java.util.Date;
 
-import org.apache.commons.lang3.builder.ToStringBuilder;
-
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.KitPurchaseMethodEnum;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.entity.CooperationOrgan.OwnershipType;
-
 /**
  * 对应数据库表(student_registration):
  */
@@ -85,7 +83,7 @@ public class StudentRegistration {
     private PaymentStatusEnum paymentStatus;
 
     @ApiModelProperty(value = "用户所在乐团状态)",required = false)
-    private ClassGroupStudentStatusEnum musicGroupStatus;
+    private StudentMusicGroupStatusEnum musicGroupStatus;
 
     @ApiModelProperty(value = "班级id", required = true)
     private Integer classGroupId;
@@ -129,7 +127,7 @@ public class StudentRegistration {
         this.transferStudent = transferStudent;
     }
 
-    public ClassGroupStudentStatusEnum getMusicGroupStatus() {
+    public StudentMusicGroupStatusEnum getMusicGroupStatus() {
         return musicGroupStatus;
     }
 
@@ -142,7 +140,7 @@ public class StudentRegistration {
         this.birthdate = birthdate;
     }
 
-    public void setMusicGroupStatus(ClassGroupStudentStatusEnum musicGroupStatus) {
+    public void setMusicGroupStatus(StudentMusicGroupStatusEnum musicGroupStatus) {
         this.musicGroupStatus = musicGroupStatus;
     }
 

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

@@ -40,6 +40,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     PUSH_TEACHER_COURSE_COLLIDE("PUSH_TEACHER_COURSE_COLLIDE", "课程冲突"),
     PAY_PRACTICE_BUY_SUCCESS("PAY_PRACTICE_BUY_SUCCESS", "网管课购买成功"),
     PRACTICE_COMPLETED_STUDY_REPORT("PRACTICE_COMPLETED_STUDY_REPORT", "网管课完成学习报告"),
+    PRACTICE_RENEW_REMIND_PUSH("PRACTICE_RENEW_REMIND_PUSH", "网管课续费推送"),
     FREE_PRACTICE_APPLY_PUSH("FREE_PRACTICE_APPLY_PUSH", "免费陪练课预约推送"),
     STUDENT_PUSH_NAMES_ACHIEVE("STUDENT_PUSH_NAMES_ACHIEVE", "点名完成"),
     SCHEDULE_CHANGE("SCHEDULE_CHANGE", "课表变动"),
@@ -96,6 +97,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", "乐团关闭"),

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/StudentMusicGroupStatusEnum.java

@@ -0,0 +1,33 @@
+package com.ym.mec.biz.dal.enums;
+
+import com.ym.mec.common.enums.BaseEnum;
+
+public enum StudentMusicGroupStatusEnum implements BaseEnum<String, StudentMusicGroupStatusEnum> {
+    APPLY("APPLY","报名"),NORMAL("NORMAL", "在读"), QUIT("QUIT", "退班"), QUIT_SCHOOL("QUIT_SCHOOL","休学");
+
+    private String code;
+
+    private String msg;
+
+    StudentMusicGroupStatusEnum(String code, String msg) {
+        this.code = code;
+        this.msg = msg;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    @Override
+    public String getCode() {
+        return this.code;
+    }
+}

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

@@ -27,6 +27,9 @@ public class StudentOperatingQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否有收费网管课")
     private Integer HasBuyPractice;
 
+    @ApiModelProperty(value = "是否有乐团网管课")
+    private Integer hasMusicNetWork;
+
     public String getOrganId() {
         return organId;
     }
@@ -74,4 +77,12 @@ public class StudentOperatingQueryInfo extends QueryInfo {
     public void setHasBuyPractice(Integer hasBuyPractice) {
         HasBuyPractice = hasBuyPractice;
     }
+
+    public Integer getHasMusicNetWork() {
+        return hasMusicNetWork;
+    }
+
+    public void setHasMusicNetWork(Integer hasMusicNetWork) {
+        this.hasMusicNetWork = hasMusicNetWork;
+    }
 }

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

@@ -34,14 +34,6 @@ public class TeacherCloseQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "分部")
     private String organId;
 
-    public String getCourseScheduleStatus() {
-        return courseScheduleStatus;
-    }
-
-    public void setCourseScheduleStatus(String courseScheduleStatus) {
-        this.courseScheduleStatus = courseScheduleStatus;
-    }
-
     public String getSignOutStatus() {
         return signOutStatus;
     }

+ 2 - 1
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.BasicUserDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
@@ -35,6 +36,6 @@ public interface ExtracurricularExercisesService extends BaseService<Long, Extra
      * @param search:
      * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
      */
-    List<SimpleUserDto> getDontServeStudents(Integer teacherId, String search);
+    List<BasicUserDto> 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 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/MusicGroupService.java

@@ -15,7 +15,6 @@ import com.ym.mec.biz.dal.dto.SporadicPayDto;
 import com.ym.mec.biz.dal.dto.SubFeeSettingDto;
 import com.ym.mec.biz.dal.dto.UpdateExpectedNumDto;
 import com.ym.mec.biz.dal.entity.ApprovalStatus;
-import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.page.MusicGroupQueryInfo;
@@ -274,7 +273,7 @@ public interface MusicGroupService extends BaseService<String, MusicGroup> {
 	 * 乐团筹备结束后,3.0乐团推送小班课缴费信息
 	 * @param musicGroupId
 	 */
-	void pushMessage(String musicGroupId, String classGroupIds) throws IOException;
+	int pushMessage(String musicGroupId, String classGroupIds) throws IOException;
 
 	/**
 	 * 补全musicGroupStudentFee表数据

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

@@ -305,4 +305,11 @@ public interface PracticeGroupService extends BaseService<Long, PracticeGroup> {
      */
     boolean isPurchasedPracticeCourse(Integer userId);
 
+    /**
+     * @describe 网管课续费提醒
+     * @author Joburgess
+     * @date 2020.05.29
+     * @return void
+     */
+    void practiceGroupRenewRemind();
 }

+ 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();
 }

文件差異過大導致無法顯示
+ 319 - 317
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java


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

@@ -3,12 +3,14 @@ package com.ym.mec.biz.service.impl;
 import com.alibaba.fastjson.JSON;
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
 import com.ym.mec.biz.dal.dao.CourseScheduleTeacherSalaryDao;
+import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.TeacherAttendanceDao;
 import com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -52,6 +54,8 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
     @Autowired
     private TeacherDefaultMusicGroupSalaryService teacherDefaultMusicGroupSalaryService;
+    @Autowired
+    private StudentDao studentDao;
 
     private static String holidayUrl = "http://tool.bitefu.net/jiari/?d=";
 
@@ -293,6 +297,9 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
                 }
             }
             courseScheduleTeacherSalaryService.batchInsert(courseScheduleTeacherSalaryList);
+
+            List<Integer> studentIds = userIdStrSet.stream().map(e -> Integer.parseInt(e)).collect(Collectors.toList());
+            studentDao.updateStudentServiceTag(null,studentIds, YesOrNoEnum.YES.getCode());
         }
 
         //乐团在合奏班

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

@@ -30,6 +30,7 @@ import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.json.JsonUtil;
 import org.apache.commons.collections.ListUtils;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -132,6 +133,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private TeacherDao teacherDao;
     @Autowired
 	private CourseScheduleReviewDao courseScheduleReviewDao;
+    @Autowired
+	private PracticeGroupService practiceGroupService;
 
     private final Logger LOGGER = LoggerFactory
             .getLogger(this.getClass());
@@ -3346,7 +3349,13 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             teacherAttendanceDao.updateViPSignOutStatus(courseScheduleIdList.stream().map(a -> a.toString()).collect(Collectors.joining(",")));
         }*/
 
-        return true;
+		try {
+			practiceGroupService.practiceGroupRenewRemind();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+		return true;
     }
 
     @Override
@@ -3599,6 +3608,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         Calendar calendar = Calendar.getInstance();
         calendar.setTime(courseGenerateInfo.getCourseCreateStartTime());
 
+        if(Objects.isNull(courseGenerateInfo.getCourseCount())||courseGenerateInfo.getCourseCount()<=0){
+        	throw new BizException("可排课次数不足");
+		}
+
         Set<String> holidayDays = new HashSet<>();
 
 		if (courseGenerateInfo.isSkipHoliday()) {
@@ -3676,7 +3689,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());
 
@@ -3704,13 +3717,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()));
 			}
         }

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

@@ -605,7 +605,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             e.printStackTrace();
         }
 
-        studentDao.updateStudentServiceOrOperatingTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+        studentDao.updateStudentServiceTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         imGroupMemberList.add(new ImGroupMember(practiceGroup.getUserId().toString()));
@@ -1145,7 +1145,7 @@ public class EduPracticeGroupServiceImpl implements EduPracticeGroupService{
             e.printStackTrace();
         }
 
-        studentDao.updateStudentServiceOrOperatingTag(practiceGroupBuyParams.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+        studentDao.updateStudentServiceTag(practiceGroupBuyParams.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(practiceGroupBuyParams.getEducationalTeacherId())){

+ 2 - 1
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.BasicUserDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
@@ -160,7 +161,7 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 	}
 
 	@Override
-	public List<SimpleUserDto> getDontServeStudents(Integer teacherId, String search) {
+	public List<BasicUserDto> 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);

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

@@ -111,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;
@@ -132,7 +133,7 @@ public class MusicGroupPaymentCalenderDetailServiceImpl extends BaseServiceImpl<
 			}
 		}
 		if(calenderDetails.size() == 0){
-			return;
+			return "操作失败,学员有未完成的订单";
 		}
 		String musicGroupId = calenderDetails.get(0).getMusicGroupId();
 		calenderDetails.forEach(e->{
@@ -158,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

+ 11 - 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 {

+ 56 - 30
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;
@@ -214,7 +212,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 List<StudentRegistration> musicGroupStudentRegistrationList = studentRegistrationDao.findStudentListByIdList(e.getRegisterIdList());
                 for (StudentRegistration studentRegistration : musicGroupStudentRegistrationList) {
                     studentRegistration.setId(null);
-                    studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.NORMAL);
+                    studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.APPLY);
                     studentRegistration.setPaymentStatus(PaymentStatusEnum.OPEN);
                     studentRegistration.setMusicGroupId(musicGroupId);
                     studentRegistration.setSubjectId(e.getSubjectId());
@@ -942,7 +940,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         //生成学员费用表
         List<MusicGroupStudentFee> musicGroupStudentFees = musicGroupStudentFeeDao.initMusicGroupStudentFee(musicGroupId);
         if (musicGroupStudentFees != null && musicGroupStudentFees.size() > 0) {
-            if (musicGroup.getFeeType() != FeeType.OFFLINE) {
+            if (musicGroup.getFeeType() != null && musicGroup.getFeeType() != FeeType.OFFLINE) {
                 for (MusicGroupStudentFee sf : musicGroupStudentFees) {
                     sf.setRemainNetworkClassTimes(sf.getRemainNetworkClassTimes() + 1);
                 }
@@ -1041,35 +1039,63 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
     }
 
     @Override
-    public void pushMessage(String musicGroupId, String classGroupIds) throws IOException {
+    public int pushMessage(String musicGroupId, String classGroupIds) throws IOException {
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
-        if (musicGroup.getOwnershipType() != null && musicGroup.getOwnershipType() == CooperationOrgan.OwnershipType.OWN) {
-            List<HighClassGroupDto> highClassGroup = classGroupDao.findHighClassGroup(musicGroupId, classGroupIds);
-            Set<ClassGroupTypeEnum> classGroupTypeSet = highClassGroup.stream().map(HighClassGroupDto::getType).collect(Collectors.toSet());
+        if (musicGroup.getOwnershipType() == null || musicGroup.getOwnershipType() != CooperationOrgan.OwnershipType.OWN) {
+            throw new BizException("三方乐团,不推送报名信息");
+        }
+        List<HighClassGroupDto> highClassGroup = classGroupDao.findHighClassGroup(musicGroupId, classGroupIds);
 
-            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());
+        if(classGroupIds != null && !classGroupIds.isEmpty()){
+            List<Integer> classGroupSet = highClassGroup.stream().map(HighClassGroupDto::getId).collect(Collectors.toList());
+            Map<Integer, Long> totalNumMap = MapUtil.convertIntegerMap(courseScheduleDao.countTotalNumByClassGroupId(classGroupSet, null));
+            highClassGroup.removeIf(next -> totalNumMap.get(next.getId()) != null && totalNumMap.get(next.getId()) > 0);
+        }
+        Set<ClassGroupTypeEnum> classGroupTypeSet = highClassGroup.stream().map(HighClassGroupDto::getType).collect(Collectors.toSet());
+        String HighClassGroupSubjectIds = highClassGroup.stream().filter(e -> e.getType().equals(ClassGroupTypeEnum.HIGH)).map(HighClassGroupDto::getSubjectIdList).collect(Collectors.joining(","));
+        String HighOnlineClassGroupSubjectIds = highClassGroup.stream().filter(e -> e.getType().equals(ClassGroupTypeEnum.HIGH_ONLINE)).map(HighClassGroupDto::getMemo).collect(Collectors.joining(","));
+        if (!HighClassGroupSubjectIds.isEmpty() && !HighOnlineClassGroupSubjectIds.isEmpty()) {
+            HighClassGroupSubjectIds += "," + HighOnlineClassGroupSubjectIds;
+        } else {
+            HighClassGroupSubjectIds += HighOnlineClassGroupSubjectIds;
+        }
+
+        String[] subjectIds = HighClassGroupSubjectIds.split(",");
+
+        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);
+        }
+
+
+        Map<Integer, String> studentMap = new HashMap<>();
+        for (StudentRegistration student : students) {
+            if (!Arrays.asList(subjectIds).contains(student.getActualSubjectId().toString())) {
+                continue;
             }
+            studentMap.put(student.getUserId(), student.getUserId().toString());
+        }
+
+        if (studentMap.size() == 0) {
+            throw new BizException("开启报名失败,没有可推送的学生");
+        }
 
-            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);
+        String baseURL = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
+        String url = baseURL + "/#/smallRegister?musicGroupId=" + musicGroupId;
+        classGroupIds =  highClassGroup.stream().map(e->e.getId().toString()).collect(Collectors.joining(","));
+        if(classGroupIds != null && !classGroupIds.isEmpty()){
+            url = baseURL + "/#/smallRegister?musicGroupId=" + musicGroupId+"&classGroupIds="+classGroupIds;
         }
+        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);
+
+        return studentMap.size();
     }
 
 //    @Override
@@ -1394,7 +1420,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
 
             // 退团
-            studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.QUIT);
+            studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
             studentRegistration.setUpdateTime(date);
 
             studentRegistrationDao.update(studentRegistration);
@@ -1495,7 +1521,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupStudentFeeDao.deleteByUserIdAndMusicGroupId(userId, musicGroupId);
 
         // 退团
-        studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.QUIT);
+        studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.QUIT);
         studentRegistration.setUpdateTime(date);
 
         studentRegistrationDao.update(studentRegistration);

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

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

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

@@ -2114,6 +2114,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             }
         }
 
+        studentDao.updateStudentServiceTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode());
+
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
             imGroupMemberList.add(new ImGroupMember(practiceGroup.getEducationalTeacherId().toString()));
@@ -3283,7 +3285,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
             e.printStackTrace();
         }
 
-        studentDao.updateStudentServiceOrOperatingTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode(),null);
+        studentDao.updateStudentServiceTag(practiceGroup.getStudentId(),null,YesOrNoEnum.YES.getCode());
 
         List<ImGroupMember> imGroupMemberList = new ArrayList<>();
         if(Objects.nonNull(practiceGroup.getEducationalTeacherId())){
@@ -3716,4 +3718,24 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 		}
 		return false;
 	}
+
+    @Override
+    public void practiceGroupRenewRemind() {
+        List<Integer> needRemindStudentIds = practiceGroupDao.getNeedRemindPracticeUsers();
+        List<Map<Integer, String>> userNeedRemindPracticeIdMaps = practiceGroupDao.getUserNeedRemindPracticeIdMap(needRemindStudentIds);
+        if(!CollectionUtils.isEmpty(userNeedRemindPracticeIdMaps)){
+            Map<Integer, String> userNeedRemindPracticeIdMap = MapUtil.convertIntegerMap(userNeedRemindPracticeIdMaps);
+            String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+            String pushUrl = baseApiUrl + "/#/auditionActive/1?groupId=";
+            for (Map.Entry<Integer, String> integerStringEntry : userNeedRemindPracticeIdMap.entrySet()) {
+                Map<Integer, String> userMap = new HashMap<>();
+                userMap.put(integerStringEntry.getKey(), integerStringEntry.getKey().toString());
+                String[] params = integerStringEntry.getValue().split("-");
+                sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.PRACTICE_RENEW_REMIND_PUSH,
+                        userMap, null, 0, "5?" + pushUrl + (params[0].equals("CHARGE")?params[1]:""), "STUDENT");
+            }
+            List<Integer> practiceIds = userNeedRemindPracticeIdMap.values().stream().map(e->Integer.valueOf(e.split("-")[1])).collect(Collectors.toList());
+            practiceGroupDao.batchUpdatePracticeRemindStatus(practiceIds, YesOrNoEnum.YES.getCode());
+        }
+    }
 }

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

@@ -74,7 +74,7 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 				exercisesSituationDto.setExistVipCourse(Objects.isNull(vipCourses)?0:vipCourses.intValue());
 				Long practiceCourses=studentPracticeCourseMap.get(exercisesSituationDto.getStudentId());
 				exercisesSituationDto.setExistPracticeCourse(Objects.isNull(practiceCourses)?0:practiceCourses.intValue());
-				exercisesSituationDto.setExpectExercisesNum((int) until+1);
+//				exercisesSituationDto.setExpectExercisesNum((int) until+1);
 				List<StudentEduTeacherDto> studentEduTeachers = studentEduTeachersMap.get(exercisesSituationDto.getStudentId());
 				if(!CollectionUtils.isEmpty(studentEduTeachers)){
 					List<StudentEduTeacherDto> t1 = studentEduTeachers.stream().filter(set -> set.getGroupType().equals(GroupType.VIP.getCode())||set.getGroupType().equals(GroupType.PRACTICE.getCode())).collect(Collectors.toList());
@@ -160,7 +160,7 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			dataList = extracurricularExercisesReplyDao.findStudentHomeworkDetailsInTimeZone(params);
 			Map<String, List<StudentServiceDetailDto>> weekHomeworks=new HashMap<>();
 			for (StudentServiceDetailDto studentServiceDetailDto : dataList) {
-				LocalDate homeworkCreateTime = LocalDateTime.ofInstant(studentServiceDetailDto.getHomeworkCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+				LocalDate homeworkCreateTime = LocalDateTime.ofInstant(studentServiceDetailDto.getCourseStartTime().toInstant(), DateUtil.zoneId).toLocalDate();
 				String mondayStr = homeworkCreateTime.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue()).toString();
 				if(!weekHomeworks.containsKey(mondayStr)){
 					weekHomeworks.put(mondayStr, new ArrayList<>());

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

@@ -1,33 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-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;
-import org.springframework.stereotype.Service;
-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.*;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.page.MusicGroupStudentQueryInfo;
-import com.ym.mec.biz.dal.page.StudentManageAttendanceQueryInfo;
-import com.ym.mec.biz.dal.page.StudentManageCourseQueryInfo;
-import com.ym.mec.biz.dal.page.StudentManageQueryInfo;
-import com.ym.mec.biz.dal.page.StudentManageVipClassQueryInfo;
-import com.ym.mec.biz.dal.page.StudentOperatingQueryInfo;
-import com.ym.mec.biz.dal.page.StudentSignQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherPaymentRecordInfo;
+import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.service.StudentManageService;
 import com.ym.mec.biz.service.StudentService;
 import com.ym.mec.common.entity.ImResult;
@@ -36,6 +17,13 @@ import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.util.collection.MapUtil;
+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.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -140,6 +128,8 @@ public class StudentManageServiceImpl implements StudentManageService {
             Map<Integer,String> vipGroupStatus = MapUtil.convertMybatisMap(vipGroupDao.queryUserVipStatus(userIds));
             //获取所在声部
             Map<Integer,String> subjectNames = MapUtil.convertMybatisMap(studentManageDao.querySubjectNames(userIds));
+            //学员是否有课
+            Map<Integer,Integer> hasCourseMap = MapUtil.convertMybatisMap(studentManageDao.queryHasCourseMap(userIds));
             dataList.forEach(e -> {
                 e.setOrganName(organNames.get(e.getOrganId()));
                 e.setMusicGroupName(musicGroupNames.get(e.getUserId().longValue()));
@@ -147,7 +137,8 @@ public class StudentManageServiceImpl implements StudentManageService {
                 e.setSubjectName(subjectNames.get(e.getUserId().longValue()));
                 e.setMusicGroupStatus(musicGroupStatus.get(e.getUserId().longValue()));
                 e.setVipGroupStatus(vipGroupStatus.get(e.getUserId()));
-                if(hasCourse == null){
+                e.setHasCourse(hasCourseMap.get(e.getUserId())==null?YesOrNoEnum.NO:YesOrNoEnum.YES);
+                /*if(hasCourse == null){
                     Integer course = studentManageDao.getHasCourse(e.getUserId());
                     e.setHasCourse(course==null?YesOrNoEnum.NO:course==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
                 }else {
@@ -156,7 +147,7 @@ public class StudentManageServiceImpl implements StudentManageService {
                     }else {
                         e.setHasCourse(YesOrNoEnum.NO);
                     }
-                }
+                }*/
                 e.setHasPracticeCourse(hasPracticeCourseMap.get(e.getUserId()) == null?YesOrNoEnum.NO:YesOrNoEnum.YES);
                 if(collect.get(e.getUserId()) != null){
                     e.setCourseBalance(collect.get(e.getUserId()).getCourseBalance());
@@ -422,10 +413,10 @@ public class StudentManageServiceImpl implements StudentManageService {
         Student student = new Student(userId, studentRegistrationDao.getSubjectIds(userId));
         student.setOperatingTag(sysUser.getOperatingTag());
     	student.setOperatingTempTag(0);
-        student.setServiceTag(sysUser.getServiceTag());
+        student.setServiceTag(sysUser.getServiceTag()==0?2:1);
         student.setTeacherId(sysUser.getTeacherId());
         studentService.upSet(student);
-        if(new Integer(0).equals(student.getServiceTag())){
+        if(new Integer(2).equals(student.getServiceTag())){
             studentExtracurricularExercisesSituationDao.deleteByStudent(sysUser.getId());
         }
         return userId;

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

@@ -1,66 +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.entity.MusicGroupPaymentCalender.FeeType;
-
-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.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.DealStatusEnum;
-import com.ym.mec.biz.dal.enums.GoodsType;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
-import com.ym.mec.biz.dal.enums.OrderTypeEnum;
-import com.ym.mec.biz.dal.enums.PaymentStatusEnum;
-import com.ym.mec.biz.dal.enums.PlatformCashAccountDetailTypeEnum;
+import com.ym.mec.biz.dal.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;
@@ -74,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 {
@@ -535,7 +499,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         String musicGroupId = studentRegistration.getMusicGroupId();
 
         StudentRegistration phoneAndMusicGroupId = studentRegistrationDao.getByPhoneAndMusicGroupId(musicGroupId, studentRegistration.getParentsPhone());
-        if (phoneAndMusicGroupId != null && phoneAndMusicGroupId.getMusicGroupStatus() != ClassGroupStudentStatusEnum.QUIT) {
+        if (phoneAndMusicGroupId != null && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.QUIT && phoneAndMusicGroupId.getMusicGroupStatus() != StudentMusicGroupStatusEnum.APPLY) {
             throw new BizException("该学员已存在");
         } else {
             SysUser sysUser = studentRegistrationDao.getSysUserByPhone(studentRegistration.getParentsPhone());
@@ -592,10 +556,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                     }
                 }
             }
+            MusicGroupStudentFee studentFeeDaoByUser = musicGroupStudentFeeDao.findByUser(userId, musicGroupId);
+            if(studentFeeDaoByUser != null){
+                throw new BizException("该学员已存在");
+            }
             studentRegistration.setActualSubjectId(studentRegistration.getSubjectId());
             studentRegistration.setUserId(userId);
             studentRegistration.setPaymentStatus(PaymentStatusEnum.OPEN);
-            studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.NORMAL);
+            studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.APPLY);
             studentRegistration.setTemporaryCourseFee(studentAddDto.getTemporaryCourseFee());
             //学生报名表
             Set<Integer> roleIds = new HashSet<>(1);
@@ -653,13 +621,14 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 paymentStatus = MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED;
                 studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
                 studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
+                studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
                 studentPaymentOrder.setActualAmount(reduce);
                 studentPaymentOrder.setPayTime(date);
             }
             MusicGroupStudentFee musicGroupStudentFee = new MusicGroupStudentFee(musicGroupId,
                     userId, studentRegistration.getSubjectId(), studentAddDto.getCourseFee(),
                     null, studentAddDto.getTemporaryCourseFee(), paymentStatus);
-            if(musicGroup.getFeeType() != FeeType.OFFLINE && musicGroupStudentFee.getTemporaryCourseFee().doubleValue() * 100 == 0){
+            if(musicGroup.getFeeType() != null && musicGroup.getFeeType() != MusicGroupPaymentCalender.FeeType.OFFLINE && musicGroupStudentFee.getTemporaryCourseFee().doubleValue() * 100 == 0){
             	musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
             }
             musicGroupStudentFeeDao.insert(musicGroupStudentFee);
@@ -807,7 +776,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentRegistration.setTemporaryCourseFee(new BigDecimal(0));
             }
             studentRegistration.setPaymentStatus(PaymentStatusEnum.YES);
-            studentRegistration.setMusicGroupStatus(ClassGroupStudentStatusEnum.NORMAL);
+            studentRegistration.setMusicGroupStatus(StudentMusicGroupStatusEnum.NORMAL);
             studentRegistrationDao.update(studentRegistration);
 
             //进行中乐团加入学生缴费
@@ -820,7 +789,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 musicGroupStudentFee.setLatestPaidTime(nowDate);
                 musicGroupStudentFee.setPaymentStatus(MusicGroupStudentFee.PaymentStatus.PAID_COMPLETED);
                 musicGroupStudentFee.setTemporaryCourseFee(BigDecimal.ZERO);
-                if(musicGroup.getFeeType() != FeeType.OFFLINE){
+                if(musicGroup.getFeeType() != null && musicGroup.getFeeType() != MusicGroupPaymentCalender.FeeType.OFFLINE){
                 	musicGroupStudentFee.setRemainNetworkClassTimes(musicGroupStudentFee.getRemainNetworkClassTimes() + 1);
                 }
                 musicGroupStudentFee.setUpdateTime(nowDate);

+ 37 - 18
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -10,6 +10,8 @@ import com.ym.mec.biz.dal.dto.StudentServiceHomeworkDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
+import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.util.date.DateUtil;
@@ -63,21 +65,36 @@ public class StudentServeServiceImpl implements StudentServeService {
             return;
         }
 
+        Map<Integer, List<StudentServeDto>> studentCoursesMap = serviceStudents.stream().collect(Collectors.groupingBy(StudentServeDto::getUserId));
+
         //本周不服务学员列表
         Set<Integer> dontServeInCurrentWeekStudentIds=new HashSet<>();
         //本周有课学员编号集合
         Set<Integer> haveClassStudentIds=new HashSet<>();
         //本周无课学员编号集合
         Set<Integer> noClassStudentIds=new HashSet<>();
-        for (StudentServeDto serviceStudent : serviceStudents) {
-            if(Objects.nonNull(serviceStudent.getCourseStartTime())&&serviceStudent.getCourseStartTime().after(nextMonday)){
-                dontServeInCurrentWeekStudentIds.add(serviceStudent.getUserId());
+        for (Map.Entry<Integer, List<StudentServeDto>> studentCoursesEntry : studentCoursesMap.entrySet()) {
+            List<StudentServeDto> haveCourseStudents = studentCoursesEntry.getValue().stream().filter(e -> Objects.nonNull(e.getCourseStartTime())).collect(Collectors.toList());
+            if(CollectionUtils.isEmpty(haveCourseStudents)){
+                noClassStudentIds.add(studentCoursesEntry.getKey());
+                continue;
+            }
+            StudentServeDto studentServeDto = haveCourseStudents.stream().min(Comparator.comparing(StudentServeDto::getCourseStartTime)).get();
+            if(Objects.isNull(studentServeDto.getCourseStartTime())){
+                noClassStudentIds.add(studentCoursesEntry.getKey());
+                continue;
+            }
+            if(studentServeDto.getCourseStartTime().after(nextMonday)){
+                dontServeInCurrentWeekStudentIds.add(studentCoursesEntry.getKey());
                 continue;
             }
-            if(Objects.nonNull(serviceStudent.getCourseStartTime())){
-                haveClassStudentIds.add(serviceStudent.getUserId());
+            long count = haveCourseStudents.stream().filter(e -> (GroupType.PRACTICE.equals(e.getGroupType()) ||
+                    (GroupType.MUSIC.equals(e.getGroupType()) && TeachModeEnum.OFFLINE.equals(e.getTeachMode())))
+                    &&nextMonday.after(e.getCourseStartTime())).count();
+            if(count>0){
+                haveClassStudentIds.add(studentCoursesEntry.getKey());
             }else{
-                noClassStudentIds.add(serviceStudent.getUserId());
+                noClassStudentIds.add(studentCoursesEntry.getKey());
             }
         }
 
@@ -95,23 +112,23 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
 
         List<StudentExtracurricularExercisesSituation> results=new ArrayList<>();
-        for (StudentServeDto serviceStudent : serviceStudents) {
+        for (Map.Entry<Integer, List<StudentServeDto>> studentCoursesEntry : studentCoursesMap.entrySet()) {
 
-            if(dontServeInCurrentWeekStudentIds.contains(serviceStudent.getUserId())){
+            if(dontServeInCurrentWeekStudentIds.contains(studentCoursesEntry.getKey())){
                 continue;
             }
 
             StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation();
-            studentExtracurricularExercisesSituation.setStudentId(serviceStudent.getUserId());
-            studentExtracurricularExercisesSituation.setTeacherId(serviceStudent.getTeacherId());
+            studentExtracurricularExercisesSituation.setStudentId(studentCoursesEntry.getKey());
+            studentExtracurricularExercisesSituation.setTeacherId(studentCoursesEntry.getValue().get(0).getTeacherId());
             studentExtracurricularExercisesSituation.setExpectExercisesNum(1);
             studentExtracurricularExercisesSituation.setWeekOfYear(nowDate.get(DateUtil.weekFields.weekOfYear()));
             studentExtracurricularExercisesSituation.setMonday(DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"));
             studentExtracurricularExercisesSituation.setSunday(DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"));
 
-            if(haveClassStudentIds.contains(serviceStudent.getUserId())){
+            if(haveClassStudentIds.contains(studentCoursesEntry.getKey())){
                 studentExtracurricularExercisesSituation.setServeType("HOMEWORK");
-                List<StudentServeCourseHomeworkDto> studentHomeworks = studentHomeworkMap.get(serviceStudent.getUserId());
+                List<StudentServeCourseHomeworkDto> studentHomeworks = studentHomeworkMap.get(studentCoursesEntry.getKey());
                 if(CollectionUtils.isEmpty(studentHomeworks)){
                     studentExtracurricularExercisesSituation.setActualExercisesNum(0);
                     studentExtracurricularExercisesSituation.setExercisesReplyNum(0);
@@ -123,17 +140,18 @@ public class StudentServeServiceImpl implements StudentServeService {
                     studentExtracurricularExercisesSituation.setActualExercisesNum(1);
                     long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
                     studentExtracurricularExercisesSituation.setExercisesReplyNum(replyNum>0?1:0);
-                    if(replyNum>0){
+                    long haveSubmitTimes = studentHomeworks.stream().filter(e -> Objects.nonNull(e.getSubmitTime())).count();
+                    if(replyNum>0&&haveSubmitTimes>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) {
-                        if(!new Integer(1).equals(studentHomework.getStatus())){
+                        if(!YesOrNoEnum.YES.equals(studentHomework.getStatus())){
                             continue;
                         }
-                        if(!new Integer(1).equals(studentHomework.getIsReplied())){
+                        if(!YesOrNoEnum.YES.equals(studentHomework.getIsReplied())){
                             continue;
                         }
                         exercisesMessageNum+=1;
@@ -147,9 +165,9 @@ public class StudentServeServiceImpl implements StudentServeService {
                 }
             }
 
-            if(noClassStudentIds.contains(serviceStudent.getUserId())){
+            if(noClassStudentIds.contains(studentCoursesEntry.getKey())){
                 studentExtracurricularExercisesSituation.setServeType("EXERCISE");
-                List<ExtracurricularExercisesReply> studentExercises = studentExercisesMap.get(serviceStudent.getUserId());
+                List<ExtracurricularExercisesReply> studentExercises = studentExercisesMap.get(studentCoursesEntry.getKey());
                 if(CollectionUtils.isEmpty(studentExercises)){
                     studentExtracurricularExercisesSituation.setActualExercisesNum(0);
                     studentExtracurricularExercisesSituation.setExercisesReplyNum(0);
@@ -161,7 +179,8 @@ public class StudentServeServiceImpl implements StudentServeService {
                 studentExtracurricularExercisesSituation.setActualExercisesNum(1);
                 long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
                 studentExtracurricularExercisesSituation.setExercisesReplyNum(replyNum>0?1:0);
-                if(replyNum>0){
+                long haveSubmitTimes = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).count();
+                if(replyNum>0&&haveSubmitTimes>0){
                     Date lastSubmitTime = studentExercises.stream().filter(e->Objects.nonNull(e.getSubmitTime())).max(Comparator.comparing(ExtracurricularExercisesReply::getSubmitTime)).get().getSubmitTime();
                     studentExtracurricularExercisesSituation.setLastSubmitTime(lastSubmitTime);
                 }

+ 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);
+	}
 }

+ 10 - 2
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherDefaultMusicGroupSalaryServiceImpl.java

@@ -30,6 +30,7 @@ import com.ym.mec.biz.dal.enums.TeachTypeEnum;
 import com.ym.mec.biz.service.TeacherDefaultMusicGroupSalaryService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.date.DateUtil;
 
@@ -123,7 +124,7 @@ public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<L
 								BigDecimal duration = new BigDecimal(DateUtil.minutesBetween(ts.getCourseSchedule().getStartClassTime(), ts.getCourseSchedule()
 										.getEndClassTime()));
 								int mins = 0;
-								if(tdms.getCourseScheduleType() == CourseScheduleType.HIGH_ONLINE) {
+								if(tdms.getCourseScheduleType() == CourseScheduleType.HIGH_ONLINE || tdms.getCourseScheduleType() == CourseScheduleType.MUSIC_NETWORK) {
 									if (!classGroupStudentNumMap.containsKey(ts.getClassGroupId())) {
 										// 查询 班级人数
 										String[] strs = classGroupStudentMapperDao.findStudentNumByClassGroupId(ts.getClassGroupId());
@@ -132,7 +133,14 @@ public class TeacherDefaultMusicGroupSalaryServiceImpl extends BaseServiceImpl<L
 									String salaryRuleJson = tdms.getSalaryRuleJson();
 									if (StringUtils.isNotBlank(salaryRuleJson)) {
 										JSONObject obj = JSON.parseObject(salaryRuleJson);
-										ts.setExpectSalary(new BigDecimal(obj.getDouble(classGroupStudentNumMap.get(ts.getClassGroupId()) + "")));
+										if(obj == null){
+											throw new BizException("课酬设置不完整");
+										}
+										Integer studentNum = classGroupStudentNumMap.get(ts.getClassGroupId());
+										if(studentNum == null || studentNum == 0){
+											studentNum = 1;
+										}
+										ts.setExpectSalary(new BigDecimal(obj.getDouble(studentNum + "")));
 										list.add(ts);
 									}
 									

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

@@ -1140,7 +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);
+			studentDao.updateStudentServiceTag(classGroupStudent.getUserId(), null, YesOrNoEnum.YES.getCode());
 		}
 
 		try {
@@ -1737,6 +1737,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			StudentPauseInfo studentPauseInfo1 = studentPauseInfos.stream().min(Comparator.comparing(StudentPauseInfo::getSurplusCourseNum)).get();
 			Map<String, Object> courseInfo1 = JSON.parseObject(studentPauseInfo1.getCoursesJson(), Map.class);
 			Integer[] teachModeSequence1=JSON.parseArray(courseInfo1.get("teaChModeSequence").toString(), Integer.class).stream().toArray(Integer[]::new);
+			if(teachModeSequence1.length<=0){
+				throw new BizException("此学员无剩余课时");
+			}
 			studentRecoverInfo.setCourseCount(teachModeSequence1.length);
 			List<CourseSchedule> newCourseSchedules = courseScheduleService.createCourses(studentRecoverInfo,false);
 			for(int i=0;i<newCourseSchedules.size();i++){
@@ -2711,7 +2714,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(),null);
 
-		studentDao.updateStudentServiceOrOperatingTag(null, studentIds, YesOrNoEnum.YES.getCode(),null);
+		studentDao.updateStudentServiceTag(null, studentIds, YesOrNoEnum.YES.getCode());
 
 		try {
 			ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);

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

@@ -972,6 +972,7 @@
         <result column="total_class_times_" property="totalClassTimes"/>
         <result column="img_" property="img"/>
         <result column="current_class_times_" property="currentClassTimes"/>
+        <result column="memo_" property="memo"/>
     </resultMap>
     <select id="findClassGroupByMusicGroupIdAndSubjectId" resultMap="HighClassGroup">
         SELECT * FROM class_group WHERE music_group_id_=#{musicGroupId}
@@ -1281,7 +1282,10 @@
         <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';
+        <if test="classGroupIds != null">
+            AND FIND_IN_SET(id_,#{classGroupIds})
+        </if>
+        AND type_ = #{type} AND del_flag_='0';
     </select>
 
     <select id="findHighClassGroup" resultMap="HighClassGroup">

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

@@ -270,8 +270,9 @@
 
     <!-- 查询班级某状态的所有学生 -->
     <select id="findClassStudentList" resultMap="com.ym.mec.biz.dal.dao.StudentRegistrationDao.StudentRegistration">
-        SELECT sr.* FROM class_group_student_mapper cgsm
+        SELECT sr.*,su.username_ FROM class_group_student_mapper cgsm
         LEFT JOIN student_registration sr ON (sr.user_id_ = cgsm.user_id_ AND sr.music_group_id_ = cgsm.music_group_id_)
+        LEFT JOIN sys_user su on sr.user_id_ = su.id_
         WHERE cgsm.class_group_id_ = #{classGroupId} AND sr.music_group_status_ != 'QUIT'
         AND cgsm.status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </select>

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

@@ -952,4 +952,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>

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

@@ -164,9 +164,9 @@
             resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
 		SELECT
 			su.id_ userId,
-			su.username_ userName,
-			su.avatar_ avatar,
-			GROUP_CONCAT(sub.name_) subjectNames
+			su.username_ name,
+			su.avatar_ headUrl,
+			GROUP_CONCAT(sub.name_) subjectName
 		FROM
 			student_extracurricular_exercises_situation_ sees
 			LEFT JOIN extracurricular_exercises_reply eer ON sees.student_id_ = eer.user_id_

+ 6 - 5
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml

@@ -411,9 +411,9 @@
 			ee.teacher_id_,
 			tea.real_name_ teacher_name_,
 			NULL group_id_,
-			NULL group_type,
+			NULL group_type_,
 			NULL group_name_,
-			NULL course_start_time_,
+			ee.create_time_ course_start_time_,
 			NULL course_end_time_,
 			ee.content_,
 			ee.create_time_ homework_create_time_,
@@ -436,7 +436,7 @@
 			cs.actual_teacher_id_,
 			tea.real_name_ teacher_name_,
 			cs.music_group_id_ group_id_,
-			cs.group_type_ group_type,
+			cs.group_type_,
 			cs.name_ group_name_,
 			CONCAT(cs.class_date_, ' ', cs.start_class_time_) course_start_time_,
 			CONCAT(cs.class_date_, ' ', cs.end_class_time_) course_end_time_,
@@ -453,7 +453,7 @@
 		LEFT JOIN course_schedule cs ON cs.id_=ch.course_schedule_id_
 		LEFT JOIN sys_user tea ON cs.actual_teacher_id_=tea.id_
 		WHERE
-			sch.user_id_=#{studentId} AND DATE_FORMAT( sch.create_time_, '%Y-%m-%d' ) BETWEEN #{monday} AND #{sunday})
+			sch.user_id_=#{studentId} AND cs.class_date_ BETWEEN #{monday} AND #{sunday})
 		ORDER BY homework_create_time_ DESC
 		<include refid="global.limit"/>
 	</select>
@@ -471,8 +471,9 @@
 				sch.id_
 			FROM
 				student_course_homework sch
+				LEFT JOIN course_schedule cs ON cs.id_=sch.course_schedule_id_
 			WHERE
-				sch.user_id_=#{studentId} AND DATE_FORMAT( sch.create_time_, '%Y-%m-%d' ) BETWEEN #{monday} AND #{sunday})
+				sch.user_id_=#{studentId} AND cs.class_date_ BETWEEN #{monday} AND #{sunday})
 		) t
 	</select>
 	<select id="getStudentExercisesWithTimeZone" resultMap="ExtracurricularExercisesReply">

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

@@ -410,6 +410,7 @@
 		SELECT sr.user_id_ 'key',GROUP_CONCAT(CASE WHEN sr.music_group_status_ = 'NORMAL' THEN '在读'
 		WHEN sr.music_group_status_ = 'LEAVE' THEN '请假'
 		WHEN sr.music_group_status_ = 'QUIT' THEN '退班'
+		WHEN sr.music_group_status_ = 'APPLY' THEN '报名'
 		WHEN sr.music_group_status_ = 'QUIT_SCHOOL' THEN '休学' END) 'value'
 		FROM student_registration sr
 		LEFT JOIN music_group mg ON sr.music_group_id_ = mg.id_

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

@@ -109,6 +109,12 @@
     <update id="updateMemo">
         UPDATE practice_group SET memo_ = #{memo},update_time_ = NOW() WHERE id_ = #{groupId}
     </update>
+    <update id="batchUpdatePracticeRemindStatus">
+        UPDATE practice_group SET reminded=#{remindStatus} WHERE id_ IN
+        <foreach collection="practiceIds" item="practiceId" separator="," open="(" close=")">
+            #{practiceId}
+        </foreach>
+    </update>
 
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="PracticeGroup">
@@ -164,9 +170,8 @@
         SELECT COUNT(*)
         FROM practice_group
         WHERE student_id_ = #{userId}
-          AND group_status_ = 'NORMAL'
+          AND group_status_ IN ('NORMAL', 'FINISH')
           AND type_='FREE'
-          AND create_time_ > '2020-03-25'
     </select>
     <select id="countPracticeGroupByOrgan" resultType="java.lang.Integer">
         SELECT count(*) FROM practice_group pg
@@ -677,11 +682,32 @@
             AND cs.actual_teacher_id_ = #{teacherId}
             AND pg.student_id_ = #{studentId}
     </select>
+
     <select id="checkStudentExitChargePractice" resultType="int">
         SELECT COUNT(id_) FROM practice_group WHERE type_='CHARGE' AND student_id_=#{studentId} AND group_status_ IN ('NORMAL', 'FINISH')
     </select>
+
     <select id="countStudentIngTrialPractices" resultType="int">
       SELECT COUNT(pg.id_) FROM practice_group pg LEFT JOIN course_schedule cs ON cs.music_group_id_=pg.id_
       WHERE pg.student_id_=#{studentId} AND pg.type_='TRIAL' AND cs.group_type_='PRACTICE' AND CONCAT(cs.class_date_, ' ', cs.end_class_time_)>NOW()
     </select>
+
+    <select id="getNeedRemindPracticeUsers" resultType="int">
+        SELECT pg.student_id_ FROM practice_group pg
+        LEFT JOIN course_schedule cs ON cs.music_group_id_=pg.id_
+        WHERE pg.group_status_='NORMAL' AND cs.group_type_='PRACTICE' AND CONCAT(class_date_, ' ', end_class_time_)>NOW()
+        GROUP BY pg.student_id_ HAVING COUNT(cs.id_)=1;
+    </select>
+
+    <select id="getUserNeedRemindPracticeIdMap" resultType="map">
+        SELECT cssp.user_id_ AS 'key', CONCAT(pg.type_, '-', cssp.music_group_id_) AS 'value'
+        FROM course_schedule_student_payment cssp
+            LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_
+            LEFT JOIN practice_group pg ON pg.id_=cssp.music_group_id_
+        WHERE pg.reminded=0 AND cs.group_type_='PRACTICE' AND CONCAT(class_date_, ' ', end_class_time_)>NOW()
+            AND cssp.user_id_ IN
+            <foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+                #{studentId}
+            </foreach>
+    </select>
 </mapper>

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

@@ -147,6 +147,7 @@
 		FROM
 			student_extracurricular_exercises_situation_ sees
 			LEFT JOIN sys_user stu ON stu.id_=sees.student_id_
+			LEFT JOIN teacher t ON t.id_=sees.teacher_id_
 			LEFT JOIN sys_user tea ON tea.id_=sees.teacher_id_
 			LEFT JOIN organization o ON stu.organ_id_=o.id_
 		WHERE
@@ -159,7 +160,7 @@
 				AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 			<if test="organIdList != null">
-				AND FIND_IN_SET(stu.organ_id_,#{organIdList})
+				AND FIND_IN_SET(t.organ_id_,#{organIdList})
 			</if>
 			<if test="existVipCourse!=null and existVipCourse==1">
 				AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})
@@ -213,6 +214,7 @@
 			FROM
 				student_extracurricular_exercises_situation_ sees
 				LEFT JOIN sys_user stu ON stu.id_=sees.student_id_
+				LEFT JOIN teacher t ON t.id_=sees.teacher_id_
 				LEFT JOIN sys_user tea ON tea.id_=sees.teacher_id_
 				LEFT JOIN organization o ON stu.organ_id_=o.id_
 			WHERE
@@ -225,7 +227,7 @@
 				AND (stu.id_=#{search} OR stu.username_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
 			<if test="organIdList != null">
-				AND FIND_IN_SET(stu.organ_id_, #{organIdList})
+				AND FIND_IN_SET(t.organ_id_, #{organIdList})
 			</if>
 			<if test="existVipCourse!=null and existVipCourse==1">
 				AND EXISTS (SELECT cssp.id_ FROM course_schedule_student_payment cssp LEFT JOIN course_schedule cs ON cs.id_=cssp.course_schedule_id_ WHERE cssp.user_id_=sees.student_id_ AND cssp.group_type_='VIP' AND class_date_ BETWEEN #{monday} AND #{sunday})

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

@@ -115,7 +115,7 @@
         SELECT su.id_ user_id_,su.username_,su.gender_,su.phone_ parents_phone_,su.real_name_,
         su.birthdate_,su.nation_,su.organ_id_,
         CASE WHEN su.password_ IS NULL THEN 0 ELSE 1 END isActive_,
-        st.service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_
+        IF(st.service_tag_=2,0,st.service_tag_) service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_
         FROM sys_user su
         LEFT JOIN student st ON st.user_id_ = su.id_
         left join sys_user tu on tu.id_ = st.teacher_id_
@@ -386,7 +386,7 @@
     <sql id="queryMusicGroupStudentSql">
         <where>
             <if test="search != null and search != ''">
-                AND (su.username_ like CONCAT("%",#{search},"%") OR su.phone_ like CONCAT("%",#{search},"%"))
+                AND (su.id_ = #{search} OR su.username_ like CONCAT("%",#{search},"%") OR su.phone_ like CONCAT("%",#{search},"%"))
             </if>
             <if test="subjectId != null">
                 AND sr.actual_subject_id_ = #{subjectId}
@@ -901,5 +901,15 @@
         WHERE mgpc.id_ = #{musicGroupPaymentCalenderId}
         ) AND mgsf.music_group_id_ = #{musicGroupId}
     </select>
+    <select id="queryHasCourseMap" resultType="java.util.Map">
+        SELECT su.id_ 'key',COUNT(DISTINCT su.id_) 'value' FROM sys_user su
+        LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = su.id_
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        WHERE cs.status_ != 'OVER' AND su.id_ IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+        GROUP BY su.id_
+    </select>
 
 </mapper>

+ 42 - 9
mec-biz/src/main/resources/config/mybatis/StudentMapper.xml

@@ -190,6 +190,27 @@
         </if>
     </update>
 
+    <update id="updateStudentServiceTag">
+        UPDATE student
+        <set>
+            <if test="serviceTag != null">
+                service_tag_ = #{serviceTag},
+            </if>
+            update_time_ = NOW()
+        </set>
+        WHERE
+            service_tag_=0
+        <if test="studentId!=null">
+            AND user_id_ = #{studentId}
+        </if>
+        <if test="studentIds!=null and studentIds.size()>0">
+            AND 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"/>
         <result column="organ_id_" property="organId"/>
@@ -201,6 +222,7 @@
         <result column="vip_times_" property="vipTimes"/>
         <result column="free_practice_times_" property="freePracticeTimes"/>
         <result column="buy_practice_times_" property="buyPracticeTimes"/>
+        <result column="music_netWork_times_" property="musicNetWorkTimes"/>
         <result column="student_num_" property="studentNum"/>
     </resultMap>
 
@@ -214,6 +236,7 @@
         s.operating_tag_,
         a.vip_times_,
         a.buy_practice_times_,
+        a.music_netWork_times_,
         p.free_practice_times_
         FROM student s
         LEFT JOIN sys_user su ON s.user_id_ = su.id_
@@ -222,7 +245,8 @@
         LEFT JOIN (
         SELECT cssp.user_id_,
         SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
-        SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_
+        SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_,
+        SUM(case when (cs.type_='MUSIC_NETWORK' OR cs.type_='HIGH_ONLINE') then 1 ELSE 0 END) music_netWork_times_
         FROM course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
@@ -247,7 +271,8 @@
         LEFT JOIN (
         SELECT cssp.user_id_,
         SUM(case when (cs.group_type_ = 'VIP' AND cs.teach_mode_='ONLINE') then 1 ELSE 0 END) vip_times_,
-        SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_
+        SUM(case when (pg.type_='CHARGE') then 1 ELSE 0 END) buy_practice_times_,
+        SUM(case when (cs.type_='MUSIC_NETWORK' OR cs.type_='HIGH_ONLINE') then 1 ELSE 0 END) music_netWork_times_
         FROM course_schedule_student_payment cssp
         LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         LEFT JOIN practice_group pg ON pg.`id_` = cs.`music_group_id_` AND cs.`group_type_` = 'PRACTICE'
@@ -297,6 +322,12 @@
             <if test='hasBuyPractice != null and hasBuyPractice=="0"'>
                 AND (a.buy_practice_times_ =0 OR a.buy_practice_times_ IS NULL)
             </if>
+            <if test='hasMusicNetWork != null and hasMusicNetWork=="1"'>
+                AND a.music_netWork_times_ >=1
+            </if>
+            <if test='hasMusicNetWork != null and hasMusicNetWork=="0"'>
+                AND (a.music_netWork_times_ =0 OR a.music_netWork_times_ IS NULL)
+            </if>
         </where>
     </sql>
 
@@ -354,22 +385,24 @@
     </select>
 
     <resultMap id="StudentServeDto" type="com.ym.mec.biz.dal.dto.StudentServeDto" extends="Student">
-            <result property="courseStartTime" column="course_start_time_"/>
+        <result column="group_type_" property="groupType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="teach_mode_" property="teachMode" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result property="courseStartTime" column="course_start_time_"/>
     </resultMap>
     <select id="getBeServiceStudents" resultMap="StudentServeDto">
         SELECT
             s.user_id_,
-	        s.teacher_id_,
-            MIN( CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) ) course_start_time_
+            s.teacher_id_,
+            cs.group_type_,
+            cs.teach_mode_,
+            CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) course_start_time_
         FROM
             student s
             LEFT JOIN course_schedule_student_payment cssp ON cssp.user_id_ = s.user_id_
             LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
-            AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) &gt; #{monday}
-            AND cs.group_type_ IN ( 'MUSIC', 'PRACTICE' )
+            AND cs.group_type_ IN ('VIP', 'PRACTICE')
+            AND CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) > #{monday}
         WHERE
             s.service_tag_ = 1
-        GROUP BY
-            s.user_id_,s.teacher_id_
     </select>
 </mapper>

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

@@ -16,10 +16,8 @@
         <result column="current_class_" property="currentClass"/>
         <result column="subject_id_" property="subjectId"/>
         <result column="actual_subject_id_" property="actualSubjectId"/>
-        <result column="is_allow_adjust_" property="isAllowAdjust"
-                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="kit_purchase_method_" property="kitPurchaseMethod"
-                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="is_allow_adjust_" property="isAllowAdjust" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="kit_purchase_method_" property="kitPurchaseMethod" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="remark_" property="remark"/>
         <result column="class_group_id_" property="classGroupId"/>
         <result column="create_time_" property="createTime"/>
@@ -27,9 +25,8 @@
         <result column="parents_name_" property="parentsName"/>
         <result column="parents_phone_" property="parentsPhone"/>
         <result column="parents_company_" property="parentsCompany"/>
-        <result column="payment_status_" property="paymentStatus"
-                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="music_group_status_" property="musicGroupStatus"/>
+        <result column="payment_status_" property="paymentStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="music_group_status_" property="musicGroupStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="class_group_name_" property="classGroupName"/>
         <result column="temporary_course_fee_" property="temporaryCourseFee" />
         <result column="birthdate_" property="birthdate" />

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

@@ -176,8 +176,8 @@
         <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"/>
@@ -432,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()

+ 8 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -1,14 +1,21 @@
 package com.ym.mec.task;
 
+import org.springframework.beans.factory.annotation.Autowired;
 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();
@@ -117,4 +124,5 @@ public interface TaskRemoteService {
 	// 更新乐团缴费日历的状态
 	@GetMapping("task/updateMusicGroupPaymentCalenderStatus")
 	void updateMusicGroupPaymentCalenderStatus();
+
 }

+ 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("教师异常考勤推送失败");
+	}
 }

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

@@ -74,8 +74,10 @@ public class ClassGroupController extends BaseController {
 
     @ApiOperation(value = "用户声部小班课列表")
     @GetMapping("/highClassGroups")
-    @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String")})
-    public HttpResponseResult getHighClassGroup(String musicGroupId) {
+    @ApiImplicitParams({@ApiImplicitParam(name = "musicGroupId", value = "乐团id", required = true, dataType = "String"),
+            @ApiImplicitParam(name = "classGroupIds", value = "班级ids", required = true, dataType = "String")}
+    )
+    public HttpResponseResult getHighClassGroup(String musicGroupId,String classGroupIds) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         Integer userId = sysUser.getId();
         StudentRegistration studentRegistration = studentRegistrationService.queryByUserIdAndMusicGroupId(userId, musicGroupId);
@@ -85,13 +87,14 @@ public class ClassGroupController extends BaseController {
         MusicGroup musicGroup = musicGroupDao.get(musicGroupId);
         Map<String, Object> classGroupAndStatusMap = new HashMap<>();
         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");
+        if (classGroupIds != null && !classGroupIds.isEmpty()) {
+            highClassGroups = classGroupDao.findHighClassGroupByTypeAndSubjectId(musicGroupId, studentRegistration.getActualSubjectId(), "HIGH",classGroupIds);
+            List<HighClassGroupDto> highOnlineClassGroup = classGroupDao.findHighClassGroupByTypeAndSubjectId(musicGroupId, studentRegistration.getActualSubjectId(), "HIGH_ONLINE",classGroupIds);
             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);

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

@@ -125,15 +125,15 @@ public class MusicGroupController extends BaseController {
         if (studentRegistration == null) {
             return failed(HttpStatus.CONTINUE, "乐团报名信息不存在");
         }
-        if (studentRegistration.getPaymentStatus() != null && studentRegistration.getPaymentStatus().equals(PaymentStatusEnum.YES)) {
+        if (studentRegistration.getPaymentStatus() != null && studentRegistration.getPaymentStatus() == PaymentStatusEnum.YES) {
             return failed("您已缴费,请等待乐团开启");
         }
 
-        if (!studentRegistration.getPaymentStatus().equals(PaymentStatusEnum.OPEN)) {
+        if (studentRegistration.getPaymentStatus() != PaymentStatusEnum.OPEN) {
             return failed("乐团还未开启缴费,请等待通知");
         }
         if(studentRegistration.getTemporaryCourseFee() == null &&
-                (!musicGroup.getStatus().equals(MusicGroupStatusEnum.APPLY) && !musicGroup.getStatus().equals(MusicGroupStatusEnum.PAY))){
+                (musicGroup.getStatus() != MusicGroupStatusEnum.APPLY && musicGroup.getStatus() != MusicGroupStatusEnum.PAY)){
             return failed("乐团在"+musicGroup.getStatus().getMsg()+",不能缴费");
         }
         studentRegistration.setOwnershipType(musicGroup.getOwnershipType());

+ 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();
+	}
+}

+ 60 - 4
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.msg", "signInTime", "signInStatus.msg", "signOutTime", "signOutStatus.msg",
+                    "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();
@@ -1359,6 +1410,11 @@ public class ExportController extends BaseController {
             }else {
                 row.setVipTimesStr("否");
             }
+            if(row.getMusicNetWorkTimes() != null && row.getMusicNetWorkTimes() >0){
+                row.setMusicNetWorkTimesStr("是");
+            }else {
+                row.setMusicNetWorkTimesStr("否");
+            }
             if(row.getFreePracticeTimes() != null && row.getFreePracticeTimes() >0){
                 row.setFreePracticeTimesStr("是");
             }else {
@@ -1374,8 +1430,8 @@ public class ExportController extends BaseController {
         try {
 
             HSSFWorkbook workbook = POIUtil.exportExcel(
-                    new String[]{"分部", "学生", "学生编号", "指导老师","指导老师id", "参与运营指标", "有线上VIP课", "参与免费网管课", "有付费网管课"},
-                    new String[]{"organName", "studentName", "studentId", "teacherName","teacherId", "operatingTagStr", "vipTimesStr", "freePracticeTimesStr", "buyPracticeTimesStr"}, rows);
+                    new String[]{"分部", "学生", "学生编号", "指导老师","指导老师id", "参与运营指标", "有线上VIP课", "参与免费网管课", "有付费网管课","有乐团网管课"},
+                    new String[]{"organName", "studentName", "studentId", "teacherName","teacherId", "operatingTagStr", "vipTimesStr", "freePracticeTimesStr", "buyPracticeTimesStr","musicNetWorkTimes"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();

+ 20 - 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 = "乐团服务")
@@ -138,8 +145,7 @@ public class MusicGroupController extends BaseController {
 		if(StringUtils.isEmpty(musicGroupId)){
 			throw new BizException("参数校验错误");
 		}
-		musicGroupService.pushMessage(musicGroupId,classGroupIds);
-		return succeed();
+		return succeed(	musicGroupService.pushMessage(musicGroupId,classGroupIds));
 	}
 
 	@ApiOperation(value = "根据乐团ids获取乐团列表")

+ 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;
     }
 }

+ 14 - 5
mec-web/src/main/java/com/ym/mec/web/controller/StudentExtracurricularExercisesSituationController.java

@@ -13,6 +13,7 @@ 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 com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.apache.commons.lang3.StringUtils;
@@ -22,6 +23,8 @@ import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.time.DayOfWeek;
+import java.time.LocalDate;
 import java.util.Arrays;
 import java.util.List;
 
@@ -94,13 +97,19 @@ public class StudentExtracurricularExercisesSituationController extends BaseCont
     }
 
     @GetMapping("/exercisesSituationStatistics")
-    public HttpResponseResult exercisesSituationStatistics(String monday){
+    public HttpResponseResult exercisesSituationStatistics(String startDay, 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);
+        }
+        if(StringUtils.isNotBlank(startDay)){
+            LocalDate date=LocalDate.now();
+            if(StringUtils.isNotBlank(startDay)){
+                date= LocalDate.parse(startDay, DateUtil.dateFormatter);
+            }
+            while (date.isBefore(LocalDate.now())){
+                date = date.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+                studentServeService.exercisesSituationStatistics(date.format(DateUtil.dateFormatter));
+                date = date.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue()).plusDays(1);
             }
         }
         return succeed();

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

@@ -230,8 +230,8 @@ public class TaskController extends BaseController {
 	//学生服务信息统计
 	@GetMapping("/exercisesSituationStatistics")
 	public void exercisesSituationStatistics(){
-		extracurricularExercisesReplyService.exercisesSituationStatistics2(null);
-//		studentServeService.exercisesSituationStatistics(null);
+//		extracurricularExercisesReplyService.exercisesSituationStatistics2(null);
+		studentServeService.exercisesSituationStatistics(null);
 	}
 
 	//更新学生运营指标
@@ -245,4 +245,10 @@ public class TaskController extends BaseController {
 	public void updateMusicGroupPaymentCalenderStatus() {
 		musicGroupPaymentCalenderService.autoUpdateMusicGroupPaymentCalenderStatus();
 	}
+
+	// 推送教师异常考勤
+	@GetMapping("/pushTeacherExceptionAttendanceTask")
+	public void pushTeacherExceptionAttendanceTask() {
+		teacherAttendanceService.pushTeacherExceptionAttendanceTask();
+	}
 }

部分文件因文件數量過多而無法顯示