فهرست منبع

Merge remote-tracking branch 'origin/master'

周箭河 5 سال پیش
والد
کامیت
c8985d311e
39فایلهای تغییر یافته به همراه321 افزوده شده و 96 حذف شده
  1. 8 7
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java
  2. 6 2
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  3. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  4. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/MusicGroupDao.java
  5. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentAttendanceDao.java
  6. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMessageConfigDao.java
  7. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/SysMessageDao.java
  8. 0 6
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  9. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  10. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipGroupShowListDto.java
  11. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassGroupDto.java
  12. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/SysMessageQueryInfo.java
  13. 4 3
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupTeacherMapperService.java
  14. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  15. 77 34
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  16. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  17. 13 3
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  18. 17 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  19. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  20. 17 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherLeaveRecordServiceImpl.java
  21. 33 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  22. 2 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  23. 6 0
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  24. 7 0
      mec-biz/src/main/resources/config/mybatis/StudentAttendanceMapper.xml
  25. 11 2
      mec-biz/src/main/resources/config/mybatis/SysMessageMapper.xml
  26. 0 6
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  27. 3 0
      mec-biz/src/main/resources/config/mybatis/TeacherLeaveRecordMapper.xml
  28. 6 2
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  29. 3 1
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  30. 3 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  31. 1 1
      mec-common/common-core/src/main/java/com/ym/mec/common/security/PermissionCheckService.java
  32. 1 2
      mec-education/src/main/resources/mapper/SysUserMapper.xml
  33. 1 1
      mec-im/src/main/java/com/ym/service/Impl/HereWhiteServiceImpl.java
  34. 4 0
      mec-student/src/main/resources/application.yml
  35. 0 2
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java
  36. 4 0
      mec-teacher/src/main/resources/application.yml
  37. 12 1
      mec-util/pom.xml
  38. 3 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  39. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/IndexController.java

+ 8 - 7
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysUser.java

@@ -97,9 +97,9 @@ public class SysUser implements Serializable{
 
 	@ApiModelProperty(value = "微信号",required = false)
 	private String wechatId;
-
-	@ApiModelProperty(value = "e签宝唯一编号",required = false)
-	private String esignId;
+	
+	@ApiModelProperty(value = "是否是超管",required = false)
+	private Boolean isSuperAdmin;
 
 	public String getRealName() {
 		return realName;
@@ -277,13 +277,14 @@ public class SysUser implements Serializable{
 		this.wechatId = wechatId;
 	}
 
-	public String getEsignId() {
-		return esignId;
+	public Boolean getIsSuperAdmin() {
+		return isSuperAdmin;
 	}
 
-	public void setEsignId(String esignId) {
-		this.esignId = esignId;
+	public void setIsSuperAdmin(Boolean isSuperAdmin) {
+		this.isSuperAdmin = isSuperAdmin;
 	}
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -28,6 +28,7 @@
         <result column="im_token_" property="imToken"/>
         <result column="id_card_no_" property="idCardNo"/>
         <result column="wechat_id_" property="wechatId"/>
+        <result column="is_super_admin_" property="isSuperAdmin"/>
     </resultMap>
 
     <!-- 查询条件 -->
@@ -65,8 +66,8 @@
         </selectKey>
         -->
         INSERT INTO sys_user
-        (im_token_,id_,username_,salt_,phone_,avatar_,organ_id_,create_time_,update_time_,wx_openid_,qq_openid_,user_type_,gender_,nation_,birthdate_,email_,id_card_no_,wechat_id_,real_name_)
-        VALUES(#{imToken},#{id},#{username},#{salt},#{phone},#{avatar},#{organId},now(),now(),#{wxOpenid},#{qqOpenid},#{userType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+        (is_super_admin_,im_token_,id_,username_,salt_,phone_,avatar_,organ_id_,create_time_,update_time_,wx_openid_,qq_openid_,user_type_,gender_,nation_,birthdate_,email_,id_card_no_,wechat_id_,real_name_)
+        VALUES(#{isSuperAdmin},#{imToken},#{id},#{username},#{salt},#{phone},#{avatar},#{organId},now(),now(),#{wxOpenid},#{qqOpenid},#{userType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
         #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{wechatId},#{realName})
     </insert>
 
@@ -134,6 +135,9 @@
             <if test="realName != null">
                 real_name = #{realName},
             </if>
+            <if test="isSuperAdmin != null">
+                is_super_admin_ = #{isSuperAdmin},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

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

@@ -141,4 +141,5 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @return java.util.List<java.util.Map<java.lang.String,java.math.BigDecimal>>
 	 */
 	List<Map<String, BigDecimal>> countTeacherOnlineOfflineSalaryByClass(@Param("classGroupId") Integer classGroupId);
+
 }

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

@@ -126,4 +126,11 @@ public interface MusicGroupDao extends BaseDAO<String, MusicGroup> {
      * @return
      */
     Integer queryCurrentMonthCoursesNum(@Param("organId") Integer organId);
+
+    /**
+     * 获取乐团下的教师map
+     * @param musicGroupId
+     * @return
+     */
+    List<Map<Integer,String>> queryTeacherMap(String musicGroupId);
 }

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

@@ -143,4 +143,12 @@ public interface StudentAttendanceDao extends BaseDAO<Long, StudentAttendance> {
      * @return
      */
     StudentAttendance findByStatusAndCourseScheduleId(@Param("userId") Integer userId, @Param("courseScheduleId") int courseScheduleId);
+
+
+    /**
+     * 封装未签到学员列表
+     * @param courseScheduleId
+     * @return
+     */
+    List<StudentAttendance> queryNoSignStudentRecord(Integer courseScheduleId);
 }

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

@@ -1,9 +1,9 @@
 package com.ym.mec.biz.dal.dao;
 
+import org.apache.ibatis.annotations.Param;
+
 import com.ym.mec.biz.dal.entity.SysMessageConfig;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.common.dal.BaseDAO;
-import org.apache.ibatis.annotations.Param;
 
 public interface SysMessageConfigDao extends BaseDAO<Integer, SysMessageConfig> {
 

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

@@ -1,10 +1,10 @@
 package com.ym.mec.biz.dal.dao;
 
 import java.util.List;
-import java.util.Map;
 
 import org.apache.ibatis.annotations.Param;
 
+import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
 import com.ym.mec.common.dal.BaseDAO;
@@ -32,7 +32,7 @@ public interface SysMessageDao extends BaseDAO<Long, SysMessage> {
 	 * @param userId
 	 * @return
 	 */
-	public Map<String, Integer> queryCountOfUnread(@Param("type") MessageSendMode type, @Param("userId") Integer userId);
+	public List<Mapper> queryCountOfUnread(@Param("type") MessageSendMode type, @Param("userId") Integer userId);
 
 	/**
 	 * 修改用户所有消息阅读状态

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

@@ -89,10 +89,4 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
                                              @Param("date") Date date,
                                              @Param("signInStatus") Integer signInStatus);
 
-    /**
-     * 封装未签到学员列表
-     * @param courseScheduleId
-     * @return
-     */
-    List<StudentAttendance> queryNoSignStudentRecord(Integer courseScheduleId);
 }

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

@@ -52,6 +52,14 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
     List<Map<Integer, String>> queryNameByIds(@Param("userIds") String userIds);
 
     /**
+     * 根据用户编号列表获取手机号
+     *
+     * @param userIds
+     * @return
+     */
+    List<Map<Integer, String>> queryPhoneByIds(@Param("userIds") String userIds);
+
+    /**
      * 根据用户编号获取用户名称
      *
      * @param userId

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

@@ -58,6 +58,17 @@ public class StudentVipGroupShowListDto {
 
     private String categoryName;
 
+    @ApiModelProperty(value = "开课时间")
+    private Date courseStartDate;
+
+    public Date getCourseStartDate() {
+        return courseStartDate;
+    }
+
+    public void setCourseStartDate(Date courseStartDate) {
+        this.courseStartDate = courseStartDate;
+    }
+
     public Integer getTeacherId() {
         return teacherId;
     }

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

@@ -77,6 +77,17 @@ public class TeacherClassGroupDto {
     @ApiModelProperty(value = "每月平均课时")
     private double avgClassTimesOfMonth;
 
+    @ApiModelProperty(value = "开课时间")
+    private Date courseStartDate;
+
+    public Date getCourseStartDate() {
+        return courseStartDate;
+    }
+
+    public void setCourseStartDate(Date courseStartDate) {
+        this.courseStartDate = courseStartDate;
+    }
+
     public double getAvgClassTimesOfMonth() {
         return avgClassTimesOfMonth;
     }

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

@@ -21,6 +21,10 @@ public class SysMessageQueryInfo extends QueryInfo {
 
 	@ApiModelProperty(value = "消息类型;1,表示短信;2,表示邮件; 3,app推送消息",required = false)
 	private Integer type;
+	
+	private String group;
+	
+	private Integer readStatus;
 
 	public Integer getStatus() {
 		return status;
@@ -62,4 +66,20 @@ public class SysMessageQueryInfo extends QueryInfo {
 		this.type = type;
 	}
 
+	public String getGroup() {
+		return group;
+	}
+
+	public void setGroup(String group) {
+		this.group = group;
+	}
+
+	public Integer getReadStatus() {
+		return readStatus;
+	}
+
+	public void setReadStatus(Integer readStatus) {
+		this.readStatus = readStatus;
+	}
+
 }

+ 4 - 3
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupTeacherMapperService.java

@@ -6,6 +6,7 @@ import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
+import java.util.Map;
 
 public interface ClassGroupTeacherMapperService extends BaseService<Long, ClassGroupTeacherMapper> {
 
@@ -33,11 +34,11 @@ public interface ClassGroupTeacherMapperService extends BaseService<Long, ClassG
     boolean classGroupTeacherMapperUpdate(List<ClassGroupTeacherMapper> classGroupTeacherMapperList) throws Exception;
 
     /**
-     * @describe 创建乐团课单节课对应课次
+     * @describe 创建乐团课单节课对应教师课酬
      * @author Joburgess
      * @date 2019/10/24
      * @param courseSchedules: 课程计划列表
      * @return void
      */
-    void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules);
-}
+    void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules, Map<Long, CourseSchedule> oldCourseSchedules);
+}

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

@@ -164,7 +164,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules) {
+    public void createCourseScheduleTeacherSalary(List<CourseSchedule> courseSchedules, Map<Long, CourseSchedule> oldCourseSchedules) {
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaryList = new ArrayList<>();
 
         BigDecimal teacherSalaryTimeUnit = new BigDecimal(sysConfigDao.findConfigValue(SysConfigService.TEACHER_SALARY_TIME_UNIT));
@@ -194,7 +194,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
         courseSchedules.forEach(courseSchedule -> {
             if (Objects.isNull(courseSchedule.getType())) {
-                throw new BizException("存在未指定课程类型的课程");
+                courseSchedule.setType(oldCourseSchedules.get(courseSchedule.getId()).getType());
             }
 
             //获取结算方式

+ 77 - 34
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
@@ -65,6 +66,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	private ClassGroupService classGroupService;
 	@Autowired
 	private ClassGroupDao classGroupDao;
+	@Autowired
+	private TeacherDao teacherDao;
 
 	@Override
 	public BaseDAO<Long, CourseSchedule> getDAO() {
@@ -465,7 +468,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
 		//课程对应助教集合
 		List<CourseScheduleTeacherSalary> teachingTeacherSalarys = courseScheduleDao.findTeachingTeachers(newCourseScheduleIds);
-		Map<Long, List<CourseScheduleTeacherSalary>> courseTeachingTeacherMaps = teachingTeacherSalarys.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
+		Map<Long,List<CourseScheduleTeacherSalary>> courseTeachingTeacherMaps = teachingTeacherSalarys.stream().collect(Collectors.groupingBy(CourseScheduleTeacherSalary::getCourseScheduleId));
 
 		Map<Long, CourseSchedule> oldCourseSchedules = oldCourseScheduleList.stream().collect(Collectors.toMap(CourseSchedule::getId,courseSchedule -> courseSchedule));
 		newCourseSchedules.forEach(newCourseSchedule -> {
@@ -480,26 +483,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 throw new BizException("不能调整今天及以前的课程");
             }
 
-			ArrayList<Date> dates = new ArrayList<>();
-			dates.add(newCourseSchedule.getClassDate());
-			List<CourseSchedule> coursesByDates = courseScheduleDao.findOverLapCoursesInDay(dates,newCourseSchedule.getStartClassTime(),newCourseSchedule.getEndClassTime());
-			//判断是否存在同时间上课的班级
-			if(null==coursesByDates||coursesByDates.size()<=0){
-				courseScheduleDao.update(newCourseSchedule);
-			}else{
-				coursesByDates.forEach(courseSchedule -> {
-					if(courseSchedule.getActualTeacherId().equals(newCourseSchedule.getActualTeacherId())){
-						//存在时间重叠,需要前端重新调整
-						throw new BizException("所选教师在当天课程安排上存在重叠!");
-					}
-				});
-				List<Integer> repeatClassGroupIds = coursesByDates.stream().map(CourseSchedule::getClassGroupId).collect(Collectors.toList());
-				checkStudentIsRepeat(repeatClassGroupIds);
-				oldCourseSchedule.setClassDate(newCourseSchedule.getClassDate());
-				oldCourseSchedule.setStartClassTime(newCourseSchedule.getStartClassTime());
-				oldCourseSchedule.setEndClassTime(newCourseSchedule.getEndClassTime());
-				courseScheduleDao.update(oldCourseSchedule);
-			}
+			oldCourseSchedule.setClassDate(newCourseSchedule.getClassDate());
+			oldCourseSchedule.setStartClassTime(newCourseSchedule.getStartClassTime());
+			oldCourseSchedule.setEndClassTime(newCourseSchedule.getEndClassTime());
+			courseScheduleDao.update(oldCourseSchedule);
 
 			//被修改的教师编号列表,需要将预计薪水置零
 			List<Integer> beReplaceTeacherIds=new ArrayList<>();
@@ -511,7 +498,6 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					VipGroup byCourseSchedule = vipGroupDao.findByCourseSchedule(newCourseSchedule.getId().intValue());
 					TeacherDefaultVipGroupSalary byTeacherAndCategory = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(newCourseSchedule.getActualTeacherId(), byCourseSchedule.getVipGroupCategoryId());
 					List<CourseSchedule> courseSchedules=new ArrayList<>();
-					coursesByDates.add(newCourseSchedule);
 					courseScheduleTeacherSalaryService.createCourseScheduleTeacherVipSalary(byCourseSchedule,
 							courseSchedules,
 							byTeacherAndCategory.getOnlineClassesSalary(),
@@ -568,24 +554,81 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		});
 		//生成修改后的教师课酬
 		if(!CollectionUtils.isEmpty(needCreateCourseScheduleTeacherSalaryCourse)){
-			classGroupTeacherMapperService.createCourseScheduleTeacherSalary(needCreateCourseScheduleTeacherSalaryCourse);
+			classGroupTeacherMapperService.createCourseScheduleTeacherSalary(needCreateCourseScheduleTeacherSalaryCourse,oldCourseSchedules);
+		}
+		//推送课时调整
+		Set<Integer> teacherIds = newCourseSchedules.stream().map(e -> e.getActualTeacherId()).collect(Collectors.toSet());
+		if(teacherIds == null){
+			teacherIds = new HashSet<>();
+		}
+		teacherIds.addAll(oldCourseScheduleList.stream().map(e -> e.getActualTeacherId()).collect(Collectors.toSet()));
+		HashMap<Integer,String> map = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertMybatisMap(teacherDao.queryPhoneByIds(StringUtils.join(teacherIds, ",")))), HashMap.class);
+		if(map != null && map.size() > 0){
+			sysMessageService.batchSendMessage(MessageSender.YIMEI,MessageTypeEnum.TEACHER_PUSH_COURSE_SCHEDULE_CHANGE_RESULT,
+					map,null,0,"","");
 		}
 	}
 
 	@Transactional(rollbackFor = Exception.class)
 	@Override
 	public void courseSwap(Long courseScheduleId1, Long courseScheduleId2) {
-		List<CourseSchedule> courseSchedules = courseScheduleDao.findCourseSchedulesByIds(new Long[]{courseScheduleId1, courseScheduleId2});
-		CourseSchedule temp=new CourseSchedule();
-		BeanUtils.copyProperties(courseSchedules.get(0),temp);
-		courseSchedules.get(0).setClassDate(courseSchedules.get(1).getClassDate());
-		courseSchedules.get(0).setStartClassTime(courseSchedules.get(1).getStartClassTime());
-		courseSchedules.get(0).setEndClassTime(courseSchedules.get(1).getEndClassTime());
-		courseSchedules.get(1).setClassDate(temp.getClassDate());
-		courseSchedules.get(1).setStartClassTime(temp.getStartClassTime());
-		courseSchedules.get(1).setEndClassTime(temp.getEndClassTime());
-		courseScheduleDao.update(courseSchedules.get(0));
-		courseScheduleDao.update(courseSchedules.get(1));
+		if(courseScheduleId1.equals(courseScheduleId2)){
+			throw new BizException("请选择不同的课程");
+		}
+		CourseSchedule courseSchedule1 = courseScheduleDao.get(courseScheduleId1);
+		CourseSchedule courseSchedule2 = courseScheduleDao.get(courseScheduleId2);
+
+		//获取两个课程的主教、助教
+		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<>();
+		courseSchedules.add(courseSchedule1);
+		courseSchedules.add(courseSchedule2);
+		classStartDateAdjust(courseSchedules);
 	}
 
 	@Override

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

@@ -315,6 +315,11 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         musicGroupBuildLogDao.insert(new MusicGroupBuildLog(musicGroupId,"确认开团(筹备中 -> 进行中)",sysUser.getId(),""));
         musicGroup.setStatus(MusicGroupStatusEnum.PROGRESS);
         musicGroupDao.update(musicGroup);
+        //给老师发送乐团成立通知
+        //获取所有和乐团相关的老师列表
+        Map<Integer,String> map = JSONObject.parseObject(JSONObject.toJSONString(MapUtil.convertMybatisMap(musicGroupDao.queryTeacherMap(musicGroupId))),HashMap.class);
+        sysMessageService.batchSendMessage(MessageSender.YIMEI,MessageTypeEnum.TEACHER_PUSH_MUSIC_GROUP_COURSE_ADD_PLAN,
+                map,null,0,musicGroup.getName());
     }
 
     private MusicGroup saveLog(String musicGroupId,MusicGroupStatusEnum statusEnum) throws Exception {

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

@@ -4,12 +4,14 @@ import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
-import com.ym.mec.biz.dal.entity.*;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.StudentAttendance;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.StudentAttendanceQueryInfo;
 import com.ym.mec.biz.service.StudentAttendanceService;
-import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -53,6 +55,8 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 	private MusicGroupQuitDao musicGroupQuitDao;
 	@Autowired
 	private SysMessageService sysMessageService;
+	@Autowired
+	private TeacherDao teacherDao;
 
 	@Override
 	public BaseDAO<Long, StudentAttendance> getDAO() {
@@ -199,8 +203,14 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		ClassGroupStudentMapper classGroupStudentMapper = classGroupStudentMapperDao.query(courseSchedule.getClassGroupId(), userId);
 		classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.LEAVE);
 		classGroupStudentMapperDao.update(classGroupStudentMapper);
-		
+
+		Map<Integer,String> sendArgs=new HashMap<>();
+		sendArgs.put(courseSchedule.getActualTeacherId(),teacherDao.get(courseSchedule.getActualTeacherId()).getPhone());
 		//发送消息至老师
+		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI,
+				MessageTypeEnum.TEACHER_PUSH_STUDENT_LEAVE,
+				sendArgs,
+				null,0,null,courseSchedule.getName(),null);
 		
 		return true;
 	}

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

@@ -1,7 +1,13 @@
 package com.ym.mec.biz.service.impl;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Map.Entry;
+import java.util.Random;
+import java.util.Set;
 
 import org.apache.commons.lang.StringUtils;
 import org.slf4j.Logger;
@@ -14,6 +20,7 @@ import org.springframework.stereotype.Service;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.SysMessageDao;
+import com.ym.mec.biz.dal.dto.Mapper;
 import com.ym.mec.biz.dal.entity.SysMessage;
 import com.ym.mec.biz.dal.entity.SysMessageConfig;
 import com.ym.mec.biz.dal.enums.MessageSendMode;
@@ -323,7 +330,15 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 
 	@Override
 	public Map<String, Integer> queryCountOfUnread(MessageSendMode type, Integer userId) {
-		return sysMessageDao.queryCountOfUnread(type, userId);
+		List<Mapper> mappers = sysMessageDao.queryCountOfUnread(type, userId);
+
+		Map<String, Integer> map = new HashMap<String, Integer>();
+
+		for (Mapper mapper : mappers) {
+			map.put(mapper.getKey().toString(), Integer.parseInt(mapper.getValue().toString()));
+		}
+
+		return map;
 	}
 
 	public void setDebugMode(boolean debugMode) {

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

@@ -220,7 +220,7 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 				teacherAttendanceDao.update(teacherAttendance);
 				//教师签退后,给未签到学员添加旷课记录
 				//封装未签到学员签到列表
-				List<StudentAttendance> studentAttendances = teacherAttendanceDao.queryNoSignStudentRecord(courseScheduleId);
+				List<StudentAttendance> studentAttendances = studentAttendanceDao.queryNoSignStudentRecord(courseScheduleId);
 				if(studentAttendances != null && studentAttendances.size() > 0){
 					studentAttendances.forEach(e->{
 						e.setTeacherId(userId);

+ 17 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherLeaveRecordServiceImpl.java

@@ -1,15 +1,20 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dao.TeacherLeaveRecordDao;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.dal.entity.TeacherLeaveRecord;
 import com.ym.mec.biz.dal.entity.TeacherLeaveRecord.CoursesScheduleHistory;
 import com.ym.mec.biz.dal.enums.AuditStatusEnum;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.biz.service.TeacherLeaveRecordService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.util.date.DateUtil;
 import com.ym.mec.util.json.JsonUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -19,10 +24,7 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -30,10 +32,15 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 
 	@Autowired
 	private TeacherLeaveRecordDao teacherLeaveRecordDao;
+	@Autowired
+	private TeacherDao teacherDao;
 
 	@Autowired
 	private CourseScheduleService courseScheduleService;
 
+	@Autowired
+	private SysMessageService sysMessageService;
+
 	@Override
 	public BaseDAO<Long, TeacherLeaveRecord> getDAO() {
 		return teacherLeaveRecordDao;
@@ -110,7 +117,12 @@ public class TeacherLeaveRecordServiceImpl extends BaseServiceImpl<Long, Teacher
 				courseScheduleService.classStartDateAdjust(list);
 			}
 		}
-
+		//教师请假结果通知
+		Map<Integer,String> map = new HashMap<>(1);
+		Teacher teacher = teacherDao.get(teacherLeaveRecord.getUserId());
+		map.put(teacher.getId(),teacher.getPhone());
+		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI, MessageTypeEnum.TEACHER_PUSH_LEAVE_RESULT,
+				map,null,0,"",status.getCode());
 		return true;
 	}
 

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

@@ -94,6 +94,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 	private SysMessageService sysMessageService;
 	@Autowired
 	private VipGroupDefaultClassesCycleDao vipGroupDefaultClassesCycleDao;
+	@Autowired
+	private TeacherDao teacherDao;
 
 	@Override
 	public BaseDAO<Long, VipGroup> getDAO() {
@@ -219,11 +221,19 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		vipGroupClassGroupMapper.setClassGroupId(classGroup.getId());
 		vipGroupClassGroupMapperDao.insert(vipGroupClassGroupMapper);
 
-		//创建融云班级群
-		// 指导老师加入群组
-		ImGroupMember[] imGroupMembers = { new ImGroupMember(vipGroup.getVipGroupApplyBaseInfo().getUserId().toString())};
-		// 创建群组
-		imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+		//不需要审核
+		if(vipGroupApplyBaseInfoDto.getAuditStatus() == AuditStatusEnum.PASS){
+			//创建融云班级群
+			ImGroupMember[] imGroupMembers = { new ImGroupMember(vipGroup.getVipGroupApplyBaseInfo().getUserId().toString())};
+			// 创建群组
+			imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+
+			//发送推送短信
+			Map<Integer,String> map = new HashMap<>(1);
+			map.put(sysUser.getId(),sysUser.getPhone());
+			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI,MessageTypeEnum.TEACHER_SMS_VIP_COURSE_ADD,
+					map,null,0,"",vipGroupApplyBaseInfoDto.getName());
+		}
 
 		//创建班级老师关联记录
 		ClassGroupTeacherMapper classGroupTeacherMapper=new ClassGroupTeacherMapper();
@@ -261,6 +271,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				vipGroup.getCourseSchedules(),
 				vipGroupApplyBaseInfoDto.getOnlineTeacherSalary(),
 				vipGroupApplyBaseInfoDto.getOfflineTeacherSalary());
+		//
 	}
 
 	@Override
@@ -304,7 +315,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(!CollectionUtils.isEmpty(updateCourseSchedules)){
 			//需要删除的课程编号列表
 			List<Long> deleteCourseScheduleIds = vipGroupCourseSchedules.stream()
-					.filter(courseSchedule -> updateCourseScheduleIds.contains(courseSchedule.getId()))
+					.filter(courseSchedule -> !updateCourseScheduleIds.contains(courseSchedule.getId()))
 					.map(CourseSchedule::getId)
 					.collect(Collectors.toList());
 			//删除对应的课程及相关信息
@@ -350,6 +361,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		vipGroup.setAuditStatus(auditStatus);
 		vipGroup.setStopReason(reason);
 		vipGroupDao.update(vipGroup);
+		//给老师推送审批短信
+		Teacher teacher = teacherDao.get(vipGroup.getUserId());
+		if(teacher != null){
+			Map<Integer,String> map = new HashMap<>(1);
+			map.put(vipGroup.getUserId(),teacher.getPhone());
+			sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI,MessageTypeEnum.TEACHER_SMS_VIP_COURSE_APPLY_RESULT,
+					map,null,0,"",vipGroup.getName(),vipGroup.getAuditStatus().getCode());
+		}
 	}
 
 	@Override
@@ -615,7 +634,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 				case TEACHER_DEFAULT:
 					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
-							&&vipGroupActivity.getSalaryReadonlyFlag().equals("0")){
+							&&vipGroupActivity.getSalaryReadonlyFlag().equals("1")){
 						teacherOnlineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOnlineTeacherSalary();
 					}
 
@@ -644,7 +663,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			switch (vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSalarySettlementType()){
 				case TEACHER_DEFAULT:
 					if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
-							&&vipGroupActivity.getSalaryReadonlyFlag().equals("0")){
+							&&vipGroupActivity.getSalaryReadonlyFlag().equals("1")){
 						teacherOfflineSalary=((VipGroupApplyBaseInfoDto) vipGroup).getOfflineTeacherSalary();
 					}
 					if(Objects.isNull(teacherOfflineSalary)){
@@ -1094,6 +1113,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		courseScheduleDao.batchDeleteCourseSchedules(courseScheduleIds);
 		courseScheduleTeacherSalaryDao.batchDeleteByCourseScheduleIds(courseScheduleIds);
 		courseScheduleStudentPaymentDao.deleteByCourseSchedule(courseScheduleIds);
+		//vip课停止通知
+		Teacher teacher = teacherDao.get(vipGroup.getUserId());
+		Map<Integer,String> map = new HashMap<>(1);
+		map.put(vipGroup.getUserId(),teacher.getPhone());
+		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.YIMEI,MessageTypeEnum.TEACHER_PUSH_VIP_COURSE_STOP,
+				map,null,0,"",vipGroup.getName());
 	}
 
 	@Override

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

@@ -397,6 +397,7 @@
         <result column="online_classes_num_" property="onlineClassesNum"/>
         <result column="offline_classes_num_" property="offLineClassesNum"/>
         <result property="type" column="type_"/>
+        <result property="courseStartDate" column="courses_start_date"/>
     </resultMap>
 
     <select id="findTeacherMusicClassGroup" resultMap="TeacherClassGroupDto">
@@ -436,6 +437,7 @@
             vg.payment_expire_date_,
             vg.courses_expire_date_,
             vg.single_class_minutes_,
+            vg.courses_start_date,
             IF(vg.online_classes_num_ IS NULL,0,vg.online_classes_num_) online_classes_num_,
             IF(vg.offline_classes_num_ IS NULL,0,vg.offline_classes_num_) offline_classes_num_,
             cg.total_class_times_,

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

@@ -329,4 +329,10 @@
    			and mg.organ_id_ = #{organId}
    		</if>
   	</select>
+	<select id="queryTeacherMap" resultType="java.util.Map">
+		SELECT su.id_ 'key',su.phone_ 'value' FROM class_group_teacher_mapper cgtm
+		LEFT JOIN sys_user su ON cgtm.user_id_ = su.id_
+		WHERE cgtm.music_group_id_ = #{musicGroupId} AND su.phone_ IS NOT NULL
+		GROUP BY su.id_
+	</select>
 </mapper>

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

@@ -297,4 +297,11 @@
     <select id="findByStatusAndCourseScheduleId" resultMap="StudentAttendance">
         SELECT * FROM student_attendance sa WHERE course_schedule_id_ = #{courseScheduleId} AND user_id_ = #{userId} LIMIT 1
     </select>
+
+    <select id="queryNoSignStudentRecord" resultMap="StudentAttendance">
+        SELECT cg.music_group_id_,cg.id_ class_group_id_,cssp.course_schedule_id_,cssp.user_id_,cg.current_class_times_
+        FROM course_schedule_student_payment cssp LEFT JOIN class_group cg ON cg.id_ = cssp.class_group_id_
+        WHERE cssp.user_id_ NOT IN (SELECT DISTINCT sa.user_id_ FROM student_attendance sa WHERE course_schedule_id_ = #{courseScheduleId})
+        AND cssp.course_schedule_id_ = #{courseScheduleId}
+    </select>
 </mapper>

+ 11 - 2
mec-biz/src/main/resources/config/mybatis/SysMessageMapper.xml

@@ -22,6 +22,11 @@
         <result column="read_status_" property="readStatus"/>
         <result column="group_" property="group"/>
     </resultMap>
+    
+    <resultMap type="com.ym.mec.biz.dal.dto.Mapper" id="Mapper">
+    	<result column="key_" property="key"/>
+        <result column="value_" property="value"/>
+    </resultMap>
 
 	<sql id="queryCondition">
 		<where>
@@ -46,6 +51,9 @@
 			<if test="group != null">
 				and group_ = #{group}
 			</if>
+			<if test="readStatus != null">
+				and read_status_ = #{readStatus}
+			</if>
 		</where>
 	</sql>
 
@@ -147,6 +155,7 @@
     <select id="queryCount" parameterType="map" resultType="int">
 		select count(*) from sys_message
 		<include refid="queryCondition" />
+		order by create_on_ desc
 	</select>
 
 	<select id="queryPage" parameterType="map" resultMap="message">
@@ -162,8 +171,8 @@
 		INTERVAL #{recentMin} MINUTE) >= date(send_time_)]]>
 	</select>
 
-	<select id="queryCountOfUnread" resultType="map" parameterType="map">
-		SELECT group_ groupName,COUNT(*) num FROM sys_message WHERE user_id_ = #{userId} AND read_status_ = 0
+	<select id="queryCountOfUnread" resultMap="Mapper" parameterType="map">
+		SELECT group_ key_,COUNT(*) value_ FROM sys_message WHERE user_id_ = #{userId} AND read_status_ = 0
 		<if test="type != null">
 		and type_ = #{type,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 		</if>

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

@@ -235,10 +235,4 @@
     <select id="queryNoSignOutListByOverMinutes" resultMap="Mapper">
         SELECT ta.teacher_id_ key_,u.real_name_ value_ FROM course_schedule cs right join teacher_attendance ta on ta.course_schedule_id_ = cs.id_ left join sys_user u on ta.teacher_id_ = u.id_ WHERE ta.sign_out_status_ = 0 and date(cs.class_date_) = date(now()) and SUBTIME(cs.end_class_time_, CONCAT(#{minutes},'00')) &lt; CURRENT_TIME()
     </select>
-    <select id="queryNoSignStudentRecord" resultMap="TeacherAttendance">
-        SELECT cg.music_group_id_,cg.id_ class_group_id_,cssp.course_schedule_id_,cssp.user_id_,cg.current_class_times_
-        FROM course_schedule_student_payment cssp LEFT JOIN class_group cg ON cg.id_ = cssp.class_group_id_
-        WHERE cssp.user_id_ NOT IN (SELECT DISTINCT sa.user_id_ FROM student_attendance sa WHERE course_schedule_id_ = #{courseScheduleId})
-        AND cssp.course_schedule_id_ = #{courseScheduleId}
-    </select>
 </mapper>

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

@@ -118,6 +118,9 @@
 			<if test="leaveCategoryId != null">
 				AND tlr.leave_category_id_ = #{leaveCategoryId}
 			</if>
+			<if test="teacherId != null">
+				AND tlr.user_id_ = #{teacherId}
+			</if>
 		</where>
 	</sql>
 

+ 6 - 2
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -75,9 +75,9 @@
     <insert id="addSysUser" parameterType="com.ym.mec.auth.api.entity.SysUser" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
         INSERT INTO sys_user
-        (im_token_,id_,username_,salt_,phone_,avatar_,organ_id_,create_time_,update_time_,wx_openid_,qq_openid_,user_type_,gender_,nation_,birthdate_,email_,id_card_no_,esign_id_,wechat_id_,real_name_,password_)
+        (im_token_,id_,username_,salt_,phone_,avatar_,organ_id_,create_time_,update_time_,wx_openid_,qq_openid_,user_type_,gender_,nation_,birthdate_,email_,id_card_no_,wechat_id_,real_name_,password_)
         VALUES(#{imToken},#{id},#{username},#{salt},#{phone},#{avatar},#{organId},now(),now(),#{wxOpenid},#{qqOpenid},#{userType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-        #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{esignId},#{wechatId},#{realName},#{password})
+        #{gender},#{nation},#{birthdate},#{email},#{idCardNo},#{wechatId},#{realName},#{password})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -255,6 +255,10 @@
         select id_ `key`,real_name_ `value` FROM sys_user s WHERE FIND_IN_SET(id_,#{userIds})
     </select>
 
+    <select id="queryPhoneByIds" resultType="java.util.Map" parameterType="list">
+        select id_ `key`,phone_ `value` FROM sys_user s WHERE FIND_IN_SET(id_,#{userIds}) AND s.phone_ IS NOT NULL
+    </select>
+
     <select id="findTeachers" resultMap="Teacher">
         SELECT su.* FROM teacher t
         LEFT JOIN sys_user su on t.id_ = su.id_ WHERE 1=1

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

@@ -93,6 +93,7 @@
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="attribute1_" property="attribute1" />
         <result column="category_name_" property="categoryName"/>
+        <result property="courseStartDate" column="courses_start_date"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -297,6 +298,7 @@
             vg.single_class_minutes_,
             vg.payment_expire_date_,
             vg.courses_expire_date_,
+            vg.courses_start_date,
             vg.online_classes_num_,
             vg.offline_classes_num_,
             vg.total_price_,
@@ -511,7 +513,7 @@
             LEFT JOIN course_schedule cs ON vgcgm.class_group_id_=cs.class_group_id_
             LEFT JOIN course_schedule_teacher_salary csts ON cs.id_=csts.course_schedule_id_
         <include refid="teachingRecordQueryCondition"/>
-        ORDER BY cs.id_
+        ORDER BY start_class_time_
         <include refid="global.limit"/>
     </select>
     <select id="countTeachingRecord" resultType="int">

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

@@ -10,12 +10,15 @@ import com.ym.mec.task.fallback.TaskRemoteServiceFallback;
 public interface TaskRemoteService {
 
 	@GetMapping(value = "task/refreshPaymentFeeStatus")
+	// 刷新付费状态
 	public void refreshPaymentFeeStatus();
 
 	@GetMapping(value = "task/vipGroupAwardedMonthlyRewards")
+	// vip课月度奖励
 	public void vipGroupAwardedMonthlyRewards();
 
 	@GetMapping(value = "task/updateCourseScheduleToOverStatus")
+	// 更新课程状态至已结束
 	boolean updateCourseScheduleToOverStatus();
 
 	@GetMapping("task/pushNoSignOutMessage")

+ 1 - 1
mec-common/common-core/src/main/java/com/ym/mec/common/security/PermissionCheckService.java

@@ -7,7 +7,7 @@ import org.springframework.security.core.Authentication;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.stereotype.Component;
 
-@Component("pcs")
+//@Component("pcs")
 public class PermissionCheckService {
 
 	public boolean hasPermissions(String... permissions) {

+ 1 - 2
mec-education/src/main/resources/mapper/SysUserMapper.xml

@@ -24,7 +24,6 @@
         <result column="organ_id_" property="organId" />
         <result column="im_token_" property="imToken" />
         <result column="id_card_no_" property="idCardNo" />
-        <result column="esign_id_" property="esignId" />
         <result column="wechat_id_" property="wechatId" />
         <result column="real_name_" property="realName" />
 
@@ -32,7 +31,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        id_, username_, password_, salt_, phone_, avatar_, create_time_, update_time_, lock_flag_, del_flag_, wx_openid_, qq_openid_, user_type_, gender_, nation_, birthdate_, email_, organ_id_, im_token_, id_card_no_, esign_id_, wechat_id_,real_name_
+        id_, username_, password_, salt_, phone_, avatar_, create_time_, update_time_, lock_flag_, del_flag_, wx_openid_, qq_openid_, user_type_, gender_, nation_, birthdate_, email_, organ_id_, im_token_, id_card_no_, wechat_id_,real_name_
     </sql>
 
 </mapper>

+ 1 - 1
mec-im/src/main/java/com/ym/service/Impl/HereWhiteServiceImpl.java

@@ -31,7 +31,7 @@ public class HereWhiteServiceImpl implements HereWhiteService {
         JSONObject json = new JSONObject();
         json.put("name",name);
         json.put("limit",userNum);
-        json.put("mode","transitory");
+        json.put("mode","persistent");
         String url = "/room?token=" + hereWhiteToken;
         JSONObject jsonObject = JSONObject.parseObject(requestParam(json, url));
         if(jsonObject.getString("code").equals("200")){

+ 4 - 0
mec-student/src/main/resources/application.yml

@@ -12,6 +12,10 @@ spring:
   application:
     name: student-server
     
+  server:
+    multipart:
+      max-file-size: 5M
+    
   datasource:
     name: test
     url: jdbc:mysql://47.99.212.176:3306/mec_dev?useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai

+ 0 - 2
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherVipGroupController.java

@@ -29,8 +29,6 @@ public class TeacherVipGroupController extends BaseController {
 
 	@Autowired
 	private SysUserFeignService sysUserFeignService;
-	@Autowired
-	private SchoolService schoolService;
 
 	@ApiOperation("vip课申请")
 	@PostMapping("/vipGroupApply")

+ 4 - 0
mec-teacher/src/main/resources/application.yml

@@ -12,6 +12,10 @@ spring:
   application:
     name: teacher-server
     
+  server:
+    multipart:
+      max-file-size: 10M
+    
   datasource:
     name: test
     url: jdbc:mysql://47.99.212.176:3306/mec_dev?useUnicode=true&characterEncoding=UTF8&serverTimezone=Asia/Shanghai

+ 12 - 1
mec-util/pom.xml

@@ -60,7 +60,18 @@
 		<dependency>
 			<groupId>org.freemarker</groupId>
 			<artifactId>freemarker</artifactId>
-			<version>2.3.20</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi</artifactId>
+    		<version>3.12</version>
+		</dependency>
+
+		<dependency>
+			<groupId>org.apache.poi</groupId>
+			<artifactId>poi-ooxml</artifactId>
+    		<version>3.12</version>
 		</dependency>
 	</dependencies>
 </project>

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

@@ -139,6 +139,9 @@ public class CourseScheduleController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('courseSchedule/courseSwap')")
     @GetMapping(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();
     }

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

@@ -58,7 +58,7 @@ public class IndexController extends BaseController {
 		}
 
 		Integer organId = sysUser.getOrganId();
-		if ("admin".equals(sysUser.getUsername())) {
+		if (sysUser.getIsSuperAdmin()) {
 			organId = null;
 		}