Ver Fonte

Merge branch 'master' into feature-goods-river

周箭河 há 5 anos atrás
pai
commit
a6d155be81
46 ficheiros alterados com 716 adições e 174 exclusões
  1. 2 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/DefaultUserDetailsService.java
  2. 28 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  3. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  4. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentPaymentOrderDao.java
  5. 9 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  6. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  7. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/VipGroupGiveCourseSortDto.java
  8. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStudentPayment.java
  9. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentPaymentOrderDetail.java
  10. 18 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherMusicClassQueryInfo.java
  11. 48 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherNameQueryInfo.java
  12. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  13. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleStudentPaymentService.java
  14. 2 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  15. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherService.java
  16. 3 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  17. 88 76
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  18. 77 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleStudentPaymentServiceImpl.java
  19. 40 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  20. 6 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  21. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentPaymentOrderServiceImpl.java
  22. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRegistrationServiceImpl.java
  23. 14 13
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  24. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  25. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  26. 6 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  27. 7 4
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  28. 57 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  29. 1 1
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  30. 31 2
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  31. 10 5
      mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml
  32. 33 4
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  33. 1 2
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  34. 23 16
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  35. 2 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java
  36. 3 16
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  37. 4 4
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/MessageSenderPluginContext.java
  38. 2 2
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/JiguangPushPlugin.java
  39. 1 1
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/MOxintongSMSPlugin.java
  40. 1 1
      mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/ShiyuanSMSPlugin.java
  41. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  42. 6 0
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java
  43. 26 3
      mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java
  44. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/UploadFileController.java
  45. 12 4
      mec-web/src/main/java/com/ym/mec/web/controller/education/EducationCourseScheduleController.java
  46. 4 4
      mec-web/src/main/java/com/ym/mec/web/controller/education/ImController.java

+ 2 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/provider/service/DefaultUserDetailsService.java

@@ -63,8 +63,9 @@ public class DefaultUserDetailsService implements UserDetailsService {
 
 		if (authorities == null) {
 			authorities = new ArrayList<>();
-			authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(userType)));
 		}
+		
+		authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(userType)));
 
 		for (String role : roles) {
 			authorities.add(new SimpleGrantedAuthority(StringUtils.lowerCase(role)));

+ 28 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -1,11 +1,11 @@
 package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.StudentAttendanceStatisticsResponse;
+import com.ym.mec.biz.dal.dto.VipGroupGiveCourseSortDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.common.dal.BaseDAO;
-
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -25,6 +25,15 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     int batchInsert(List<CourseScheduleStudentPayment> courseScheduleStudentPayments);
 
     /**
+     * @describe 批量更新
+     * @author Joburgess
+     * @date 2020/1/10
+     * @param courseScheduleStudentPayments:
+     * @return int
+     */
+    int batchUpdate(@Param("courseScheduleStudentPayments") List<CourseScheduleStudentPayment> courseScheduleStudentPayments);
+
+    /**
      * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment>
      * @Author: Joburgess
      * @Date: 2019/10/15
@@ -176,4 +185,22 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      */
     int checkStudentHaveCourse(@Param("courseScheduleId") Long courseScheduleId,
                                @Param("userId") Integer userId);
+
+    /**
+     * @describe 查询指定课程的学生缴费记录
+     * @author Joburgess
+     * @date 2020/1/10
+     * @param courseScheduleId: 课程编号
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment>
+     */
+    List<CourseScheduleStudentPayment> findByCourseSchedule(@Param("courseScheduleId") Long courseScheduleId);
+
+    /**
+     * @describe 获取小课需要调整的缴费记录
+     * @author Joburgess
+     * @date 2020/1/10
+     * @param groupId:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.VipGroupGiveCourseSortDto>
+     */
+    List<VipGroupGiveCourseSortDto> findVipGroupSortCourseByGroup(@Param("groupId") String groupId);
 }

+ 20 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java

@@ -36,6 +36,15 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
     int deleteStudentAttendancesByCourse(Long courseScheduleId);
 
     /**
+     * @describe 根据课程删除考情记录
+     * @author Joburgess
+     * @date 2020/1/11
+     * @param courseScheduleIds:
+     * @return int
+     */
+    int deleteByCourseSchedules(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+
+    /**
      * 统计学生各种状态人数
      * @param classId
      * @return
@@ -171,4 +180,15 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @return int
      */
     int countStudentAttendenceNum(@Param("courseScheduleId") Integer courseScheduleId);
+
+    /**
+     * @describe 统计课程中4小时前的请假人数
+     * @author Joburgess
+     * @date 2020/1/11
+     * @param courseScheduleIds: 课程计划编号列表
+     * @param hours: 小时
+     * @return java.util.List<java.util.Map<java.lang.Long,java.lang.Integer>>
+     */
+    List<Map<Long,Integer>> countCourseLeaveStudentNumWithFourHoursAgo(@Param("courseScheduleIds") List<Long> courseScheduleIds,
+                                                                       @Param("hours") Integer hours);
 }

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

@@ -204,4 +204,11 @@ public interface StudentPaymentOrderDao extends BaseDAO<Long, StudentPaymentOrde
     int countSporadicPage(Map<String, Object> params);
 
     List<OrderStatisDto> getLuckStatis();
+    
+    /**
+     * 统计收入信息
+     * @param organId
+     * @return
+     */
+    Map<String, Object> queryIncomeStatistics(@Param("organId") String organId);
 }

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

@@ -5,7 +5,6 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
-
 import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
@@ -232,4 +231,13 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @return java.util.List<com.ym.mec.biz.dal.entity.Teacher>
      */
     List<TeacherBasicDto> searchTeachers(Map<String, Object> params);
+
+    /**
+     * 获取教师列表
+     * @param params
+     * @return
+     */
+    int countTeacherName(Map<String, Object> params);
+
+    List<Teacher> queryPageName(Map<String, Object> params);
 }

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

@@ -21,6 +21,9 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "学生总人数")
     private Integer totalStudentNum;
 
+    @ApiModelProperty(value = "预计学生人数")
+    private Integer expectStudentNum;
+
     @ApiModelProperty(value = "学生姓名")
     private String studentNames;
 
@@ -47,6 +50,25 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "是否是第一次进行学生点名")
     private int studentAttendanceIsFirstTime;
 
+    @ApiModelProperty(value = "能否进行调整")
+    private int enableAdjustInToday;
+
+    public Integer getExpectStudentNum() {
+        return expectStudentNum;
+    }
+
+    public void setExpectStudentNum(Integer expectStudentNum) {
+        this.expectStudentNum = expectStudentNum;
+    }
+
+    public int getEnableAdjustInToday() {
+        return enableAdjustInToday;
+    }
+
+    public void setEnableAdjustInToday(int enableAdjustInToday) {
+        this.enableAdjustInToday = enableAdjustInToday;
+    }
+
     public int getStudentAttendanceIsFirstTime() {
         return studentAttendanceIsFirstTime;
     }

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

@@ -0,0 +1,43 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
+import com.ym.mec.biz.dal.enums.TeachModeEnum;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/1/10
+ */
+public class VipGroupGiveCourseSortDto extends CourseScheduleStudentPayment {
+
+    private Date courseStartTime;
+
+    private Date courseEndTime;
+
+    private TeachModeEnum teachMode;
+
+    public TeachModeEnum getTeachMode() {
+        return teachMode;
+    }
+
+    public void setTeachMode(TeachModeEnum teachMode) {
+        this.teachMode = teachMode;
+    }
+
+    public Date getCourseStartTime() {
+        return courseStartTime;
+    }
+
+    public void setCourseStartTime(Date courseStartTime) {
+        this.courseStartTime = courseStartTime;
+    }
+
+    public Date getCourseEndTime() {
+        return courseEndTime;
+    }
+
+    public void setCourseEndTime(Date courseEndTime) {
+        this.courseEndTime = courseEndTime;
+    }
+}

+ 5 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleStudentPayment.java

@@ -55,6 +55,11 @@ public class CourseScheduleStudentPayment {
 		this.classGroupId = classGroupId;
 	}
 
+	public CourseScheduleStudentPayment(Long id, Long courseScheduleId) {
+		this.id = id;
+		this.courseScheduleId = courseScheduleId;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.entity;
 
+import com.ym.mec.biz.dal.enums.KitGroupPurchaseTypeEnum;
 import com.ym.mec.biz.dal.enums.OrderDetailTypeEnum;
 
 import io.swagger.annotations.ApiModelProperty;
@@ -38,6 +39,9 @@ public class StudentPaymentOrderDetail {
 	@ApiModelProperty(value = "订单编号",required = true)
 	private Long paymentOrderId;
 
+	//购买方式
+	private KitGroupPurchaseTypeEnum kitGroupPurchaseType;
+
 	public void setId(Long id){
 		this.id = id;
 	}
@@ -99,4 +103,11 @@ public class StudentPaymentOrderDetail {
 		return ToStringBuilder.reflectionToString(this);
 	}
 
+	public KitGroupPurchaseTypeEnum getKitGroupPurchaseType() {
+		return kitGroupPurchaseType;
+	}
+
+	public void setKitGroupPurchaseType(KitGroupPurchaseTypeEnum kitGroupPurchaseType) {
+		this.kitGroupPurchaseType = kitGroupPurchaseType;
+	}
 }

+ 18 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherMusicClassQueryInfo.java

@@ -0,0 +1,18 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class TeacherMusicClassQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "乐团状态",required = true)
+    private String status;
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+}

+ 48 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherNameQueryInfo.java

@@ -0,0 +1,48 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+public class TeacherNameQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "教师编号",required = true)
+    private Integer teacherId;
+
+    private String organId;
+
+    private String subjectIds;
+
+    private String jobNature;
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public String getSubjectIds() {
+        return subjectIds;
+    }
+
+    public void setSubjectIds(String subjectIds) {
+        this.subjectIds = subjectIds;
+    }
+
+    public String getJobNature() {
+        return jobNature;
+    }
+
+    public void setJobNature(String jobNature) {
+        this.jobNature = jobNature;
+    }
+}

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

@@ -99,7 +99,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param queryInfo
      * @return
      */
-    PageInfo<TeacherMusicClassInfoDto> getTeacherMusicClass(QueryInfo queryInfo);
+    PageInfo<TeacherMusicClassInfoDto> getTeacherMusicClass(TeacherMusicClassQueryInfo queryInfo);
 
     /**
      * 获取老师VIP课程信息列表

+ 9 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleStudentPaymentService.java

@@ -45,4 +45,13 @@ public interface CourseScheduleStudentPaymentService extends BaseService<Long, C
 	 */
 	int batchInsert(List<CourseScheduleStudentPayment> courseScheduleStudentPayments);
 
+	/**
+	 * @describe 更新VIP课赠送课顺序
+	 * @author Joburgess
+	 * @date 2020/1/10
+	 * @param vipGroupId: 小课编号
+	 * @return void
+	 */
+	void updateVipGiveCourse(Long vipGroupId);
+
 }

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

@@ -85,6 +85,8 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
      * vip课程可更新学生签到状态时间限制,课程结束后{}分钟
      */
     String ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP = "enable_student_attendance_time_range_vip";
+
+    String ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP = "enable_student_attendance_befor_course_start_time_range_vip";
     
     /**
      * 十分钟内最大可发送的短信次数

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

@@ -136,4 +136,11 @@ public interface TeacherService extends BaseService<Integer, Teacher> {
      * @return
      */
     List<Teacher> findTeacherByOrganId(String organId,String subjectIds,String jobNature);
+
+    /**
+     * 分页获取教师列表
+     * @param queryInfo
+     * @return
+     */
+    PageInfo<Teacher> queryPageName(TeacherNameQueryInfo queryInfo);
 }

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

@@ -414,7 +414,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
 	}
 
     @Override
-    public PageInfo<TeacherMusicClassInfoDto> getTeacherMusicClass(QueryInfo queryInfo) {
+    public PageInfo<TeacherMusicClassInfoDto> getTeacherMusicClass(TeacherMusicClassQueryInfo queryInfo) {
         PageInfo<TeacherMusicClassInfoDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);
@@ -2148,7 +2148,8 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         if (Objects.isNull(classGroup)) {
             throw new BizException("班级不存在");
         }
-        classGroup.setTotalClassTimes(classGroup.getTotalClassTimes() + num);
+        int totalClassTimes = classGroup.getTotalClassTimes() == null ? 0 : classGroup.getTotalClassTimes();
+        classGroup.setTotalClassTimes(totalClassTimes+ num);
         classGroup.setUpdateTime(new Date());
 
         classGroupDao.update(classGroup);

+ 88 - 76
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -317,9 +317,11 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             throw new BizException("请登录");
         }
         Date now = new Date();
+        SysConfig studentAttendanceAfterTimeConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP);
         Map<String, Object> result = new HashMap<>(3);
         result.put("vipAppealDaysRange", sysConfigDao.findConfigValue(SysConfigService.VIP_APPEAL_DAYS_RANGE));
         result.put("advanceLeaveHours", Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_LEAVE_HOURS)));
+        result.put("joinRoomBeforeTime",studentAttendanceAfterTimeConfig.getParanValue(Integer.class));
 //		List<Integer> quitClassGroupIds=classGroupStudentMapperDao.findClassGroupIdByUserAndCourseDateAndStatus(user.getId(),classDate, ClassGroupStudentStatusEnum.QUIT.getCode());
         List<CourseScheduleDto> studentCourseSchedulesWithDate = courseScheduleDao.getStudentCourseSchedulesWithDate(classDate, user.getId().longValue(), null);
         List<Long> courseScheduleIds = studentCourseSchedulesWithDate.stream()
@@ -410,6 +412,16 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (Objects.nonNull(studentNumCourseMaps)) {
             studentNumCourseMap = MapUtil.convertIntegerMap(studentNumCourseMaps);
         }
+
+        if(CollectionUtils.isEmpty(teacherCourseSchedulesWithDate)){
+            return teacherCourseSchedulesWithDate;
+        }
+
+        SysConfig advanceLeaveHoursConfig = sysConfigService.findByParamName(SysConfigService.ADVANCE_LEAVE_HOURS);
+        Integer advanceLeaveHours=advanceLeaveHoursConfig.getParanValue(Integer.class);
+        List<Map<Long, Integer>> courseLeaveStudentNumMaps = studentAttendanceDao.countCourseLeaveStudentNumWithFourHoursAgo(allCourseScheduleIds, advanceLeaveHours);
+        Map<Long,Long> courseLeaveStudentNumMap = MapUtil.convertIntegerMap((courseLeaveStudentNumMaps));
+
         for (CourseScheduleDto courseScheduleDto : teacherCourseSchedulesWithDate) {
             Long studentNum = studentNumCourseMap.get(courseScheduleDto.getId());
             if (Objects.nonNull(studentNum)) {
@@ -426,10 +438,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 courseScheduleDto.setStatus(CourseStatusEnum.UNDERWAY);
             }
             if (Objects.nonNull(courseScheduleDto.getClassGroupId())) {
-                String[] studentNums = classGroupStudentMapperDao.findCourseStudentName(courseScheduleDto.getId().intValue());
-                courseScheduleDto.setStudentNames(org.apache.commons.lang3.StringUtils.join(studentNums, ","));
+                String[] studentNames = classGroupStudentMapperDao.findCourseStudentName(courseScheduleDto.getId().intValue());
+                courseScheduleDto.setStudentNames(org.apache.commons.lang3.StringUtils.join(studentNames, ","));
             }
             courseScheduleDto.setSubjectName(subjectNameCourseMap.get(courseScheduleDto.getId()));
+            Long leaveStudentNum = courseLeaveStudentNumMap.get(courseScheduleDto.getId());
+            if(Objects.nonNull(leaveStudentNum)&&leaveStudentNum.intValue()==courseScheduleDto.getExpectStudentNum()){
+                courseScheduleDto.setEnableAdjustInToday(1);
+            }
         }
         return teacherCourseSchedulesWithDate;
     }
@@ -776,6 +792,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     throw new BizException(courseCheckInfo(newCourseSchedule, existCourseSchedule, existCourseScheduleIds, 1));
                 }
 
+                if (!existCourseSchedule.getGroupType().equals(newCourseSchedule.getGroupType()) || !existCourseSchedule.getMusicGroupId().equals(newCourseSchedule.getMusicGroupId())) {
+                    throw new BizException(courseCheckInfo(newCourseSchedule, existCourseSchedule, existCourseScheduleIds, 1));
+                }
+
                 if (isTeacherRepeat) {
                     courseScheduleIds.add(existCourseSchedule.getId());
                 }
@@ -1102,6 +1122,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         checkNewCourseSchedules(courseSchedules, false);
         courseScheduleDao.batchUpdate(courseSchedules);
         classGroupService.updateClassGroupInfo(classGroup.getId());
+        courseScheduleStudentPaymentService.updateVipGiveCourse(vipGroup.getId());
     }
 
     @Override
@@ -1316,7 +1337,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             }
             int num = studentAttendanceDao.countStudentAttendenceNum(oldCourseSchedule.getId().intValue());
             if (num > 0) {
-                throw new BizException("{}[{}]{}-{}课程已点名",
+                throw new BizException("{}[{}] {}-{}课程已点名",
                         oldCourseSchedule.getName(),
                         oldCourseSchedule.getId(),
                         DateUtil.dateToString(oldCourseSchedule.getStartClassTime(),
@@ -1338,6 +1359,15 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             if (Objects.isNull(newCourseSchedule.getTeachMode())) {
                 newCourseSchedule.setTeachMode(oldCourseSchedule.getTeachMode());
             }
+            if(Objects.isNull(newCourseSchedule.getClassDate())){
+                newCourseSchedule.setClassDate(oldCourseSchedule.getClassDate());
+            }
+            if(Objects.isNull(newCourseSchedule.getStartClassTime())){
+                newCourseSchedule.setStartClassTime(oldCourseSchedule.getStartClassTime());
+            }
+            if(Objects.isNull(newCourseSchedule.getEndClassTime())){
+                newCourseSchedule.setEndClassTime(oldCourseSchedule.getEndClassTime());
+            }
             if (newCourseSchedule.getStartClassTime().after(now)) {
                 newCourseSchedule.setStatus(CourseStatusEnum.NOT_START);
             }
@@ -1383,20 +1413,39 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
         Map<Long, CourseSchedule> oldCourseSchedules = new HashMap<>();
 
+        List<Integer> classGroupIds = oldCourseScheduleList.stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
+        List<ClassGroup> classGroups = classGroupDao.findByClassGroupIds(classGroupIds);
+        Map<Integer, ClassGroup> idClassGroupMap = classGroups.stream().collect(Collectors.toMap(ClassGroup::getId, classGroup -> classGroup));
+
+        SysConfig advanceLeaveHoursConfig = sysConfigService.findByParamName(SysConfigService.ADVANCE_LEAVE_HOURS);
+        Integer advanceLeaveHours=advanceLeaveHoursConfig.getParanValue(Integer.class);
+        List<Map<Long, Integer>> courseLeaveStudentNumMaps = studentAttendanceDao.countCourseLeaveStudentNumWithFourHoursAgo(newCourseScheduleIds, advanceLeaveHours);
+        Map<Long,Long> courseLeaveStudentNumMap = MapUtil.convertIntegerMap((courseLeaveStudentNumMaps));
+
         newCourseSchedules.forEach(newCourseSchedule -> {
-            if (!sysUser.getUserType().contains("SYSTEM") && newCourseSchedule.getStartClassTime().before(tomorrow) && sysUser.getUserType().contains("TEACHER")) {
-                throw new BizException("调整时间必须为明天及以后");
-            }
 
             CourseSchedule oldCourseSchedule = oldCourseScheduleMap.get(newCourseSchedule.getId()).get(0);
 
+            if (!sysUser.getUserType().contains("SYSTEM") && sysUser.getUserType().contains("TEACHER")) {
+                Long courseLeaveStudentNum = courseLeaveStudentNumMap.get(newCourseSchedule.getId());
+                ClassGroup classGroup=idClassGroupMap.get(oldCourseSchedule.getClassGroupId());
+                if(oldCourseSchedule.getGroupType().equals(GroupType.VIP)
+                        &&Objects.nonNull(courseLeaveStudentNum)
+                        &&courseLeaveStudentNum.intValue()==classGroup.getExpectStudentNum()){
+                    if(!DateUtil.isSameDay(now,oldCourseSchedule.getStartClassTime())&&now.after(oldCourseSchedule.getStartClassTime())){
+                        throw new BizException("当前时间不可对相关课程进行调整");
+                    }
+                }else{
+                    if(DateUtil.addHours(now,advanceLeaveHours).after(oldCourseSchedule.getStartClassTime())){
+                        throw new BizException("请在课程开始前{}小时进行调整",advanceLeaveHours);
+                    }
+                }
+            }
+
             oldCourseSchedules.put(newCourseSchedule.getId(), oldCourseSchedule);
 
             if (newCourseSchedule.getStartClassTime().after(now)){
                 teacherAttendanceDao.cleanCourseTeacherSignInfo(newCourseSchedule.getId());
-            }
-
-            if (oldCourseSchedule.getEndClassTime().before(now)&&newCourseSchedule.getStartClassTime().after(now)){
                 needCreateStudentPaymentCourses.add(oldCourseSchedule);
             }
 
@@ -1539,7 +1588,14 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         if (!CollectionUtils.isEmpty(needCreateCourseScheduleTeacherSalaryCourse)) {
             classGroupTeacherMapperService.createCourseScheduleTeacherSalary(needCreateCourseScheduleTeacherSalaryCourse, oldCourseSchedules);
         }
-        courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentByCourseSchedules(needCreateStudentPaymentCourses);
+        if(!CollectionUtils.isEmpty(needCreateStudentPaymentCourses)){
+            courseScheduleStudentPaymentService.createCourseScheduleStudentPaymentByCourseSchedules(needCreateStudentPaymentCourses);
+            studentAttendanceDao.deleteByCourseSchedules(needCreateStudentPaymentCourses.stream().map(CourseSchedule::getId).collect(Collectors.toList()));
+        }
+
+        if(oldCourseScheduleList.get(0).getGroupType().equals(GroupType.VIP)){
+            courseScheduleStudentPaymentService.updateVipGiveCourse(Long.valueOf(oldCourseScheduleList.get(0).getMusicGroupId()));
+        }
 
         try {
             //推送课时调整
@@ -1561,6 +1617,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
         } catch (Exception e) {
             e.printStackTrace();
         }
+
 //		Set<Integer> roleIds = new HashSet<>(1);
 //		roleIds.add(SysUserRole.SECTION_MANAGER);
 //		classGroupDao.get();
@@ -1581,51 +1638,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             throw new BizException("未找到对应课程");
         }
 
-        //获取两个课程的主教、助教
-        List<Long> courseScheduleIds = new ArrayList<>();
-        courseScheduleIds.add(courseScheduleId1);
-        courseScheduleIds.add(courseScheduleId2);
-        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = courseScheduleTeacherSalaryDao.findByCourseSchedules(courseScheduleIds);
-        Map<Long, List<CourseScheduleTeacherSalary>> courseScheduleTeacherSalaryByCourse = courseScheduleTeacherSalaries.stream()
-                .collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
-        //课程1的主教、助教
-        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries1 = courseScheduleTeacherSalaryByCourse.get(courseScheduleId1);
-        //课程2的主教、助教
-        List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries2 = courseScheduleTeacherSalaryByCourse.get(courseScheduleId2);
-
-        Map<TeachTypeEnum, List<CourseScheduleTeacherSalary>> ct1 = courseScheduleTeacherSalaries1.stream()
-                .collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getTeacherRole));
-
-        Map<TeachTypeEnum, List<CourseScheduleTeacherSalary>> ct2 = courseScheduleTeacherSalaries2.stream()
-                .collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getTeacherRole));
-
-        //交换两节课的主教、助教
-        if (Objects.nonNull(ct1.get(TeachTypeEnum.BISHOP))) {
-            courseSchedule1.setActualTeacherId(ct1.get(TeachTypeEnum.BISHOP).get(0).getUserId());
-        } else {
-            courseSchedule1.setActualTeacherId(null);
-        }
-        if (Objects.nonNull(ct2.get(TeachTypeEnum.BISHOP))) {
-            courseSchedule2.setActualTeacherId(ct2.get(TeachTypeEnum.BISHOP).get(0).getUserId());
-        } else {
-            courseSchedule2.setActualTeacherId(null);
-        }
-        List<CourseScheduleTeacherSalary> ct1t = ct1.get(TeachTypeEnum.TEACHING);
-        if (CollectionUtils.isEmpty(ct1t)) {
-            courseSchedule1.setTeachingTeacherIdList(null);
-        } else {
-            List<Integer> collect = ct1t.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
-            collect.stream().distinct();
-            courseSchedule1.setTeachingTeacherIdList(collect);
-        }
-        List<CourseScheduleTeacherSalary> ct2t = ct2.get(TeachTypeEnum.TEACHING);
-        if (CollectionUtils.isEmpty(ct2t)) {
-            courseSchedule2.setTeachingTeacherIdList(null);
-        } else {
-            List<Integer> collect = ct2t.stream().map(CourseScheduleTeacherSalary::getUserId).collect(Collectors.toList());
-            collect.stream().distinct();
-            courseSchedule2.setTeachingTeacherIdList(collect);
-        }
         courseSchedule1.setId(courseScheduleId2);
         courseSchedule2.setId(courseScheduleId1);
         List<CourseSchedule> courseSchedules = new ArrayList<>();
@@ -1856,27 +1868,27 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             classGroupService.batchIncreaseClassTimes(classGroupIds);
 
             //查询班级信息
-            List<ClassGroup> classGroupList = classGroupService.findClassGroupByIds(classGroupIds.stream().map(e -> e.toString()).collect(Collectors.joining(",")));
-
-            List<String> vipGroupIdList = new ArrayList<String>();
-            for (ClassGroup classGroup : classGroupList) {
-                if (classGroup.getGroupType() == GroupType.VIP && classGroup.getCurrentClassTimes() == classGroup.getTotalClassTimes().intValue()) {
-                    if (!vipGroupIdList.contains(classGroup.getMusicGroupId())) {
-                        vipGroupIdList.add(classGroup.getMusicGroupId());
-                    }
-                }
-            }
-            if (vipGroupIdList.size() > 0) {
-                List<VipGroup> vipGroupList = vipGroupDao.queryByIds(vipGroupIdList.stream().collect(Collectors.joining(",")));
-                for (VipGroup vipGroup : vipGroupList) {
-                    if (!vipGroup.getStatus().equals(VipGroupStatusEnum.PAUSE)
-                            && !vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)) {
-                        vipGroup.setStatus(VipGroupStatusEnum.FINISHED);
-                    }
-                    vipGroup.setUpdateTime(date);
-                }
-                vipGroupDao.batchUpdate(vipGroupList);
-            }
+//            List<ClassGroup> classGroupList = classGroupService.findClassGroupByIds(classGroupIds.stream().map(e -> e.toString()).collect(Collectors.joining(",")));
+//
+//            List<String> vipGroupIdList = new ArrayList<String>();
+//            for (ClassGroup classGroup : classGroupList) {
+//                if (classGroup.getGroupType() == GroupType.VIP && classGroup.getCurrentClassTimes() == classGroup.getTotalClassTimes().intValue()) {
+//                    if (!vipGroupIdList.contains(classGroup.getMusicGroupId())) {
+//                        vipGroupIdList.add(classGroup.getMusicGroupId());
+//                    }
+//                }
+//            }
+//            if (vipGroupIdList.size() > 0) {
+//                List<VipGroup> vipGroupList = vipGroupDao.queryByIds(vipGroupIdList.stream().collect(Collectors.joining(",")));
+//                for (VipGroup vipGroup : vipGroupList) {
+//                    if (!vipGroup.getStatus().equals(VipGroupStatusEnum.PAUSE)
+//                            && !vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)) {
+//                        vipGroup.setStatus(VipGroupStatusEnum.FINISHED);
+//                    }
+//                    vipGroup.setUpdateTime(date);
+//                }
+//                vipGroupDao.batchUpdate(vipGroupList);
+//            }
         }
 
         if (courseScheduleIdList.size() > 0) {

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

@@ -1,11 +1,14 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.*;
+import com.ym.mec.biz.dal.dto.VipGroupGiveCourseSortDto;
 import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.enums.VipGroupActivityTypeEnum;
 import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
 import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
+import com.ym.mec.biz.service.SysUserCashAccountService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -32,6 +35,8 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	private CourseScheduleDao courseScheduleDao;
 	@Autowired
 	private ClassGroupStudentMapperDao classGroupStudentMapperDao;
+	@Autowired
+	private SysUserCashAccountService sysUserCashAccountService;
 
 	@Override
 	public BaseDAO<Long, CourseScheduleStudentPayment> getDAO() {
@@ -165,13 +170,33 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 				return;
 			}
 			studentsWithClassGroup.forEach(classGroupStudent->{
+				VipGroup vipGroup=null;
+				if(classGroupStudent.getGroupType().equals(GroupType.VIP)){
+					vipGroup=vipGroupDao.get(Long.valueOf(classGroupStudent.getMusicGroupId()));
+				}
 				for (CourseSchedule courseSchedule : courseSchedulesByClassGroup) {
 					int i = courseScheduleStudentPaymentDao.checkStudentHaveCourse(courseSchedule.getId(), classGroupStudent.getUserId());
 					if(i>0){
 						continue;
 					}
 					if(courseSchedule.getType().equals(CourseSchedule.CourseScheduleType.VIP)){
-
+						CourseScheduleStudentPayment courseScheduleStudentPayment=new CourseScheduleStudentPayment(
+								courseSchedule.getId(),
+								classGroupStudent.getUserId(),
+								courseSchedule.getTeachMode().equals(TeachModeEnum.ONLINE)?vipGroup.getOnlineClassesUnitPrice():vipGroup.getOfflineClassesUnitPrice(),
+								courseSchedule.getClassGroupId()
+						);
+						courseScheduleStudentPayment.setGroupType(classGroupStudent.getGroupType());
+						courseScheduleStudentPayment.setMusicGroupId(classGroupStudent.getMusicGroupId());
+						List<CourseScheduleStudentPayment> otherPayments = courseScheduleStudentPaymentDao.findByCourseSchedule(courseSchedule.getId());
+						if(!CollectionUtils.isEmpty(otherPayments)){
+							courseScheduleStudentPayment.setExpectPrice(otherPayments.get(0).getExpectPrice());
+						}
+						if(Objects.isNull(courseScheduleStudentPayment.getExpectPrice())){
+							courseScheduleStudentPayment.setExpectPrice(zeroPrice);
+						}
+						sysUserCashAccountService.appendCourseBalance(classGroupStudent.getUserId(), courseScheduleStudentPayment.getExpectPrice().negate());
+						courseScheduleStudentPayments.add(courseScheduleStudentPayment);
 					}else{
 						CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment(
 								courseSchedule.getId(),
@@ -194,4 +219,55 @@ public class CourseScheduleStudentPaymentServiceImpl extends BaseServiceImpl<Lon
 	public int batchInsert(List<CourseScheduleStudentPayment> courseScheduleStudentPayments) {
 		return courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
 	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void updateVipGiveCourse(Long vipGroupId) {
+		List<VipGroupGiveCourseSortDto> vipGroupSortCourseByGroup = courseScheduleStudentPaymentDao.findVipGroupSortCourseByGroup(vipGroupId.toString());
+		Map<BigDecimal, Long> expectPriceCountMap = vipGroupSortCourseByGroup.stream()
+				.collect(Collectors.groupingBy(VipGroupGiveCourseSortDto::getExpectPrice, Collectors.counting()));
+		BigDecimal zero = new BigDecimal("0.00");
+		Long zeroPriceNum = expectPriceCountMap.get(zero);
+		if(Objects.isNull(zeroPriceNum)||zeroPriceNum<=0){
+			return;
+		}
+
+		List<CourseScheduleStudentPayment> needUpdatePayments=new ArrayList<>();
+
+		List<VipGroupGiveCourseSortDto> zeroExpectPricePayments = vipGroupSortCourseByGroup.stream()
+				.filter(vipGroupGiveCourseSortDto -> vipGroupGiveCourseSortDto.getExpectPrice().compareTo(zero)==0)
+				.collect(Collectors.toList());
+		Map<Long, List<VipGroupGiveCourseSortDto>> courseIdPaymentMap = zeroExpectPricePayments.stream()
+				.collect(Collectors.groupingBy(VipGroupGiveCourseSortDto::getId));
+		vipGroupSortCourseByGroup.sort(Comparator.comparing(VipGroupGiveCourseSortDto::getCourseStartTime).reversed());
+		for (int i=0;i<vipGroupSortCourseByGroup.size();i++) {
+			if(i>zeroExpectPricePayments.size()-1){
+				return;
+			}
+
+			VipGroupGiveCourseSortDto vipGroupGiveCourseSortDto=vipGroupSortCourseByGroup.get(i);
+
+			int j=0;
+			for (Map.Entry<Long, List<VipGroupGiveCourseSortDto>> longListEntry : courseIdPaymentMap.entrySet()) {
+				if(j>i){
+					break;
+				}
+				j++;
+
+				for (VipGroupGiveCourseSortDto groupGiveCourseSortDto : longListEntry.getValue()) {
+					if(!vipGroupGiveCourseSortDto.getId().equals(groupGiveCourseSortDto.getId())
+							&&!vipGroupGiveCourseSortDto.getTeachMode().equals(groupGiveCourseSortDto.getTeachMode())){
+						throw new BizException("不支持将不同教学形式的课程调整的赠送课时后");
+					}
+					if(!vipGroupGiveCourseSortDto.getId().equals(groupGiveCourseSortDto.getId())){
+						needUpdatePayments.add(new CourseScheduleStudentPayment(vipGroupGiveCourseSortDto.getId(),groupGiveCourseSortDto.getCourseScheduleId()));
+						needUpdatePayments.add(new CourseScheduleStudentPayment(groupGiveCourseSortDto.getId(),vipGroupGiveCourseSortDto.getCourseScheduleId()));
+					}
+				}
+			}
+		}
+		if(!CollectionUtils.isEmpty(needUpdatePayments)){
+			courseScheduleStudentPaymentDao.batchUpdate(needUpdatePayments);
+		}
+	}
 }

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -418,6 +418,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
             for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.LEASE)) {
                     goodsGroup.setPrice(musicOneSubjectClassPlan.getDepositFee());
+                    goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.LEASE);
                 }
                 if (goodsGroup.getType().equals(GoodsType.INSTRUMENT) && musicOneSubjectClassPlan.getKitGroupPurchaseType().equals(KitGroupPurchaseTypeEnum.FREE)) {
                     goodsGroup.setPrice(new BigDecimal(0));
@@ -445,6 +446,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     if(!groupType.containsKey("GROUP")){
                         throw new BizException("乐器提供方式不存在");
                     }
+                    goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.GROUP);
                     remitFee = new BigDecimal((String) groupType.get("GROUP"));
                 }
                 if (registerPayDto.getGoodsGroups().get(goodsGroup.getId()).equals("LEASE")) {
@@ -612,6 +614,7 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         BigDecimal instrumentFee = BigDecimal.ZERO;
         BigDecimal accessoriesFee = BigDecimal.ZERO;
         BigDecimal otherFee = BigDecimal.ZERO;
+        BigDecimal remitFee = BigDecimal.ZERO;
 
 
         //乐器及打包辅件
@@ -665,6 +668,43 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                     courseFee.subtract(goodsGroup.getRemissionCourseFee());
                 }
             }
+        } else if (registerPayDto.getGoodsGroups() != null && registerPayDto.getGoodsGroups().size() > 0) {
+            String goodsGroupIds = registerPayDto.getGoodsGroups().keySet().stream().map(Object::toString).collect(Collectors.joining(","));
+            goodsGroups = musicGroupSubjectGoodsGroupService.findGoodsGroupByIds(goodsGroupIds);
+            for (MusicGroupSubjectGoodsGroup goodsGroup : goodsGroups) {
+                Map groupType = JSONObject.parseObject(goodsGroup.getKitGroupPurchaseTypeJson(), HashMap.class);
+                if (registerPayDto.getGoodsGroups().get(goodsGroup.getId()).equals("GROUP")) {
+                    if(!groupType.containsKey("GROUP")){
+                        throw new BizException("乐器提供方式不存在");
+                    }
+                    goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.GROUP);
+                    remitFee = new BigDecimal((String) groupType.get("GROUP"));
+                }
+                if (registerPayDto.getGoodsGroups().get(goodsGroup.getId()).equals("LEASE")) {
+                    if(!groupType.containsKey("LEASE")){
+                        throw new BizException("乐器提供方式不存在");
+                    }
+                    goodsGroup.setPrice(goodsGroup.getDepositFee());
+                    goodsGroup.setKitGroupPurchaseType(KitGroupPurchaseTypeEnum.LEASE);
+                    remitFee = new BigDecimal((String) groupType.get("LEASE"));
+                }
+                if (registerPayDto.getGoodsGroups().get(goodsGroup.getId()).equals("FREE")) {
+                    if(!groupType.containsKey("FREE")){
+                        throw new BizException("乐器提供方式不存在");
+                    }
+                    goodsGroup.setPrice(new BigDecimal(0));
+                    remitFee = new BigDecimal((String) groupType.get("FREE"));
+                }
+                if(goodsGroup.getType().equals(GoodsType.INSTRUMENT)){
+                    instrumentFee = instrumentFee.add(goodsGroup.getPrice());
+                }else if(goodsGroup.getType().equals(GoodsType.ACCESSORIES)) {
+                    accessoriesFee = accessoriesFee.add(goodsGroup.getPrice());
+                }else {
+                    otherFee = otherFee.add(goodsGroup.getPrice());
+                }
+                orderAmount = orderAmount.add(goodsGroup.getPrice());
+            }
+            orderAmount = orderAmount.subtract(remitFee);
         }
 
         //单独辅件

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

@@ -88,6 +88,11 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		if(courseSchedule.getGroupType().equals(GroupType.MUSIC)){
 			attendanceTimeRange = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
 		}else{
+			SysConfig beforeAttendanceTimeRange=sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_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);
@@ -248,7 +253,7 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public boolean leave(Integer userId, Long courseScheduleId, String remark) {
 		
 		CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
@@ -296,8 +301,6 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		if(Objects.isNull(classGroupStudentMapper)){
 			throw new BizException("您不在此课程对应班级上");
 		}
-		classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.LEAVE);
-		classGroupStudentMapperDao.update(classGroupStudentMapper);
 
 		Map<Integer,String> sendArgs=new HashMap<>();
 		sendArgs.put(courseSchedule.getActualTeacherId(),courseSchedule.getActualTeacherId() + "");

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

@@ -232,7 +232,7 @@ public class StudentPaymentOrderServiceImpl extends BaseServiceImpl<Long, Studen
                     vipGroupService.orderCallback(order);
                 } else if (order.getType().equals(OrderTypeEnum.RENEW)) {
                     musicGroupService.renewForCallback(order);
-                }else if (order.getType().equals(OrderTypeEnum.SPORADIC)){
+                }else if (order.getType().equals(OrderTypeEnum.SPORADIC)||order.getType().equals(OrderTypeEnum.LUCK)){
                     sporadicChargeInfoService.renewForCallback(order);
                 }
             } catch (Exception e) {

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

@@ -355,6 +355,7 @@ public class StudentRegistrationServiceImpl extends BaseServiceImpl<Long, Studen
                 studentPaymentOrderDetail4goodsGroup.setCreateTime(date);
                 studentPaymentOrderDetail4goodsGroup.setUpdateTime(date);
                 studentPaymentOrderDetail4goodsGroup.setPaymentOrderId(studentPaymentOrder.getId());
+                studentPaymentOrderDetail4goodsGroup.setKitGroupPurchaseType(goodsGroup.getKitGroupPurchaseType());
                 studentPaymentOrderDetailList.add(studentPaymentOrderDetail4goodsGroup);
             }
         }

+ 14 - 13
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java

@@ -252,11 +252,12 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			teacherAttendance.setClassGroupId(courseScheduleId);
 			teacherAttendance.setTeacherId(userId);
 			teacherAttendanceDao.insert(teacherAttendance);
+		}else {
+			teacherAttendance.setGroupType(courseSchedule.getGroupType());
+			teacherAttendance.setTeacherId(userId);
+			teacherAttendance.setClassGroupId(classGroup.getId());
+			teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
 		}
-		teacherAttendance.setGroupType(courseSchedule.getGroupType());
-		teacherAttendance.setTeacherId(userId);
-		teacherAttendance.setClassGroupId(classGroup.getId());
-		teacherAttendance.setMusicGroupId(classGroup.getMusicGroupId());
 //		int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
 		Date date = new Date();
 		String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
@@ -317,15 +318,15 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 			teacherAttendance.setSignOutTime(date);
 			teacherAttendanceDao.update(teacherAttendance);
 			//教师签退后,给未签到学员添加旷课记录
-			List<StudentAttendance> studentAttendances = studentAttendanceDao.queryNoSignStudentRecord(courseScheduleId);
-			if(studentAttendances != null && studentAttendances.size() > 0){
-				studentAttendances.forEach(e->{
-					e.setTeacherId(userId);
-					e.setStatus(StudentAttendanceStatusEnum.TRUANT);
-					e.setRemark("学员未到,自动补旷课");
-				});
-				studentAttendanceDao.addStudentAttendances(studentAttendances);
-			}
+//			List<StudentAttendance> studentAttendances = studentAttendanceDao.queryNoSignStudentRecord(courseScheduleId);
+//			if(studentAttendances != null && studentAttendances.size() > 0){
+//				studentAttendances.forEach(e->{
+//					e.setTeacherId(userId);
+//					e.setStatus(StudentAttendanceStatusEnum.TRUANT);
+//					e.setRemark("学员未到,自动补旷课");
+//				});
+//				studentAttendanceDao.addStudentAttendances(studentAttendances);
+//			}
 		}
 	}
 

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

@@ -332,6 +332,26 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 	}
 
 	@Override
+	public PageInfo<Teacher> queryPageName(TeacherNameQueryInfo queryInfo) {
+		PageInfo<Teacher> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<Teacher> dataList = null;
+		int count = teacherDao.countTeacherName(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = teacherDao.queryPageName(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
 	public List<BasicUserDto> queryMusicGroupTeacher(String musicGroupId) {
 		if(Objects.isNull(musicGroupId)){
 			throw new BizException("请指定乐团");

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

@@ -929,7 +929,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(studentPaymentNum.equals(classGroup.getExpectStudentNum())&&updateVipStatus){
 			classGroup.setStudentNum(studentPaymentNum);
 			classGroup.setDelFlag(0);
-			vipGroup.setStatus(VipGroupStatusEnum.APPLYING_END);
+			vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
 			createVipGroupCourseScheInfo(vipGroupId,classGroup);
 			vipGroupDao.update(vipGroup);
 		}
@@ -2137,6 +2137,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 		classGroupService.updateClassGroupInfo(classGroup.getId());
 
+		courseScheduleStudentPaymentService.updateVipGiveCourse(vipGroup.getId());
 
 		ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
 		imFeignService.groupJoin(new ImGroupModel(classGroup.getId().toString(),

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

@@ -219,6 +219,9 @@
         LEFT JOIN class_group cg ON cg.id_ = cgtm.class_group_id_
         LEFT JOIN teacher t ON t.id_ = cgtm.user_id_
         WHERE cgtm.user_id_ = #{search} AND cg.del_flag_ = 0 AND cg.group_type_ = 'MUSIC'
+        <if test="status != null">
+            AND mg.status_ = #{status}
+        </if>
         <include refid="global.limit"/>
     </select>
 
@@ -481,6 +484,9 @@
         LEFT JOIN class_group cg ON cg.id_ = cgtm.class_group_id_
         LEFT JOIN teacher t ON t.id_ = cgtm.user_id_
         WHERE cgtm.user_id_ = #{search} AND cg.del_flag_ = 0 AND cg.group_type_ = 'MUSIC'
+        <if test="status != null">
+            AND mg.status_ = #{status}
+        </if>
     </select>
     <select id="findStudentOrganIdsByClassGroup" resultType="int">
         SELECT

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

@@ -52,6 +52,7 @@
         <result column="sign_out_status_" property="signOutStatus"/>
         <result column="seal_class_id_" property="sealClassId"/>
         <result column="total_student_num_" property="totalStudentNum"/>
+        <result column="expect_student_num_" property="expectStudentNum"/>
         <result column="teacher_role_" property="teacherRole" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="attendance_status_" property="attendanceStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="complaint_status_" property="complaintStatus"/>
@@ -442,19 +443,20 @@
             cs.class_date_,
             CONCAT(cs.class_date_,' ',cs.start_class_time_) start_class_time_,
             CONCAT(cs.class_date_,' ',cs.end_class_time_) end_class_time_,
+            cs.actual_teacher_id_,
             cs.status_,
             cs.student_num_,
             cs.leave_student_num_,
             cg.student_num_ total_student_num_,
-            su.username_ teacher_name_,
+            su.real_name_ teacher_name_,
             ta.sign_in_status_ attendance_status_,
             s.name_ school_name_
         FROM
             course_schedule cs
             LEFT JOIN class_group cg ON cs.class_group_id_ = cg.id_
-            LEFT JOIN sys_user su ON cs.teacher_id_=su.id_
-            LEFT JOIN teacher_attendance ta ON cs.id_=ta.class_group_id_ AND ta.teacher_id_=cs.teacher_id_
-            LEFT JOIN school s ON mg.school_id_=s.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_=su.id_
+            LEFT JOIN teacher_attendance ta ON cs.id_=ta.class_group_id_ AND ta.teacher_id_=cs.actual_teacher_id_
+            LEFT JOIN school s ON cs.schoole_id_=s.id_
         WHERE
         (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
         <if test="groups != null and organIdList!=null">
@@ -539,6 +541,7 @@
             cs.status_,
             csts.user_id_ actual_teacher_id_,
             csts.teacher_role_,
+            cg.expect_student_num_,
             cs.schoole_id_,
             s.name_ school_name_,
             if(ta.sign_in_status_ IS NULL,0,1) sign_in_status_,

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

@@ -86,6 +86,42 @@
 			</if>
 		</set> WHERE id_ = #{id} 
 	</update>
+
+	<update id="batchUpdate" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment">
+		<foreach collection="courseScheduleStudentPayments" item="courseScheduleStudentPayment" separator=";">
+			UPDATE course_schedule_student_payment
+			<set>
+				<if test="courseScheduleStudentPayment.userId != null">
+					user_id_ = #{courseScheduleStudentPayment.userId},
+				</if>
+				<if test="courseScheduleStudentPayment.courseScheduleId != null">
+					course_schedule_id_ = #{courseScheduleStudentPayment.courseScheduleId},
+				</if>
+				<if test="courseScheduleStudentPayment.groupType != null">
+					group_type_ = #{courseScheduleStudentPayment.groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+				</if>
+				<if test="courseScheduleStudentPayment.musicGroupId != null">
+					music_group_id_ = #{courseScheduleStudentPayment.musicGroupId},
+				</if>
+				update_time_ = NOW(),
+				<if test="courseScheduleStudentPayment.settlementTime != null">
+					settlement_time_ = #{courseScheduleStudentPayment.settlementTime},
+				</if>
+				<if test="courseScheduleStudentPayment.expectPrice != null">
+					expect_price_ = #{courseScheduleStudentPayment.expectPrice},
+				</if>
+				<if test="courseScheduleStudentPayment.actualPrice != null">
+					actual_price_ = #{courseScheduleStudentPayment.actualPrice},
+				</if>
+				<if test="courseScheduleStudentPayment.createTime != null">
+					create_time_ = #{courseScheduleStudentPayment.createTime},
+				</if>
+				<if test="courseScheduleStudentPayment.classGroupId != null">
+					class_group_id_ = #{courseScheduleStudentPayment.classGroupId},
+				</if>
+			</set> WHERE id_ = #{courseScheduleStudentPayment.id}
+		</foreach>
+	</update>
 	
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete" >
@@ -229,8 +265,28 @@
     <select id="checkStudentHaveCourse" resultType="int">
 		SELECT COUNT(id_) FROM course_schedule_student_payment WHERE course_schedule_id_=#{courseScheduleId} AND user_id_=#{userId}
 	</select>
+	<select id="findByCourseSchedule" resultMap="CourseScheduleStudentPayment">
+		SELECT * FROM course_schedule_student_payment WHERE  course_schedule_id_ = #{courseScheduleId}
+	</select>
+
+	<resultMap id="VipGroupGiveCourseSortDto" type="com.ym.mec.biz.dal.dto.VipGroupGiveCourseSortDto" extends="CourseScheduleStudentPayment">
+		<result property="courseStartTime" column="course_start_time_"/>
+		<result property="courseEndTime" column="course_end_time_"/>
+		<result property="teachMode" column="teach_mode_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+	</resultMap>
+	<select id="findVipGroupSortCourseByGroup" resultMap="VipGroupGiveCourseSortDto">
+		SELECT
+			 cssp.*,
+			 cs.teach_mode_,
+			 CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
+			 CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_
+		FROM course_schedule_student_payment cssp
+			LEFT JOIN course_schedule cs ON cssp.course_schedule_id_=cs.id_
+		WHERE cssp.music_group_id_=#{groupId} AND cssp.group_type_='VIP'
+		AND CONCAT(cs.class_date_,' ',cs.start_class_time_) &gt; NOW()
+	</select>
 
-    <delete id="deleteStudentCourseSchedule">
+	<delete id="deleteStudentCourseSchedule">
 		DELETE FROM course_schedule_student_payment WHERE user_id_ = #{userId} AND course_schedule_id_ IN
 		<foreach collection="courseScheduleList" item="courseSchedule" index="index" open="(" close=")" separator=",">
 			#{courseSchedule.id}

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

@@ -337,7 +337,7 @@
     </select>
     
   	<select id="queryOrganMusicGroupNum" resultType="map">
-    	select count(*) total,sum(case when status_ = 'PROGRESS' then 1 else 0 end) progress_num_,sum(case when status_ = 'PAUSE' then 1 else 0 end) pause_num_ from music_group
+    	select count(*) total,sum(case when status_ = 'PREPARE' then 1 else 0 end) prepare_num_,sum(case when status_ = 'PROGRESS' then 1 else 0 end) progress_num_,sum(case when status_ = 'PAUSE' then 1 else 0 end) pause_num_ from music_group
     	<where>
     		<if test="organId != null">
     			FIND_IN_SET(organ_id_,#{organId})

+ 31 - 2
mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml

@@ -129,6 +129,12 @@
     <delete id="delete">
 		DELETE FROM student_attendance WHERE id_ = #{id} 
 	</delete>
+    <delete id="deleteByCourseSchedules">
+        DELETE FROM student_attendance WHERE course_schedule_id_ IN
+        <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+            #{courseScheduleId}
+        </foreach>
+    </delete>
 
     <resultMap id="studentAttendanceViewUtilEntity" type="com.ym.mec.biz.dal.dto.StudentAttendanceViewDto">
         <result property="classGroupId" column="class_group_id_"/>
@@ -360,7 +366,15 @@
         AND cssp.course_schedule_id_ = #{courseScheduleId}
     </select>
     <select id="countStudentAttendenceNum" resultType="int">
-        SELECT COUNT(*) FROM student_attendance sa WHERE course_schedule_id_ = #{courseScheduleId} AND status_='NORMAL'
+        SELECT
+            COUNT( sa.user_id_ )
+        FROM
+            student_attendance sa
+            LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
+        WHERE
+            sa.create_time_ &gt; DATE_ADD( CONCAT( cs.class_date_, ' ', cs.start_class_time_ ), INTERVAL - 4 HOUR )
+            AND sa.course_schedule_id_ = #{courseScheduleId}
+            AND (sa.update_time_!='1970-01-01 00:00:00' OR sa.update_time_ IS NULL)
     </select>
     <select id="countStudentAttendancesByCourses" resultType="java.util.Map">
         SELECT
@@ -373,8 +387,23 @@
             <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
                 #{courseScheduleId}
             </foreach>
-            AND update_time_!='1970-01-01 00:00:00'
         GROUP BY
             course_schedule_id_
     </select>
+    <select id="countCourseLeaveStudentNumWithFourHoursAgo" resultType="java.util.Map">
+        SELECT
+            sa.course_schedule_id_ AS 'key',
+            COUNT( DISTINCT sa.user_id_ ) AS 'value'
+        FROM
+            student_attendance sa
+            LEFT JOIN course_schedule cs ON cs.id_ = sa.course_schedule_id_
+        WHERE
+            sa.status_ = 'LEAVE'
+            AND sa.create_time_ &lt; DATE_ADD( CONCAT( cs.class_date_, ' ', cs.start_class_time_ ), INTERVAL -#{hours} HOUR )
+            AND sa.course_schedule_id_ IN
+            <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+                #{courseScheduleId}
+            </foreach>
+            GROUP BY sa.course_schedule_id_
+    </select>
 </mapper>

+ 10 - 5
mec-biz/src/main/resources/config/mybatis/StudentPaymentOrderMapper.xml

@@ -336,12 +336,9 @@
     </select>
 
     <select id="findOrdersByStatus" resultMap="StudentPaymentOrder">
-        SELECT *
-        FROM student_payment_order
+        SELECT * FROM student_payment_order
         WHERE status_ = #{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-          AND payment_channel_ =
-              #{paymentChannel}
-        LIMIT 100
+        AND payment_channel_ = #{paymentChannel} LIMIT 100
     </select>
 
     <!-- 查询支付中超时订单 -->
@@ -500,4 +497,12 @@
         SELECT o.name_ organName, SUM(spo.actual_amount_) money ,COUNT(spo.id_) nums FROM student_payment_order spo LEFT JOIN organization o ON o.id_=spo.organ_id_
         WHERE spo.type_='LUCK' AND spo.status_='SUCCESS' GROUP BY spo.organ_id_ ORDER BY nums DESC;
     </select>
+    
+    <select id="queryIncomeStatistics" resultType="map">
+    	select count(*) total,sum(actual_amount_) total_num_ from student_payment_order
+    	where actual_amount_ &gt; 0
+   		<if test="organId != null">
+   			and FIND_IN_SET(organ_id_,#{organId})
+   		</if>
+  	</select>
 </mapper>

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

@@ -256,7 +256,7 @@
         LEFT JOIN sys_user su ON cgsm.user_id_ = su.id_
         LEFT JOIN student_registration sr ON sr.user_id_ = su.id_
         LEFT JOIN `subject` s ON s.id_ = sr.actual_subject_id_
-        WHERE cgtm.user_id_ = #{teacherId} AND su.id_ IS NOT NULL
+        WHERE cgtm.user_id_ = #{teacherId} AND su.id_ IS NOT NULL AND cgtm.music_group_id_ = sr.music_group_id_
         <if test="search != null">
             AND su.username_ LIKE CONCAT('%',#{search},'%')
         </if>
@@ -558,11 +558,10 @@
     <select id="queryOrganTeacherNum" resultType="map">
         select count(*) total,sum(case when job_nature_ = 'PART_TIME' then 1 else 0 end) part_time_num_,sum(case when
         job_nature_ = 'FULL_TIME' then 1 else 0 end) full_time_num_ from teacher
-        <where>
+        where demission_date_ is not null
             <if test="organId != null">
-                FIND_IN_SET(organ_id_,#{organId})
+                and FIND_IN_SET(organ_id_,#{organId})
             </if>
-        </where>
     </select>
     <select id="findByFlowOrganRange" resultMap="Teacher">
         SELECT id_,CONCAT(IF(flow_organ_range_ IS NULL OR flow_organ_range_ = '',0,flow_organ_range_),",",
@@ -618,4 +617,34 @@
             AND su.real_name_ LIKE CONCAT('%',#{teacherName},'%')
         </if>
     </select>
+    <select id="countTeacherName" resultType="java.lang.Integer">
+        SELECT COUNT(su.id_) FROM teacher t
+        LEFT JOIN sys_user su ON t.id_ = su.id_
+        WHERE su.del_flag_ != 1
+        <include refid="queryPageNameSql"/>
+    </select>
+    <sql id="queryPageNameSql">
+        <if test="organId != null">
+            AND FIND_IN_SET(t.organ_id_,#{organId})
+        </if>
+        <if test="subjectIds != null">
+            AND INTE_ARRAY(t.subject_id_,#{subjectIds})
+        </if>
+        <if test="jobNature != null">
+            AND t.job_nature_ = #{jobNature}
+        </if>
+        <if test="teacherId != null">
+            AND t.id_ = #{teacherId}
+        </if>
+        <if test="search != null">
+            AND (su.real_name_ LIKE CONCAT('%',#{search},'%') OR su.phone_ LIKE CONCAT('%',#{search},'%'))
+        </if>
+    </sql>
+    <select id="queryPageName" resultMap="Teacher">
+        SELECT su.id_,su.real_name_,su.avatar_ FROM teacher t
+        LEFT JOIN sys_user su ON t.id_ = su.id_
+        WHERE su.del_flag_ != 1
+        <include refid="queryPageNameSql"/>
+        <include refid="global.limit"/>
+    </select>
 </mapper>

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

@@ -315,8 +315,7 @@
             AND vg.courses_expire_date_ &gt;= DATE_FORMAT(NOW(),'%Y%m%d')
             AND vg.courses_start_date &gt; NOW()
             AND (select count(1) as num from student_payment_order where vg.id_ = music_group_id_ AND user_id_=#{userId} AND status_='SUCCESS') = 0
-            AND vg.organ_id_ = #{organId}
-            AND (vg.student_id_list_ IS NULL or FIND_IN_SET(#{userId}, vg.student_id_list_))
+            AND (vg.organ_id_ = #{organId} OR FIND_IN_SET(#{userId}, vg.student_id_list_))
             <if test="subjectId!=null">
                AND FIND_IN_SET(#{subjectId},cg.subject_id_list_)
             </if>

+ 23 - 16
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -12,7 +12,9 @@ import com.ym.dao.WhiteboardDao;
 import com.ym.job.ScheduleManager;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.enums.SignStatusEnum;
 import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
@@ -71,6 +73,9 @@ public class RoomServiceImpl implements RoomService {
     private TeacherDao teacherDao;
 
     @Autowired
+    private CourseScheduleDao courseScheduleDao;
+
+    @Autowired
     private TeacherAttendanceService teacherAttendanceService;
 
     @Autowired
@@ -92,11 +97,12 @@ public class RoomServiceImpl implements RoomService {
 
         String userId = sysUserFeignService.queryUserInfo().getId().toString();
         Teacher teacher = teacherDao.get(Integer.parseInt(userId));
+        CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId));
         try {
-            if(teacher == null){
-                studentAttendanceService.addStudentAttendanceRecord(Integer.parseInt(roomId),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL);
-            }else {
+            if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
                 teacherAttendanceService.addTeacherAttendanceRecord(Integer.parseInt(roomId),Integer.parseInt(userId), SignStatusEnum.SIGN_IN,true);
+            }else {
+                studentAttendanceService.addStudentAttendanceRecord(Integer.parseInt(roomId),Integer.parseInt(userId), StudentAttendanceStatusEnum.NORMAL);
             }
         }catch (Exception e){
             e.printStackTrace();
@@ -142,10 +148,10 @@ public class RoomServiceImpl implements RoomService {
             } else {
                 roleEnum = RoleEnum.RoleAudience;
             }*/
-            if(teacher == null){
-                roleEnum = RoleEnum.RoleStudent;
-            }else {
+            if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
                 roleEnum = RoleEnum.RoleTeacher;
+            }else {
+                roleEnum = RoleEnum.RoleStudent;
             }
             saveRoomMember(userId, userName, roomId, roleEnum.getValue(), !isDisableCamera, curTime);
             IMApiResultInfo resultInfo = imHelper.joinGroup(new String[]{userId}, roomId, roomId);
@@ -236,14 +242,14 @@ public class RoomServiceImpl implements RoomService {
         SysUser user = sysUserFeignService.queryUserInfo();
         String userId = user.getId().toString();
         Teacher teacher = teacherDao.get(user.getId());
-        if(teacher != null){
-            try {
+        CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId.substring(4)));
+        try {
+            if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
                 teacherAttendanceService.addTeacherAttendanceRecord(Integer.parseInt(roomId.substring(4)),user.getId(), SignStatusEnum.SIGN_OUT,true);
-            }catch (Exception e){
-                e.printStackTrace();
             }
+        }catch (Exception e){
+            e.printStackTrace();
         }
-        
         CheckUtils.checkArgument(user != null, "user must't be null");
         CheckUtils.checkArgument(roomId != null, "roomId must't be null");
         List<Room> roomList = roomDao.findByRid(roomId);
@@ -1133,12 +1139,13 @@ public class RoomServiceImpl implements RoomService {
         if(byRidAndUid.size() > 0){
             SysUser sysUser = sysUserFeignService.queryUserById(Integer.parseInt(userId));
             Teacher teacher = teacherDao.get(sysUser.getId());
-            if(teacher != null){
-                try {
-                    teacherAttendanceService.addTeacherAttendanceRecord(Integer.parseInt(roomId.substring(4)),sysUser.getId(), SignStatusEnum.SIGN_OUT,true);
-                }catch (Exception e){
-                    e.printStackTrace();
+            CourseSchedule courseSchedule = courseScheduleDao.get(Long.parseLong(roomId));
+            try {
+                if(teacher != null && teacher.getId().equals(courseSchedule.getActualTeacherId())){
+                    teacherAttendanceService.addTeacherAttendanceRecord(Integer.parseInt(roomId.substring(4)),Integer.parseInt(userId), SignStatusEnum.SIGN_OUT,true);
                 }
+            }catch (Exception e){
+                e.printStackTrace();
             }
             List<Room> roomList = roomDao.findByRid(roomId);
             if (roomList.size() == 0) {

+ 2 - 1
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherController.java

@@ -4,6 +4,7 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.page.TeacherCloseQueryInfo;
+import com.ym.mec.biz.dal.page.TeacherMusicClassQueryInfo;
 import com.ym.mec.biz.dal.page.VipClassQueryInfo;
 import com.ym.mec.biz.dal.page.queryMusicGroupStudentQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
@@ -64,7 +65,7 @@ public class TeacherController extends BaseController {
     @ApiOperation(value = "获取老师乐团课程信息列表")
     @GetMapping("/getTeacherMusicClass")
     @ApiParam(value = "教师编号", required = true)
-    public Object getTeacherMusicClass(QueryInfo queryInfo){
+    public Object getTeacherMusicClass(TeacherMusicClassQueryInfo queryInfo){
         return succeed(classGroupService.getTeacherMusicClass(queryInfo));
     }
 

+ 3 - 16
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -15,11 +15,9 @@ import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.StudentAttendanceService;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.common.controller.BaseController;
-import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
-import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.http.MediaType;
@@ -68,12 +66,14 @@ public class TeacherCourseScheduleController extends BaseController {
         }
         SysConfig sysConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE);
         SysConfig sysConfigVip = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_TIME_RANGE_VIP);
+        SysConfig studentAttendanceAfterTimeConfig = sysConfigService.findByParamName(SysConfigService.ENABLE_STUDENT_ATTENDANCE_BEFOR_COURSE_START_TIME_RANGE_VIP);
         List<CourseScheduleDto> teacherCourseSchedulesWithDate = scheduleService.getTeacherCourseSchedulesWithDate(user.getId(),date,type);
         Map<String,Object> result = new HashMap<>();
         result.put("rows",teacherCourseSchedulesWithDate);
-        result.put("appealDaysRange",1);
+        result.put("appealHoursRange",4);
         result.put("enableStudentAttendanceTimeRange",sysConfig.getParanValue(Integer.class));
         result.put("enableStudentAttendanceTimeRangeVip",sysConfigVip.getParanValue(Integer.class));
+        result.put("joinRoomBeforeTime",studentAttendanceAfterTimeConfig.getParanValue(Integer.class));
         return succeed(result);
     }
 
@@ -154,19 +154,6 @@ public class TeacherCourseScheduleController extends BaseController {
         if(Objects.isNull(classDateAdjustDto.getClassGroupId())){
             classDateAdjustDto.setClassGroupId(oldCourseSchedule.getClassGroupId());
         }
-        Date now=new Date();
-        if(DateUtils.isSameDay(now,oldCourseSchedule.getClassDate())){
-            return failed("不能调整今天的课程");
-        }
-        Date tomorrow = DateUtil.addDays1(now, 1);
-        if(DateUtils.isSameDay(tomorrow,oldCourseSchedule.getClassDate())){
-            Calendar calendar=Calendar.getInstance();
-            calendar.setTime(now);
-            System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
-            if(calendar.get(Calendar.HOUR_OF_DAY)>22){
-                return failed("当前时间不可对此课程进行课程调整");
-            }
-        }
         List<CourseSchedule> courseSchedules=new ArrayList<>();
         courseSchedules.add(classDateAdjustDto);
         scheduleService.courseAdjust(courseSchedules);

+ 4 - 4
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/MessageSenderPluginContext.java

@@ -49,10 +49,10 @@ public class MessageSenderPluginContext implements ApplicationContextAware {
 		private static final long serialVersionUID = -3964872523891264522L;
 
 		{
-			put(JiguangPushPlugin.getName(), StringUtils.uncapitalize(JiguangPushPlugin.class.getSimpleName()));
-			put(MOxintongSMSPlugin.getName(), StringUtils.uncapitalize(MOxintongSMSPlugin.class.getSimpleName()));
-			put(ShiyuanSMSPlugin.getName(), StringUtils.uncapitalize(ShiyuanSMSPlugin.class.getSimpleName()));
-			put(YimeiSmsPlugin.getName(), StringUtils.uncapitalize(YimeiSmsPlugin.class.getSimpleName()));
+			put(StringUtils.lowerCase(JiguangPushPlugin.getName()), StringUtils.uncapitalize(JiguangPushPlugin.class.getSimpleName()));
+			put(StringUtils.lowerCase(MOxintongSMSPlugin.getName()), StringUtils.uncapitalize(MOxintongSMSPlugin.class.getSimpleName()));
+			put(StringUtils.lowerCase(ShiyuanSMSPlugin.getName()), StringUtils.uncapitalize(ShiyuanSMSPlugin.class.getSimpleName()));
+			put(StringUtils.lowerCase(YimeiSmsPlugin.getName()), StringUtils.uncapitalize(YimeiSmsPlugin.class.getSimpleName()));
 		}
 	};
 

+ 2 - 2
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/JiguangPushPlugin.java

@@ -37,7 +37,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 	private String reqURL = "https://api.jpush.cn/v3/push";// 请求极光地址
 
 	public static String getName() {
-		return "Jiguang";
+		return "jiguang";
 	}
 
 	/**
@@ -198,7 +198,7 @@ public class JiguangPushPlugin implements MessageSenderPlugin, InitializingBean
 
 	public static void main(String[] args) throws IOException {
 		
-		String str = "1048953,1048955,1048958,1048959,1048960,1048961,1048965,1048967,1048970,1048974,1048977,1048981,1048983,1048990,1048993,1048996,1048998,1048999,1049000,1049003,1049005,1049006,1049008,1049009,1049013,1049019,1049024,1049034,1049036,1049038,1049039,1049040,1049042,1049043,1049045,1049048,1049049,1049051,1049053,1049057,1049062,1049066,1049076,1049077,1049079,1049090,1049117,1049118,1049122,1049123,1049149,1049251,1049363,1049368,1049524,1055861,1055862,1055863,1055865,1056784,1084443,1094555,1094575";
+		String str = "2094588";
 		
 		
 		JiguangPushPlugin plugin = new JiguangPushPlugin();

+ 1 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/MOxintongSMSPlugin.java

@@ -32,7 +32,7 @@ public class MOxintongSMSPlugin implements MessageSenderPlugin, InitializingBean
 	private String reqUrl;
 
 	public static String getName() {
-		return "MOxintong";
+		return "moxintong";
 	}
 
 	@Override

+ 1 - 1
mec-thirdparty/src/main/java/com/ym/mec/thirdparty/message/provider/ShiyuanSMSPlugin.java

@@ -40,7 +40,7 @@ public class ShiyuanSMSPlugin implements MessageSenderPlugin, InitializingBean {
 	// private String extno = "";//扩展码(不用填写)
 
 	public static String getName() {
-		return "Shiyuan";
+		return "shiyuan";
 	}
 
 	@Override

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

@@ -152,7 +152,7 @@ public class CourseScheduleController extends BaseController {
     }
 
     @ApiOperation(value = "课时调整")
-    @PreAuthorize("@pcs.hasPermissions('courseSchedule/classStartDateAdjust')")
+    @PreAuthorize("@pcs.hasPermissions('courseSchedule/classStartDateAdjust','system')")
     @PostMapping(value = "/classStartDateAdjust",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public Object classStartDateAdjust(CourseSchedule courseSchedule){
         CourseSchedule oldCourseSchedule = scheduleService.get(courseSchedule.getId());

+ 6 - 0
mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

@@ -47,6 +47,9 @@ public class IndexController extends BaseController {
 	
 	@Autowired
 	private SysUserCashAccountDetailDao sysUserCashAccountDetailDao;
+	
+	@Autowired
+	private StudentPaymentOrderDao studentPaymentOrderDao;
 
 	@ApiOperation(value = "获取首页数据")
 	@GetMapping("/index")
@@ -83,6 +86,8 @@ public class IndexController extends BaseController {
 		
 		Map<String, Object> incomeExpendMap = sysUserCashAccountDetailDao.queryStatistics(organId);
 		
+		Map<String, Object> incomeMap = studentPaymentOrderDao.queryIncomeStatistics(organId);
+		
 		ModelMap model = new ModelMap();
 		model.put("musicDatas", musicDatas);
 		model.put("teacherDatas", teacherDatas);
@@ -93,6 +98,7 @@ public class IndexController extends BaseController {
 		model.put("vipGroupNum", vipGroupNum);
 		model.put("demoGroupNum", demoGroupNum);
 		model.put("incomeExpendMap", incomeExpendMap);
+		model.put("incomeMap", incomeMap);
 
 		return succeed(model);
 	}

+ 26 - 3
mec-web/src/main/java/com/ym/mec/web/controller/TeacherController.java

@@ -10,7 +10,6 @@ import com.ym.mec.biz.service.ClassGroupService;
 import com.ym.mec.biz.service.TeacherService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
-import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.*;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -87,7 +86,7 @@ public class TeacherController extends BaseController {
 
     @ApiOperation(value = "获取分部所有老师")
     @GetMapping("/findTeachers")
-    @PreAuthorize("@pcs.hasPermissions('teacher/findTeachers')")
+    @PreAuthorize("@pcs.hasPermissions('teacher/findTeachers','system')")
     public HttpResponseResult findTeachers(String organId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -140,6 +139,30 @@ public class TeacherController extends BaseController {
         return succeed(teacherService.findTeacherByOrganId(organId,subjectIds,jobNature));
     }
 
+    @ApiOperation(value = "分页获取教师名称编号列表")
+    @GetMapping("/queryNameList")
+    @PreAuthorize("@pcs.hasPermissions('teacher/queryNameList', 'system', 'education')")
+    public HttpResponseResult queryPageName(TeacherNameQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if(!sysUser.getIsSuperAdmin()){
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            }else if(StringUtils.isEmpty(employee.getOrganIdList())){
+                return failed("用户所在分部异常");
+            }else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if(!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))){
+                    return failed("非法请求");
+                }
+            }
+        }
+        return succeed(teacherService.queryPageName(queryInfo));
+    }
+
     @ApiOperation(value = "获取乐团所有老师")
     @GetMapping("/findMusicGroupTeachers")
     @PreAuthorize("@pcs.hasPermissions('teacher/findMusicGroupTeachers')")
@@ -166,7 +189,7 @@ public class TeacherController extends BaseController {
     @GetMapping("/getTeacherMusicClass")
     @ApiParam(value = "教师编号", required = true)
     @PreAuthorize("@pcs.hasPermissions('teacher/getTeacherMusicClass')")
-    public Object getTeacherMusicClass(QueryInfo queryInfo){
+    public Object getTeacherMusicClass(TeacherMusicClassQueryInfo queryInfo){
         return succeed(classGroupService.getTeacherMusicClass(queryInfo));
     }
 

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

@@ -32,7 +32,7 @@ public class UploadFileController extends BaseController {
 	private UploadFileService uploadFileService;
 
 	@PostMapping(value = "uploadFile")
-	@PreAuthorize("@pcs.hasPermissions('uploadFile')")
+	@PreAuthorize("@pcs.hasPermissions('uploadFile','system')")
 	public Object uploadFile(@ApiParam(value = "上传的文件", required = true) @RequestParam("file") MultipartFile file) {
 		try {
 			if (file != null && StringUtils.isNotBlank(file.getOriginalFilename())) {

+ 12 - 4
mec-web/src/main/java/com/ym/mec/web/controller/education/EducationCourseScheduleController.java

@@ -12,10 +12,8 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
 import java.util.Objects;
@@ -65,4 +63,14 @@ public class EducationCourseScheduleController extends BaseController {
         queryInfo.setOrganIdList(employee.getOrganIdList());
         return succeed(scheduleService.getCourseSchedulesWithDateByEdu(queryInfo));
     }
+
+    @ApiOperation(value = "课时交换")
+    @PostMapping(value = "/courseSwap",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public Object courseSwap(Long courseScheduleId1,Long courseScheduleId2){
+        if(Objects.isNull(courseScheduleId1)||Objects.isNull(courseScheduleId2)){
+            return failed("请指定课程!");
+        }
+        scheduleService.courseSwap(courseScheduleId1,courseScheduleId2);
+        return succeed();
+    }
 }

+ 4 - 4
mec-web/src/main/java/com/ym/mec/web/controller/education/ImController.java

@@ -27,7 +27,7 @@ public class ImController extends BaseController {
 
     @ApiOperation(value = "获取教务所有聊天群组")
     @GetMapping("/queryEmployeeGroups")
-    @PreAuthorize("@pcs.hasPermissions('im/queryEmployeeGroups')")
+    @PreAuthorize("@pcs.hasPermissions('im/queryEmployeeGroups','system')")
     public Object queryEmployeeGroups(String search){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(sysUser == null){
@@ -38,7 +38,7 @@ public class ImController extends BaseController {
 
     @ApiOperation(value = "获取当前教务通讯录列表")
     @GetMapping("/queryGroupStudents")
-    @PreAuthorize("@pcs.hasPermissions('im/queryGroupStudents')")
+    @PreAuthorize("@pcs.hasPermissions('im/queryGroupStudents','system')")
     public Object queryGroupStudents(String search){
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if(sysUser == null){
@@ -49,7 +49,7 @@ public class ImController extends BaseController {
 
     @ApiOperation(value = "根据群编号,获取群组基本信息")
     @GetMapping("/findGroupById")
-    @PreAuthorize("@pcs.hasPermissions('im/findGroupById')")
+    @PreAuthorize("@pcs.hasPermissions('im/findGroupById','system')")
     public Object findGroupById(Integer groupId){
         if(null == groupId){
             return failed("参数校验错误");
@@ -59,7 +59,7 @@ public class ImController extends BaseController {
 
     @ApiOperation(value = "根据群编号,获取群组所有成员基本信息")
     @GetMapping("/findGroupUsers")
-    @PreAuthorize("@pcs.hasPermissions('im/findGroupUsers')")
+    @PreAuthorize("@pcs.hasPermissions('im/findGroupUsers','system')")
     public Object findGroupUsers(Integer groupId) {
         if (groupId == null) {
             return failed("参数校验错误");