Procházet zdrojové kódy

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

yonge před 4 roky
rodič
revize
f087d21047
51 změnil soubory, kde provedl 689 přidání a 273 odebrání
  1. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  2. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  3. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupPaymentStudentCourseDetailDao.java
  4. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentExtracurricularExercisesSituationDao.java
  5. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMessageDao.java
  6. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherCourseSalaryDetail4WebDto.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleTeacherSalary.java
  8. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysMessage.java
  9. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  10. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseSalaryQueryInfo4Web.java
  11. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/MusicGroupStudentQueryInfo.java
  12. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentPaymentRouteOrderQueryInfo.java
  13. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMessageQueryInfo.java
  14. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleTeacherSalaryService.java
  15. 0 2
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentManageService.java
  16. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentServeService.java
  17. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  18. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java
  19. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  20. 10 7
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseReviewServiceImpl.java
  21. 49 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  22. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  23. 6 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  24. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  25. 3 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentExtracurricularExercisesSituationServiceImpl.java
  26. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentManageServiceImpl.java
  27. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentRouteOrderServiceImpl.java
  28. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  29. 98 65
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  30. 8 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  31. 20 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  32. 1 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  33. 14 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  34. 2 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  35. 27 3
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  36. 5 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentCalenderMapper.xml
  37. 24 4
      mec-biz/src/main/resources/config/mybatis/MusicGroupPaymentStudentCourseDetailMapper.xml
  38. 7 0
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  39. 6 0
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  40. 24 20
      mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml
  41. 13 6
      mec-biz/src/main/resources/config/mybatis/SysMessageMapper.xml
  42. 6 0
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  43. 35 26
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  44. 22 6
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  45. 4 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  46. 5 31
      mec-student/src/main/java/com/ym/mec/student/controller/SysMessageController.java
  47. 4 3
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMessageController.java
  48. 8 3
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  49. 2 73
      mec-web/src/main/java/com/ym/mec/web/controller/SysMessageController.java
  50. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java
  51. 100 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/SysEduMessageController.java

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -841,6 +841,16 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
     List<CourseSchedule> findCourseScheduleWithDate(@Param("startDate") String startDate, @Param("endDate") String endDate);
 
     /**
+     * @describe 统计指定时间段内已结算的课程组类型数量
+     * @author Joburgess
+     * @date 2020/12/29 0029
+     * @param startDate:
+     * @param endDate:
+     * @return int
+     */
+    int countIsSalaryGroupTypes(@Param("startDate") String startDate, @Param("endDate") String endDate);
+
+    /**
      * @param classGroupId: 班级编号
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseSchedule>
      * @describe 根据班级获取课程计划

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

@@ -506,4 +506,15 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @return
 	 */
 	List<Map<Long, String>> queryTeacherIdMap(@Param("courseScheduleIds") List<Long> courseScheduleIds, @Param("teacherRole") String teacherRole);
+
+	/**
+	 * @describe 获取指定时间段内已结算的教师课酬记录
+	 * @author Joburgess
+	 * @date 2020/12/29 0029
+	 * @param startDate:
+	 * @param endDate:
+	 * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary>
+	 */
+	List<CourseScheduleTeacherSalary> getIsSalaryWithDate(@Param("startDate") String startDate, @Param("endDate") String endDate);
+
 }

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

@@ -109,4 +109,20 @@ public interface MusicGroupPaymentStudentCourseDetailDao extends BaseDAO<Long, M
      * @return
      */
     List<Map<Integer, Integer>> queryStudentSubTotalCourseTimes(@Param("userId") Integer userId, @Param("musicGroupId") String musicGroupId);
+
+    /**
+     * 获取有可用时长的学员列表
+     *
+     * @param musicGroupId
+     * @return
+     */
+    List<Integer> queryHasSubTotalCourseTimeStudentIds(@Param("musicGroupId") String musicGroupId, @Param("hasSubCourseTime") Boolean hasSubCourseTime);
+
+    /**
+     * 获取没有可用时长的学员列表
+     *
+     * @param musicGroupId
+     * @return
+     */
+    List<Integer> queryNoSubTotalCourseTimeStudentIds(@Param("musicGroupId") String musicGroupId, @Param("hasSubCourseTime") Boolean hasSubCourseTime);
 }

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

@@ -109,4 +109,7 @@ public interface StudentExtracurricularExercisesSituationDao extends BaseDAO<Lon
                                                                                @Param("teacherId") Integer teacherId,
                                                                                @Param("studentIds") List<Integer> studentIds);
 
+    List<StudentExtracurricularExercisesSituation> findServiceWithCourse(@Param("monday") String monday,
+                                                                         @Param("courseId") Long courseId);
+
 }

+ 6 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMessageDao.java

@@ -15,7 +15,8 @@ public interface SysMessageDao extends BaseDAO<Long, SysMessage> {
 
 	/**
 	 * 根据状态查询最近N分钟的记录
-	 * @param status 状态值
+	 *
+	 * @param status    状态值
 	 * @param recentMin 最近分钟数
 	 * @return
 	 */
@@ -23,6 +24,7 @@ public interface SysMessageDao extends BaseDAO<Long, SysMessage> {
 
 	/**
 	 * 批量插入
+	 *
 	 * @param messages
 	 * @return
 	 */
@@ -30,16 +32,17 @@ public interface SysMessageDao extends BaseDAO<Long, SysMessage> {
 
 	/**
 	 * 查询消息未读条数
+	 *
 	 * @param type
 	 * @param userId
 	 * @return
 	 */
-	public List<Mapper> queryCountOfUnread(@Param("type") MessageSendMode type, @Param("userId") Integer userId);
+	public List<Mapper> queryCountOfUnread(@Param("type") MessageSendMode type, @Param("userId") Integer userId, @Param("jpushType") String jpushType);
 
 	/**
 	 * 修改用户所有消息阅读状态
 	 */
-	public int updateStatus(@Param("userId") Integer userId, @Param("status") int status);
+	public int updateStatus(@Param("userId") Integer userId, @Param("status") int status, @Param("jpushType") String jpushType);
 
 	/**
 	 * 修改单个消息状态

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherCourseSalaryDetail4WebDto.java

@@ -63,6 +63,26 @@ public class TeacherCourseSalaryDetail4WebDto {
 
     private String deductionReason;
 
+    private Integer belongDaya;
+
+    private String salaryType;
+
+    public String getSalaryType() {
+        return salaryType;
+    }
+
+    public void setSalaryType(String salaryType) {
+        this.salaryType = salaryType;
+    }
+
+    public Integer getBelongDaya() {
+        return belongDaya;
+    }
+
+    public void setBelongDaya(Integer belongDaya) {
+        this.belongDaya = belongDaya;
+    }
+
     public String getDeductionReason() {
         return deductionReason;
     }

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

@@ -67,6 +67,16 @@ public class CourseScheduleTeacherSalary {
 
 	private String deductionReason;
 
+	private Boolean belongToDaya;
+
+	public Boolean getBelongToDaya() {
+		return belongToDaya;
+	}
+
+	public void setBelongToDaya(Boolean belongToDaya) {
+		this.belongToDaya = belongToDaya;
+	}
+
 	public BigDecimal getTeacherActualSalary() {
 		return teacherActualSalary;
 	}

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

@@ -64,6 +64,17 @@ public class SysMessage {
 	@ApiModelProperty(value = "消息组",required = false)
 	private String group;
 
+	@ApiModelProperty(value = "极光推送客户端标识",required = false)
+	private String jpushType;
+
+	public String getJpushType() {
+		return jpushType;
+	}
+
+	public void setJpushType(String jpushType) {
+		this.jpushType = jpushType;
+	}
+
 	public SysMessage() {
 	}
 

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

@@ -146,6 +146,7 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     BACKSTAGE_STUDENT_OK_QUIT_COURSE("BACKSTAGE_STUDENT_OK_QUIT_COURSE", "学员确认退课"),
     BACKSTAGE_STUDENT_APPEAL("BACKSTAGE_STUDENT_APPEAL", "学员申述"),
     BACKSTAGE_STUDENT_APPLY_QUIT_GROUP("BACKSTAGE_STUDENT_APPLY_QUIT_GROUP", "学员申请退团"),
+    PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY("PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY", "学员申请退团"),
     BACKSTAGE_STUDENT_APPLY_QUIT_COURSE("BACKSTAGE_STUDENT_APPLY_QUIT_COURSE", "学员申请退课"),
     BACKSTAGE_STUDENT_APPLY_WITHDRAW("BACKSTAGE_STUDENT_APPLY_WITHDRAW", "学员申请提现"),
     PUSH_STUDY_REPORT("PUSH_STUDY_REPORT", "陪练报告"),

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

@@ -27,6 +27,16 @@ public class CourseSalaryQueryInfo4Web extends QueryInfo {
 
     private Integer confirmStatus;
 
+    private Integer belongDaya;
+
+    public Integer getBelongDaya() {
+        return belongDaya;
+    }
+
+    public void setBelongDaya(Integer belongDaya) {
+        this.belongDaya = belongDaya;
+    }
+
     public Integer getTeacherId() {
         return teacherId;
     }

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

@@ -31,6 +31,17 @@ public class MusicGroupStudentQueryInfo extends QueryInfo {
 
   private boolean isExport = false;
 
+  @ApiModelProperty(value = "是否有剩余课时")
+  private Boolean hasSubCourseTime;
+
+  public Boolean getHasSubCourseTime() {
+    return hasSubCourseTime;
+  }
+
+  public void setHasSubCourseTime(Boolean hasSubCourseTime) {
+    this.hasSubCourseTime = hasSubCourseTime;
+  }
+
   public boolean getIsExport() {
     return isExport;
   }

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

@@ -13,6 +13,9 @@ public class StudentPaymentRouteOrderQueryInfo extends QueryInfo {
 	
 	private String type;//SERVICE、SELL
 
+	//不包含淘气
+	private Integer noneTqType;//TQ
+
 	public String getTransNo() {
 		return transNo;
 	}
@@ -44,4 +47,12 @@ public class StudentPaymentRouteOrderQueryInfo extends QueryInfo {
 	public void setType(String type) {
 		this.type = type;
 	}
+
+	public Integer getNoneTqType() {
+		return noneTqType;
+	}
+
+	public void setNoneTqType(Integer noneTqType) {
+		this.noneTqType = noneTqType;
+	}
 }

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

@@ -23,9 +23,19 @@ public class SysMessageQueryInfo extends QueryInfo {
 	private Integer type;
 	
 	private String group;
+
+	private String jpushType;
 	
 	private Integer readStatus;
 
+	public String getJpushType() {
+		return jpushType;
+	}
+
+	public void setJpushType(String jpushType) {
+		this.jpushType = jpushType;
+	}
+
 	public Integer getStatus() {
 		return status;
 	}

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

@@ -17,6 +17,8 @@ import java.util.Map;
 
 public interface CourseScheduleTeacherSalaryService extends BaseService<Long, CourseScheduleTeacherSalary> {
 
+    String TASK_KEY = "SETTLEMENT_TYPES";
+
     /**
      * @Author: Joburgess
      * @Date: 2019/10/14

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

@@ -8,8 +8,6 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.Student;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.common.page.PageInfo;
-import com.ym.mec.common.page.QueryInfo;
-
 /**
  * @Author Joburgess
  * @Date 2019/9/19

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

@@ -43,4 +43,14 @@ public interface StudentServeService {
 
     void updateExercisesSituation(Date date, List<Integer> studentIds, Integer teacherId);
 
+    /**
+     * @describe 获取与课程相关的应被服务的学员
+     * @author Joburgess
+     * @date 2020/12/29 0029
+     * @param date:
+     * @param courseId:
+     * @return java.util.Set<java.lang.Integer>
+     */
+    Set<Integer> getStudentWithCourse(Long courseId);
+
 }

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

@@ -209,6 +209,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
 
     String VIP_SPECIAL_ACTIVITY_IDS = "vip_special_activity_ids";
 
+    String DAYA_BASE_SALARY_AMOUNT = "daya_base_salary_amount";
+
     /**
      * @return com.ym.mec.biz.dal.entity.SysConfig
      * @params paramName

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

@@ -107,7 +107,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param userId
 	 * @return
 	 */
-	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Integer userId);
+	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Integer userId,String jpushType);
 
 	/**
 	 *
@@ -115,7 +115,7 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	 * @param status 状态/1 已读,0未读
 	 * @return
 	 */
-	public int updateStatus(Integer userId, int status);
+	public int updateStatus(Integer userId, int status,String jpushType);
 
 	/**
 	 * 修改单条消息状态

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

@@ -1625,7 +1625,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             List<StudentAttendanceViewDto> tempIds = truantStudent.stream()
                     .filter(studentAttendanceViewDto -> studentAttendanceViewDto.getGroupType().equals("MUSIC"))
                     .collect(Collectors.toList());
-            if (!CollectionUtils.isEmpty(tempIds)) {
+
+            if (!CollectionUtils.isEmpty(tempIds)&&schedule.getGroupType() == MUSIC) {
                 List<Map<Integer, String>> studentSubjectNameMaps = subjectDao.findStudentSubjectNameMaps(tempIds);
                 Map<Integer, String> studentSubjectNameMap = MapUtil.convertIntegerMap(studentSubjectNameMaps);
                 List<Map<Integer, Integer>> studentSubjectIdMaps = subjectDao.findStudentSubjectIdMaps(tempIds);
@@ -1634,6 +1635,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                     studentAttendanceViewDto.setSubjectName(studentSubjectNameMap.get(studentAttendanceViewDto.getStudentId().intValue()));
                     studentAttendanceViewDto.setSubjectId(studentSubjectIdMap.get(studentAttendanceViewDto.getStudentId().intValue()).longValue());
                 });
+            }else if(schedule.getGroupType() != MUSIC){
+                ClassGroup classGroup = classGroupDao.get(schedule.getClassGroupId());
+                Subject subject = subjectDao.get(Integer.valueOf(classGroup.getSubjectIdList()));
+                truantStudent.forEach(studentAttendanceViewDto -> {
+                    studentAttendanceViewDto.setSubjectName(subject.getName());
+                    studentAttendanceViewDto.setSubjectId(Objects.nonNull(subject.getId())?subject.getId().longValue():0);
+                });
             }
         }
         return truantStudent;

+ 10 - 7
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseReviewServiceImpl.java

@@ -1,12 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dao.*;
@@ -558,6 +552,15 @@ public class CourseReviewServiceImpl extends BaseServiceImpl<Integer, CourseSche
         CourseHomework courseHomework = new CourseHomework();
         List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByCourseSchedule(courseSchedule.getId());
 
+        Set<Integer> serveStudentIds = studentServeService.getStudentWithCourse(courseSchedule.getId());
+        Iterator<CourseScheduleStudentPayment> iterator = courseScheduleStudentPayments.iterator();
+        while (iterator.hasNext()){
+            CourseScheduleStudentPayment courseScheduleStudentPayment = iterator.next();
+            if(!serveStudentIds.contains(courseScheduleStudentPayment.getUserId())){
+                iterator.remove();
+            }
+        }
+
         if (Objects.nonNull(existHomework)) {
             courseHomework.setId(existHomework.getId());
             courseHomework.setContent(content);

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

@@ -24,6 +24,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
@@ -83,6 +84,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     private SchoolDao schoolDao;
     @Autowired
     private SysConfigService sysConfigService;
+    @Autowired
+    private RedisTemplate redisTemplate;
 
     private static final Logger LOGGER = LoggerFactory
             .getLogger(CourseScheduleTeacherSalaryServiceImpl.class);
@@ -208,6 +211,10 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
         List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(startDate,endDate);
 
+        if(CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)){
+            return;
+        }
+
         Set<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toSet());
 
         Set<Integer> teacherIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toSet());
@@ -1354,8 +1361,50 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public void salaryMark() {
+        Date now = new Date();
+        Date date = DateUtil.addMonths(now, -1);
+        String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+
+        int isSalaryGroupTypes = redisTemplate.opsForSet().size(CourseScheduleTeacherSalaryService.TASK_KEY).intValue();
+        if(isSalaryGroupTypes<3){
+            return;
+        }
+        redisTemplate.delete(CourseScheduleTeacherSalaryService.TASK_KEY);
+        List<CourseScheduleTeacherSalary> salaries = courseScheduleTeacherSalaryDao.getIsSalaryWithDate(startDate, endDate);
+        if(CollectionUtils.isEmpty(salaries)){
+            return;
+        }
+        SysConfig dayaBaseSalaryAmountConfig = sysConfigService.findByParamName(SysConfigService.DAYA_BASE_SALARY_AMOUNT);
+        BigDecimal dayaBaseSalaryAmount = new BigDecimal(4000);
+        if(Objects.nonNull(dayaBaseSalaryAmountConfig)&&StringUtils.isNotBlank(dayaBaseSalaryAmountConfig.getParanValue())){
+            dayaBaseSalaryAmount = new BigDecimal(dayaBaseSalaryAmountConfig.getParanValue());
+        }
 
+        Map<Integer, List<CourseScheduleTeacherSalary>> teacherSalariesMap = salaries.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getUserId));
+        List<CourseScheduleTeacherSalary> updateRecords = new ArrayList<>();
+        for (Map.Entry<Integer, List<CourseScheduleTeacherSalary>> teacherSalariesMapEntry : teacherSalariesMap.entrySet()) {
+            List<CourseScheduleTeacherSalary> teacherSalaries = teacherSalariesMapEntry.getValue();
+            List<BigDecimal> amounts = teacherSalaries.stream().map(CourseScheduleTeacherSalary::getActualSalary).collect(Collectors.toList());
+            List<BigDecimal> resultAmounts = salaryComposition(amounts, dayaBaseSalaryAmount);
+            for (BigDecimal resultAmount : resultAmounts) {
+                Iterator<CourseScheduleTeacherSalary> iterator = teacherSalaries.iterator();
+                while (iterator.hasNext()){
+                    CourseScheduleTeacherSalary teacherSalary = iterator.next();
+                    if(teacherSalary.getActualSalary().compareTo(resultAmount)==0){
+                        CourseScheduleTeacherSalary courseScheduleTeacherSalary = new CourseScheduleTeacherSalary();
+                        courseScheduleTeacherSalary.setId(teacherSalary.getId());
+                        courseScheduleTeacherSalary.setBelongToDaya(true);
+                        updateRecords.add(courseScheduleTeacherSalary);
+                        iterator.remove();
+                        break;
+                    }
+                }
+            }
+        }
+        courseScheduleTeacherSalaryDao.batchUpdate(updateRecords);
     }
 
     @Override

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

@@ -13,6 +13,7 @@ import com.ym.mec.biz.dal.enums.ImSendTypeEnum;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesService;
+import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -47,6 +48,8 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 	private SysMessageService sysMessageService;
 	@Autowired
 	private TeacherDao teacherDao;
+	@Autowired
+	private StudentServeService studentServeService;
 
 	@Override
 	public BaseDAO<Long, ExtracurricularExercises> getDAO() {
@@ -111,6 +114,7 @@ public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, E
 					userMap, null, 0, 3+notifyUrl, "STUDENT",
 					teacher.getRealName(),exercises.getTitle(), dateStr);
 		}
+		studentServeService.updateExercisesSituation(new Date(), studentIds, exercises.getTeacherId());
 	}
 
 	@Override

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

@@ -1577,7 +1577,12 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         memo.put("Id", musicGroupQuit.getId());
         memo.put("type", "MUSICGROUP");
 
-        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()), MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_GROUP, JSONObject.toJSONString(memo), sysUser.getUsername());
+        sysMessageService.batchSeoMessage(musicGroupDao.queryUserIdByRoleId(roleIds, musicGroup.getOrganId()),
+                MessageTypeEnum.BACKSTAGE_STUDENT_APPLY_QUIT_GROUP, JSONObject.toJSONString(memo), sysUser.getUsername());
+        Map<Integer, String> receivers = new HashMap<>(1);
+        receivers.put(musicGroup.getEducationalTeacherId(),musicGroup.getEducationalTeacherId().toString());
+        sysMessageService.batchSendMessage(MessageSender.JIGUANG,MessageTypeEnum.PUSH_STUDENT_COMMIT_QUIT_MUSIC_APPLY,
+                receivers,null,0,null,"SYSTEM",musicGroup.getName(),sysUser.getUsername());
         return true;
     }
 

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

@@ -150,13 +150,12 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
                 throw new BizException("乐团课禁止跨天点名");
             }
         } else {
-            SysConfig beforeAttendanceTimeRange = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP);
+            SysConfig beforeAttendanceTimeRange = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
             int courseStartTime = DateUtil.minutesBetween(date, courseSchedule.getStartClassTime());
             if (date.before(courseSchedule.getStartClassTime()) && courseStartTime > beforeAttendanceTimeRange.getParanValue(Integer.class)) {
                 throw new BizException("VIP课开课前{}分钟禁止点名", beforeAttendanceTimeRange.getParanValue(Integer.class));
             }
             attendanceTimeRange = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
-
             int courseEndTime = DateUtil.minutesBetween(courseSchedule.getEndClassTime(), date);
             if (date.after(courseSchedule.getEndClassTime()) && courseEndTime > attendanceTimeRange.getParanValue(Integer.class)) {
                 throw new BizException("VIP课结束{}分钟后禁止点名",attendanceTimeRange.getParanValue(Integer.class));
@@ -265,6 +264,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
         TeacherAttendance teacherAttendance = teacherAttendanceDao.findByTeacherAttendanceInfo(sysUser.getId().longValue(), courseSchedule.getId());
 
         teacherAttendance.setSignInLongitudeLatitude(studentAttendanceInfos.getSignInLongitudeLatitude());
+        teacherAttendance.setSignOutLongitudeLatitude(studentAttendanceInfos.getSignInLongitudeLatitude());
 
         if (Objects.isNull(teacherAttendance)) {
             teacherAttendance = new TeacherAttendance();

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

@@ -171,6 +171,9 @@ public class StudentExtracurricularExercisesSituationServiceImpl extends BaseSer
 			dataList = extracurricularExercisesReplyDao.findStudentHomeworkDetailsInTimeZone(params);
 			Map<String, List<StudentServiceDetailDto>> weekHomeworks=new HashMap<>();
 			for (StudentServiceDetailDto studentServiceDetailDto : dataList) {
+				if(Objects.isNull(studentServiceDetailDto.getCourseStartTime())){
+					continue;
+				}
 				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)){

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

@@ -417,6 +417,19 @@ public class StudentManageServiceImpl implements StudentManageService {
         MapUtil.populateMap(params, queryInfo);
         List<MusicGroupStudentsDto> dataList = null;
         String musicGroupId = queryInfo.getMusicGroupId();
+        //是否有剩余课时
+        if(queryInfo.getHasSubCourseTime() != null){
+            List<Integer> students = new ArrayList<>();
+            if(queryInfo.getHasSubCourseTime()){
+                students = musicGroupPaymentStudentCourseDetailDao.queryHasSubTotalCourseTimeStudentIds(musicGroupId,queryInfo.getHasSubCourseTime());
+            }else {
+                students = musicGroupPaymentStudentCourseDetailDao.queryNoSubTotalCourseTimeStudentIds(musicGroupId,queryInfo.getHasSubCourseTime());
+            }
+            if (students.size() == 0){
+                return pageInfo;
+            }
+            params.put("studentIds", students);
+        }
         int count = studentManageDao.countMusicGroupStudent(params);
         if (queryInfo.getIsExport() && count > 50000) {
             throw new BizException("数据集太大,不能导出.最大数据集不能超过50000");

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

@@ -262,7 +262,7 @@ public class StudentPaymentRouteOrderServiceImpl extends BaseServiceImpl<Long, S
 
                     BigDecimal hasRouteSellOrderActualAmount = BigDecimal.ZERO;
                     for (SellOrder sellOrder : sellOrderList) {
-                        if (Integer.valueOf(goodsMap.getKey()).equals(sellOrder.getParentGoodsId()) && !Integer.valueOf(goodsMap.getKey()).equals(sellOrder.getGoodsId())) {
+                        if (!Integer.valueOf(goodsMap.getKey()).equals(sellOrder.getParentGoodsId()) && !Integer.valueOf(goodsMap.getKey()).equals(sellOrder.getGoodsId())) {
                             continue;
                         }
                         BigDecimal sellOrderActualAmount = BigDecimal.ZERO;

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

@@ -1156,6 +1156,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
         List<String> orderDetailTypes = studentPaymentOrderDetailDao.getOrderDetailType(studentPaymentOrder.getId());
         List<MusicGroupPaymentCalenderCourseSettings> courseSettings = musicGroupPaymentCalenderCourseSettingsDao.getWithPaymentCalender(musicGroupRegCalender.getId());
         BigDecimal courseTotalPrice = courseSettings.stream().filter(e -> orderDetailTypes.contains(e.getCourseType().getCode())).map(MusicGroupPaymentCalenderCourseSettings::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
+        BigDecimal optionalCourseFee = courseSettings.stream().filter(MusicGroupPaymentCalenderCourseSettings::getIsStudentOptional).filter(e -> orderDetailTypes.contains(e.getCourseType().getCode())).map(MusicGroupPaymentCalenderCourseSettings::getCourseCurrentPrice).reduce(BigDecimal.ZERO, BigDecimal::add);
 
         List<MusicGroupPaymentStudentCourseDetail> musicGroupPaymentStudentCourseDetails = new ArrayList<>();
 
@@ -1168,7 +1169,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
             if (currentPaymentCalenderId.longValue() == musicGroupPaymentCalender.getId()) {
                 musicGroupPaymentCalenderDetail.setExpectAmount(courseTotalPrice);
                 if (studentPaymentOrder.getCourseRemitFee() != null && (studentPaymentOrder.getCourseRemitFee().compareTo(BigDecimal.ZERO) > 0)) {
-                    musicGroupPaymentCalenderDetail.setActualAmount(BigDecimal.ZERO);
+                    musicGroupPaymentCalenderDetail.setActualAmount(optionalCourseFee);
                 } else {
                     musicGroupPaymentCalenderDetail.setActualAmount(courseTotalPrice);
                 }

+ 98 - 65
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -302,12 +302,15 @@ public class StudentServeServiceImpl implements StudentServeService {
         LocalDate sunDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
         Date nextMonday = Date.from(sunDayDate.plusDays(1).atStartOfDay(DateUtil.zoneId).toInstant());
 
-        int weekServiceNum = studentExtracurricularExercisesSituationDao.countWeekServiceNum(monDayDate.toString());
-        if(weekServiceNum>0&&CollectionUtils.isEmpty(studentIds)){
-            return;
-        }
+//        int weekServiceNum = studentExtracurricularExercisesSituationDao.countWeekServiceNum(monDayDate.toString());
+//        if(weekServiceNum>0&&CollectionUtils.isEmpty(studentIds)){
+//            return;
+//        }
 
         List<StudentServeCourseDto> studentFutureCourseInfo = studentDao.getStudentFutureCourseInfo(monDayDate.toString(), studentIds);
+        if(CollectionUtils.isEmpty(studentFutureCourseInfo)){
+            return;
+        }
         Map<Integer, List<StudentServeCourseDto>> studentCourseMap = studentFutureCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getStudentId));
 
         List<StudentExtracurricularExercisesSituation> results=new ArrayList<>();
@@ -319,11 +322,15 @@ public class StudentServeServiceImpl implements StudentServeService {
                 List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE);
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.SINGLE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
-                    StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                            futureCourseInfo.get(0).getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
-                            DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
-                            "EXERCISE", null);
-                    results.add(studentExtracurricularExercisesSituation);
+                    Map<String, List<StudentServeCourseDto>> groupCourseInfo = futureCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
+                    for (Map.Entry<String, List<StudentServeCourseDto>> groupCourseInfoEntry : groupCourseInfo.entrySet()) {
+                        StudentServeCourseDto courseInfo = groupCourseInfoEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
+                        StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
+                                courseInfo.getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
+                                DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
+                                "EXERCISE", null);
+                        results.add(studentExtracurricularExercisesSituation);
+                    }
                 }else{
                     Map<String, List<StudentServeCourseDto>> groupCourseInfo = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getMusicGroupId));
                     Map<Integer, Set<Long>> teacherServiceCourseIdMap = new HashMap<>();
@@ -347,20 +354,22 @@ public class StudentServeServiceImpl implements StudentServeService {
                 List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.VIP);
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.VIP).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
-                    StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                            futureCourseInfo.get(0).getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
-                            DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
-                            "EXERCISE", null);
-                    results.add(studentExtracurricularExercisesSituation);
+                    Map<Integer, List<StudentServeCourseDto>> teacherCourseMap = futureCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getActualTeacherId));
+                    for (Integer teacherId : teacherCourseMap.keySet()) {
+                        StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
+                                teacherId,nowDate.get(DateUtil.weekFields.weekOfYear()),
+                                DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
+                                "EXERCISE", null);
+                        results.add(studentExtracurricularExercisesSituation);
+                    }
                 }else{
                     Map<Integer, List<StudentServeCourseDto>> teacherCourseMap = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getActualTeacherId));
-                    Map<Integer, Set<Long>> teacherServiceCourseIdMap = new HashMap<>();
                     for (Map.Entry<Integer, List<StudentServeCourseDto>> teacherCourseMapEntry : teacherCourseMap.entrySet()) {
                         StudentServeCourseDto courseInfo = teacherCourseMapEntry.getValue().stream().min(Comparator.comparing(StudentServeCourseDto::getCourseStartTime)).get();
                         StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation;
                         if(TeachModeEnum.OFFLINE.equals(courseInfo.getTeachMode())){
                             studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                                    futureCourseInfo.get(0).getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
+                                    teacherCourseMapEntry.getKey(),nowDate.get(DateUtil.weekFields.weekOfYear()),
                                     DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
                                     "EXERCISE", null);
                         }else{
@@ -387,11 +396,14 @@ public class StudentServeServiceImpl implements StudentServeService {
                 List<StudentServeCourseDto> futureCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE);
                 List<StudentServeCourseDto> weekCourseInfo = typeCourseMap.get(CourseSchedule.CourseScheduleType.PRACTICE).stream().filter(c -> c.getCourseStartTime().compareTo(nextMonday) < 0).collect(Collectors.toList());
                 if(CollectionUtils.isEmpty(weekCourseInfo)){
-                    StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
-                            futureCourseInfo.get(0).getActualTeacherId(),nowDate.get(DateUtil.weekFields.weekOfYear()),
-                            DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
-                            "EXERCISE", null);
-                    results.add(studentExtracurricularExercisesSituation);
+                    Set<Integer> teacherIds = weekCourseInfo.stream().map(StudentServeCourseDto::getActualTeacherId).collect(Collectors.toSet());
+                    for (Integer teacherId : teacherIds) {
+                        StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation(studentCourseMapEntry.getKey(),
+                                teacherId,nowDate.get(DateUtil.weekFields.weekOfYear()),
+                                DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"), DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"),
+                                "EXERCISE", null);
+                        results.add(studentExtracurricularExercisesSituation);
+                    }
                 }else{
                     Map<Integer, List<StudentServeCourseDto>> teacherCourseMap = weekCourseInfo.stream().collect(Collectors.groupingBy(StudentServeCourseDto::getActualTeacherId));
                     Map<Integer, Set<Long>> teacherServiceCourseIdMap = new HashMap<>();
@@ -414,8 +426,8 @@ public class StudentServeServiceImpl implements StudentServeService {
             }
         }
 
-        if(CollectionUtils.isEmpty(studentIds)){
-            studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString());
+        if(!CollectionUtils.isEmpty(results)){
+//            studentExtracurricularExercisesSituationDao.deleteByMonday(monDayDate.toString());
             BigDecimal currentPage1=BigDecimal.ONE,
                     pageSize1=new BigDecimal(10000),
                     total1=new BigDecimal(results.size()),
@@ -423,51 +435,56 @@ public class StudentServeServiceImpl implements StudentServeService {
 
             while (currentPage1.compareTo(totalPage1)<=0){
                 List<StudentExtracurricularExercisesSituation> rows=results.stream().skip(pageSize1.multiply(currentPage1.subtract(BigDecimal.ONE)).longValue()).limit(pageSize1.longValue()).collect(Collectors.toList());
-                studentExtracurricularExercisesSituationDao.batchInsert(rows);
-                currentPage1=currentPage1.add(BigDecimal.ONE);
-            }
-            return;
-        }
-
-        List<StudentExtracurricularExercisesSituation> weekServiceWithStudents = studentExtracurricularExercisesSituationDao.findWeekServiceWithStudents(monDayDate.toString(), null, studentIds);
-        Map<String, StudentExtracurricularExercisesSituation> codeServeMap = weekServiceWithStudents.stream().collect(Collectors.toMap(StudentExtracurricularExercisesSituation::getStuAndTeaCode, s -> s, (s1, s2) -> s1));
+                List<Integer> updateStudentIds = rows.stream().map(StudentExtracurricularExercisesSituation::getStudentId).collect(Collectors.toList());
 
-        Set<String> newCodes = results.stream().map(StudentExtracurricularExercisesSituation::getStuAndTeaCode).collect(Collectors.toSet());
-        for (StudentExtracurricularExercisesSituation weekServiceWithStudent : weekServiceWithStudents) {
-            if(weekServiceWithStudent.getActualExercisesNum()>0||newCodes.contains(weekServiceWithStudent.getStuAndTeaCode())){
-                continue;
-            }
-            studentExtracurricularExercisesSituationDao.delete(weekServiceWithStudent.getId());
-        }
+                List<StudentExtracurricularExercisesSituation> weekServiceWithStudents = studentExtracurricularExercisesSituationDao.findWeekServiceWithStudents(monDayDate.toString(), null, updateStudentIds);
+                Map<String, StudentExtracurricularExercisesSituation> codeServeMap = weekServiceWithStudents.stream().collect(Collectors.toMap(StudentExtracurricularExercisesSituation::getStuAndTeaCode, s -> s, (s1, s2) -> s1));
 
-        List<StudentExtracurricularExercisesSituation> newService = new ArrayList<>();
-        List<StudentExtracurricularExercisesSituation> updateService = new ArrayList<>();
-        for (StudentExtracurricularExercisesSituation result : results) {
-            if(codeServeMap.containsKey(result.getStuAndTeaCode())){
-                StudentExtracurricularExercisesSituation s = codeServeMap.get(result.getStuAndTeaCode());
-                List<Long> courseIds = new ArrayList<>();
-                if(StringUtils.isNotBlank(s.getCourseIds())&&s.getActualExercisesNum()>0){
-                    courseIds = Arrays.stream(s.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toList());
-                }
-                if(StringUtils.isNotBlank(result.getCourseIds())){
-                    courseIds.addAll(Arrays.stream(result.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toList()));
+                Set<String> newCodes = rows.stream().map(StudentExtracurricularExercisesSituation::getStuAndTeaCode).collect(Collectors.toSet());
+                for (StudentExtracurricularExercisesSituation weekServiceWithStudent : weekServiceWithStudents) {
+                    if(weekServiceWithStudent.getActualExercisesNum()>0||newCodes.contains(weekServiceWithStudent.getStuAndTeaCode())){
+                        continue;
+                    }
+                    studentExtracurricularExercisesSituationDao.delete(weekServiceWithStudent.getId());
                 }
-                s.setServeType(result.getServeType());
-                s.setCourseIds(StringUtils.join(courseIds, ","));
-                if(StringUtils.isBlank(s.getCourseIds())){
-                    s.setExpectExercisesNum(1);
-                }else{
-                    s.setExpectExercisesNum(courseIds.size());
+
+                List<StudentExtracurricularExercisesSituation> newService = new ArrayList<>();
+                List<StudentExtracurricularExercisesSituation> updateService = new ArrayList<>();
+                for (StudentExtracurricularExercisesSituation result : rows) {
+                    if(codeServeMap.containsKey(result.getStuAndTeaCode())){
+                        StudentExtracurricularExercisesSituation s = codeServeMap.get(result.getStuAndTeaCode());
+                        Set<Long> courseIds = new HashSet<>();
+                        if(StringUtils.isNotBlank(s.getCourseIds())&&s.getActualExercisesNum()>0){
+                            courseIds = Arrays.stream(s.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toSet());
+                        }
+                        if(StringUtils.isNotBlank(result.getCourseIds())){
+                            courseIds.addAll(Arrays.stream(result.getCourseIds().split(",")).map(id->Long.valueOf(id)).collect(Collectors.toSet()));
+                        }
+                        s.setServeType(result.getServeType());
+                        if(s.getServeType().equals("HOMEWORK")){
+                            s.setCourseIds(StringUtils.join(courseIds, ","));
+                        }else{
+                            s.setCourseIds("");
+                        }
+                        if(StringUtils.isBlank(s.getCourseIds())){
+                            s.setExpectExercisesNum(1);
+                        }else{
+                            s.setExpectExercisesNum(courseIds.size());
+                        }
+                        updateService.add(s);
+                    }else{
+                        newService.add(result);
+                    }
                 }
-                updateService.add(s);
-            }else{
-                newService.add(result);
+                if(!CollectionUtils.isEmpty(updateService))
+                    studentExtracurricularExercisesSituationDao.batchUpdate(updateService);
+                if(!CollectionUtils.isEmpty(newService))
+                    studentExtracurricularExercisesSituationDao.batchInsert(newService);
+
+                currentPage1=currentPage1.add(BigDecimal.ONE);
             }
+            return;
         }
-        if(!CollectionUtils.isEmpty(updateService))
-            studentExtracurricularExercisesSituationDao.batchUpdate(updateService);
-        if(!CollectionUtils.isEmpty(newService))
-            studentExtracurricularExercisesSituationDao.batchInsert(newService);
     }
 
     @Override
@@ -518,13 +535,13 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
 
         List<StudentExtracurricularExercisesSituation> weekServiceWithStudents = studentExtracurricularExercisesSituationDao.findWeekServiceWithStudents(monDayDate.toString(), teacherId, studentIds);
-        if(!CollectionUtils.isEmpty(weekServiceWithStudents)){
+        if(CollectionUtils.isEmpty(weekServiceWithStudents)){
             return;
         }
 
         for (StudentExtracurricularExercisesSituation weekServiceWithStudent : weekServiceWithStudents) {
             List<StudentServeCourseHomeworkDto> studentHomeworks = studentHomeworkMap.get(weekServiceWithStudent.getStudentId());
-            if(!CollectionUtils.isEmpty(studentHomeworks)){
+            if(!CollectionUtils.isEmpty(studentHomeworks)&&weekServiceWithStudent.getServeType().equals("HOMEWORK")){
                 weekServiceWithStudent.setActualExercisesNum(1);
                 long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
                 weekServiceWithStudent.setExercisesReplyNum(replyNum>0?1:0);
@@ -552,7 +569,7 @@ public class StudentServeServiceImpl implements StudentServeService {
             }
 
             List<ExtracurricularExercisesReply> studentExercises = studentExercisesMap.get(weekServiceWithStudent.getStudentId());
-            if(!CollectionUtils.isEmpty(studentExercises)){
+            if(!CollectionUtils.isEmpty(studentExercises)&&weekServiceWithStudent.getServeType().equals("EXERCISE")){
                 weekServiceWithStudent.setActualExercisesNum(1);
                 long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
                 if(weekServiceWithStudent.getExercisesReplyNum()<=0){
@@ -652,4 +669,20 @@ public class StudentServeServiceImpl implements StudentServeService {
         }
         return courseIds;
     }
+
+    @Override
+    public Set<Integer> getStudentWithCourse(Long courseId) {
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseId);
+        if(Objects.isNull(courseSchedule)){
+            return new HashSet<>();
+        }
+        LocalDate nowDate = LocalDateTime.ofInstant(courseSchedule.getClassDate().toInstant(), DateUtil.zoneId).toLocalDate();
+
+        LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+        List<StudentExtracurricularExercisesSituation> serviceWithCourse = studentExtracurricularExercisesSituationDao.findServiceWithCourse(monDayDate.toString(), courseId);
+        if(CollectionUtils.isEmpty(serviceWithCourse)){
+            return new HashSet<>();
+        }
+        return serviceWithCourse.stream().map(StudentExtracurricularExercisesSituation::getStudentId).collect(Collectors.toSet());
+    }
 }

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

@@ -102,7 +102,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	 * @return
 	 */
 	private int addMessage(Map<Integer, String> receivers, String subject, String content, Date triggerTime, MessageSendMode mode, SendStatusEnum status,
-			String errorMsg, Integer readStatus, String memo, String group) {
+			String errorMsg, Integer readStatus, String memo, String group,String jpushType) {
 		SysMessage message = null;
 		Date date = new Date();
 
@@ -137,7 +137,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			message.setReadStatus(readStatus);
 			message.setMemo(memo);
 			message.setGroup(group);
-
+			message.setJpushType(jpushType);
 			messages.add(message);
 		}
 
@@ -335,7 +335,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 			mode = MessageSendMode.EMAIL;
 		}
 		addMessage(receivers, messageConfig.getDescription(), MessageFormatter.arrayFormat(messageConfig.getContent(), args), triggerTime, mode, status, errorMsg, readStatus,
-				url, messageConfig.getGroup());
+				url, messageConfig.getGroup(),jpushType);
 	}
 
 	@Override
@@ -371,7 +371,7 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 		}
 		Map<Integer, String> receivers = new HashMap<Integer, String>();
 		receivers.put(userId, receiver);
-		addMessage(receivers, title, content, triggerTime, mode, status, errorMsg, readStatus, url, null);
+		addMessage(receivers, title, content, triggerTime, mode, status, errorMsg, readStatus, url, null,jpushType);
 	}
 
 	@Override
@@ -413,8 +413,8 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
 	@Override
-	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Integer userId) {
-		List<Mapper> mappers = sysMessageDao.queryCountOfUnread(type, userId);
+	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Integer userId,String jpushType) {
+		List<Mapper> mappers = sysMessageDao.queryCountOfUnread(type, userId,jpushType);
 
 		Map<String, Integer> map = new HashMap<String, Integer>();
 
@@ -452,8 +452,8 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	 * @return 修改的条数
 	 */
 	@Override
-	public int updateStatus(Integer userId, int status) {
-		return sysMessageDao.updateStatus(userId, status);
+	public int updateStatus(Integer userId, int status,String jpushType) {
+		return sysMessageDao.updateStatus(userId, status,jpushType);
 	}
 
 	@Override

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

@@ -234,6 +234,10 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				}
 			}
 
+			if(Objects.isNull(teacherAttendance.getSignInTime())){
+				throw new BizException("未签到不可点名和签退");
+			}
+
 			//正常签退范围(结束后1小时内)
 			teacherAttendance.setSignOutTime(date);
 			teacherAttendance.setSignOutAttachments(teacherSignOutDto.getCourseHomeworkInfo().getAttachments());
@@ -273,14 +277,25 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 					courseHomework.setGroupType(teacherAttendance.getGroupType());
 					courseHomework.setClassGroupId(currentCourseDetail.getClassId().intValue());
 					courseHomework.setExpiryDate(DateUtil.addDays(date,7));
-					courseHomework.setExpectNum(courseScheduleDao.countCourseStudentNum(teacherAttendance.getCourseScheduleId()));
-					courseHomeworkService.insert(courseHomework);
+
 					List<StudentCourseHomework> studentCourseHomeworks = studentCourseHomeworkDao
 							.constructInitialStudentHomeworkRecordsWithPayment(teacherAttendance.getCourseScheduleId(),
 									courseHomework.getId());
 					if(CollectionUtils.isEmpty(studentCourseHomeworks)){
 						throw new BizException("此课程没有学生");
 					}
+					Set<Integer> serveStudentIds = studentServeService.getStudentWithCourse(teacherAttendance.getCourseScheduleId());
+					Iterator<StudentCourseHomework> iterator = studentCourseHomeworks.iterator();
+					while (iterator.hasNext()){
+						StudentCourseHomework next = iterator.next();
+						if(!serveStudentIds.contains(next.getUserId())){
+							iterator.remove();
+						}
+					}
+
+					courseHomework.setExpectNum(studentCourseHomeworks.size());
+					courseHomeworkService.insert(courseHomework);
+
 					studentCourseHomeworkDao.batchInsertStudentCourseHomeworkRecord(studentCourseHomeworks);
 					List<Integer> studentIds = studentCourseHomeworks.stream().map(StudentCourseHomework::getUserId).collect(Collectors.toList());
 					studentServeService.updateExercisesSituation(courseSchedule.getClassDate(), studentIds, teacherAttendance.getTeacherId());
@@ -408,6 +423,9 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 							null,0,"6?sealClassId=" + courseScheduleId + "&subjectName=" + name ,"STUDENT",courseSchedule.getName());
 				}
 			}
+		}else if(StringUtils.isNotEmpty(teacherAttendance.getSignInDeviceNo())){
+			teacherAttendance.setSignInDeviceNo(deviceNum);
+			teacherAttendanceDao.update(teacherAttendance);
 		}
 	}
 

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

@@ -597,7 +597,7 @@
             practice_group pg
             LEFT JOIN class_group cg ON pg.id_=cg.music_group_id_ AND cg.group_type_='PRACTICE'
         WHERE
-            pg.user_id_ = #{teacherId} AND cg.del_flag_ = 0 AND pg.group_status_!='CANCEL' AND pg.group_status_!='LOCK'
+            pg.user_id_ = #{teacherId} AND cg.del_flag_ = 0
             <if test="status == null or status == ''">
                 AND pg.group_status_!='CANCEL' AND pg.group_status_!='LOCK'
             </if>

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

@@ -1700,6 +1700,7 @@
         </foreach>
         )
         AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
+        AND (cs.new_course_id_ IS NULL OR cs.new_course_id_=cs.id_)
     </select>
 
     <select id="findByClassDateWithoutMusicGroup" resultMap="CourseSchedule">
@@ -1828,6 +1829,19 @@
           AND cs.group_type_ = 'MUSIC'
           AND (cs.del_flag_ IS NULL OR cs.del_flag_ = 0)
     </select>
+
+    <select id="countIsSalaryGroupTypes" resultType="int">
+        SELECT
+            COUNT(DISTINCT csts.group_type_)
+        FROM
+            course_schedule_teacher_salary csts
+                LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
+        WHERE
+            cs.class_date_ BETWEEN #{startDate} AND #{endDate}
+          AND ( cs.del_flag_ IS NULL OR cs.del_flag_ = 0 )
+          AND csts.settlement_time_ IS NOT NULL
+    </select>
+
     <select id="findByClassGroup" resultMap="CourseSchedule">
         select cs.id_,
                cs.class_group_id_,

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

@@ -681,6 +681,7 @@
 		WHERE cssp.user_id_=#{studentId}
 		  AND cs.class_date_&lt;#{monday}
 		  AND cs.type_=#{courseType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-		ORDER BY CONCAT(cs.class_date_, ' ', cs.start_class_time_) LIMIT 1
+		  AND (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+		ORDER BY CONCAT(cs.class_date_, ' ', cs.start_class_time_) DESC LIMIT 1
 	</select>
 </mapper>

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

@@ -31,6 +31,7 @@
 		<result column="reduce_salary" property="reduceSalary" />
 		<result column="confirm_status_" property="confirmStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result column="memo_" property="memo" />
+		<result column="belong_to_daya_" property="belongToDaya" />
 	</resultMap>
 	
 	<resultMap type="com.ym.mec.biz.dal.dto.TeacherVipSalaryDto" id="teacherVipSalaryDto" extends="CourseScheduleTeacherSalary">
@@ -120,6 +121,9 @@
 			<if test="deductionReason != null">
 				deduction_reason_ = #{deductionReason},
 			</if>
+			<if test="belongToDaya != null">
+				belong_to_daya_ = #{belongToDaya},
+			</if>
 		</set> WHERE id_ = #{id} 
 	</update>
 
@@ -136,12 +140,15 @@
         <foreach collection="courseScheduleTeacherSalaries" item="courseScheduleTeacherSalary" separator=";">
             UPDATE course_schedule_teacher_salary
             <set>
-                <if test="courseScheduleTeacherSalary.expectSalary">
+                <if test="courseScheduleTeacherSalary.expectSalary!=null">
                     expect_salary_ = #{courseScheduleTeacherSalary.expectSalary},
                 </if>
-                <if test="courseScheduleTeacherSalary.userId">
+                <if test="courseScheduleTeacherSalary.userId!=null">
                     user_id_ = #{courseScheduleTeacherSalary.userId},
                 </if>
+				<if test="courseScheduleTeacherSalary.belongToDaya!=null">
+					belong_to_daya_ = #{courseScheduleTeacherSalary.belongToDaya},
+				</if>
                 update_time_ = NOW()
             </set>
             WHERE
@@ -796,6 +803,7 @@
 		<result property="confirmStatus" column="confirm_status_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
 		<result property="memo" column="memo_" />
 		<result property="deductionReason" column="deduction_reason_" />
+		<result property="belongDaya" column="belong_to_daya_" />
 	</resultMap>
 
 	<sql id="queryCourseSalaryCondition">
@@ -839,6 +847,9 @@
 			<if test="search!=null">
 				AND (csts.course_schedule_id_=#{search} OR cs.name_ LIKE CONCAT('%', #{search}, '%'))
 			</if>
+			<if test="belongDaya!=null">
+				AND csts.belong_to_daya_ = #{belongDaya}
+			</if>
 		</where>
 	</sql>
 
@@ -863,7 +874,8 @@
 			csts.reduce_salary,
 			csts.confirm_status_,
 			csts.memo_,
-			csts.deduction_reason_
+			csts.deduction_reason_,
+		    csts.belong_to_daya_
 		FROM
 			course_schedule_teacher_salary csts
 			LEFT JOIN course_schedule cs ON csts.course_schedule_id_=cs.id_
@@ -1014,4 +1026,16 @@
 		</if>
 		GROUP BY course_schedule_id_
 	</select>
+
+	<select id="getIsSalaryWithDate" resultMap="CourseScheduleTeacherSalary">
+		SELECT
+			csts.*
+		FROM
+			course_schedule_teacher_salary csts
+			LEFT JOIN course_schedule cs ON csts.course_schedule_id_ = cs.id_
+		WHERE
+			cs.class_date_ BETWEEN #{startDate} AND #{endDate}
+		  AND ( cs.del_flag_ IS NULL OR cs.del_flag_ = 0 )
+		  AND csts.settlement_time_ IS NOT NULL
+	</select>
 </mapper>

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

@@ -173,6 +173,9 @@
 	            <if test="item.memo != null">
 	                memo_ = #{item.memo},
 	            </if>
+	            <if test="item.auditMemo != null">
+	                audit_memo_ = #{item.auditMemo},
+	            </if>
 	            <if test="item.startPaymentDate != null">
 	                start_payment_date_ = #{item.startPaymentDate},
 	            </if>
@@ -320,6 +323,7 @@
         WHERE music_group_id_ = #{musicGroupId}
         AND (payment_valid_end_date_ IS NULL OR payment_valid_start_date_ BETWEEN #{paymentValidStartDate} AND #{paymentValidEndDate}
         OR payment_valid_end_date_ BETWEEN #{paymentValidStartDate} AND #{paymentValidEndDate}) AND payment_valid_start_date_ IS NOT NULL
+        AND mgpc.payment_type_ != 'ADD_STUDENT' AND mgpc.batch_no_ IS NOT NULL
         <if test="payUserType != null">
         	and pay_user_type_ = #{payUserType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         </if>
@@ -460,7 +464,7 @@
     <select id="queryAuditList" resultMap="MusicGroupPaymentCalenderAuditDtoMap">
         SELECT mgpc.batch_no_,MAX(mgpc.music_group_id_) music_group_id_
         ,MAX(mgpc.create_time_) create_time_,MAX(mgpc.payment_type_) payment_type_,MAX(mgpc.operator_) operator_,
-        MAX(mgpc.pay_user_type_) pay_user_type_,MAX(mgpc.memo_) memo_,MAX(mgpc.status_) status_,
+        MAX(mgpc.pay_user_type_) pay_user_type_,MAX(mgpc.memo_) memo_,MAX(mgpc.audit_memo_) audit_memo_,MAX(mgpc.status_) status_,
         SUM(mgpccs.course_total_minuties_) course_total_minuties_,
         SUM(mgpccs.course_original_price_) course_original_price_,SUM(mgpccs.course_current_price_) course_current_price_,
         MAX(mg.name_) music_group_name_,MAX(mg.organ_id_) organ_id_,MAX(mgpc.payment_pattern_)payment_pattern_

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

@@ -230,10 +230,13 @@
         SELECT mgpscd.user_id_ 'key',SUM(CASE WHEN mgpscd.used_course_minutes_ = 0 THEN mgpscd.total_course_minutes_ ELSE 0 END) 'value'
         FROM music_group_payment_student_course_detail mgpscd
         LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
-        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.user_id_ IN
-        <foreach collection="studentIds" open="(" close=")" item="item" separator=",">
-            #{item}
-        </foreach>
+        WHERE mgpc.music_group_id_ = #{musicGroupId}
+        <if test="studentIds != null">
+            AND mgpscd.user_id_ IN
+            <foreach collection="studentIds" open="(" close=")" item="item" separator=",">
+                #{item}
+            </foreach>
+        </if>
         GROUP BY mgpscd.user_id_
     </select>
 
@@ -244,4 +247,21 @@
         WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.user_id_ = #{userId}
         GROUP BY mgpscd.course_type_
     </select>
+
+    <select id="queryHasSubTotalCourseTimeStudentIds" resultType="java.lang.Integer">
+        SELECT DISTINCT mgpscd.user_id_
+        FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.used_course_minutes_ = 0
+    </select>
+
+    <select id="queryNoSubTotalCourseTimeStudentIds" resultType="java.lang.Integer">
+        SELECT DISTINCT mgpscd.user_id_ FROM music_group_payment_student_course_detail mgpscd
+        LEFT JOIN music_group_payment_calender mgpc ON mgpc.id_ = mgpscd.music_group_payment_calender_id_
+        WHERE mgpc.music_group_id_ = #{musicGroupId} AND mgpscd.user_id_ NOT IN (
+                SELECT DISTINCT mgpscd1.user_id_
+                FROM music_group_payment_student_course_detail mgpscd1
+                LEFT JOIN music_group_payment_calender mgpc1 ON mgpc1.id_ = mgpscd1.music_group_payment_calender_id_
+                WHERE mgpc1.music_group_id_ = #{musicGroupId} AND mgpscd1.used_course_minutes_ = 0)
+    </select>
 </mapper>

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

@@ -204,6 +204,8 @@
 		o.name_ organ_name_,
 		sees.monday_,
 		sees.sunday_,
+		sees.serve_type_,
+		sees.course_ids_,
 		expect_exercises_num_ expect_exercises_num_,
 		actual_exercises_num_ actual_exercises_num_,
 		<if test="submitStartDate==null or submitEndDate==null">
@@ -454,4 +456,9 @@
     <select id="findTeacherNoStartServices" resultMap="StudentExtracurricularExercisesSituation">
 		SELECT * FROM student_extracurricular_exercises_situation_ WHERE teacher_id_=#{teacherId} AND actual_exercises_num_&lt;=0 AND serve_type_='HOMEWORK';
 	</select>
+
+	<select id="findServiceWithCourse"
+			resultMap="StudentExtracurricularExercisesSituation">
+		SELECT * FROM student_extracurricular_exercises_situation_ WHERE monday_=#{monday} AND FIND_IN_SET(#{courseId}, course_ids_)
+	</select>
 </mapper>

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

@@ -418,6 +418,12 @@
 
     <sql id="queryMusicGroupStudentSql">
         <where>
+            <if test="studentIds != null">
+                AND su.id_ IN
+                <foreach collection="studentIds" open="(" close=")" separator="," item="item">
+                    #{item}
+                </foreach>
+            </if>
             <if test="search != null and search != ''">
                 AND (su.id_ = #{search} OR su.username_ LIKE CONCAT("%",#{search},"%") OR su.phone_ LIKE CONCAT("%",#{search},"%"))
             </if>

+ 24 - 20
mec-biz/src/main/resources/config/mybatis/StudentPaymentRouteOrderMapper.xml

@@ -157,8 +157,8 @@
     </insert>
 
     <select id="queryPageOrder" parameterType="map" resultMap="StudentPaymentRouteOrderDto">
-        SELECT spo.*,spro.*,u.username_,u.phone_ FROM student_payment_route_order spro
-        LEFT JOIN student_payment_order spo ON spo.order_no_ = spro.order_no_
+        SELECT spo.*,spro.*,u.username_,u.phone_ FROM student_payment_order spo
+        LEFT JOIN student_payment_route_order spro ON spo.order_no_ = spro.order_no_
         left join sys_user u on spo.user_id_ = u.id_
         <include refid="queryPaymentOrder"/>
         ORDER BY spo.id_ DESC
@@ -166,22 +166,22 @@
     </select>
     <select id="getOrderMoneyAmount" parameterType="map" resultMap="StudentPaymentRouteOrderDto">
         SELECT SUM(spro.route_amount_) actual_amount_,SUM(spro.route_balance_amount_)
-        balance_payment_amount_ FROM student_payment_route_order spro
-        LEFT JOIN student_payment_order spo on spo.order_no_ = spro.order_no_
+        balance_payment_amount_ FROM student_payment_order spo
+        LEFT JOIN student_payment_route_order spro on spo.order_no_ = spro.order_no_
         <include refid="queryPaymentOrder"/>
     </select>
 
     <select id="getChargeAmount" parameterType="map" resultType="java.math.BigDecimal">
-        SELECT SUM(spro.route_amount_) FROM student_payment_route_order spro
-        LEFT JOIN student_payment_order spo ON spo.order_no_=spro.order_no_
+        SELECT SUM(spro.route_amount_) FROM student_payment_order spo
+        LEFT JOIN student_payment_route_order spro ON spo.order_no_=spro.order_no_
         LEFT JOIN sporadic_charge_info sci ON spo.music_group_id_ = sci.id_
         <include refid="queryPaymentOrder"/>
     </select>
 
     <!-- 查询当前表的总记录数 -->
     <select id="queryCount" resultType="int" parameterType="map">
-        SELECT COUNT(spo.id_) FROM student_payment_route_order spro
-        LEFT JOIN student_payment_order spo ON spo.order_no_ = spro.order_no_
+        SELECT COUNT(spo.id_) FROM student_payment_order spo
+        LEFT JOIN student_payment_route_order spro ON spo.order_no_ = spro.order_no_
         LEFT JOIN sys_user u on spo.user_id_ = u.id_
         <include refid="queryPaymentOrder"/>
     </select>
@@ -338,15 +338,17 @@
         	<if test="auditStatus != null">
         		and spro.audit_status_ = #{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         	</if>
-        	<if test="type != null and type != ''">
-        		and
-        		<if test="type == 'SERVICE'">
-        			(spro.service_amount_ is not null and spro.service_amount_ &gt; 0)
-        		</if>
-        		<if test="type == 'SELL'">
-        			(spro.sale_amount_ is not null and spro.sale_amount_ &gt; 0)
-        		</if>
-        	</if>
+            <if test="type != null and type != ''">
+                <if test="type == 'SERVICE'">
+                    and (spro.service_amount_ is not null and spro.service_amount_ &gt; 0)
+                </if>
+                <if test="type == 'SELL'">
+                    and (spro.sale_amount_ is not null and spro.sale_amount_ &gt; 0)
+                </if>
+            </if>
+            <if test="noneTqType != null">
+                and spro.mer_no_ != '淘气微信'
+            </if>
         </where>
 		order by spro.id_ desc
 	</select>
@@ -368,14 +370,16 @@
         		and spro.audit_status_ = #{auditStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
         	</if>
         	<if test="type != null and type != ''">
-        		and
         		<if test="type == 'SERVICE'">
-        			(spro.service_amount_ is not null and spro.service_amount_ &gt; 0)
+                    and (spro.service_amount_ is not null and spro.service_amount_ &gt; 0)
         		</if>
         		<if test="type == 'SELL'">
-        			(spro.sale_amount_ is not null and spro.sale_amount_ &gt; 0)
+                    and (spro.sale_amount_ is not null and spro.sale_amount_ &gt; 0)
         		</if>
         	</if>
+            <if test="noneTqType != null">
+                and spro.mer_no_ != '淘气微信'
+            </if>
         </where>
 		order by spro.id_ desc
 		<include refid="global.limit" />

+ 13 - 6
mec-biz/src/main/resources/config/mybatis/SysMessageMapper.xml

@@ -21,6 +21,7 @@
         <result column="memo_" property="memo"/>
         <result column="read_status_" property="readStatus"/>
         <result column="group_" property="group"/>
+        <result column="jpush_type_" property="jpushType"/>
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
@@ -30,6 +31,9 @@
 
 	<sql id="queryCondition">
 		<where>
+			<if test="jpushType != null and jpushType != ''">
+				and (jpush_type_ = #{jpushType} OR jpush_type_ IS NULL)
+			</if>
 			<if test="userId != null">
 				and user_id_ = #{userId}
 			</if>
@@ -72,8 +76,9 @@
 
 	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.SysMessage">
 		insert into sys_message (user_id_,title_, content_,type_, receiver_,
-		send_time_, error_msg_,memo_, create_on_,modify_on_,group_)
-		values (#{userId}, #{title},#{content},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{receiver},now(),#{errorMsg},#{memo},now(),now(),#{group})
+		send_time_, error_msg_,memo_, create_on_,modify_on_,group_,jpush_type_)
+		values (#{userId}, #{title},#{content},#{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+				#{receiver},now(),#{errorMsg},#{memo},now(),now(),#{group},#{jpushType})
 	</insert>
 
 	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.SysMessage">
@@ -81,7 +86,7 @@
 		title_, content_,
 		type_, status_, receiver_,
 		send_time_, error_msg_,read_status_,memo_, create_on_,
-		modify_on_,group_)
+		modify_on_,group_,jpush_type_)
 		values
 		<foreach collection="list" item="item" index="index"
 			separator=",">
@@ -92,7 +97,7 @@
 			#{item.status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{item.receiver,jdbcType=VARCHAR},
 			#{item.sendTime},#{item.errorMsg,jdbcType=VARCHAR},#{item.readStatus},#{item.memo},
 			#{item.createOn},
-			#{item.modifyOn},#{item.group}
+			#{item.modifyOn},#{item.group},#{item.jpushType}
 			)
 		</foreach>
 	</insert>
@@ -144,7 +149,7 @@
 	</update>
 	<update id="updateStatus">
 		update sys_message set read_status_=#{status}
-		where user_id_ =#{userId}
+		where user_id_ = #{userId} AND (jpush_type_ = #{jpushType} OR jpush_type_ IS NULL)
 	</update>
 
     <update id="updateOneStatus">
@@ -172,7 +177,9 @@
 	</select>
 
 	<select id="queryCountOfUnread" resultMap="Mapper" parameterType="map">
-		SELECT group_ key_,COUNT(*) value_ FROM sys_message WHERE user_id_ = #{userId} AND read_status_ = 0 and status_ = 2
+		SELECT group_ key_,COUNT(*) value_ FROM sys_message
+		WHERE user_id_ = #{userId} AND read_status_ = 0 and status_ = 2
+		AND (jpush_type_ = #{jpushType} OR jpush_type_ IS NULL)
 		<if test="type != null">
 		and type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 		</if>

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

@@ -93,6 +93,12 @@
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.TeacherAttendance">
         UPDATE teacher_attendance
         <set>
+            <if test="signInDeviceNo != null and signInDeviceNo != ''">
+                sign_in_device_no_ = #{signInDeviceNo},
+            </if>
+            <if test="signOutDeviceNo != null and signOutDeviceNo != ''">
+                sign_out_device_no_ = #{signOutDeviceNo},
+            </if>
             <if test="url != null and url != ''">
                 url_ = #{url},
             </if>

+ 35 - 26
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -276,18 +276,22 @@ public class RoomServiceImpl implements RoomService {
         if(roomMember == null){
             return ;
         }
-//        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
-//        if(redisTemplate.hasKey(joinSuccessKey)){
-//            //兼容旧版本,防止重复调用
-//            redisTemplate.delete(joinSuccessKey);
-//            return;
-//        }
-//        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
-//        if(redisTemplate.hasKey(leaveSuccessKey)){
-//            redisTemplate.delete(leaveSuccessKey);
-//        }
-//        redisTemplate.opsForValue().setIfAbsent(joinSuccessKey,roomId,2l,TimeUnit.SECONDS);
-//        log.info("joinRoomSuccess : roomId={}, userId={}", roomId, userId);
+        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
+        if(redisTemplate.hasKey(joinSuccessKey)){
+            //兼容旧版本,防止重复调用
+            redisTemplate.delete(joinSuccessKey);
+            RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
+            if(roleEnum == RoleTeacher && StringUtils.isNotEmpty(deviceNum)){
+                signInSuccess(roomMember,deviceNum);
+            }
+            return;
+        }
+        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
+        if(redisTemplate.hasKey(leaveSuccessKey)){
+            redisTemplate.delete(leaveSuccessKey);
+        }
+        redisTemplate.opsForValue().setIfAbsent(joinSuccessKey,roomId,2l,TimeUnit.SECONDS);
+        log.info("joinRoomSuccess : roomId={}, userId={}", roomId, userId);
 
         RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
         CourseSchedule schedule = courseScheduleDao.getLock(Long.parseLong(roomId.substring(1)));
@@ -410,21 +414,26 @@ public class RoomServiceImpl implements RoomService {
         if(roomMember == null){
             return ;
         }
-//        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
-//        if(redisTemplate.hasKey(leaveSuccessKey)){
-//            redisTemplate.delete(leaveSuccessKey);
-//            //如果设备号不为空,更新设备号
-//            return;
-//        }
-//        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
-//        if(redisTemplate.hasKey(joinSuccessKey)){
-//            redisTemplate.delete(joinSuccessKey);
-//        }
-//        redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey,roomId,2,TimeUnit.SECONDS);
-//        //记录
-//        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
-        RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
+        String leaveSuccessKey = "leaveRoomSuccess"+ roomId + userId;
         Integer firstCourseId = Integer.parseInt(roomId.substring(1));
+        if(redisTemplate.hasKey(leaveSuccessKey)){
+            redisTemplate.delete(leaveSuccessKey);
+            //如果设备号不为空,更新设备号
+            RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
+            if(roleEnum == RoleTeacher && StringUtils.isNotEmpty(deviceNum)){
+                signInSuccess(roomMember,deviceNum);
+                teacherAttendanceService.addTeacherAttendanceSignOut(firstCourseId.longValue(),Integer.parseInt(userId),deviceNum);
+            }
+            return;
+        }
+        String joinSuccessKey = "joinRoomSuccess"+ roomId + userId;
+        if(redisTemplate.hasKey(joinSuccessKey)){
+            redisTemplate.delete(joinSuccessKey);
+        }
+        redisTemplate.opsForValue().setIfAbsent(leaveSuccessKey,roomId,2,TimeUnit.SECONDS);
+        //记录
+        log.info("leaveRoomSuccess: roomId={}, userId={}", roomId,userId);
+        RoleEnum roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
 
         if(roleEnum == RoleTeacher){
             courseScheduleStudentPaymentDao.adjustPlayMidi(firstCourseId,null,null);

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

@@ -198,22 +198,22 @@ public class MusicGroupController extends BaseController {
                 return failed(HttpStatus.CONTINUE, "您有待支付的订单");
             }
         }
-        MusicGroupPaymentCalenderDetail calenderDetail = musicGroupPaymentCalenderDetailDao.findByCalenderIdAndUserId(calenderId,userId);
+        MusicGroupPaymentCalenderDetail calenderDetail = musicGroupPaymentCalenderDetailDao.findByCalenderIdAndUserId(calenderId, userId);
         if (calenderDetail == null) {
             throw new BizException("缴费项不存在该学员,请联系教务老师");
         }
-        if(calenderDetail.getPaymentStatus() == PaymentStatus.PAID_COMPLETED){
+        if (calenderDetail.getPaymentStatus() == PaymentStatus.PAID_COMPLETED) {
             throw new BizException("您已缴费,请勿重复提交");
-        }else if(calenderDetail.getPaymentStatus() == PaymentStatus.PROCESSING){
+        } else if (calenderDetail.getPaymentStatus() == PaymentStatus.PROCESSING) {
             throw new BizException("存在待处理的订单,请稍候尝试");
         }
         //缴费项目已开启或者单独开启
         Map renew;
-        if(calender.getStatus() == PaymentCalenderStatusEnum.OPEN || calenderDetail.getOpen() == 1){
+        if (calender.getStatus() == PaymentCalenderStatusEnum.OPEN || calenderDetail.getOpen() == 1) {
             renew = musicGroupService.renew(calenderId, userId, isUseBalancePayment);
-        }else if(calender.getStatus() == PaymentCalenderStatusEnum.OVER){
+        } else if (calender.getStatus() == PaymentCalenderStatusEnum.OVER) {
             throw new BizException("缴费已截止,如有问题请联系指导老师");
-        }else {
+        } else {
             throw new BizException("缴费暂未开始,如有问题请联系指导老师");
         }
         if (renew.containsKey("tradeState")) {
@@ -241,6 +241,22 @@ public class MusicGroupController extends BaseController {
         return succeed(musicGroupService.cancelQuitMusicGroup(userId, musicGroupId, reason));
     }
 
+    @ApiOperation(value = "查询是否有待支付的报名订单")
+    @GetMapping("/checkWaitPayApplyOrder")
+    @ApiImplicitParams({@ApiImplicitParam(name = "registerId", value = "注册id", required = true, dataType = "int")})
+    public HttpResponseResult<StudentPaymentOrder> checkWaitPayApplyOrder(Long registerId) throws Exception {
+
+        StudentRegistration studentRegistration = studentRegistrationService.get(registerId);
+        if (studentRegistration == null) {
+            return failed("报名信息有误,请核查");
+        }
+        Integer userId = studentRegistration.getUserId();
+
+        //判断用户是否已存在订单
+        StudentPaymentOrder applyOrder = studentPaymentOrderService.findMusicGroupApplyOrderByStatus(userId, studentRegistration.getMusicGroupId(), DealStatusEnum.ING);
+        return succeed(applyOrder);
+    }
+
     @ApiOperation(value = "乐团报名支付")
     @PostMapping("/pay")
     @ApiImplicitParams({@ApiImplicitParam(name = "registerPayDto", value = "支付信息", required = true, dataType = "RegisterPayDto")})

+ 4 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -40,6 +40,7 @@ import java.net.URLEncoder;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @RequestMapping("studentOrder")
 @Api(tags = "订单回调")
@@ -130,7 +131,10 @@ public class StudentOrderController extends BaseController {
             MusicGroup musicGroup = musicGroupService.get(orderByOrderNo.getMusicGroupId());
             List<Goods> goodsList = studentPaymentOrderDetailService.findApplyOrderGoods(orderByOrderNo.getId());
             List<String> orderDetailType = studentPaymentOrderDetailService.getOrderDetailType(orderByOrderNo.getId());
+            List<StudentPaymentOrderDetail> orderDetail1 = studentPaymentOrderDetailService.getOrderDetail(orderByOrderNo.getId());
+            String kitGroupPurchaseType = orderDetail1.stream().filter(e -> e.getGoodsList() != null).filter(e -> e.getKitGroupPurchaseType() != null).map(e -> e.getKitGroupPurchaseType().getCode()).collect(Collectors.joining(","));
             orderDetail.put("goods", goodsList);
+            orderDetail.put("kitGroupPurchaseType",kitGroupPurchaseType);
             orderDetail.put("course", musicGroup.getCourseForm());
             orderDetail.put("ownershipType", musicGroup.getOwnershipType());
             orderDetail.put("detailType", orderDetailType);

+ 5 - 31
mec-student/src/main/java/com/ym/mec/student/controller/SysMessageController.java

@@ -35,13 +35,14 @@ public class SysMessageController extends BaseController {
 
 	@ApiOperation("获取所有消息列表")
 	@GetMapping(value = "list")
-	public Object list(SysMessageQueryInfo queryInfo) throws IOException {
+	public Object list(SysMessageQueryInfo queryInfo){
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
 		queryInfo.setUserId(sysUser.getId());
 		queryInfo.setType(MessageSendMode.PUSH.getCode());
+		queryInfo.setJpushType("STUDENT");
 		return succeed(sysMessageService.queryPage(queryInfo));
 	}
 
@@ -53,7 +54,7 @@ public class SysMessageController extends BaseController {
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
-		return sysMessageService.updateStatus(sysUser.getId(), status) > 0 ? succeed() : failed();
+		return sysMessageService.updateStatus(sysUser.getId(), status,"STUDENT") > 0 ? succeed() : failed();
 	}
 
 	@ApiOperation("设置已读")
@@ -74,7 +75,7 @@ public class SysMessageController extends BaseController {
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
-		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId());
+		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"STUDENT");
 
 		if (map == null || map.size() == 0) {
 			return succeed();
@@ -82,33 +83,6 @@ public class SysMessageController extends BaseController {
 		return succeed(map);
 	}
 
-	/*
-	 * @ApiOperation(value = "发送短信验证码")
-	 * 
-	 * @PostMapping("/sendSmsCode") public Object sendSmsCode(String sendCodeType, String mobileNo) {
-	 * 
-	 * SysUser sysUser;
-	 * 
-	 * if (StringUtils.isBlank(mobileNo)) { sysUser = sysUserFeignService.queryUserInfo(); } else { sysUser =
-	 * sysUserFeignService.queryUserByMobile(mobileNo); } if (sysUser == null) { return failed(HttpStatus.FORBIDDEN, "请登录"); } Integer userId =
-	 * sysUser.getId();
-	 * 
-	 * mobileNo = sysUser.getPhone();
-	 * 
-	 * MessageType messageType = MessageType.getMessageType(sendCodeType); if (messageType == null) { throw new BizException("消息类型参数错误"); } if
-	 * (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) { throw new BizException("请输入正确的手机号"); }
-	 * sysMessageService.sendSecurityCode(MessageSender.YIMEI, userId, MessageSendMode.SMS, messageType, mobileNo); return succeed(); }
-	 */
-
-	/*
-	 * @ApiOperation(value = "发送短信验证码")
-	 * 
-	 * @PostMapping("/noAuth/sendSmsCode") public Object noAuthSendSmsCode(String sendCodeType, String mobileNo) { MessageType messageType =
-	 * MessageType.getMessageType(sendCodeType); if (messageType == null) { throw new BizException("消息类型参数错误"); } if (StringUtils.isBlank(mobileNo) ||
-	 * !CommonValidator.isMobileNo(mobileNo)) { throw new BizException("请输入正确的手机号"); } // sysMessageService.sendSecurityCode(MessageSender.YIMEI,
-	 * userId, MessageSendMode.SMS, messageType, mobileNo); return succeed(); }
-	 */
-
 	@ApiOperation(value = "发送消息")
 	@PostMapping("/sendMessage")
 	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
@@ -122,7 +96,7 @@ public class SysMessageController extends BaseController {
 		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
 			throw new BizException("请输入正确的手机号");
 		}
-		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group, "");
+		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group, "STUDENT");
 		return succeed();
 	}
 }

+ 4 - 3
mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysMessageController.java

@@ -46,6 +46,7 @@ public class SysMessageController extends BaseController {
 		}
 		queryInfo.setUserId(sysUser.getId());
 		queryInfo.setType(3);
+		queryInfo.setJpushType("TEACHER");
 		return succeed(sysMessageService.queryPage(queryInfo));
 	}
 
@@ -57,7 +58,7 @@ public class SysMessageController extends BaseController {
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
-		return sysMessageService.updateStatus(sysUser.getId(), status) > 0 ? succeed() : failed();
+		return sysMessageService.updateStatus(sysUser.getId(), status,"TEACHER") > 0 ? succeed() : failed();
 	}
 
 	@ApiOperation("设置已读")
@@ -78,7 +79,7 @@ public class SysMessageController extends BaseController {
 		if (sysUser == null) {
 			return failed("请重新登录");
 		}
-		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId());
+		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"TEACHER");
 
 		if (map == null || map.size() == 0) {
 			return succeed();
@@ -99,7 +100,7 @@ public class SysMessageController extends BaseController {
 		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
 			throw new BizException("请输入正确的手机号");
 		}
-		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group,null);
+		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group,"TEACHER");
 		return succeed();
 	}
 }

+ 8 - 3
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -1686,15 +1686,20 @@ public class ExportController extends BaseController {
                     row.setSignOutStatusStr(signOutTimeStr + "(异常签退)");
                 }
             }
+            if(row.getBelongDaya()==1){
+                row.setSalaryType("基本课酬");
+            }else{
+                row.setSalaryType("其它课酬");
+            }
         }
         OutputStream ouputStream = null;
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(
                     new String[]{"分部", "课程组类型", "课程编号", "时间", "课程名称", "老师编号", "老师姓名", "签到时间", "签退时间",
-                            "学员缴费", "应发课酬", "课酬扣款", "结算课酬", "状态", "备注", "扣款原因"},
+                            "学员缴费", "课酬类型", "应发课酬", "课酬扣款", "结算课酬", "状态", "备注", "扣款原因"},
                     new String[]{"organName", "groupType.desc", "courseScheduleId", "startClassTime", "courseName", "teacherId", "teacherName",
-                            "signInStatusStr", "signOutStatusStr", "actualReceipts", "actualSalary", "reduceSalary", "finalSalary", "confirmStatus.desc",
-                            "memo", "deductionReason"}, rows);
+                            "signInStatusStr", "signOutStatusStr", "actualReceipts", "salaryType", "actualSalary", "reduceSalary", "finalSalary",
+                            "confirmStatus.desc", "memo", "deductionReason"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
             ouputStream = response.getOutputStream();

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

@@ -38,7 +38,7 @@ public class SysMessageController extends BaseController {
 
 	@ApiOperation("获取所有消息列表")
 	@GetMapping(value = "list")
-	public Object list(SysMessageQueryInfo queryInfo) throws IOException {
+	public Object list(SysMessageQueryInfo queryInfo){
 		SysUser sysUser = sysUserFeignService.queryUserInfo();
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
@@ -51,17 +51,6 @@ public class SysMessageController extends BaseController {
 		return succeed(pageInfo);
 	}
 
-	@ApiOperation("一键已读")
-	@PostMapping("batchSetRead")
-	public Object batchSetRead() {
-		int status = 1;
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		return sysMessageService.updateStatus(sysUser.getId(), status) > 0 ? succeed() : failed();
-	}
-
 	@ApiOperation("设置已读")
 	@PostMapping("setRead")
 	public Object setRead(Long id) {
@@ -80,66 +69,6 @@ public class SysMessageController extends BaseController {
 		if (sysUser == null) {
 			return failed(HttpStatus.FORBIDDEN, "请登录");
 		}
-		return succeed(sysMessageService.queryCountOfUnread(MessageSendMode.SEO, sysUser.getId()));
-	}
-
-	/*@ApiOperation(value = "发送短信验证码")
-	@PostMapping("/sendSmsCode")
-	public Object sendSmsCode(String sendCodeType, String mobileNo) {
-
-		SysUser sysUser;
-
-		if (StringUtils.isBlank(mobileNo)) {
-			sysUser = sysUserFeignService.queryUserInfo();
-		} else {
-			sysUser = sysUserFeignService.queryUserByMobile(mobileNo);
-		}
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		Integer userId = sysUser.getId();
-
-		mobileNo = sysUser.getPhone();
-
-		MessageType messageType = MessageType.getMessageType(sendCodeType);
-		if (messageType == null) {
-			throw new BizException("消息类型参数错误");
-		}
-		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
-			throw new BizException("请输入正确的手机号");
-		}
-		sysMessageService.sendSecurityCode(MessageSender.YIMEI, userId, MessageSendMode.SMS, messageType, mobileNo);
-		return succeed();
-	}*/
-
-	/*@ApiOperation(value = "发送短信验证码")
-	@PostMapping("/noAuth/sendSmsCode")
-	public Object noAuthSendSmsCode(String sendCodeType, String mobileNo) {
-		MessageType messageType = MessageType.getMessageType(sendCodeType);
-		if (messageType == null) {
-			throw new BizException("消息类型参数错误");
-		}
-		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
-			throw new BizException("请输入正确的手机号");
-		}
-//		sysMessageService.sendSecurityCode(MessageSender.YIMEI, userId, MessageSendMode.SMS, messageType, mobileNo);
-		return succeed();
-	}*/
-
-	@ApiOperation(value = "发送消息")
-	@PostMapping("/sendMessage")
-	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
-		SysUser sysUser = sysUserFeignService.queryUserInfo();
-		if (sysUser == null) {
-			return failed(HttpStatus.FORBIDDEN, "请登录");
-		}
-		Integer userId = sysUser.getId();
-
-		String mobileNo = sysUser.getPhone();
-		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
-			throw new BizException("请输入正确的手机号");
-		}
-		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group,null);
-		return succeed();
+		return succeed(sysMessageService.queryCountOfUnread(MessageSendMode.SEO, sysUser.getId(),null));
 	}
 }

+ 9 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -3,6 +3,7 @@ package com.ym.mec.web.controller;
 import com.ym.mec.biz.event.source.CourseEventSource;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.redis.service.RedisCache;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -85,6 +86,8 @@ public class TaskController extends BaseController {
 
 	@Autowired
 	private CourseEventSource courseEventSource;
+	@Autowired
+	private RedisCache<String, Object> redisCache;
 
 	@GetMapping(value = "/autoAffirmReceiveTask")
 	// 自动确认收货
@@ -126,18 +129,24 @@ public class TaskController extends BaseController {
 	// vip课课酬结算
 	public void vipGroupTeacherSalarySettlement() {
 		courseScheduleTeacherSalaryService.teacherSalarySettlement();
+		redisCache.getRedisTemplate().opsForSet().add(CourseScheduleTeacherSalaryService.TASK_KEY, "VIP");
+		courseScheduleTeacherSalaryService.salaryMark();
 	}
 
 	@GetMapping("/practiceTeacherSalarySettlement")
 	// 陪练课课酬结算
 	public void practiceTeacherSalarySettlement() {
 		courseScheduleTeacherSalaryService.practiceTeacherSalarySettlement();
+		redisCache.getRedisTemplate().opsForSet().add(CourseScheduleTeacherSalaryService.TASK_KEY, "PRACTICE");
+		courseScheduleTeacherSalaryService.salaryMark();
 	}
 
 	// 乐团课课酬结算
 	@GetMapping("/musicGroupTeacherSalarySettlement")
 	public void musicGroupTeacherSalarySettlement() {
 		courseScheduleTeacherSalaryService.musicGroupTeacherSalarySettlement();
+		redisCache.getRedisTemplate().opsForSet().add(CourseScheduleTeacherSalaryService.TASK_KEY, "MUSIC");
+		courseScheduleTeacherSalaryService.salaryMark();
 	}
 
 	@GetMapping("/updateCourseScheduleToOverStatus")

+ 100 - 0
mec-web/src/main/java/com/ym/mec/web/controller/education/SysEduMessageController.java

@@ -0,0 +1,100 @@
+package com.ym.mec.web.controller.education;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.enums.MessageSendMode;
+import com.ym.mec.biz.dal.page.SysMessageQueryInfo;
+import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
+import com.ym.mec.util.validator.CommonValidator;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+import java.util.Map;
+
+@RestController
+@Api(tags = "消息服务")
+@RequestMapping("sysEduMessage")
+public class SysEduMessageController extends BaseController {
+
+	@Autowired
+	private SysMessageService sysMessageService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation("获取所有消息列表")
+	@GetMapping(value = "list")
+	public Object list(SysMessageQueryInfo queryInfo){
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		queryInfo.setUserId(sysUser.getId());
+		queryInfo.setType(3);
+		queryInfo.setJpushType("SYSTEM");
+		return succeed(sysMessageService.queryPage(queryInfo));
+	}
+
+	@ApiOperation("一键已读")
+	@PostMapping("batchSetRead")
+	public Object batchSetRead() {
+		int status = 1;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return sysMessageService.updateStatus(sysUser.getId(), status,"SYSTEM") > 0 ? succeed() : failed();
+	}
+
+	@ApiOperation("设置已读")
+	@PostMapping("setRead")
+	public Object setRead(Long id) {
+		int status = 1;
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		return sysMessageService.updateOneStatus(id, status) > 0 ? succeed() : failed();
+	}
+
+	@ApiOperation(value = "查询用户未读消息条数")
+	@GetMapping("/queryCountOfUnread")
+	public Object queryCountOfUnread() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed("请重新登录");
+		}
+		Map<String, Integer> map = sysMessageService.queryCountOfUnread(MessageSendMode.PUSH, sysUser.getId(),"SYSTEM");
+
+		if (map == null || map.size() == 0) {
+			return succeed();
+		}
+		return succeed(map);
+	}
+
+	@ApiOperation(value = "发送消息")
+	@PostMapping("/sendMessage")
+	public Object sendMessage(MessageSender messageSender, String content, String receiver, int readStatus, String url, String group) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		Integer userId = sysUser.getId();
+
+		String mobileNo = sysUser.getPhone();
+		if (StringUtils.isBlank(mobileNo) || !CommonValidator.isMobileNo(mobileNo)) {
+			throw new BizException("请输入正确的手机号");
+		}
+		sysMessageService.sendMessage(messageSender, userId, "", content, receiver, null, readStatus, url, group,"SYSTEM");
+		return succeed();
+	}
+}