Browse Source

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

zouxuan 5 years ago
parent
commit
58b4eb9798
60 changed files with 926 additions and 554 deletions
  1. 8 8
      codegen/src/main/resources/generateConfigration.xml
  2. 10 0
      mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysMenu.java
  3. 4 6
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebMvcConfig.java
  4. 6 2
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysMenuMapper.xml
  5. 0 74
      mec-biz/src/main/java/com/ym/mec/biz/dal/aspects/UserLog.java
  6. 0 16
      mec-biz/src/main/java/com/ym/mec/biz/dal/aspects/UserLogAnnotation.java
  7. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupTeacherMapperDao.java
  8. 13 5
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  9. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java
  10. 28 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java
  11. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java
  12. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java
  13. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherAttendanceDao.java
  14. 19 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  15. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentManageListDto.java
  16. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  17. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SporadicChargeTypeEnum.java
  18. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupTeacherMapperService.java
  19. 12 0
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentServeService.java
  20. 71 71
      mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java
  21. 25 97
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  22. 2 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupTeacherMapperServiceImpl.java
  23. 68 39
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  24. 49 35
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleTeacherSalaryServiceImpl.java
  25. 13 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentAttendanceServiceImpl.java
  26. 4 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentRepairServiceImpl.java
  27. 76 9
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java
  28. 5 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherAttendanceServiceImpl.java
  29. 8 5
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  30. 51 30
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java
  31. 1 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  32. 1 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupTeacherMapperMapper.xml
  33. 83 46
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  34. 16 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml
  35. 22 7
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  36. 13 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  37. 4 6
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  38. 14 0
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  39. 25 24
      mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml
  40. 7 4
      mec-biz/src/main/resources/config/mybatis/StudentManageDao.xml
  41. 4 1
      mec-biz/src/main/resources/config/mybatis/StudentMapper.xml
  42. 9 4
      mec-biz/src/main/resources/config/mybatis/StudentRepairMapper.xml
  43. 9 3
      mec-biz/src/main/resources/config/mybatis/TeacherAttendanceMapper.xml
  44. 1 1
      mec-gateway/mec-gateway-web/pom.xml
  45. 1 0
      mec-im/src/main/java/com/ym/common/DisplayEnum.java
  46. 3 1
      mec-im/src/main/java/com/ym/controller/RoomController.java
  47. 5 0
      mec-im/src/main/java/com/ym/dao/RoomMemberDao.java
  48. 39 0
      mec-im/src/main/java/com/ym/mec/im/message/MetronomeMessageMessage.java
  49. 2 0
      mec-im/src/main/java/com/ym/pojo/DeviceTypeEnum.java
  50. 9 0
      mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java
  51. 1 0
      mec-im/src/main/java/com/ym/pojo/RoomMember.java
  52. 2 0
      mec-im/src/main/java/com/ym/pojo/RoomResult.java
  53. 18 5
      mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java
  54. 1 1
      mec-im/src/main/java/com/ym/service/RoomService.java
  55. 1 1
      mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java
  56. 6 3
      mec-student/src/main/java/com/ym/mec/student/controller/RepairController.java
  57. 10 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseHomeworkReplyController.java
  58. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleTeacherSalaryController.java
  59. 46 21
      mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java
  60. 31 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduRepairController.java

+ 8 - 8
codegen/src/main/resources/generateConfigration.xml

@@ -2,16 +2,16 @@
 <GenerateConfiguration>
 	<dbConfiguration>
 		<driverClass>com.mysql.jdbc.Driver</driverClass>
-		<url>jdbc:mysql://47.99.212.176:3306/mec_data_online</url>
-		<username>dayaData</username>
-		<password>dayaDataOnline2019</password>
-		<catalog>mec_data_online</catalog>
-		<schema>mec_data_online</schema>
+		<url>jdbc:mysql://47.99.212.176:3306/edu_saas</url>
+		<username>edu_saas</username>
+		<password>edu_saas</password>
+		<catalog>edu_saas</catalog>
+		<schema>edu_saas</schema>
 	</dbConfiguration>
 	<srcBase>e:/javabean</srcBase>
-	<pojoPackageName>com.ym.mec.biz.dal.entity</pojoPackageName>
-	<daoPackageName>com.ym.mec.biz.dal.dao</daoPackageName>
-	<servicePackageName>com.ym.mec.biz.service</servicePackageName>
+	<pojoPackageName>com.keao.edu.datasource.dal.entity</pojoPackageName>
+	<daoPackageName>com.keao.edu.datasource.dal.dao</daoPackageName>
+	<servicePackageName>com.keao.edu.datasource.service</servicePackageName>
 	<sqlmapPackageName>resources</sqlmapPackageName>
 	<sqlmapConfigPackageName>resources/config</sqlmapConfigPackageName>
 </GenerateConfiguration>

+ 10 - 0
mec-auth/mec-auth-api/src/main/java/com/ym/mec/auth/api/entity/SysMenu.java

@@ -69,6 +69,16 @@ public class SysMenu {
 	@ApiModelProperty(value = "子节点列表",required = false)
 	private List<SysMenu> sysMenus;
 
+	private String memo;
+
+	public String getMemo() {
+		return memo;
+	}
+
+	public void setMemo(String memo) {
+		this.memo = memo;
+	}
+
 	public String getParentPermission() {
 		return parentPermission;
 	}

+ 4 - 6
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/config/WebMvcConfig.java

@@ -1,8 +1,7 @@
 package com.ym.mec.auth.config;
 
-import java.util.ArrayList;
-import java.util.List;
-
+import com.ym.mec.common.config.EnumConverterFactory;
+import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
 import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -10,8 +9,8 @@ import org.springframework.format.FormatterRegistry;
 import org.springframework.http.MediaType;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 
-import com.ym.mec.common.config.EnumConverterFactory;
-import com.ym.mec.common.config.LocalFastJsonHttpMessageConverter;
+import java.util.ArrayList;
+import java.util.List;
 
 @Configuration
 public class WebMvcConfig implements WebMvcConfigurer {
@@ -32,5 +31,4 @@ public class WebMvcConfig implements WebMvcConfigurer {
         converter.setSupportedMediaTypes(fastMediaTypes);
         return new HttpMessageConverters(converter);
     }
-
 }

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

@@ -23,6 +23,7 @@
         <result column="update_time_" property="updateTime"/>
         <result column="del_flag_" property="delFlag"/>
         <result column="hidden_" property="hid"/>
+        <result column="memo_" property="memo"/>
     </resultMap>
 
     <!-- 根据主键查询一条记录 -->
@@ -39,8 +40,8 @@
     <insert id="insert" parameterType="com.ym.mec.auth.api.entity.SysMenu" useGeneratedKeys="true" keyColumn="id"
             keyProperty="id">
         INSERT INTO sys_menu
-        (id_,name_,permission_,path_,parent_id_,icon_,component_,sort_,type_,create_time_,update_time_,hidden_,parent_permission_)
-        VALUES(#{id},#{name},#{permission},#{path},#{parentId},#{icon},#{component},#{sort},#{type},now(),now(),#{hid},#{parentPermission})
+        (id_,name_,permission_,path_,parent_id_,icon_,component_,sort_,type_,create_time_,update_time_,hidden_,parent_permission_,memo_)
+        VALUES(#{id},#{name},#{permission},#{path},#{parentId},#{icon},#{component},#{sort},#{type},now(),now(),#{hid},#{parentPermission},#{memo})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -86,6 +87,9 @@
             <if test="hid != null">
                 hidden_ = #{hid},
             </if>
+            <if test="memo != null">
+                memo_ = #{memo},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

+ 0 - 74
mec-biz/src/main/java/com/ym/mec/biz/dal/aspects/UserLog.java

@@ -1,74 +0,0 @@
-package com.ym.mec.biz.dal.aspects;
-
-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.common.exception.BizException;
-import org.aspectj.lang.JoinPoint;
-import org.aspectj.lang.annotation.Aspect;
-import org.aspectj.lang.annotation.Before;
-import org.aspectj.lang.annotation.Pointcut;
-import org.aspectj.lang.reflect.MethodSignature;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-import org.springframework.web.multipart.MultipartFile;
-
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import java.lang.reflect.Method;
-
-@Aspect
-@Component
-public class UserLog {
-
-    @Autowired
-    private SysUserFeignService sysUserFeignService;
-
-    @Pointcut("@annotation(com.ym.mec.biz.dal.aspects.UserLogAnnotation)")
-    public void userLogPoint(){
-    }
-
-    @Before("userLogPoint()")
-    public void saveUserLog(JoinPoint joinPoint){
-        //从切面织入点处通过反射机制获取织入点处的方法
-        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
-        //获取切入点所在的方法
-        Method method = signature.getMethod();
-        UserLogAnnotation logAnnotation = method.getAnnotation(UserLogAnnotation.class);
-        String operationType = "";
-        String describe = "";
-        if(logAnnotation != null){
-            describe = logAnnotation.describe();
-            operationType = logAnnotation.operationType();
-        }
-        //获取请求的类名
-        String className = joinPoint.getTarget().getClass().getName();
-        //获取请求的方法名
-        String methodName = method.getName();
-        //请求的参数
-        Object[] args = joinPoint.getArgs();
-        Object[] arguments  = new Object[args.length];
-        for (int i = 0; i < args.length; i++) {
-            if (args[i] instanceof ServletRequest || args[i] instanceof ServletResponse || args[i] instanceof MultipartFile) {
-                //ServletRequest不能序列化,从入参里排除,否则报异常:java.lang.IllegalStateException: It is illegal to call this method if the current request is not in asynchronous mode (i.e. isAsyncStarted() returns false)
-                //ServletResponse不能序列化 从入参里排除,否则报异常:java.lang.IllegalStateException: getOutputStream() has already been called for this response
-                continue;
-            }
-            arguments[i] = args[i];
-        }
-        //将参数所在的数组转换成json
-        String params = "";
-        if (arguments != null) {
-            try {
-                params = JSONObject.toJSONString(arguments);
-            } catch (Exception e) {
-                params = arguments.toString();
-            }
-        }
-        SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if(sysUser == null){
-            throw new BizException("获取用户信息失败");
-        }
-        System.out.println("记录用户操作日志: {}" + params);
-    }
-}

+ 0 - 16
mec-biz/src/main/java/com/ym/mec/biz/dal/aspects/UserLogAnnotation.java

@@ -1,16 +0,0 @@
-package com.ym.mec.biz.dal.aspects;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-@Target(ElementType.METHOD)
-@Retention(RetentionPolicy.RUNTIME)
-public @interface UserLogAnnotation {
-    //操作类型
-    String operationType() default "";
-
-    //操作描述
-    String describe() default "";
-}

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

@@ -134,5 +134,5 @@ public interface ClassGroupTeacherMapperDao extends BaseDAO<Long, ClassGroupTeac
      * @param classGroupIds
      * @param newTeacherId
      */
-    void batchUpdateTeacherByClassId(@Param("classGroupIds") List<Integer> classGroupIds, @Param("newTeacherId") Integer newTeacherId);
+    void batchUpdateTeacherByClassId(@Param("classGroupIds") List<Integer> classGroupIds, @Param("oldTeacherId") Integer oldTeacherId, @Param("newTeacherId") Integer newTeacherId);
 }

+ 13 - 5
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java

@@ -776,7 +776,7 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @author Joburgess
      * @date 2019/11/3
      */
-    List<CourseSchedule> findCourseScheduleWithDate(@Param("date") Date date);
+    List<CourseSchedule> findCourseScheduleWithDate(@Param("startDate") String startDate, @Param("endDate") String endDate);
 
     /**
      * @param classGroupId: 班级编号
@@ -1313,8 +1313,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Integer>>
      */
     List<Map<Integer, Long>> countStudentVipCoursesWithDate(@Param("studentIds") List<Integer> studentIds,
-                                                               @Param("startTime") Date startTime,
-                                                               @Param("endTime") Date endTime,
+                                                            @Param("startTime") Date startTime,
+                                                            @Param("endTime") Date endTime,
                                                             @Param("groupType") GroupType groupType);
 
 
@@ -1328,8 +1328,8 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return java.util.List<java.util.Map<java.lang.Integer,java.lang.Long>>
      */
     List<Map<Integer, Long>> countStudentPayPracticeCoursesWithDate(@Param("studentIds") List<Integer> studentIds,
-                                                            @Param("startTime") Date startTime,
-                                                            @Param("endTime") Date endTime);
+                                                                    @Param("startTime") Date startTime,
+                                                                    @Param("endTime") Date endTime);
 
     /**
      * @describe 统计学生在未来的vip课数量
@@ -1530,4 +1530,12 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     List<CourseSchedule> queryNoStartCourseByTeacherId(@Param("classGroupIds") String classGroupIds, @Param("teacherId") Integer teacherId, @Param("teacherRole") String teacherRole);
+
+    /**
+     * 当前班级是否有未开始的课程
+     * @param classGroupIds
+     * @param teacherId
+     * @return
+     */
+    List<Map<Integer, Integer>> queryHasReatClass(@Param("classGroupIds") Set<String> classGroupIds, @Param("teacherId") String teacherId);
 }

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

@@ -295,4 +295,15 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
      * @return
      */
     String getMidiByCourseIdAndUserId(@Param("courseScheduleId") String courseScheduleId, @Param("userId") String userId);
+
+    /**
+     * @describe 统计课程组下的课程单价
+     * @author Joburgess
+     * @date 2020.06.11
+     * @param groupType:
+     * @param groupIds:
+     * @return java.util.List<java.util.Map<java.lang.String,java.math.BigDecimal>>
+     */
+    List<Map<String, BigDecimal>> findGroupCoursesUnitPrice(@Param("groupType") GroupType groupType,
+                                                            @Param("groupIds") List<String> groupIds);
 }

+ 28 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleTeacherSalaryDao.java

@@ -62,7 +62,7 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @params [days:天数]
 	 * @describe 获取多少天之前的未结算教师课酬记录(vip课)
 	 */
-	List<CourseScheduleTeacherSalary> findSomeDayAgoTeacherCourseSalaryNoSettlement(@Param("days") Integer days);
+	List<CourseScheduleTeacherSalary> findSomeDayAgoTeacherCourseSalaryNoSettlement(@Param("startDate") String startDate,@Param("endDate") String endDate);
 
 	List<CourseScheduleTeacherSalary> findTemp();
 
@@ -73,7 +73,7 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @params [days:天数]
 	 * @describe 获取多少天之前的未结算教师课酬记录(陪练课课)
 	 */
-	List<CourseScheduleTeacherSalary> findTeacherCourseSalaryNoSettlement(@Param("days") Integer days,@Param("groupType") String groupType);
+	List<CourseScheduleTeacherSalary> findTeacherCourseSalaryNoSettlement(@Param("startDate") String startDate,@Param("endDate") String endDate);
 
 	/**
 	 * 查询老师指定课程的课酬
@@ -120,6 +120,17 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	int batchUpdate(@Param("courseScheduleTeacherSalaries") List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries);
 
 	/**
+	 * @describe 更新指定课程的课酬
+	 * @author Joburgess
+	 * @date 2020.06.10
+	 * @param courseIds:
+	 * @param salary:
+	 * @return int
+	 */
+	int batchUpdateCourseSalarys(@Param("courseIds") List<Long> courseIds,
+								 @Param("salary") BigDecimal salary);
+
+	/**
 	 * @describe 根据课程编号与老师编号删除对应教师课酬记录
 	 * @author Joburgess
 	 * @date 2019/12/2
@@ -358,7 +369,7 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @param endDate
 	 * @return
 	 */
-	List<TeacherVipSalaryDto> queryOnlineCourseByGroupType(@Param("startDate") Date startDate, @Param("endDate") Date endDate);
+	List<TeacherVipSalaryDto> queryOnlineCourseByGroupType(@Param("startDate") String startDate, @Param("endDate") String endDate);
 	/**
 	 * 该用户是不是这个群组的老师
 	 * @param groupId
@@ -477,4 +488,18 @@ public interface CourseScheduleTeacherSalaryDao extends BaseDAO<Long, CourseSche
 	 * @return
 	 */
 	int getHasTeacherSalaryCount(@Param("courseScheduleIds") List<Long> courseScheduleIds);
+
+	/**
+	 * 根据助教主教获取教师列表
+	 * @param classGroupId
+	 * @return
+	 */
+    List<Integer> queryTeacherByTeaching(@Param("classGroupId") Integer classGroupId);
+
+	/**
+	 * 根据助教主教获取教师列表
+	 * @param classGroupId
+	 * @return
+	 */
+    Integer queryTeacherByBishop(@Param("classGroupId") Integer classGroupId);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java

@@ -9,6 +9,7 @@ import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, ExtracurricularExercisesReply> {
 
@@ -109,4 +110,16 @@ public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, Extracur
 	List<ExtracurricularExercisesReply> getStudentExercisesWithTimeZone(@Param("startDate") String startDate,
                                                                         @Param("endDate") String endDate,
                                                                         @Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * @describe
+     * @date 2020.06.15
+     * @param startDate:
+     * @param endDate:
+     * @param studentIds:
+     * @return java.util.Set<java.lang.Integer>
+     */
+    Set<Integer> checkStudentHaveExercisesInDateRange(@Param("startDate") String startDate,
+                                                     @Param("endDate") String endDate,
+                                                     @Param("studentIds") List<Integer> studentIds);
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Select;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHomework> {
 
@@ -121,4 +122,16 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
     List<StudentServeCourseHomeworkDto> findStudentHomeworkWithCourseDateRange(@Param("startDate") String startDate,
                                                                                @Param("endDate") String endDate,
                                                                                @Param("studentIds") List<Integer> studentIds);
+
+    /**
+     * @describe
+     * @date 2020.06.15
+     * @param startDate:
+     * @param endDate:
+     * @param studentIds:
+     * @return java.util.Set<java.lang.Integer>
+     */
+    Set<Integer> checkStudentHaveHomeworkInDateRange(@Param("startDate") String startDate,
+                                                     @Param("endDate") String endDate,
+                                                     @Param("studentIds") List<Integer> studentIds);
 }

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

@@ -230,4 +230,11 @@ public interface TeacherAttendanceDao extends BaseDAO<Long, TeacherAttendance> {
 	 * @return
 	 */
 	int countTeacherAttendanceComplaints(Map<String, Object> params);
+
+	/**
+	 * 删除老师考勤
+	 * @param courseScheduleIds
+	 * @param teacherId
+	 */
+	void deleteByCourseAndTeacherId(@Param("courseScheduleIds") Set<Long> courseScheduleIds, @Param("teacherId") Integer teacherId);
 }

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

@@ -35,12 +35,12 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "班级编号,房间号",required = false)
     private String sealClassId;
 
-    /*@ApiModelProperty(value = "签到状态(1正常,0异常,3未签到)",required = false)
+    @ApiModelProperty(value = "签到状态(1正常,0异常,3未签到)",required = false)
     private Integer signInStatus;
 
-    @ApiModelProperty(value = "签退状态(11正常,0异常,3未签到)",required = false)
+    @ApiModelProperty(value = "签退状态(1正常,0异常,3未签到)",required = false)
     private Integer signOutStatus;
-*/
+
     @ApiModelProperty(value = "教师角色")
     private TeachTypeEnum teacherRole;
 
@@ -80,6 +80,22 @@ public class CourseScheduleDto extends CourseSchedule {
 
     private int isNew;
 
+    public Integer getSignInStatus() {
+        return signInStatus;
+    }
+
+    public void setSignInStatus(Integer signInStatus) {
+        this.signInStatus = signInStatus;
+    }
+
+    public Integer getSignOutStatus() {
+        return signOutStatus;
+    }
+
+    public void setSignOutStatus(Integer signOutStatus) {
+        this.signOutStatus = signOutStatus;
+    }
+
     public Integer getComplaintsStatus() {
         return complaintsStatus;
     }

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

@@ -44,6 +44,9 @@ public class StudentManageListDto {
 
     @ApiModelProperty(value = "课程余额")
     private BigDecimal courseBalance;
+
+    @ApiModelProperty(value = "账户余额")
+    private BigDecimal balance;
     
     private YesOrNoEnum isActive;
 
@@ -74,6 +77,14 @@ public class StudentManageListDto {
     
     private Integer teacherId;
 
+    public BigDecimal getBalance() {
+        return balance;
+    }
+
+    public void setBalance(BigDecimal balance) {
+        this.balance = balance;
+    }
+
     public YesOrNoEnum getServiceTag() {
         return serviceTag;
     }

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

@@ -132,6 +132,16 @@ public class VipGroup {
 
 	private String lastOverTime;
 
+	private BigDecimal courseUnitPrice;
+
+	public BigDecimal getCourseUnitPrice() {
+		return courseUnitPrice;
+	}
+
+	public void setCourseUnitPrice(BigDecimal courseUnitPrice) {
+		this.courseUnitPrice = courseUnitPrice;
+	}
+
 	public String getLastOverTime() {
 		return lastOverTime;
 	}

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/SporadicChargeTypeEnum.java

@@ -11,7 +11,8 @@ public enum SporadicChargeTypeEnum implements BaseEnum<Integer, SporadicChargeTy
     LUCKY_BAG_ACTIVE(6,"福袋活动"),
     VISITING_FEE(7,"上门费"),
     VIP_BUY(8,"VIP课购买"),
-    RECHARGE(9,"账户余额");
+    RECHARGE(9,"账户余额"),
+    MUSIC_UPKEEP(10,"乐保服务");
 
     private Integer code;
 

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

@@ -74,5 +74,5 @@ public interface ClassGroupTeacherMapperService extends BaseService<Long, ClassG
      * @param classGroupIds
      * @param newTeacherId
      */
-    void batchUpdateTeacherByClassId(@Param("classGroupIds") List<Integer> classGroupIds, @Param("newTeacherId") Integer newTeacherId);
+    void batchUpdateTeacherByClassId(List<Integer> classGroupIds, Integer oldTeacherId,Integer newTeacherId);
 }

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

@@ -1,5 +1,7 @@
 package com.ym.mec.biz.service;
 
+import java.util.Map;
+
 /**
  * @Author Joburgess
  * @Date 2020.05.27
@@ -15,4 +17,14 @@ public interface StudentServeService {
      */
     void exercisesSituationStatistics(String monday);
 
+    /**
+     * @describe
+     * @author Joburgess
+     * @date 2020.06.15
+     * @param courseScheduleId:
+     * @param studentIds:
+     * @return int
+     */
+    Map<String, Object> checkeIsAssignHomework(Long courseScheduleId, String studentIds);
+
 }

+ 71 - 71
mec-biz/src/main/java/com/ym/mec/biz/service/VipGroupService.java

@@ -245,62 +245,62 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
     void orderCallback(StudentPaymentOrder order);
 
     /**
-	 * @Author: Joburgess
-	 * @Date: 2019/10/3
-	 * @params [vipGroupId, studentId]
-	 * @return void
-	 * @describe 申请退课
-	 */
-	void applyRefund(Long vipGroupId);
-
-	/**
-	 * @describe 给指定学生退课
-	 * @author Joburgess
-	 * @date 2019/11/15
-	 * @param vipGroupId: vip课程
-	 * @param studentId: 学生编号
-	 * @return void
-	 */
-	void applyRefundForStudent(Long vipGroupId, Integer studentId, BigDecimal amount);
-
-	/**
-	 * @describe 对某个学生进行休学
-	 * @author Joburgess
-	 * @date 2019/12/18
-	 * @param vipGroupId: vip课编号
-	 * @param studentId: 学生编号
-	 * @return void
-	 */
-	void pauseForStudent(Long vipGroupId, Integer studentId);
-
-	/**
-	 * @describe 恢复休学的学生
-	 * @author Joburgess
-	 * @date 2019/12/18
-	 * @param studentRecoverInfo:
-	 * @return void
-	 */
-	void recoverForStudent(StudentRecoverDto studentRecoverInfo);
-
-	/**
-	 * @describe 获取学生休学信息
-	 * @author Joburgess
-	 * @date 2019/12/24
-	 * @param vipGroupId:
-	 * @param studentId:
-	 * @return com.ym.mec.biz.dal.dto.StudentRecoverInfoDto
-	 */
-	StudentRecoverInfoDto getStudentPauseInfo(Long vipGroupId, Integer studentId);
-
-	/**
-	 * @describe 获取指定学生的剩余课时费用
-	 * @author Joburgess
-	 * @date 2019/11/15
-	 * @param vipGroupId: VIP课编号
-	 * @param studentId: 学生编号
-	 * @return java.util.Map<java.lang.String,java.math.BigDecimal>
-	 */
-	Map<String,BigDecimal> getStudentSurplusCourseFee(Long vipGroupId, Integer studentId);
+     * @Author: Joburgess
+     * @Date: 2019/10/3
+     * @params [vipGroupId, studentId]
+     * @return void
+     * @describe 申请退课
+     */
+    void applyRefund(Long vipGroupId);
+
+    /**
+     * @describe 给指定学生退课
+     * @author Joburgess
+     * @date 2019/11/15
+     * @param vipGroupId: vip课程
+     * @param studentId: 学生编号
+     * @return void
+     */
+    void applyRefundForStudent(Long vipGroupId, Integer studentId, BigDecimal amount);
+
+    /**
+     * @describe 对某个学生进行休学
+     * @author Joburgess
+     * @date 2019/12/18
+     * @param vipGroupId: vip课编号
+     * @param studentId: 学生编号
+     * @return void
+     */
+    void pauseForStudent(Long vipGroupId, Integer studentId);
+
+    /**
+     * @describe 恢复休学的学生
+     * @author Joburgess
+     * @date 2019/12/18
+     * @param studentRecoverInfo:
+     * @return void
+     */
+    void recoverForStudent(StudentRecoverDto studentRecoverInfo);
+
+    /**
+     * @describe 获取学生休学信息
+     * @author Joburgess
+     * @date 2019/12/24
+     * @param vipGroupId:
+     * @param studentId:
+     * @return com.ym.mec.biz.dal.dto.StudentRecoverInfoDto
+     */
+    StudentRecoverInfoDto getStudentPauseInfo(Long vipGroupId, Integer studentId);
+
+    /**
+     * @describe 获取指定学生的剩余课时费用
+     * @author Joburgess
+     * @date 2019/11/15
+     * @param vipGroupId: VIP课编号
+     * @param studentId: 学生编号
+     * @return java.util.Map<java.lang.String,java.math.BigDecimal>
+     */
+    Map<String,BigDecimal> getStudentSurplusCourseFee(Long vipGroupId, Integer studentId);
 
     /**
      * @Author: Joburgess
@@ -344,7 +344,7 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @return
      */
     boolean awardedMonthlyRewards();
-    
+
     /**
      * 根据老师查询vip课教学点
      * @param userId
@@ -379,19 +379,19 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      */
     void addVipGroupStudents(Long vipGroupId,List<Integer> studentIds);
 
-	/**
-	 * 更新vipgroup至完成状态
-	 */
-	void updateVipGroupStatusToFinished();
-
-	/**
-	 * @describe 获取vip课购买信息
-	 * @author Joburgess
-	 * @date 2019/11/29
-	 * @param vipGroupId: vip课编号
-	 * @param userId: 用户编号
-	 * @return void
-	 */
+    /**
+     * 更新vipgroup至完成状态
+     */
+    void updateVipGroupStatusToFinished();
+
+    /**
+     * @describe 获取vip课购买信息
+     * @author Joburgess
+     * @date 2019/11/29
+     * @param vipGroupId: vip课编号
+     * @param userId: 用户编号
+     * @return void
+     */
     VipGroupPayInfoDto getVipGroupPayInfo(Integer vipGroupId,Integer userId);
 
     /**
@@ -418,5 +418,5 @@ public interface VipGroupService extends BaseService<Long, VipGroup> {
      * @param endDate
      * @return
      */
-    void updateHistoryTeacherSalaryOfOnline(Date startDate, Date endDate);
+    void updateHistoryTeacherSalaryOfOnline(String startDate, String endDate);
 }

+ 25 - 97
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -1,105 +1,15 @@
 package com.ym.mec.biz.service.impl;
 
-import static com.ym.mec.biz.dal.enums.GroupType.COMM;
-import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
-import static com.ym.mec.biz.dal.enums.GroupType.VIP;
-
-import java.math.BigDecimal;
-import java.time.Duration;
-import java.time.Instant;
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Calendar;
-import java.util.Collections;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-
-import com.ym.mec.biz.dal.dao.*;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Propagation;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.util.CollectionUtils;
-
 import com.alibaba.fastjson.JSON;
 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.dto.ClassGroup4MixDto;
-import com.ym.mec.biz.dal.dto.ClassGroupImGroupDto;
-import com.ym.mec.biz.dal.dto.ClassGroupTeacherMapDto;
-import com.ym.mec.biz.dal.dto.ClassGroupTeachersDto;
-import com.ym.mec.biz.dal.dto.CourseListDto;
-import com.ym.mec.biz.dal.dto.CourseTimeDto;
-import com.ym.mec.biz.dal.dto.HighClassGroupDto;
-import com.ym.mec.biz.dal.dto.MusicGroupClassGroupDto;
-import com.ym.mec.biz.dal.dto.MusicGroupCourseScheduleDto;
-import com.ym.mec.biz.dal.dto.StudentAttendanceViewDto;
-import com.ym.mec.biz.dal.dto.StudentPayInfoDto;
-import com.ym.mec.biz.dal.dto.SuperClassGroupDto;
-import com.ym.mec.biz.dal.dto.TeacherClassGroupDto;
-import com.ym.mec.biz.dal.dto.TeacherClassHeadInfo;
-import com.ym.mec.biz.dal.dto.TeacherMusicClassInfoDto;
-import com.ym.mec.biz.dal.dto.TeacherVipClassInfoDto;
-import com.ym.mec.biz.dal.dto.UserMusicGroupQueryInfo;
-import com.ym.mec.biz.dal.entity.ClassGroup;
-import com.ym.mec.biz.dal.entity.ClassGroupRelation;
-import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
-import com.ym.mec.biz.dal.entity.ClassGroupTeacherMapper;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
-import com.ym.mec.biz.dal.entity.CourseScheduleStudentPayment;
-import com.ym.mec.biz.dal.entity.CourseScheduleTeacherSalary;
-import com.ym.mec.biz.dal.entity.CoursesGroup;
-import com.ym.mec.biz.dal.entity.Group;
-import com.ym.mec.biz.dal.entity.MusicGroup;
-import com.ym.mec.biz.dal.entity.MusicGroupBuildLog;
-import com.ym.mec.biz.dal.entity.PracticeGroup;
-import com.ym.mec.biz.dal.entity.StudentRegistration;
-import com.ym.mec.biz.dal.entity.Subject;
-import com.ym.mec.biz.dal.entity.SysConfig;
-import com.ym.mec.biz.dal.entity.Teacher;
-import com.ym.mec.biz.dal.entity.TeacherDefaultMusicGroupSalary;
-import com.ym.mec.biz.dal.entity.VipGroup;
-import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
-import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
-import com.ym.mec.biz.dal.enums.CourseStatusEnum;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MusicGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.SalarySettlementTypeEnum;
-import com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum;
-import com.ym.mec.biz.dal.enums.TeachModeEnum;
-import com.ym.mec.biz.dal.enums.TeachTypeEnum;
-import com.ym.mec.biz.dal.enums.VipGroupStatusEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
-import com.ym.mec.biz.dal.page.ClassGroupQueryInfo;
-import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
-import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
-import com.ym.mec.biz.dal.page.StudentPayLogQueryInfo;
-import com.ym.mec.biz.dal.page.TeacherMusicClassQueryInfo;
-import com.ym.mec.biz.dal.page.VipClassQueryInfo;
-import com.ym.mec.biz.dal.page.queryMusicGroupCourseScheduleQueryInfo;
-import com.ym.mec.biz.service.ClassGroupRelationService;
-import com.ym.mec.biz.service.ClassGroupService;
-import com.ym.mec.biz.service.ClassGroupTeacherMapperService;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.CourseScheduleStudentPaymentService;
-import com.ym.mec.biz.service.CourseScheduleTeacherSalaryService;
-import com.ym.mec.biz.service.StudentRegistrationService;
-import com.ym.mec.biz.service.SubjectService;
-import com.ym.mec.biz.service.SysConfigService;
-import com.ym.mec.biz.service.TeacherDefaultMusicGroupSalaryService;
+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.enums.*;
+import com.ym.mec.biz.dal.page.*;
+import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.entity.ImGroupMember;
@@ -115,6 +25,20 @@ import com.ym.mec.jiari.JiaRiFeignService;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateConvertor;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static com.ym.mec.biz.dal.enums.GroupType.*;
 
 @Service
 public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup> implements ClassGroupService {
@@ -618,9 +542,13 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             HashMap<String, Object> param = new HashMap<>();
             param.put("teacherId", queryInfo.getSearch());
             param.put("attendanceStatus", YesOrNoEnum.YES);
+            Set<String> classGroupIds = dataList.stream().map(e -> e.getClassGroupIds()).collect(Collectors.toSet());
+            Map<Integer,Long> hasRestClassMap = MapUtil.convertIntegerMap(courseScheduleDao.queryHasReatClass(classGroupIds,queryInfo.getSearch()));
+            int teacherPersonalAttendancesCount = teacherAttendanceDao.getTeacherPersonalAttendancesCount(param);
             dataList.forEach(e -> {
                 param.put("musicGroupId", e.getMusicGroupId());
-                e.setAttendanceNum(teacherAttendanceDao.getTeacherPersonalAttendancesCount(param));
+                e.setAttendanceNum(teacherPersonalAttendancesCount);
+                e.setHasRestClass(hasRestClassMap.get(Integer.parseInt(e.getClassGroupIds())).intValue());
             });
         }
         if (count == 0) {

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

@@ -624,7 +624,7 @@ public class ClassGroupTeacherMapperServiceImpl extends BaseServiceImpl<Long, Cl
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void batchUpdateTeacherByClassId(List<Integer> classGroupIds, Integer newTeacherId) {
-        classGroupTeacherMapperDao.batchUpdateTeacherByClassId(classGroupIds,newTeacherId);
+    public void batchUpdateTeacherByClassId(List<Integer> classGroupIds, Integer oldTeacherId, Integer newTeacherId) {
+        classGroupTeacherMapperDao.batchUpdateTeacherByClassId(classGroupIds,oldTeacherId,newTeacherId);
     }
 }

+ 68 - 39
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -47,8 +47,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import static com.ym.mec.biz.dal.enums.GroupType.MUSIC;
-import static com.ym.mec.biz.dal.enums.GroupType.PRACTICE;
+import static com.ym.mec.biz.dal.enums.GroupType.*;
 import static com.ym.mec.biz.dal.enums.PracticeGroupType.*;
 
 @Service
@@ -1905,7 +1904,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
             throw new BizException("排课起始时间不能小于当前时间");
         }
 
-        boolean needSchoolId = Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode()) && vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE) && Objects.isNull(vipGroupCourseAdjustInfo.getTeachMode());
+        boolean needSchoolId = Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode()) && vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE) && Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId());
         if (needSchoolId) {
             throw new BizException("请设置教学点");
         }
@@ -2032,8 +2031,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                     courseSchedules.get(courseStartDates.size() - 1).setEndClassTime(courseEndTime);
                     if (Objects.nonNull(vipGroupCourseAdjustInfo.getTeachMode())) {
                         if(courseSchedules.get(courseStartDates.size() - 1).getTeachMode().equals(TeachModeEnum.ONLINE)
-                            &&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)){
-                            throw new BizException("暂不支持线上课程转为线下课");
+                            &&vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)
+							&&Objects.isNull(vipGroupCourseAdjustInfo.getSchoolId())){
+                            throw new BizException("请选择教学点");
                         }
                         courseSchedules.get(courseStartDates.size() - 1).setTeachMode(vipGroupCourseAdjustInfo.getTeachMode());
                         if (vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)) {
@@ -2075,12 +2075,34 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 }
             }
         }
+        if(groupType == VIP){
+			VipGroup vipGroup = vipGroupDao.get(vipGroupCourseAdjustInfo.getVipGroupId().longValue());
+
+			BigDecimal teacherSalary=BigDecimal.ZERO;
+
+			ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroupCourseAdjustInfo.getVipGroupId().intValue(), courseSchedules.get(0).getActualTeacherId());
+
+			if(Objects.nonNull(classGroupTeacherSalary)){
+				teacherSalary=vipGroupCourseAdjustInfo.getTeachMode().equals(TeachModeEnum.OFFLINE)?classGroupTeacherSalary.getSalary():classGroupTeacherSalary.getOnlineClassesSalary();
+			}
+			if(Objects.isNull(teacherSalary)||teacherSalary.compareTo(BigDecimal.ZERO)<=0){
+				TeacherDefaultVipGroupSalary tdvs = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(courseSchedules.get(0).getActualTeacherId(),vipGroup.getVipGroupCategoryId());
+				if (tdvs == null||Objects.isNull(tdvs.getOfflineClassesSalary())) {
+					throw new BizException("老师[]没有设置默认课酬,请先设置", courseSchedules.get(0).getActualTeacherId());
+				}
+				teacherSalary=tdvs.getOfflineClassesSalary();
+			}
+
+			courseScheduleTeacherSalaryDao.batchUpdateCourseSalarys(courseScheduleIds, teacherSalary);
+
+		}
+
         courseScheduleDao.batchUpdate(courseSchedules);
         classGroupService.updateClassGroupInfo(classGroup.getId());
         if(vipGroupCourseAdjustInfo.getCourseCreateStartTime().after(now)){
             teacherAttendanceDao.batchCleanCourseTeacherSignInfo(courseScheduleIds);
         }
-		// 删除作业
+		//删除作业
 		courseHomeworkService.delHomwworkByCourseScheduleId(courseScheduleIds);
 		//删除评论
 		courseScheduleReviewDao.delByCourseScheduleIds(courseScheduleIds);
@@ -2361,10 +2383,10 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
                 newCourseSchedule.setTeachMode(oldCourseSchedule.getTeachMode());
             }
 
-			if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-				if (newCourseSchedule.getTeachMode() != oldCourseSchedule.getTeachMode() && newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
-					throw new BizException("不允许将线上课调整为线下课");
-				}
+			if (newCourseSchedule.getTeachMode() != oldCourseSchedule.getTeachMode()
+					&& newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE
+					&& Objects.isNull(newCourseSchedule.getSchoolId())) {
+				throw new BizException("请设置教学点");
 			}
 
             if (Objects.isNull(newCourseSchedule.getSchoolId())) {
@@ -2464,9 +2486,9 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 			List<TeacherAttendance> teacherAttendanceList = teacherAttendanceMap.get(courseScheduleId);
 
 			List<Integer> oldTeacherIdList = teacherAttendanceList.stream().map(TeacherAttendance::getTeacherId).distinct().collect(Collectors.toList());
-
-			List<Integer> newTeacherIdList = newCourseSchedule.getTeachingTeacherIdList();
-			newTeacherIdList.add(newCourseSchedule.getActualTeacherId());
+            List<Integer> newTeacherIdList = new ArrayList<>();
+            newTeacherIdList.addAll(newCourseSchedule.getTeachingTeacherIdList());
+            newTeacherIdList.add(newCourseSchedule.getActualTeacherId());
 
 			if (newCourseSchedule.getStatus() != CourseStatusEnum.OVER) {
 				// 清理原来考勤
@@ -2554,7 +2576,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				}
 
 				// 所有老师默认vip课酬
-				/*List<TeacherDefaultVipGroupSalary> teacherDefaultVipGroupSalaries = teacherDefaultVipGroupSalaryDao.queryByUserIdList(newTeacherIdList);
+				List<TeacherDefaultVipGroupSalary> teacherDefaultVipGroupSalaries = teacherDefaultVipGroupSalaryDao.queryByUserIdList(newTeacherIdList);
 				Map<Integer, Map<Integer, TeacherDefaultVipGroupSalary>> vipGroupSalaryMap = new HashMap<Integer, Map<Integer, TeacherDefaultVipGroupSalary>>();
 				for (TeacherDefaultVipGroupSalary tdvs : teacherDefaultVipGroupSalaries) {
 					Map<Integer, TeacherDefaultVipGroupSalary> map = vipGroupSalaryMap.get(tdvs.getUserId());
@@ -2565,7 +2587,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 					vipGroupSalaryMap.put(tdvs.getUserId(), map);
 				}
 
-				VipGroup vipGroup = vipGroupDao.findByCourseSchedule(courseScheduleId);*/
+				VipGroup vipGroup = vipGroupDao.findByCourseSchedule(courseScheduleId);
 
 				// 删除课酬
 				List<Long> courseScheduleIdList = new ArrayList<Long>();
@@ -2670,31 +2692,31 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 						}
 
 					} else if (newCourseSchedule.getGroupType() == GroupType.VIP) {
-						/*Map<Integer, TeacherDefaultVipGroupSalary> map = vipGroupSalaryMap.get(teacherId);
+						Map<Integer, TeacherDefaultVipGroupSalary> map = vipGroupSalaryMap.get(teacherId);
 						if (map == null) {
 							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
 						}
 						if (vipGroup == null) {
 							throw new BizException("课程[{}]记录存在异常,请联系管理员", courseScheduleId);
 						}
-						TeacherDefaultVipGroupSalary tdvs = map.get(vipGroup.getVipGroupCategoryId());
-						if (tdvs == null) {
-							throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
+
+						BigDecimal teacherSalary=BigDecimal.ZERO;
+
+						ClassGroupTeacherSalary classGroupTeacherSalary = classGroupTeacherSalaryDao.findByVipGoupAndTeacher(vipGroup.getId().intValue(), teacherId);
+
+						if(Objects.nonNull(classGroupTeacherSalary)){
+							teacherSalary=newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE?classGroupTeacherSalary.getSalary():classGroupTeacherSalary.getOnlineClassesSalary();
 						}
-						if (newCourseSchedule.getTeachMode() == TeachModeEnum.OFFLINE) {
-							ts.setExpectSalary(tdvs.getOfflineClassesSalary());
-						} else {
-							ts.setExpectSalary(tdvs.getOnlineClassesSalary());
-						}*/
-
-						ts.setExpectSalary(new BigDecimal(0));
-						Map<Integer, CourseScheduleTeacherSalary> tsMap = courseScheduleTeacherSalaryMap.get(courseScheduleId);
-						if(tsMap != null){
-							CourseScheduleTeacherSalary oldTS = tsMap.get(teacherId);
-							if(oldTS != null){
-								ts.setExpectSalary(oldTS.getExpectSalary());
+						if(Objects.isNull(teacherSalary)||teacherSalary.compareTo(BigDecimal.ZERO)<=0){
+							TeacherDefaultVipGroupSalary tdvs = teacherDefaultVipGroupSalaryDao.findByTeacherAndCategory(teacherId,vipGroup.getVipGroupCategoryId());
+							if (tdvs == null||Objects.isNull(tdvs.getOfflineClassesSalary())) {
+								throw new BizException("老师[]没有设置默认课酬,请先设置", teacherId);
 							}
+							teacherSalary=tdvs.getOfflineClassesSalary();
 						}
+
+						ts.setExpectSalary(teacherSalary);
+
 					} else if (newCourseSchedule.getGroupType() == PRACTICE) {
 						List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaryList = teacherDefaultPracticeGroupSalaryDao
 								.queryByUserId(teacherId);
@@ -3874,7 +3896,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 
         PracticeGroup practiceGroup = practiceGroupDao.get(Long.valueOf(oldCourseSchedule.getMusicGroupId()));
 		if(practiceGroup.getType() != TRIAL){
-			if(practiceGroup.getType() == FREE){
+			if(practiceGroup.getType() != FREE){
 				List<TeacherDefaultPracticeGroupSalary> teacherDefaultPracticeGroupSalaries = teacherDefaultPracticeGroupSalaryDao.queryByUserId(teacherId);
 				if(teacherDefaultPracticeGroupSalaries == null || teacherDefaultPracticeGroupSalaries.size() == 0){
 					throw new BizException("请设置老师默认课酬");
@@ -4251,24 +4273,31 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	@Override
 	@Transactional(rollbackFor = Exception.class)
 	public void classGroupTeacherAdjust(String classGroupIds, Integer teacherId, Integer targetTeacherId) {
+		List<Integer> teachingTeacherIdList = new ArrayList<Integer>();
+		teachingTeacherIdList.add(targetTeacherId);
 		List<CourseSchedule> courseSchedules = this.queryNoStartCourseByTeacherId(classGroupIds,teacherId,"BISHOP");
+		//获取助教老师列表
 		if(courseSchedules.size() > 0){
 			courseSchedules.forEach(e->{
+				e.setTeachingTeacherIdList(courseScheduleTeacherSalaryDao.queryTeacherByTeaching(e.getClassGroupId()));
 				e.setActualTeacherId(targetTeacherId);
 			});
 			this.courseAdjust(courseSchedules);
-			//修改关联班级老师
-			List<Integer> collect = courseSchedules.stream().map(e -> e.getClassGroupId()).collect(Collectors.toList());
-			batchUpdateClassTeacher(collect,teacherId,targetTeacherId);
+			//修改老师考勤
+			Set<Integer> collect1 = courseSchedules.stream().map(e -> e.getClassGroupId()).collect(Collectors.toSet());
+//			teacherAttendanceDao.deleteByCourseAndTeacherId(collect1,teacherId);
+			batchUpdateClassTeacher(new ArrayList<>(collect1),teacherId,targetTeacherId);
 		}
 		List<CourseSchedule> courseSchedules1 = this.queryNoStartCourseByTeacherId(classGroupIds, teacherId, "TEACHING");
 		if(courseSchedules1.size() > 0){
-			List<Integer> teachingTeacherIdList = new ArrayList<Integer>();
-			teachingTeacherIdList.add(targetTeacherId);
-			courseSchedules.forEach(e->{
+			courseSchedules1.forEach(e->{
+				e.setActualTeacherId(courseScheduleTeacherSalaryDao.queryTeacherByBishop(e.getClassGroupId()));
 				e.setTeachingTeacherIdList(teachingTeacherIdList);
 			});
 			this.courseAdjust(courseSchedules1);
+			Set<Integer> collect1 = courseSchedules1.stream().map(e -> e.getClassGroupId()).collect(Collectors.toSet());
+////			teacherAttendanceDao.deleteByCourseAndTeacherId(collect1,teacherId);
+			batchUpdateClassTeacher(new ArrayList<>(collect1),teacherId,targetTeacherId);
 		}
 	}
 
@@ -4293,7 +4322,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 		classGroupList.forEach(e->{
 			e.setUserIds(newTeacherId.toString());
 		});
-		classGroupTeacherMapperService.batchUpdateTeacherByClassId(classGroupIds,newTeacherId);
+		classGroupTeacherMapperService.batchUpdateTeacherByClassId(classGroupIds,oldTeacherId,newTeacherId);
 		//旧老师退群,新老师加群
 		if(classGroupList != null && classGroupIds.size() > 0){
 			ImGroupMember[] oldImGroupMembers = {new ImGroupMember(oldTeacherId.toString())};

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

@@ -109,7 +109,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         //获取活动信息
         VipGroupActivity vipGroupActivity = null;
         if(vipGroup.getVipGroupActivityId() != null){
-        	vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
+            vipGroupActivity = vipGroupActivityDao.get(vipGroup.getVipGroupActivityId().intValue());
         }
 
         List<CourseScheduleTeacherSalary> courseScheduleTeacherSalaries = new ArrayList<>();
@@ -203,10 +203,13 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Transactional(rollbackFor = Exception.class)
     public void practiceTeacherSalarySettlement() {
 //        int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
-        int days = 0;
+//        int days = 0;
         //获取教师未结算课程记录
         Date now = new Date();
-        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(days,GroupType.PRACTICE.getCode());
+        Date date = DateUtil.addMonths(now, -1);
+        String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findTeacherCourseSalaryNoSettlement(startDate,endDate);
         if (!CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
             someDayAgoTeacherCourseSalaryNoSettlement.forEach(courseScheduleTeacherSalary -> {
                 courseScheduleTeacherSalary.setActualSalary(courseScheduleTeacherSalary.getTeacherActualSalary());
@@ -284,16 +287,20 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Transactional(rollbackFor = Exception.class)
     public void teacherSalarySettlement() {
 //        int days = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.VIP_APPEAL_DAYS_RANGE).getParanValue());
-        int days = 0;
+//        int days = 0;
         BigDecimal percent = new BigDecimal(10);
-
+        Date now = new Date();
+        Date date = DateUtil.addMonths(now, -1);
+        String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
         //获取教师未结算课程记录
-        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findSomeDayAgoTeacherCourseSalaryNoSettlement(days);
+        List<CourseScheduleTeacherSalary> someDayAgoTeacherCourseSalaryNoSettlement = courseScheduleTeacherSalaryDao.findSomeDayAgoTeacherCourseSalaryNoSettlement(startDate,endDate);
         if (CollectionUtils.isEmpty(someDayAgoTeacherCourseSalaryNoSettlement)) {
             LOGGER.info("未获取到未结算课酬记录!");
             return;
         }
-        Date now = new Date();
+
+        vipGroupService.updateHistoryTeacherSalaryOfOnline(startDate, endDate);
         //获取未结算课程编号列表
         List<Long> courseScheduleIds = someDayAgoTeacherCourseSalaryNoSettlement.stream().map(CourseScheduleTeacherSalary::getCourseScheduleId).collect(Collectors.toList());
 
@@ -302,8 +309,8 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 //        Map<Long, List<StudentAttendance>> courseStudentAttendancesMap = studentAttendances.stream().collect(Collectors.groupingBy(StudentAttendance::getCourseScheduleId));
 
         //所有课程的教师考勤记录
-        List<TeacherAttendance> teacherAttendancesByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
-        Map<Long, List<TeacherAttendance>> courseTeacherAttendancesMap = teacherAttendancesByCourseSchedule.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
+//        List<TeacherAttendance> teacherAttendancesByCourseSchedule = teacherAttendanceDao.findTeacherIdByCourseSchedule(courseScheduleIds);
+//        Map<Long, List<TeacherAttendance>> courseTeacherAttendancesMap = teacherAttendancesByCourseSchedule.stream().collect(Collectors.groupingBy(TeacherAttendance::getCourseScheduleId));
 
         //获取未结算课程投诉记录
         List<CourseScheduleComplaints> courseScheduleComplaints = courseScheduleComplaintsDao.findByCourseScheduleIds(courseScheduleIds);
@@ -347,19 +354,19 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 //                return;
 //            }
 
-            List<TeacherAttendance> teacherAttendances = courseTeacherAttendancesMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
-            if(CollectionUtils.isEmpty(teacherAttendances)){
-                return;
-            }
-            int teacherAttendanceNum=0;
-            for (TeacherAttendance teacherAttendance : teacherAttendances) {
-                if(Objects.nonNull(teacherAttendance.getSignInTime())||Objects.nonNull(teacherAttendance.getSignOutTime())){
-                    teacherAttendanceNum+=1;
-                }
-            }
-            if(teacherAttendanceNum==0){
-                return;
-            }
+//            List<TeacherAttendance> teacherAttendances = courseTeacherAttendancesMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
+//            if(CollectionUtils.isEmpty(teacherAttendances)){
+//                return;
+//            }
+//            int teacherAttendanceNum=0;
+//            for (TeacherAttendance teacherAttendance : teacherAttendances) {
+//                if(Objects.nonNull(teacherAttendance.getSignInTime())||Objects.nonNull(teacherAttendance.getSignOutTime())){
+//                    teacherAttendanceNum+=1;
+//                }
+//            }
+//            if(teacherAttendanceNum==0){
+//                return;
+//            }
 
             //当前课程缴费学生数量
 //            BigDecimal courseStudentNum = new BigDecimal(studentPaymentsWithCourse.size());
@@ -375,7 +382,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             List<CourseScheduleComplaints> courseStudentComplaints = complaintsGroupByCourse.get(courseScheduleTeacherSalary.getCourseScheduleId());
 
             //如果存在投诉记录,需要扣除相应费用
-            if (Objects.nonNull(courseStudentComplaints)) {
+            /*if (Objects.nonNull(courseStudentComplaints)) {
                 //获取审批中的投诉
                 List<CourseScheduleComplaints> auditIng = courseStudentComplaints.stream().filter(courseScheduleComplaint -> courseScheduleComplaint.getStatus() == AuditStatusEnum.ING).collect(Collectors.toList());
                 if (!CollectionUtils.isEmpty(auditIng)) {
@@ -383,12 +390,12 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
                     return;
                 }
                 //计算教师责任总占比
-//                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint -> Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio()) ? 0 : courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
-//                teacherLiabilityAllratio = new BigDecimal(teacherLiabilityRatioSum).divide(percent,CommonConstants.DECIMAL_PLACE,BigDecimal.ROUND_DOWN);
+                double teacherLiabilityRatioSum = courseStudentComplaints.stream().mapToDouble(courseScheduleComplaint -> Objects.isNull(courseScheduleComplaint.getTeacherLiabilityRatio()) ? 0 : courseScheduleComplaint.getTeacherLiabilityRatio()).sum();
+                teacherLiabilityAllratio = new BigDecimal(teacherLiabilityRatioSum).divide(percent,CommonConstants.DECIMAL_PLACE,BigDecimal.ROUND_DOWN);
             } else {
                 //如果没有投诉,则教师和学生的责任占比为0
-//                teacherLiabilityAllratio = new BigDecimal(0);
-            }
+                teacherLiabilityAllratio = new BigDecimal(0);
+            }*/
 
             //教师应扣除费用
             /*BigDecimal deductPrice = avgSalary.multiply(teacherLiabilityAllratio);
@@ -492,12 +499,15 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
     @Transactional(rollbackFor = Exception.class)
     public void musicGroupTeacherSalarySettlement() {
         Date now = new Date();
-        Date settleTime = DateUtil.addDays1(now, -sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_DAY).getParanValue(Integer.class));
+        Date date = DateUtil.addMonths(now, -1);
+        String startDate = DateUtil.format(DateUtil.getFirstDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+        String endDate = DateUtil.format(DateUtil.getLastDayOfMonth(date),DateUtil.DEFAULT_PATTERN);
+//        Date settleTime = DateUtil.addDays1(now, -sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_DAY).getParanValue(Integer.class));
         Integer settlementClassMinutes = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_CLASS_MINUTES).getParanValue());
         Integer singleClassTime = Integer.parseInt(sysConfigDao.findByParamName(SysConfigService.MUSIC_GROUP_SETTLEMENT_SINGLE_CLASS_MINUTES).getParanValue());
         Date entryDate = DateUtil.stringToDate(sysConfigDao.findByParamName(SysConfigService.TEACHER_ENTRY_DATE).getParanValue(),"yyyy-MM-dd");
-        //获取昨天的课程计划
-        List<CourseSchedule> yesterdayCourseSchedules = courseScheduleDao.findCourseScheduleWithDate(settleTime);
+        //获取上个月的课程计划
+        List<CourseSchedule> yesterdayCourseSchedules = courseScheduleDao.findCourseScheduleWithDate(startDate,endDate);
         //课程编号列表
         List<Long> courseScheduleIds = yesterdayCourseSchedules.stream().map(CourseSchedule::getId).collect(Collectors.toList());
         if (CollectionUtils.isEmpty(courseScheduleIds)) {
@@ -581,14 +591,14 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
             teacherClassMinutesMap.put(teacherId, schoolClassMinutesMap);
         });
         //用户账户自己变动信息列表
-        List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
+//        List<SysUserCashAccountDetail> userCashAccountDetails = new ArrayList<>();
         //计算课酬
         courseScheduleTeacherSalaries.forEach(courseScheduleTeacherSalary -> {
-            TeacherAttendance teacherAttendanceInfo = teacherAttendanceDao.findByTeacherAttendanceInfo(courseScheduleTeacherSalary.getUserId().longValue(), courseScheduleTeacherSalary.getCourseScheduleId());
+            /*TeacherAttendance teacherAttendanceInfo = teacherAttendanceDao.findByTeacherAttendanceInfo(courseScheduleTeacherSalary.getUserId().longValue(), courseScheduleTeacherSalary.getCourseScheduleId());
             if(Objects.isNull(teacherAttendanceInfo)
                 ||(Objects.isNull(teacherAttendanceInfo.getSignInTime())&&Objects.isNull(teacherAttendanceInfo.getSignOutTime()))){
                 return;
-            }
+            }*/
             boolean durationIsChange = false;
             //当前课酬对应的课程信息
             CourseSchedule courseSchedule = courseScheduleIdMap.get(courseScheduleTeacherSalary.getCourseScheduleId());
@@ -751,13 +761,17 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
 
         onlineTeacherSalary=classGroupTeacherSalary.getOnlineClassesSalary();
         if(Objects.isNull(onlineTeacherSalary)){
-            onlineTeacherSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary();
+            onlineTeacherSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
         }
         offlineTeacherSalary=classGroupTeacherSalary.getSalary();
         if(Objects.isNull(offlineTeacherSalary)){
             offlineTeacherSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
         }
 
+        if(Objects.isNull(onlineTeacherSalary)||Objects.isNull(offlineTeacherSalary)){
+            throw new BizException("教师课酬异常");
+        }
+
         VipGroupCategory vipGroupCategory = vipGroupCategoryDao.get(vipGroup.getVipGroupCategoryId().intValue());
 
         BigDecimal studentNumDecimal = new BigDecimal(studentNum);
@@ -997,7 +1011,7 @@ public class CourseScheduleTeacherSalaryServiceImpl extends BaseServiceImpl<Long
         BigDecimal totalSalary = BigDecimal.ZERO;
         for (CourseTeacherSalaryStatisticsDto teacherMonthSalary : teacherMonthSalarys) {
             if(Objects.nonNull(teacherMonthSalary.getTotalReduceSalary())){
-                teacherMonthSalary.setTotalActualSalary(teacherMonthSalary.getTotalReduceSalary().subtract(teacherMonthSalary.getTotalReduceSalary()));
+                teacherMonthSalary.setTotalActualSalary(teacherMonthSalary.getTotalActualSalary().subtract(teacherMonthSalary.getTotalReduceSalary()));
             }
             totalSalary = totalSalary.add(teacherMonthSalary.getTotalActualSalary());
         }

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

@@ -487,22 +487,23 @@ public class StudentAttendanceServiceImpl extends BaseServiceImpl<Long, StudentA
 		if(signStatusEnum == SignStatusEnum.SIGN_IN && studentAttendance.getSignInTime() == null){
 			//判断是否在签到时间段内(课程开始前20~结束前)
 //			int advanceSignMinutes = Integer.parseInt(sysConfigDao.findConfigValue(SysConfigService.ADVANCE_SIGN_IN_MINUTES));
-			String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
-			String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
-			String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+//			String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
+//			String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
+//			String endClassTime = DateUtil.format(courseSchedule.getEndClassTime(), DateUtil.EXPANDED_TIME_FORMAT);
 			//上课时间
-			Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-			Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
-			Date addMinutes = DateUtil.addMinutes(classStartDateTime, -60);
+//			Date classStartDateTime = DateUtil.stringToDate(classDate + " " + startClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+//			Date classEndDateTime = DateUtil.stringToDate(classDate + " " + endClassTime, DateUtil.EXPANDED_DATE_TIME_FORMAT);
+//			Date addMinutes = DateUtil.addMinutes(classStartDateTime, -60);
 			//课程结束前进入,算正常
-			if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
-				studentAttendance.setStatus(statusEnum);
-				studentAttendance.setSignInTime(date);
+			studentAttendance.setStatus(statusEnum);
+			studentAttendance.setSignInTime(date);
 
-				courseSchedule.setUpdateTime(date);
+			courseSchedule.setUpdateTime(date);
 //				courseSchedule.setStudentNum((courseSchedule.getStudentNum() == null?0:courseSchedule.getStudentNum()) + 1);
-				courseScheduleDao.update(courseSchedule);
-			}
+			courseScheduleDao.update(courseSchedule);
+			/*if(DateUtil.minutesBetween(addMinutes,date) >= 0 && DateUtil.minutesBetween(date,classEndDateTime) > 0){
+
+			}*/
 		}else if(signStatusEnum == SignStatusEnum.SIGN_OUT){
 			String classDate = DateUtil.format(courseSchedule.getClassDate(), DateUtil.DEFAULT_PATTERN);
 			String startClassTime = DateUtil.format(courseSchedule.getStartClassTime(), DateUtil.EXPANDED_TIME_FORMAT);

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

@@ -267,7 +267,7 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         studentRepair.setContactMobile(repairInfo.getContactMobile());
         studentRepair.setAddress(repairInfo.getAddress());
         studentRepair.setUpdateTime(date);
-        studentRepairDao.update(repairInfo);
+        studentRepairDao.update(studentRepair);
 
         String channelType = "";
 
@@ -370,6 +370,9 @@ public class StudentRepairServiceImpl extends BaseServiceImpl<Integer, StudentRe
         if (repairInfo == null) {
             throw new BizException("维修单不存在");
         }
+        if(repairInfo.getPayStatus().equals(2)){
+            return true;
+        }
 
         Integer userId = studentPaymentOrder.getUserId();
 

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

@@ -1,19 +1,15 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.ExtracurricularExercisesReplyDao;
-import com.ym.mec.biz.dal.dao.StudentCourseHomeworkDao;
-import com.ym.mec.biz.dal.dao.StudentDao;
-import com.ym.mec.biz.dal.dao.StudentExtracurricularExercisesSituationDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.StudentServeCourseHomeworkDto;
 import com.ym.mec.biz.dal.dto.StudentServeDto;
 import com.ym.mec.biz.dal.dto.StudentServiceHomeworkDto;
-import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
-import com.ym.mec.biz.dal.entity.Student;
-import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.service.StudentServeService;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -37,6 +33,10 @@ import java.util.stream.Collectors;
 public class StudentServeServiceImpl implements StudentServeService {
 
     @Autowired
+    private CourseScheduleDao courseScheduleDao;
+    @Autowired
+    private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+    @Autowired
     private StudentDao studentDao;
     @Autowired
     private StudentCourseHomeworkDao studentCourseHomeworkDao;
@@ -109,7 +109,7 @@ public class StudentServeServiceImpl implements StudentServeService {
                     continue;
                 }
                 long count = haveCourseStudents.stream().filter(e -> (GroupType.PRACTICE.equals(e.getGroupType()) ||
-                        (GroupType.MUSIC.equals(e.getGroupType()) && TeachModeEnum.OFFLINE.equals(e.getTeachMode())))
+                        GroupType.VIP.equals(e.getGroupType()))
                         &&nextMonday.after(e.getCourseStartTime())).count();
                 if(count>0){
                     haveClassStudentIds.add(studentCoursesEntry.getKey());
@@ -127,7 +127,30 @@ public class StudentServeServiceImpl implements StudentServeService {
 
             if (!CollectionUtils.isEmpty(allServeStudentIds)){
                 List<StudentServeCourseHomeworkDto> studentHomeworks = studentCourseHomeworkDao.findStudentHomeworkWithCourseDateRange(monDayDate.toString(), sunDayDate.toString(), new ArrayList<>(allServeStudentIds));
-                studentHomeworkMap = studentHomeworks.stream().filter(h -> DateUtil.daysBetween(h.getCourseStartTime(), h.getHomeworkCreateTime())<3).collect(Collectors.groupingBy(StudentServeCourseHomeworkDto::getUserId));
+                List<StudentServeCourseHomeworkDto> studentHomeworksTmp =new ArrayList<>();
+                for (StudentServeCourseHomeworkDto studentHomework : studentHomeworks) {
+                    LocalDate courseStartLocalDate = LocalDateTime.ofInstant(studentHomework.getCourseStartTime().toInstant(), DateUtil.zoneId).toLocalDate();
+                    switch (courseStartLocalDate.getDayOfWeek()){
+                        case SATURDAY:
+                            if(DateUtil.daysBetween(studentHomework.getCourseStartTime(), studentHomework.getHomeworkCreateTime())<4){
+                                studentHomeworksTmp.add(studentHomework);
+                            }
+                            break;
+                        case SUNDAY:
+                            if(DateUtil.daysBetween(studentHomework.getCourseStartTime(), studentHomework.getHomeworkCreateTime())<3){
+                                studentHomeworksTmp.add(studentHomework);
+                            }
+                            break;
+                        default:
+                            LocalDate homeworkCreateTime = LocalDateTime.ofInstant(studentHomework.getHomeworkCreateTime().toInstant(), DateUtil.zoneId).toLocalDate();
+                            if(courseStartLocalDate.get(DateUtil.weekFields.weekOfYear())==homeworkCreateTime.get(DateUtil.weekFields.weekOfYear())){
+                                studentHomeworksTmp.add(studentHomework);
+                            }
+                            break;
+                    }
+                }
+                studentHomeworkMap = studentHomeworksTmp.stream()
+                        .collect(Collectors.groupingBy(StudentServeCourseHomeworkDto::getUserId));
             }
 
             if(!CollectionUtils.isEmpty(allServeStudentIds)){
@@ -243,4 +266,48 @@ public class StudentServeServiceImpl implements StudentServeService {
             currentPage1=currentPage1.add(BigDecimal.ONE);
         }
     }
+
+    @Override
+    public Map<String, Object> checkeIsAssignHomework(Long courseScheduleId, String studentIdsStr) {
+        Map<String, Object> result=new HashMap<>();
+        if(Objects.isNull(courseScheduleId)&&Objects.isNull(studentIdsStr)){
+            result.put("isAssignHomework", 0);
+            return result;
+        }
+        List<Integer> studentIds=new ArrayList<>();
+        if(StringUtils.isNotBlank(studentIdsStr)){
+            studentIds= Arrays.asList(studentIdsStr.split(",")).stream().map(id->Integer.valueOf(id)).collect(Collectors.toList());
+        }
+
+        LocalDate localDate=LocalDate.now();
+
+        if(Objects.nonNull(courseScheduleId)){
+            CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
+            if(Objects.isNull(courseSchedule)){
+                result.put("isAssignHomework", 0);
+                return result;
+            }
+            localDate=LocalDateTime.ofInstant(courseSchedule.getClassDate().toInstant(), DateUtil.zoneId).toLocalDate();
+            List<CourseScheduleStudentPayment> courseScheduleStudentPayments = courseScheduleStudentPaymentDao.findByCourseSchedule(courseScheduleId);
+            if(CollectionUtils.isEmpty(courseScheduleStudentPayments)){
+                result.put("isAssignHomework", 0);
+                return result;
+            }
+            studentIds = courseScheduleStudentPayments.stream().map(CourseScheduleStudentPayment::getUserId).collect(Collectors.toList());
+        }
+
+        LocalDate monDayDate = localDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
+        LocalDate sunDayDate = localDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.SUNDAY.getValue());
+
+        Set<Integer> hss = studentCourseHomeworkDao.checkStudentHaveHomeworkInDateRange(monDayDate.toString(), sunDayDate.toString(), studentIds);
+        Set<Integer> ess = extracurricularExercisesReplyDao.checkStudentHaveExercisesInDateRange(monDayDate.toString(), sunDayDate.toString(), studentIds);
+        for (Integer studentId : studentIds) {
+            if(!hss.contains(studentId)&&!ess.contains(studentId)){
+                result.put("isAssignHomework", 1);
+                return result;
+            }
+        }
+        result.put("isAssignHomework", 0);
+        return result;
+    }
 }

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

@@ -21,6 +21,7 @@ import com.ym.mec.util.date.DateUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
@@ -74,10 +75,11 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 		return teacherAttendanceDao;
 	}
 
-	@Transactional(rollbackFor = Exception.class)
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
 	@Override
 	public Map<String, Object> addTeacherAttendanceRecord(TeacherSignOutDto teacherSignOutDto) {
 		SysUser user = sysUserFeignService.queryUserInfo();
+		teacherDao.getLocked(user.getId());
 		if(Objects.isNull(user)){
 			throw new BizException("请登录");
 		}
@@ -594,7 +596,8 @@ public class TeacherAttendanceServiceImpl extends BaseServiceImpl<Long, TeacherA
 	public void pushTeacherExceptionAttendanceTask() {
 		//获取前一天的日期
 		Date date = new Date();
-		String format = DateUtil.format(DateUtil.addDays(date,-1), DateUtil.DEFAULT_PATTERN);
+//		String format = DateUtil.format(DateUtil.addDays(date,-1), DateUtil.DEFAULT_PATTERN);
+		String format = DateUtil.format(date, DateUtil.DEFAULT_PATTERN);
 		Set<Integer> teacherId = teacherAttendanceDao.queryTeacherExceptionAttendance(format);
 		if(teacherId == null || teacherId.size() == 0){
 			return;

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

@@ -28,6 +28,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.time.DayOfWeek;
@@ -451,15 +452,18 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 			LocalDate nowDate = LocalDateTime.now(DateUtil.zoneId).toLocalDate();
 			LocalDate monDayDate = nowDate.with(DateUtil.weekFields.dayOfWeek(), DayOfWeek.MONDAY.getValue());
 			List<TeacherExercisesServiceDto> teacherExercisesServiceSituations = studentExtracurricularExercisesSituationDao.findTeacherExercisesServiceSituations(monDayDate.toString(), new ArrayList<>(teachers));
-			Map<Integer, TeacherExercisesServiceDto> teacherServiceMap = teacherExercisesServiceSituations.stream().collect(Collectors.toMap(TeacherExercisesServiceDto::getTeacherId, t -> t));
+			Map<Integer, TeacherExercisesServiceDto> teacherServiceMap = new HashMap<>();
+			if(!CollectionUtils.isEmpty(teacherExercisesServiceSituations)){
+				teacherServiceMap = teacherExercisesServiceSituations.stream().collect(Collectors.toMap(TeacherExercisesServiceDto::getTeacherId, t -> t));
+			}
 
 			Map<Integer,String> operatingStudentsNum = MapUtil.convertMybatisMap(studentDao.getTeacherOperatingStudentsNum(teacherIds));
 			Map<Integer,String> practiceStudentsNum = MapUtil.convertMybatisMap(studentDao.getBuyNums(teacherIds, GroupType.PRACTICE));
 			Map<Integer,String> vipStudentsNum = MapUtil.convertMybatisMap(studentDao.getBuyNums(teacherIds, GroupType.VIP));
 			Map<Integer,String> practiceAndVipStudentsNum = MapUtil.convertMybatisMap(studentDao.getPracticeAndVipNums(teacherIds));
 
-			rows.forEach(e->{
-//				e.setSubjectName(subjectDao.findBySubIds(e.getSubjectId()));
+			for (Teacher e : rows) {
+				e.setSubjectName(subjectDao.findBySubIds(e.getSubjectId()));
 				e.setOrganName(organNames.get(e.getTeacherOrganId()));
 				if(StringUtils.isNotEmpty(e.getSplitSubjectName())){
 					e.setSubjectName(Arrays.asList(e.getSplitSubjectName().split(",")));
@@ -488,8 +492,7 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 				}else {
 					e.setOperatingIndex(BigDecimal.ZERO);
 				}
-
-			});
+			}
 		}
 		return pageInfo;
 	}

+ 51 - 30
mec-biz/src/main/java/com/ym/mec/biz/service/impl/VipGroupServiceImpl.java

@@ -590,6 +590,12 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 				Map<String,Long> currentClassTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.countCourseScheduleNum(vipGroupIds,"VIP"));
 				Map<String,String> lastOverTimeMap = MapUtil.convertIntegerMap(courseScheduleDao.findLastOverTime(vipGroupIds));
 
+				List<Map<String, BigDecimal>> groupCoursesUnitPriceMaps = courseScheduleStudentPaymentDao.findGroupCoursesUnitPrice(GroupType.VIP, vipGroupIds);
+				Map<String,BigDecimal> groupCoursesUnitPrice=new HashMap<>();
+				if(!CollectionUtils.isEmpty(groupCoursesUnitPriceMaps)){
+					groupCoursesUnitPrice=MapUtil.convertIntegerMap(groupCoursesUnitPriceMaps);
+				}
+
 				Map<Integer, String> idNameMap=new HashMap<>();
 				if(!CollectionUtils.isEmpty(educationalTeacherIds)){
 					List<SimpleUserDto> educationalUsers = employeeDao.findByIds(educationalTeacherIds);
@@ -616,6 +622,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 					vipGroup.setEducationalTeacherName(idNameMap.get(vipGroup.getEducationalTeacherId()));
 
+					vipGroup.setCourseUnitPrice(groupCoursesUnitPrice.get(String.valueOf(vipGroup.getId())));
+
 					if(queryInfo.getIsExport()){
 						List<GroupUserDto> groupStudents = groupStudentsMap.get(vipGroup.getId().toString());
 						if(!CollectionUtils.isEmpty(groupStudents)){
@@ -967,21 +975,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		totalPrice=totalPrice.setScale(0,BigDecimal.ROUND_CEILING);
 		results.put("totalPrice",totalPrice);
 
-		Teacher teacher = teacherDao.get(teacherId);
-		if(!JobNatureEnum.FULL_TIME.equals(teacher.getJobNature())){
-			if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOnlineClassesSalary())){
-				results.put("onlineTeacherSalary", BigDecimal.ZERO);
-			}else{
-				results.put("onlineTeacherSalary", teacherDefaultVipGroupSalary.getOnlineClassesSalary());
-			}
-			if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
-				results.put("offlineTeacherSalary", BigDecimal.ZERO);
-			}else{
-				results.put("offlineTeacherSalary", teacherDefaultVipGroupSalary.getOfflineClassesSalary());
-			}
-			return results;
-		}
-
 		//教师课酬线上单课酬计算
 		if(Objects.nonNull(vipGroupSalarySettlementDto.getOnlineSalarySettlement())){
 			if(vipGroup instanceof VipGroupApplyBaseInfoDto&&!useDefaultTeacherSalary
@@ -992,17 +985,14 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(Objects.isNull(teacherOnlineSalary)){
 				switch (vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSalarySettlementType()){
 					case TEACHER_DEFAULT:
-						if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOnlineClassesSalary())){
+						if(Objects.isNull(teacherDefaultVipGroupSalary)||Objects.isNull(teacherDefaultVipGroupSalary.getOfflineClassesSalary())){
 							teacherOnlineSalary=new BigDecimal(0);
 						}else{
-							teacherOnlineSalary=teacherDefaultVipGroupSalary.getOnlineClassesSalary();
+							teacherOnlineSalary=teacherDefaultVipGroupSalary.getOfflineClassesSalary();
 						}
-//                        teacherOnlineSalary=teacherOnlineSalary.multiply(classTimeDuty);
 						results.put("onlineTeacherSalary",teacherOnlineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
 						break;
 					case RATIO_DISCOUNT:
-//						results.put("onlineTeacherSalary",onlineClassesUnitPrice.multiply((vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue())).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
-
 						results.put("onlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getOnlineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
 
 						break;
@@ -1036,8 +1026,6 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 						results.put("offlineTeacherSalary",teacherOfflineSalary.setScale(0, BigDecimal.ROUND_HALF_UP));
 						break;
 					case RATIO_DISCOUNT:
-//						results.put("offlineTeacherSalary",offlineClassesUnitPrice.multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
-
 						results.put("offlineTeacherSalary",totalPrice.multiply(new BigDecimal(vipGroupCategory.getStudentNum())).divide(totalClassNum, CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).multiply(vipGroupSalarySettlementDto.getOfflineSalarySettlement().getSettlementValue()).divide(new BigDecimal(100), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN).setScale(0,BigDecimal.ROUND_HALF_UP));
 
 						break;
@@ -1087,7 +1075,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			classGroup.setStudentNum(classGroup.getStudentNum()+num);
 		}
 
-		Integer studentPaymentNum=studentPaymentOrderDao.countStudentPaymentNum(vipGroupId.toString());
+//		Integer studentPaymentNum=studentPaymentOrderDao.countStudentPaymentNum(vipGroupId.toString());
+
+		Integer studentPaymentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
 
 		if(studentPaymentNum.equals(classGroup.getExpectStudentNum())&&updateVipStatus){
 			classGroup.setStudentNum(studentPaymentNum);
@@ -1540,6 +1530,9 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			classStudentMapperByUserIdAndClassGroupId.setStatus(ClassGroupStudentStatusEnum.QUIT);
 			classGroupStudentMapperDao.update(classStudentMapperByUserIdAndClassGroupId);
 			studentPauseInfoDao.deleteUserPauseInfoWithGroup(GroupType.VIP, vipGroupId.toString(), studentId);
+
+			classGroup.setStudentNum(classGroup.getStudentNum()-1);
+			classGroupDao.update(classGroup);
 			return;
         }
 		if(Objects.isNull(amount)){
@@ -1571,6 +1564,10 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			courseScheduleTeacherSalaryService.updateVipGroupCourseTeacherSalary(vipGroupId.intValue(), vipGroup.getUserId());
 		}
 
+		classGroup.setStudentNum(classGroup.getStudentNum()-1);
+
+        classGroupDao.update(classGroup);
+
 		//学员退出班级群
 		ImGroupMember[] imGroupMembers = new ImGroupMember[]{new ImGroupMember(studentId.toString())};
 		imFeignService.groupQuit(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, null));
@@ -1586,11 +1583,8 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroup)){
 			throw new BizException("指定的课程不存在");
 		}
-		if(vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL)){
-			throw new BizException("不能对已停止的课程进行此操作");
-		}
-		if(vipGroup.getStatus().equals(VipGroupStatusEnum.FINISHED)){
-			throw new BizException("此课程已结束");
+		if(!VipGroupStatusEnum.PROGRESS.equals(vipGroup.getStatus())){
+			throw new BizException("当前课程组状态非进行中,无法进行该操作");
 		}
 		List<StudentApplyRefunds> studentApplyRefunds = studentApplyRefundsDao.findByGroupAndUser(vipGroupId.toString(), GroupType.VIP.getCode(), studentId);
 		if(!CollectionUtils.isEmpty(studentApplyRefunds)){
@@ -2476,8 +2470,22 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		if(Objects.isNull(vipGroup)){
 			throw new BizException("未找到指定的vip课程");
 		}
+
 		ClassGroup classGroup = classGroupDao.findByVipGroup(vipGroupId, null);
 
+		if(classGroup.getExpectStudentNum()>1
+				&&(VipGroupStatusEnum.APPLYING.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.APPLYING_END.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.NOT_START.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.FINISHED.equals(vipGroup.getStatus())
+				||VipGroupStatusEnum.CANCEL.equals(vipGroup.getStatus()))){
+			throw new BizException("VIP课程组尚未成立,无法添加学员,请走学员购买流程!");
+		}
+
+		if(VipGroupStatusEnum.PAUSE.equals(vipGroup.getStatus())){
+			throw new BizException("当前课程组已经停止,无法进行添加学员操作。");
+		}
+
         Integer studentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
         if(studentNum.compareTo(classGroup.getExpectStudentNum())>=0){
             throw new BizException("该班级人数已达上限");
@@ -2542,6 +2550,18 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 			if(!CollectionUtils.isEmpty(classGroupStudentMappers)){
 				classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
 			}
+
+			Integer currentStudentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
+			if((!vipGroup.getStatus().equals(VipGroupStatusEnum.FINISHED)
+					||!vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL))
+					&&currentStudentNum.compareTo(classGroup.getExpectStudentNum())>=0){
+				vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
+				vipGroupDao.update(vipGroup);
+			}
+			classGroup.setStudentNum(currentStudentNum);
+			classGroup.setDelFlag(0);
+			classGroupDao.update(classGroup);
+
 			try {
 				ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
 				// 创建群组
@@ -2705,12 +2725,13 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 		VipGroupStatusEnum vipGroupStatus = vipGroup.getStatus();
 
         Integer currentStudentNum = classGroupStudentMapperDao.countClassGroupStudentNum(classGroup.getId());
-		if((!vipGroup.getStatus().equals(VipGroupStatusEnum.PAUSE)
+		if((!vipGroup.getStatus().equals(VipGroupStatusEnum.FINISHED)
 				||!vipGroup.getStatus().equals(VipGroupStatusEnum.CANCEL))
             &&currentStudentNum.compareTo(classGroup.getExpectStudentNum())>=0){
             vipGroup.setStatus(VipGroupStatusEnum.PROGRESS);
             vipGroupDao.update(vipGroup);
         }
+		classGroup.setStudentNum(currentStudentNum);
 		classGroup.setDelFlag(0);
 		classGroupDao.update(classGroup);
 		classGroupService.updateClassGroupInfo(classGroup.getId());
@@ -2875,7 +2896,7 @@ public class VipGroupServiceImpl extends BaseServiceImpl<Long, VipGroup> impleme
 
 	@Override
 	@Async
-	public void updateHistoryTeacherSalaryOfOnline(Date startDate, Date endDate) {
+	public void updateHistoryTeacherSalaryOfOnline(String startDate, String endDate) {
 		// 查询所有含有线上课的课程组,线上课节数,实付金额
 		List<VipCourseStudentInfoDto> list = vipGroupDao.queryVipCourseStudentInfo();
 		Map<String, VipCourseStudentInfoDto> map = list.stream().collect(Collectors.toMap(VipCourseStudentInfoDto::getMusicGroupId, e -> e));

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

@@ -625,7 +625,7 @@
         vg.id_,cg.id_
     </select>
     <select id="countGroupCourses" resultType="java.lang.Integer">
-        SELECT COUNT(DISTINCT mg.id_)
+        SELECT COUNT(DISTINCT cgtm.id_)
         FROM class_group_teacher_mapper cgtm
         LEFT JOIN music_group mg ON cgtm.music_group_id_ = mg.id_
         LEFT JOIN class_group cg ON cg.id_ = cgtm.class_group_id_

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

@@ -84,7 +84,7 @@
         WHERE teacher_role_ = 'BISHOP' AND music_group_id_ = #{groupId} AND group_type_ = #{groupType}
     </update>
     <update id="batchUpdateTeacherByClassId">
-      UPDATE class_group_teacher_mapper SET user_id_ = #{newTeacherId},update_time_ = NOW() WHERE class_group_id_ IN
+      UPDATE class_group_teacher_mapper SET user_id_ = #{newTeacherId},update_time_ = NOW() WHERE user_id_ = #{oldTeacherId} AND class_group_id_ IN
         <foreach collection="classGroupIds" item="item" open="(" close=")" separator=",">
             #{item}
         </foreach>

+ 83 - 46
mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml

@@ -53,8 +53,10 @@
         <result column="name_" property="classGroupName"/>
         <result column="type_" property="type" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result column="school_name_" property="schoolName"/>
-        <result column="sign_in_status_" property="signInStatusEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-        <result column="sign_out_status_" property="signOutStatusEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="sign_in_status_enum_" property="signInStatusEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="sign_out_status_enum_" property="signOutStatusEnum" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="sign_in_status_" property="signInStatus"/>
+        <result column="sign_out_status_" property="signOutStatus"/>
         <result column="sign_in_time_" property="signInTime"/>
         <result column="sign_out_time_" property="signOutTime"/>
         <result column="is_complaints_" property="isComplaints"/>
@@ -623,8 +625,10 @@
         cg.expect_student_num_,
         cs.schoole_id_,
         s.name_ school_name_,
-        if(ta.sign_in_status_ IS NULL,0,1) sign_in_status_,
-        if(ta.sign_out_status_ IS NULL,0,1) sign_out_status_,
+        IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_enum_,
+        IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_enum_,
+        IF(ta.sign_in_status_ IS NULL,0,1) sign_in_status_,
+        IF(ta.sign_out_status_ IS NULL,0,1) sign_out_status_,
         cs.teach_mode_
         FROM
         course_schedule_teacher_salary csts
@@ -703,8 +707,10 @@
                csts.teacher_role_,
                cs.schoole_id_,
                s.name_                                           school_name_,
-               IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_,
-               IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_,
+               IF(ta.sign_in_status_ IS NULL,3,ta.sign_in_status_) sign_in_status_enum_,
+               IF(ta.sign_out_status_ IS NULL,3,ta.sign_out_status_) sign_out_status_enum_,
+               IF(ta.sign_in_status_ IS NULL,0,1) sign_in_status_,
+               IF(ta.sign_out_status_ IS NULL,0,1) sign_out_status_,
                ta.is_complaints_,
                ta.sign_out_time_,
                ta.sign_in_time_,
@@ -1782,7 +1788,7 @@
                cs.leave_student_num_,
                cs.schoole_id_
         FROM course_schedule cs
-        WHERE cs.class_date_ &lt;= DATE_FORMAT(#{date}, '%Y-%m-%d')
+        WHERE cs.class_date_ BETWEEN #{startDate} AND #{endDate}
           AND cs.group_type_ = 'MUSIC'
           AND (cs.del_flag_ IS NULL OR cs.del_flag_ = 0)
     </select>
@@ -2255,24 +2261,24 @@
 
     <select id="endFindCourseSchedules" resultMap="CourseScheduleEndDto">
         SELECT
-            cs.id_,
-            cs.group_type_,
-            cs.music_group_id_,
-            cs.class_group_id_,
-            cs.status_,
-            cs.name_,
-            CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
-            CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
-            cs.actual_teacher_id_,
-            cs.teach_mode_,
-            cs.type_,
-            cs.schoole_id_,
-            s.name_ schoole_name_,
-            o.name_ organ_name_
+        cs.id_,
+        cs.group_type_,
+        cs.music_group_id_,
+        cs.class_group_id_,
+        cs.status_,
+        cs.name_,
+        CONCAT(cs.class_date_,' ',cs.start_class_time_) course_start_time_,
+        CONCAT(cs.class_date_,' ',cs.end_class_time_) course_end_time_,
+        cs.actual_teacher_id_,
+        cs.teach_mode_,
+        cs.type_,
+        cs.schoole_id_,
+        s.name_ schoole_name_,
+        o.name_ organ_name_
         FROM
-            course_schedule cs
-            LEFT JOIN school s ON cs.schoole_id_=s.id_
-            LEFT JOIN organization o ON cs.organ_id_=o.id_
+        course_schedule cs
+        LEFT JOIN school s ON cs.schoole_id_=s.id_
+        LEFT JOIN organization o ON cs.organ_id_=o.id_
         <include refid="endFindCourseSchedulesCondition"/>
         ORDER BY course_start_time_,cs.id_
         <include refid="global.limit"/>
@@ -2856,14 +2862,14 @@
     </resultMap>
     <select id="findCourseRate" resultMap="CourseScheduleRateDtoMap">
         SELECT cs.class_date_,
-               cs.start_class_time_,
-               cs.end_class_time_,
-               cs.id_,
-               cs.teaching_content_,
-               GROUP_CONCAT(cse.comment_ SEPARATOR ";") comment_,
-               cs.status_
+        cs.start_class_time_,
+        cs.end_class_time_,
+        cs.id_,
+        cs.teaching_content_,
+        GROUP_CONCAT(cse.comment_ SEPARATOR ";") comment_,
+        cs.status_
         FROM course_schedule cs
-                 LEFT JOIN course_schedule_evaluate cse ON cs.id_ = cse.course_schedule_id_
+        LEFT JOIN course_schedule_evaluate cse ON cs.id_ = cse.course_schedule_id_
         WHERE cs.group_type_ = #{groupType}
         <if test="groupId != null">
             AND cs.music_group_id_ = #{groupId}
@@ -3054,18 +3060,18 @@
     </select>
     <select id="countStudentVipCoursesWithDate" resultType="map">
         SELECT
-          cssp.user_id_ as 'key',
-          COUNT( cs.id_ ) as 'value'
+        cssp.user_id_ as 'key',
+        COUNT( cs.id_ ) as 'value'
         FROM
-            course_schedule_student_payment cssp
-            LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        course_schedule_student_payment cssp
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         WHERE
-            cssp.user_id_ IN
-            <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
-                #{studentId}
-            </foreach>
-            AND cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-            AND cs.class_date_ BETWEEN #{startTime} AND #{endTime}
+        cssp.user_id_ IN
+        <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+            #{studentId}
+        </foreach>
+        AND cssp.group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        AND cs.class_date_ BETWEEN #{startTime} AND #{endTime}
         GROUP BY
         cssp.user_id_
     </select>
@@ -3091,11 +3097,11 @@
 
     <select id="countStudentVipCoursesInFuture" resultType="map">
         SELECT
-          cssp.user_id_ as 'key',
-          COUNT( cs.id_ ) as 'value'
+        cssp.user_id_ as 'key',
+        COUNT( cs.id_ ) as 'value'
         FROM
-          course_schedule_student_payment cssp
-          LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+        course_schedule_student_payment cssp
+        LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
         WHERE
         cssp.user_id_ IN
         <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
@@ -3107,10 +3113,41 @@
         cssp.user_id_
     </select>
     <select id="queryNoStartCourseByTeacherId" resultMap="CourseSchedule">
-        SELECT cs.* FROM course_schedule cs
+        SELECT cs.id_,
+               cs.music_group_id_,
+               cs.group_type_,
+               cs.class_group_id_,
+               cs.status_,
+               cs.subsidy_,
+               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.teacher_id_,
+               cs.actual_teacher_id_,
+               cs.create_time_,
+               cs.update_time_,
+               cs.teach_mode_,
+               cs.type_,
+               cs.name_,
+               cs.student_num_,
+               cs.leave_student_num_,
+               cs.teaching_content_,
+               cs.note_,
+               cs.schoole_id_,
+               cs.organ_id_ FROM course_schedule cs
         LEFT JOIN course_schedule_teacher_salary csts ON csts.course_schedule_id_ = cs.id_
         WHERE FIND_IN_SET(cs.class_group_id_,#{classGroupIds}) AND csts.teacher_role_ = #{teacherRole}
         AND csts.user_id_ = #{teacherId} AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW() AND cs.del_flag_ = 0
     </select>
+    <select id="queryHasReatClass" resultType="java.util.Map">
+        SELECT cgtm.class_group_id_ 'key',CASE WHEN COUNT(cs.id_) > 0 THEN 1 ELSE 0 END 'value'
+        FROM class_group_teacher_mapper cgtm
+        LEFT JOIN course_schedule cs ON cs.class_group_id_ = cgtm.class_group_id_ AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW() AND cs.del_flag_ = 0
+        WHERE cgtm.user_id_ = #{teacherId} AND cgtm.group_type_ = 'MUSIC' AND cgtm.class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" separator="," open="(" close=")">
+            #{classGroupId}
+        </foreach>
+        GROUP BY cgtm.class_group_id_
+    </select>
 
 </mapper>

+ 16 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -464,4 +464,20 @@
 		SELECT cssp.open_play_midi_ FROM course_schedule_student_payment cssp
 		WHERE cssp.user_id_ = #{userId} AND cssp.course_schedule_id_ = #{courseScheduleId}
 	</select>
+
+    <select id="findGroupCoursesUnitPrice" resultType="java.util.Map">
+		SELECT
+			music_group_id_ AS 'key',
+			CONVERT ( SUM( expect_price_ ) / COUNT(DISTINCT course_schedule_id_ ), DECIMAL ( 10, 2 ) ) AS 'value'
+		FROM
+			course_schedule_student_payment
+		WHERE
+			group_type_ = #{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			AND music_group_id_ IN
+			<foreach collection="groupIds" item="groupId" separator="," open="(" close=")">
+				#{groupId}
+			</foreach>
+		GROUP BY
+			music_group_id_;
+	</select>
 </mapper>

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

@@ -273,8 +273,8 @@
 		LEFT JOIN vip_group vg ON vg.id_ = cs.music_group_id_
 		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
 		WHERE 1=1
-		<if test="days!=null">
-			AND cs.class_date_ &lt;= DATE_FORMAT(DATE_ADD( NOW( ), INTERVAL - #{days} DAY ),'%Y-%m-%d')
+		<if test="startDate != null">
+			AND cs.class_date_ BETWEEN #{startDate} AND #{endDate}
 		</if>
 		AND cs.group_type_ = 'VIP' AND vg.organ_id_ != 41
 		AND csts.settlement_time_ IS NULL
@@ -303,10 +303,10 @@
 		LEFT JOIN course_schedule cs ON cs.id_ = csts.course_schedule_id_
 		LEFT JOIN teacher_attendance ta ON ta.course_schedule_id_ = cs.id_
 		WHERE ta.id_ IS NOT NULL
-		<if test="days!=null">
-			AND cs.class_date_ &lt;= DATE_FORMAT(DATE_ADD( NOW( ), INTERVAL - #{days} DAY ),'%Y-%m-%d')
+		<if test="startDate != null">
+			AND cs.class_date_ BETWEEN #{startDate} AND #{endDate}
 		</if>
-		AND cs.type_ = #{groupType}
+		AND cs.type_ = 'PRACTICE'
 		AND csts.settlement_time_ IS NULL
 		AND (cs.del_flag_ IS NULL OR cs.del_flag_=0)
     </select>
@@ -477,8 +477,14 @@
 			#{id}
 		</foreach>
 	</update>
+    <update id="batchUpdateCourseSalarys">
+		UPDATE course_schedule_teacher_salary SET expect_salary_ = #{salary} WHERE course_schedule_id_ IN
+		<foreach collection="courseIds" item="courseId" separator="," open="(" close=")">
+			#{courseId}
+		</foreach>
+	</update>
 
-	<select id="findCourseScheduleTeacherSalaryByMusicGroupId" resultMap="CourseScheduleTeacherSalary">
+    <select id="findCourseScheduleTeacherSalaryByMusicGroupId" resultMap="CourseScheduleTeacherSalary">
 		SELECT * FROM course_schedule_teacher_salary WHERE music_group_id_=#{musicGroupId} AND group_type_ = #{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
 	</select>
 	<select id="countActualAmount" resultType="java.util.Map">
@@ -632,7 +638,8 @@
 		CASE WHEN t.job_nature_ = 'PART_TIME' THEN '兼职' WHEN t.job_nature_ = 'FULL_TIME' THEN '全职' ELSE '零时工' END jobType,
 		CASE WHEN cs.type_ = 'SINGLE' THEN '单技课' WHEN cs.type_ = 'MIX' THEN '合奏课' WHEN cs.type_ = 'HIGH' THEN '小班课'  WHEN cs.type_ = 'VIP' THEN 'vip课'
 		WHEN cs.type_ = 'DEMO' THEN '试听课'  WHEN cs.type_ = 'COMPREHENSIVE' THEN '综合课'  WHEN cs.type_ = 'PRACTICE' THEN '练习课'  WHEN cs.type_ = 'ENLIGHTENMENT' THEN '启蒙课'
-		WHEN cs.type_ = 'TRAINING_SINGLE' THEN '集训单技课'  WHEN cs.type_ = 'TRAINING_MIX' THEN '集训合奏课'  ELSE '课堂课' END courseScheduleType,
+		WHEN cs.type_ = 'TRAINING_SINGLE' THEN '集训单技课'  WHEN cs.type_ = 'TRAINING_MIX' THEN '集训合奏课' WHEN cs.type_ = 'CLASSROOM' THEN '课堂课'
+		WHEN cs.type_ = 'COMM' THEN '对外课程'  WHEN cs.type_ = 'HIGH_ONLINE' THEN '线上基础技能课'  ELSE '乐团网管课' END courseScheduleType,
 		cs.class_date_ classDate,cs.start_class_time_ courseScheduleStartTime,cs.end_class_time_ courseScheduleEndTime,
 		ROUND((UNIX_TIMESTAMP(cs.end_class_time_)-UNIX_TIMESTAMP(cs.start_class_time_))/60) signCourseScheduleTime,
 		ts.actual_salary_ price,CASE WHEN s.name_ IS NULL THEN '网络教室' ELSE s.name_ END address,
@@ -959,4 +966,12 @@
 			#{courseScheduleId}
 		</foreach>
 	</select>
+    <select id="queryTeacherByTeaching" resultType="java.lang.Integer">
+		SELECT DISTINCT cgtm.user_id_ FROM class_group_teacher_mapper cgtm
+		WHERE cgtm.class_group_id_ = #{classGroupId} AND cgtm.teacher_role_ = 'TEACHING' AND cgtm.group_type_ = 'MUSIC';
+	</select>
+    <select id="queryTeacherByBishop" resultType="java.lang.Integer">
+		SELECT DISTINCT cgtm.user_id_ FROM class_group_teacher_mapper cgtm
+		WHERE cgtm.class_group_id_ = #{classGroupId} AND cgtm.teacher_role_ = 'BISHOP' AND cgtm.group_type_ = 'MUSIC';
+	</select>
 </mapper>

+ 13 - 0
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml

@@ -490,4 +490,17 @@
 			DATE_FORMAT( eer.create_time_, '%Y-%m-%d' ) BETWEEN #{startDate} AND #{endDate}
 	</select>
 
+	<select id="checkStudentHaveExercisesInDateRange" resultType="java.lang.Integer">
+		SELECT
+			DISTINCT user_id_
+		FROM
+			extracurricular_exercises_reply
+		WHERE
+			DATE_FORMAT( create_time_, '%Y-%m-%d' ) BETWEEN #{startDate} AND #{endDate}
+			AND user_id_ IN
+			<foreach collection="studentIds" item="studentId" open="(" close=")" separator=",">
+				#{studentId}
+			</foreach>
+	</select>
+
 </mapper>

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

@@ -72,6 +72,9 @@
             <if test="memo!=null">
                 memo_=#{memo},
             </if>
+            <if test="userId != null">
+                user_id_ = #{userId},
+            </if>
             <if test="name!=null">
                 name_=#{name},
             </if>
@@ -180,12 +183,10 @@
     </select>
     <select id="findAllByOrgan" resultMap="PracticeGroupDto">
         SELECT pg.*,
-        su.real_name_ teacher_name_,
-        CASE WHEN COUNT(cs.id_) > 0 THEN 1 ELSE 0 END hasRestClass
+        su.real_name_ teacher_name_
         FROM
         practice_group pg
         LEFT JOIN sys_user su ON pg.user_id_ = su.id_
-        LEFT JOIN course_schedule cs ON (FIND_IN_SET(cs.music_group_id_,pg.id_) AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW() AND cs.group_type_ = 'PRACTICE')
         <include refid="practiceGroupQueryCondition"/>
         GROUP BY pg.id_ ORDER BY pg.id_ DESC
         <include refid="global.limit"/>
@@ -269,9 +270,6 @@
             <if test="groupStatus != null and groupStatus != ''">
                 AND pg.group_status_ = #{groupStatus}
             </if>
-            <if test="groupStatus == null or groupStatus == ''">
-                AND pg.group_status_ IN ('NORMAL', 'FINISH')
-            </if>
             <if test="organId != null">
                 AND FIND_IN_SET(pg.organ_id_,#{organId})
             </if>

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

@@ -364,6 +364,20 @@
                 #{studentId}
             </foreach>
     </select>
+    <select id="checkStudentHaveHomeworkInDateRange" resultType="java.lang.Integer">
+        SELECT
+            DISTINCT sch.user_id_
+        FROM
+            student_course_homework sch
+            LEFT JOIN course_schedule cs ON sch.course_schedule_id_ = cs.id_
+        WHERE
+            cs.class_date_ BETWEEN #{startDate}
+            AND #{endDate}
+            AND sch.user_id_ IN
+            <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+                #{studentId}
+            </foreach>
+    </select>
 
     <delete id="delByCourseScheduleId">
 		DELETE FROM student_course_homework WHERE course_schedule_id_ = #{courseScheduleId} 

+ 25 - 24
mec-biz/src/main/resources/config/mybatis/StudentExtracurricularExercisesSituationMapper.xml

@@ -194,42 +194,42 @@
 			</if>
 			<if test="submitStartDate==null or submitEndDate==null">
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					SUM( exercises_reply_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_reply_num_ ) &lt; SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					SUM( exercises_reply_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_reply_num_ ) &gt;= SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					SUM( exercises_message_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_num_ ) &lt; SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					SUM( exercises_message_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_num_ ) &gt;= SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					SUM( exercises_message_timely_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_timely_num_ ) &lt; SUM( exercises_message_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					SUM( exercises_message_timely_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_timely_num_ ) &gt;= SUM( exercises_message_num_ ) and
 				</if>
 			</if>
 			<if test="submitStartDate!=null and submitEndDate!=null">
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &lt; SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &gt;= SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &lt; SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &gt;= SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &lt; SUM( exercises_message_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &gt;= SUM( exercises_message_num_ ) and
 				</if>
 			</if>
 		</trim>
@@ -283,42 +283,42 @@
 			</if>
 			<if test="submitStartDate==null or submitEndDate==null">
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					SUM( exercises_reply_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_reply_num_ ) &lt; SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					SUM( exercises_reply_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_reply_num_ ) &gt;= SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					SUM( exercises_message_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_num_ ) &lt; SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					SUM( exercises_message_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_num_ ) &gt;= SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					SUM( exercises_message_timely_num_ ) &lt; SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_timely_num_ ) &lt; SUM( exercises_message_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					SUM( exercises_message_timely_num_ ) &gt;= SUM( expect_exercises_num_ ) and
+					SUM( exercises_message_timely_num_ ) &gt;= SUM( exercises_message_num_ ) and
 				</if>
 			</if>
 			<if test="submitStartDate!=null and submitEndDate!=null">
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &lt; SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesReplyNumIsAchieve!=null and exercisesReplyNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_reply_num_,0)) &gt;= SUM( actual_exercises_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &lt; SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageNumIsAchieve!=null and exercisesMessageNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_num_,0)) &gt;= SUM( exercises_reply_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==0">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &lt; SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &lt; SUM( exercises_message_num_ ) and
 				</if>
 				<if test="exercisesMessageTimelyNumIsAchieve!=null and exercisesMessageTimelyNumIsAchieve==1">
-					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &gt;= SUM( expect_exercises_num_ ) and
+					SUM(IF(DATE_FORMAT(last_submit_time_, '%Y-%m-%d') BETWEEN #{submitStartDate} AND #{submitEndDate},exercises_message_timely_num_,0)) &gt;= SUM( exercises_message_num_ ) and
 				</if>
 			</if>
 		</trim>
@@ -337,6 +337,7 @@
 		COUNT( CASE WHEN actual_exercises_num_ = 1 THEN 1 ELSE NULL END ) actualExercisesNum
 		FROM
 		student_extracurricular_exercises_situation_
+		FORCE INDEX(monday_)
 		WHERE monday_ = #{monday}
 		AND teacher_id_ IN
 		<foreach collection="teacherIds" item="teacherId" open="(" close=")" separator=",">

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

@@ -115,10 +115,11 @@
         SELECT su.id_ user_id_,su.username_,su.gender_,su.phone_ parents_phone_,su.real_name_,
         su.birthdate_,su.nation_,su.organ_id_,
         CASE WHEN su.password_ IS NULL THEN 0 ELSE 1 END isActive_,
-        IF(st.service_tag_=2,0,st.service_tag_) service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_
+        IF(st.service_tag_=2,0,st.service_tag_) service_tag_,st.operating_tag_,tu.real_name_ teacher_name_,st.teacher_id_,suca.balance_
         FROM sys_user su
         LEFT JOIN student st ON st.user_id_ = su.id_
-        left join sys_user tu on tu.id_ = st.teacher_id_
+        LEFT JOIN sys_user tu ON tu.id_ = st.teacher_id_
+        LEFT JOIN sys_user_cash_account suca ON su.id_ = suca.user_id_
         <include refid="findStudentsByOrganIdSql"/>
         ORDER BY su.create_time_ DESC
         <include refid="global.limit"/>
@@ -273,7 +274,8 @@
                 AND sa.status_ = #{attendanceStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
             </if>
             <if test="attendanceStatus != null and attendanceStatus == @com.ym.mec.biz.dal.enums.StudentAttendanceStatusEnum@TRUANT">
-                AND (sa.status_ = #{attendanceStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} OR sa.status_ IS NULL)
+                AND (sa.status_ = #{attendanceStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+                OR (sa.status_ IS NULL AND cs.status_!='NOT_START'))
             </if>
             <if test="classGroupName!=null">
                 AND (cg.name_ LIKE CONCAT("%",#{classGroupName},"%") OR cs.name_ LIKE CONCAT("%",#{classGroupName},"%"))
@@ -294,7 +296,7 @@
             CONCAT(cs.class_date_," ",cs.end_class_time_) course_end_date_,
             cssp.course_schedule_id_,
             su.real_name_ teacher_name_,
-            IF(sa.status_ IS NULL,'TRUANT',sa.status_) status_,
+            IF(sa.status_ IS NULL AND cs.status_!='NOT_START','TRUANT',sa.status_) status_,
             sa.current_class_times_,
             cg.total_class_times_,
             cs.status_ courseStatus,
@@ -746,6 +748,7 @@
         <result property="organId" column="organ_id_"/>
         <result property="subjectName" column="music_group_subject_"/>
         <result property="courseBalance" column="course_balance_"/>
+        <result property="balance" column="balance_"/>
         <result property="serviceTag" column="service_tag_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="operatingTag" column="operating_tag_" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
         <result property="teacherName" column="teacher_name_"/>

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

@@ -450,6 +450,9 @@
         </foreach>
     </select>
     <select id="getServeStudentIds" resultType="int">
-        SELECT user_id_ FROM student WHERE service_tag_=1
+        SELECT user_id_
+        FROM student stu
+          LEFT JOIN sys_user su ON stu.user_id_=su.id_
+        WHERE service_tag_=1 AND su.del_flag_=0
     </select>
 </mapper>

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

@@ -29,6 +29,7 @@
         <result column="repair_status_" jdbcType="INTEGER" property="repairStatus"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
         <result column="update_time_" jdbcType="TIMESTAMP" property="updateTime"/>
+        <result column="username_" jdbcType="VARCHAR" property="studentName"/>
     </resultMap>
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="StudentRepair">
@@ -138,6 +139,7 @@
         <if test="search">
             AND (username_ LIKE CONCAT(#{search},'%') OR phone_ LIKE CONCAT(#{search},'%'))
         </if>
+        AND del_flag_ = 0
         <include refid="global.limit"/>
     </select>
 
@@ -148,11 +150,13 @@
         <if test="search">
             AND (username_ LIKE CONCAT(#{search},'%') OR phone_ LIKE CONCAT(#{search},'%'))
         </if>
+        AND del_flag_ = 0
     </select>
 
     <select id="queryPage" resultMap="StudentRepair">
-        SELECT sr.*,o.name_ FROM student_repair sr
+        SELECT sr.*,o.name_,su.username_ FROM student_repair sr
         LEFT JOIN organization o ON o.id_ = sr.organ_id_
+        LEFT JOIN sys_user su on sr.student_id_ = su.id_
         <include refid="queryPageSql"/>
         ORDER BY id_ DESC
         <include refid="global.limit"/>
@@ -160,7 +164,7 @@
     <sql id="queryPageSql">
         <where>
             <if test="search != null and search != ''">
-                AND (sr.trans_no_ LIKE CONCAT('%',#{search},'%') OR sr.student_id_ = #{search} OR sr.student_name_ LIKE
+                AND (sr.trans_no_ LIKE CONCAT('%',#{search},'%') OR sr.student_id_ = #{search} OR su.username_ LIKE
                 CONCAT('%',#{search},'%'))
             </if>
             <if test="employeeId != null">
@@ -193,7 +197,8 @@
         </where>
     </sql>
     <select id="queryCount" resultType="int">
-        SELECT COUNT(id_) FROM student_repair sr
+        SELECT COUNT(*) FROM student_repair sr
+        LEFT JOIN sys_user su on sr.student_id_ = su.id_
         <include refid="queryPageSql"/>
     </select>
 
@@ -214,7 +219,7 @@
                su.gender_,
                mg.id_     music_group_id_,
                mg.name_   music_group_name_,
-               sr.subject_id_
+               sr.actual_subject_id_ subject_id_
         FROM sys_user su
                  LEFT JOIN student_registration sr ON sr.user_id_ = su.id_
                  LEFT JOIN music_group mg ON mg.id_ = sr.music_group_id_

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

@@ -210,7 +210,7 @@
 
     <sql id="queryCondition">
         <where>
-            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL)
+            (cs.del_flag_ != 1 OR cs.del_flag_ IS NULL) AND cs.actual_teacher_id_ = ta.teacher_id_
             <if test="teacherId != null">
                 AND cs.actual_teacher_id_ = #{teacherId}
             </if>
@@ -459,7 +459,7 @@
     <select id="queryTeacherExceptionAttendance" resultType="java.lang.Integer">
         SELECT DISTINCT ta.teacher_id_ FROM teacher_attendance ta
         LEFT JOIN course_schedule cs ON cs.id_ = ta.course_schedule_id_
-        WHERE cs.class_date_ = #{format} AND ta.teacher_id_ = cs.actual_teacher_id_
+        WHERE cs.class_date_ = #{format} AND ta.teacher_id_ = cs.actual_teacher_id_ AND CONCAT(cs.class_date_,' ',cs.end_class_time_) &lt; NOW()
         AND (ta.sign_in_status_ IS NULL OR ta.sign_in_status_ = 0 OR ta.sign_out_status_ IS NULL OR ta.sign_out_status_ = 0)
     </select>
     <resultMap id="TeacherAttendanceComplaintsDtoMap" type="com.ym.mec.biz.dal.dto.TeacherAttendanceComplaintsDto">
@@ -500,7 +500,7 @@
         <where>
             cs.actual_teacher_id_ = ta.teacher_id_ AND ta.is_complaints_ = 1
             <if test="organId != null and organId != ''">
-                AND t.organ_id_ = #{organId}
+                AND FIND_IN_SET(t.organ_id_, #{organId})
             </if>
             <if test="complaintsTime != null and complaintsTime != ''">
                 AND ta.complaints_time_ = #{complaintsTime}
@@ -582,4 +582,10 @@
     <delete id="deleteByGroup">
         DELETE FROM teacher_attendance WHERE music_group_id_=#{groupId} AND group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
     </delete>
+    <delete id="deleteByCourseAndTeacherId">
+        DELETE FROM teacher_attendance WHERE teacher_id_ = #{teacherId} AND course_schedule_id_ IN
+        <foreach collection="courseScheduleIds" item="courseScheduleId" open="(" close=")" separator=",">
+            #{courseScheduleId}
+        </foreach>
+    </delete>
 </mapper>

+ 1 - 1
mec-gateway/mec-gateway-web/pom.xml

@@ -55,7 +55,7 @@
 			<groupId>org.springframework.boot</groupId>
 			<artifactId>spring-boot-starter-security</artifactId>
 		</dependency>
-	</dependencies>
+    </dependencies>
 
 	<build>
 		<plugins>

+ 1 - 0
mec-im/src/main/java/com/ym/common/DisplayEnum.java

@@ -12,4 +12,5 @@ public enum DisplayEnum {
     WhiteBoard,//2
     Screen,//3
     None, //4
+    STUDENT, //4
 }

+ 3 - 1
mec-im/src/main/java/com/ym/controller/RoomController.java

@@ -95,7 +95,7 @@ public class RoomController{
     @RequestMapping(value = "/display", method = RequestMethod.POST)
     public Object display(@RequestBody ReqDisplayData data)
             throws ApiException, Exception {
-        boolean result = roomService.display(data.getRoomId(), data.getType(), data.getUri());
+        boolean result = roomService.display(data.getRoomId(), data.getType(), data.getUri(),data.getUserId());
         return new BaseResponse<>(result);
     }
 
@@ -147,6 +147,8 @@ public class RoomController{
             result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.Microphone, data.getMicrophoneOn());
         } else if (data.getMusicModeOn() != null) {
             result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.MusicMode, data.getMusicModeOn());
+        } else if (data.getHandUpOn() != null) {
+            result = roomService.controlDevice(data.getRoomId(), data.getUserId(), DeviceTypeEnum.HandUp, data.getHandUpOn());
         } else {
             throw new ApiException(ErrorEnum.ERR_REQUEST_PARA_ERR);
         }

+ 5 - 0
mec-im/src/main/java/com/ym/dao/RoomMemberDao.java

@@ -64,6 +64,11 @@ public interface RoomMemberDao extends JpaRepository<RoomMember, Long> {
 
     @Transactional
     @Modifying
+    @Query(value = "update rongyun_room_member set mic=?3 where rid=?1 and uid=?2", nativeQuery = true)
+    public int updateHandByRidAndUid(String rid, String uid, boolean mic);
+
+    @Transactional
+    @Modifying
     @Query(value = "update rongyun_room_member set music_mode=?3 where rid=?1 and uid=?2", nativeQuery = true)
     public int updateMusicByRidAndUid(String rid, String uid, boolean musicMode);
 

+ 39 - 0
mec-im/src/main/java/com/ym/mec/im/message/MetronomeMessageMessage.java

@@ -0,0 +1,39 @@
+package com.ym.mec.im.message;
+
+import com.ym.mec.im.BaseMessage;
+import com.ym.pojo.CustomMessage;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * Created by weiqinxiao on 2019/3/6.
+ */
+public class MetronomeMessageMessage extends BaseMessage {
+    private CustomMessage content;
+    private static final transient String TYPE = "DY:PlayMidiMessage";
+
+    public MetronomeMessageMessage(CustomMessage content) {
+        this.content = content;
+    }
+
+    public CustomMessage getContent() {
+        return content;
+    }
+
+    public void setContent(CustomMessage content) {
+        this.content = content;
+    }
+
+    @Override
+    public String toString() {
+        return "{\"enable\":" + content.getEnable() +
+                ", \"customType\":" + content.getCustomType() +
+                ", \"rate\":" + content.getRate() +
+                ", \"userId\":" + (StringUtils.isEmpty(content.getUserId())?"\"\"":"\"" + content.getUserId() + "\"") +
+                '}';
+    }
+
+    @Override
+    public String getObjectName() {
+        return TYPE;
+    }
+}

+ 2 - 0
mec-im/src/main/java/com/ym/pojo/DeviceTypeEnum.java

@@ -7,4 +7,6 @@ public enum DeviceTypeEnum {
     Microphone,
     Camera,
     MusicMode,
+    HandUp,
+    PlayMidi,
 }

+ 9 - 0
mec-im/src/main/java/com/ym/pojo/ReqDeviceControlData.java

@@ -10,6 +10,7 @@ public class ReqDeviceControlData {
 	private Boolean cameraOn;
 	private Boolean microphoneOn;
 	private Boolean musicModeOn;
+	private Boolean handUpOn;
 	private String roomId;
 	private String userId;
 	private String ticket;
@@ -18,6 +19,14 @@ public class ReqDeviceControlData {
 		return musicModeOn;
 	}
 
+	public Boolean getHandUpOn() {
+		return handUpOn;
+	}
+
+	public void setHandUpOn(Boolean handUpOn) {
+		this.handUpOn = handUpOn;
+	}
+
 	public void setMusicModeOn(Boolean musicModeOn) {
 		this.musicModeOn = musicModeOn;
 	}

+ 1 - 0
mec-im/src/main/java/com/ym/pojo/RoomMember.java

@@ -24,6 +24,7 @@ public class RoomMember {
     private @Getter @Setter boolean camera = true;
     private @Getter @Setter boolean musicMode = true;
     private @Getter @Setter boolean mic = true;
+    private @Getter @Setter boolean hand = false;
 
     public RoomMember() {
     }

+ 2 - 0
mec-im/src/main/java/com/ym/pojo/RoomResult.java

@@ -32,6 +32,7 @@ public class RoomResult {
         Date joinTime;
         boolean camera;
         boolean microphone;
+        boolean handUp;
         CustomMessage playMidiJson;
     }
 
@@ -51,6 +52,7 @@ public class RoomResult {
             result.setMicrophone(member.isMic());
             result.setCamera(member.isCamera());
             result.setUserName(member.getName());
+            result.setHandUp(member.isHand());
             result.setPlayMidiJson(JSONObject.parseObject(midiMap.get(Integer.parseInt(member.getUid())),CustomMessage.class));
             members.add(result);
         }

+ 18 - 5
mec-im/src/main/java/com/ym/service/Impl/RoomServiceImpl.java

@@ -192,6 +192,7 @@ public class RoomServiceImpl implements RoomService {
             }
             userResult.setMicrophone(true);
             userResult.setCamera(!isDisableCamera);
+            userResult.setHandUp(false);
             userResult.setJoinTime(curTime);
             log.info("user join the room: roomId={} , userId={}, roleEnum={}, memCount: {}", roomId, userId, roleEnum, count);
         } else {
@@ -199,6 +200,7 @@ public class RoomServiceImpl implements RoomService {
             roleEnum = RoleEnum.getEnumByValue(roomMember.getRole());
 //            roomMemberDao.updateCameraByRidAndUid(roomId, userId, !isDisableCamera);
             userResult.setCamera(roomMember.isCamera());
+            userResult.setHandUp(roomMember.isHand());
             userResult.setJoinTime(roomMember.getJoinDt());
             log.info("user exist in the room: roomId={} , userId={}, use the last role={}", roomId, userId, roleEnum);
         }
@@ -577,7 +579,7 @@ public class RoomServiceImpl implements RoomService {
     }
 
     @Override
-    public Boolean display(String roomId, int type, String uri) throws ApiException, Exception {
+    public Boolean display(String roomId, int type, String uri, String targetUserId) throws ApiException, Exception {
         SysUser authUser = sysUserFeignService.queryUserInfo();
         String userId = authUser.getId().toString();
         log.info("display in room: {}, type = {}, uri = {}", roomId, type, uri);
@@ -625,11 +627,16 @@ public class RoomServiceImpl implements RoomService {
             DisplayMessage displayMessage = new DisplayMessage(display);
             imHelper.publishMessage(userId, roomId, displayMessage);
             log.info("change display to screen: roomId={}, display={}", roomId, display);
+        } else if (displayEnum.equals(DisplayEnum.STUDENT)) {
+            display += "?userId=" + targetUserId + "?uri=" + uri;
+            roomDao.updateDisplayByRid(roomId, display);
+            DisplayMessage displayMessage = new DisplayMessage(display);
+            imHelper.publishMessage(userId, roomId, displayMessage);
+            log.info("change display to screen: roomId={}, display={}", roomId, display);
         } else {
-            display += "?userId=" + "?uri=" + uri;
+            display += "?userId=" + userId + "?uri=" + uri;
 //            CheckUtils.checkArgument(uri != null, "uri must't be null");
 //            CheckUtils.checkArgument(whiteboardDao.findByRidAndWbid(roomId, uri).size() > 0, "whiteboard not exist");
-
             roomDao.updateDisplayByRid(roomId, display);
             DisplayMessage displayMessage = new DisplayMessage(display);
             imHelper.publishMessage(userId, roomId, displayMessage);
@@ -784,6 +791,8 @@ public class RoomServiceImpl implements RoomService {
                 roomMemberDao.updateCameraByRidAndUid(roomId, userId, false);
             } else if (typeEnum.equals(DeviceTypeEnum.Microphone)){
                 roomMemberDao.updateMicByRidAndUid(roomId, userId, false);
+            } else if (typeEnum.equals(DeviceTypeEnum.HandUp)){
+                roomMemberDao.updateHandByRidAndUid(roomId, userId, false);
             }else {
                 roomMemberDao.updateMusicByRidAndUid(roomId, userId, false);
             }
@@ -1406,9 +1415,13 @@ public class RoomServiceImpl implements RoomService {
         groupMessage.setTargetId(roomId.split(","));
         groupMessage.setSenderId(sysUser.getId().toString());
         groupMessage.setObjectName("DY:PlayMidiMessage");
-        messageService.groupSend(groupMessage);
-        //记录节拍器消息
         String userId = playMidiMessageData.getUserId();
+        DeviceStateChangedMessage deviceResourceMessage = new DeviceStateChangedMessage(DeviceTypeEnum.PlayMidi.ordinal(), customMessage.getEnable());
+        deviceResourceMessage.setUserId(userId);
+        imHelper.publishMessage(userId, roomId, deviceResourceMessage, 1);
+//        messageService.groupSend(groupMessage);
+        //记录节拍器消息
+
 //        long courseId = Long.parseLong(roomId.substring(1));
         courseScheduleStudentPaymentDao.adjustPlayMidi(Long.parseLong(roomId.substring(1)),userId,content);
         /*if(StringUtils.isEmpty(userId)){

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

@@ -23,7 +23,7 @@ public interface RoomService {
 
 
     //only teacher
-    public Boolean display(String roomId, int type, String uri) throws ApiException, Exception;
+    public Boolean display(String roomId, int type, String uri, String userId) throws ApiException, Exception;
 
     public String createWhiteBoard(String roomId) throws ApiException, Exception;
 

+ 1 - 1
mec-student/src/main/java/com/ym/mec/student/config/ResourceServerConfig.java

@@ -27,7 +27,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
 				.authorizeRequests().antMatchers("/v2/api-docs","/code/*","/register/*","/studentOrder/*","/musicGroup/getSubjectGoodsAndInfo",
 				"/musicGroup/getMusicGroupStatus","/musicGroup/getOrderStatus",
-				"/musicGroup/pay","/musicGroup/rePay","/studentManage/queryStudentPer","/sporadicChargeInfo/get","/sporadicChargeInfo/sporadicPay").permitAll().anyRequest().authenticated().and().httpBasic();
+				"/musicGroup/pay","/musicGroup/rePay","/studentManage/queryStudentPer","/sporadicChargeInfo/get","/sporadicChargeInfo/sporadicPay","/repair/getRepairInfo","/repair/payRepair").permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 
 	@Override

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

@@ -46,13 +46,16 @@ public class RepairController extends BaseController {
 
     @ApiOperation("获取维修记录详情")
     @GetMapping(value = "/getRepairInfo")
-    public HttpResponseResult getRepairInfo(Integer id) {
+    public HttpResponseResult getRepairInfo(Integer id,Integer studentId) {
         SysUser sysUser = sysUserFeignService.queryUserInfo();
-        if (sysUser == null) {
+        if ((sysUser == null || sysUser.getId() ==null) && studentId == null) {
             return failed("用户信息获取失败");
         }
+        if(sysUser.getId() != null){
+            studentId = sysUser.getId();
+        }
         StudentRepair repairInfo = studentRepairService.getRepairInfo(id);
-        if (!repairInfo.getStudentId().equals(sysUser.getId())) {
+        if (!repairInfo.getStudentId().equals(studentId)) {
             return failed("您的维修记录不存在");
         }
         return succeed(repairInfo);

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

@@ -7,7 +7,9 @@ import com.ym.mec.biz.dal.entity.StudentCourseHomeworkReply;
 import com.ym.mec.biz.dal.page.StudentCourseHomeworkReplyQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesMessageService;
 import com.ym.mec.biz.service.StudentCourseHomeworkReplyService;
+import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -31,6 +33,8 @@ public class TeacherCourseHomeworkReplyController extends BaseController {
     @Autowired
     private StudentCourseHomeworkReplyService studentCourseHomeworkReplyService;
     @Autowired
+    private StudentServeService studentServeService;
+    @Autowired
     private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "新增回复")
@@ -90,4 +94,10 @@ public class TeacherCourseHomeworkReplyController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "检测是否都布置了作业")
+    @GetMapping("/checkeIsAssignHomework")
+    public HttpResponseResult checkeIsAssignHomework(Long courseScheduleId, String studentIds){
+        return succeed(studentServeService.checkeIsAssignHomework(courseScheduleId, studentIds));
+    }
+
 }

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

@@ -47,7 +47,7 @@ public class CourseScheduleTeacherSalaryController extends BaseController {
     }
     
     @GetMapping("/updateHistoryTeacherSalaryOfOnline")
-    public Object updateHistoryTeacherSalaryOfOnline(Date startDate, Date endDate) {
+    public Object updateHistoryTeacherSalaryOfOnline(String startDate, String endDate) {
     	vipGroupService.updateHistoryTeacherSalaryOfOnline(startDate, endDate);
         return succeed();
     }

+ 46 - 21
mec-web/src/main/java/com/ym/mec/web/controller/ExportController.java

@@ -89,6 +89,7 @@ public class ExportController extends BaseController {
     @PostMapping("export/queryTeacherAttendances")
     @PreAuthorize("@pcs.hasPermissions('export/queryTeacherAttendances')")
     public void exportTeacherAttendances(HttpServletResponse response, TeacherCloseQueryInfo queryInfo) throws IOException {
+        queryInfo.setPage(1);
         queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -138,6 +139,7 @@ public class ExportController extends BaseController {
     @PostMapping("export/teacherSalaryComplaints")
     @PreAuthorize("@pcs.hasPermissions('export/teacherSalaryComplaints')")
     public void exportTeacherSalaryComplaints(HttpServletResponse response, TeacherSalaryModifyQueryInfo queryInfo) throws IOException {
+        queryInfo.setPage(1);
         queryInfo.setRows(49999);
         List<TeacherSalaryComplaints> rows = teacherSalaryComplaintsService.queryPage(queryInfo).getRows();
         OutputStream outputStream = response.getOutputStream();
@@ -169,6 +171,7 @@ public class ExportController extends BaseController {
     @PostMapping("export/studentBuyPractice")
     @PreAuthorize("@pcs.hasPermissions('export/studentBuyPractice')")
     public void studentBuyPractice(HttpServletResponse response, StudentBuyPracticeQueryInfo queryInfo) throws IOException {
+        queryInfo.setPage(1);
         queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -217,6 +220,7 @@ public class ExportController extends BaseController {
     @PostMapping("export/tenantPaymentOrder")
     @PreAuthorize("@pcs.hasPermissions('export/tenantPaymentOrder')")
     public void tenantPaymentOrder(HttpServletResponse response, TenantPaymentOrderQueryInfo queryInfo) throws IOException {
+        queryInfo.setPage(1);
         queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -251,7 +255,8 @@ public class ExportController extends BaseController {
     @PostMapping("export/teacherSalary")
     @PreAuthorize("@pcs.hasPermissions('export/teacherSalary')")
     public void teacherSalary(HttpServletResponse response, ExportTeacherSalaryQueryInfo queryInfo) throws IOException {
-        queryInfo.setRows(99999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -292,7 +297,8 @@ public class ExportController extends BaseController {
     @PostMapping("export/teacherCourseReward")
     @PreAuthorize("@pcs.hasPermissions('export/teacherCourseReward')")
     public void teacherCourseReward(HttpServletResponse response, TeacherCourseRewardQueryInfo queryInfo) throws IOException {
-        queryInfo.setRows(99999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -344,7 +350,8 @@ public class ExportController extends BaseController {
     @PostMapping("export/studentHasCourse")
     @PreAuthorize("@pcs.hasPermissions('export/studentHasCourse')")
     public void studentHasCourse(HttpServletResponse response, StudentManageQueryInfo queryInfo) throws IOException {
-        queryInfo.setRows(99999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -367,10 +374,10 @@ public class ExportController extends BaseController {
         OutputStream outputStream = response.getOutputStream();
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"分部", "学员编号", "学员姓名", "性别", "家长姓名",
-                    "家长联系电话", "是否激活", "是否有课", "是否有网管课", "课程余额(元)",
+                    "家长联系电话", "是否激活", "是否有课", "是否有网管课", "课程余额(元)", "账户余额(元)",
                     "所在乐团", "乐团所属声部", "所在乐团状态", "所在vip课", "所在VIP状态", "服务标签", "运营标签","指导老师"}, new String[]{
                     "organName", "userId", "username", "gender.description", "parentsName", "parentsPhone",
-                    "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg", "courseBalance", "musicGroupName",
+                    "isActive.msg", "hasCourse.msg", "hasPracticeCourse.msg", "courseBalance", "balance", "musicGroupName",
                     "subjectName", "musicGroupStatus", "vipGroupName", "vipGroupStatus", "serviceTag.msg", "operatingTag.msg","teacherName"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -397,7 +404,8 @@ public class ExportController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('export/practiceGroupList')")
     public void queryAll(HttpServletResponse response, PracticeGroupQueryInfo queryInfo) throws IOException {
         queryInfo.setIsExport(true);
-        queryInfo.setRows(999999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -450,7 +458,8 @@ public class ExportController extends BaseController {
     @GetMapping("export/vipGroupList")
     @PreAuthorize("@pcs.hasPermissions('export/vipGroupList')")
     public void queryAll(HttpServletResponse response, VipGroupQueryInfo queryInfo) throws IOException {
-        queryInfo.setRows(999999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         queryInfo.setIsExport(true);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -477,10 +486,10 @@ public class ExportController extends BaseController {
             });
         }
         try {
-            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"VIP编号", "课程名称", "课程状态", "指导老师", "指导老师", "班级人数", "先上课单价", "线下课单价",
+            HSSFWorkbook workbook = POIUtil.exportExcel(new String[]{"VIP编号", "课程名称", "课程状态", "指导老师", "指导老师", "班级人数", "课程单价",
                     "活动方案", "当前课次", "总课次", "剩余课次", "月消耗", "上次课时间", "开课时间", "结束时间", "申请时间", "学生姓名"}, new String[]{
-                    "id", "name", "status.msg", "userName", "educationalTeacherName", "studentNum", "onlineClassesUnitPrice",
-                    "offlineClassesUnitPrice", "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "subClassTimes", "monthConsumeRate", "lastOverTime",
+                    "id", "name", "status.msg", "userName", "educationalTeacherName", "studentNum", "courseUnitPrice",
+                    "vipGroupActivityName", "currentClassTimes", "totalClassTimes", "subClassTimes", "monthConsumeRate", "lastOverTime",
                     "courseStartDate", "coursesExpireDate", "registrationStartTime", "userInfo"}, rows);
             response.setContentType("application/octet-stream");
             response.setHeader("Content-Disposition", "attachment;filename=lender-" + DateUtil.getDate(new Date()) + ".xls");
@@ -505,7 +514,8 @@ public class ExportController extends BaseController {
     @GetMapping("export/superFindCourseSchedules")
     @PreAuthorize("@pcs.hasPermissions('export/superFindCourseSchedules')")
     public void superFindCourseSchedules(EndCourseScheduleQueryInfo queryInfo, HttpServletResponse response) throws IOException {
-        queryInfo.setRows(999999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         queryInfo.setIsExport(true);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -555,7 +565,8 @@ public class ExportController extends BaseController {
     @GetMapping("export/sporadicChargeInfo")
     @PreAuthorize("@pcs.hasPermissions('export/sporadicChargeInfo')")
     public void queryPage(SporadicChargeInfoQueryInfo queryInfo, HttpServletResponse response) throws IOException {
-        queryInfo.setRows(999999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         queryInfo.setIsExport(true);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
@@ -668,6 +679,8 @@ public class ExportController extends BaseController {
     @PostMapping(value = "studentRegistration/queryStudentApplyDetailExport")
     @PreAuthorize("@pcs.hasPermissions('studentRegistration/queryStudentApplyDetailExport')")
     public void queryStudentApplyDetailExport(StudentRegistrationQueryInfo queryInfo, HttpServletResponse response) throws IOException {
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         queryInfo.setIsExport(true);
         List<StudentApplyDetailDto> studentApplyDetail = studentRegistrationService.queryStudentDetailPage(queryInfo).getRows();
         OutputStream outputStream = response.getOutputStream();
@@ -697,6 +710,8 @@ public class ExportController extends BaseController {
     @RequestMapping("courseScheduleTeacherSalary/export")
     @PreAuthorize("@pcs.hasPermissions('courseScheduleTeacherSalary/export')")
     public void export(CourseScheduleTeacherSalaryQueryInfo queryInfo, HttpServletResponse response) throws IOException {
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         queryInfo.setIsExport(true);
         List<TeacherSalaryDto> teacherSalaries = courseScheduleTeacherSalaryService.querySalaries(queryInfo).getRows();
         OutputStream outputStream = response.getOutputStream();
@@ -735,7 +750,8 @@ public class ExportController extends BaseController {
                 queryInfo.setOrganId(employee.getOrganIdList());
             }
         }
-        queryInfo.setRows(999999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         queryInfo.setIsExport(true);
         Map<String, Object> params = new HashMap<String, Object>();
         MapUtil.populateMap(params, queryInfo);
@@ -826,6 +842,8 @@ public class ExportController extends BaseController {
                         row.setSporadicType("上门费");
                     } else if (row.getChargeType().equals(9)) {
                         row.setSporadicType("账户充值");
+                    } else if (row.getChargeType().equals(10)) {
+                        row.setSporadicType("乐保服务");
                     }
                 }
                 School userSchool = musicGroupDao.findUserSchool(row.getUserId());
@@ -888,7 +906,8 @@ public class ExportController extends BaseController {
     @PreAuthorize("@pcs.hasPermissions('export/musicGroupStudent')")
     public void queryMusicGroupStudent(MusicGroupStudentQueryInfo queryInfo, HttpServletResponse response) throws IOException {
         queryInfo.setIsExport(true);
-        queryInfo.setRows(99999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         PageInfo<MusicGroupStudentsDto> musicGroupStudentsDtoPageInfo = studentManageService.queryMusicGroupStudent(queryInfo);
         OutputStream outputStream = response.getOutputStream();
         try {
@@ -962,7 +981,8 @@ public class ExportController extends BaseController {
             queryInfo.setOrganId(employee.getOrganIdList());
         }
         queryInfo.setIsExport(1);
-        queryInfo.setRows(99999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         PageInfo<CourseReviewDto> practiceGroupReviews = courseReviewService.findPracticeGroupReviews(queryInfo);
         if (practiceGroupReviews.getTotal() <= 0) {
             response.setStatus(500);
@@ -1187,7 +1207,8 @@ public class ExportController extends BaseController {
     @GetMapping("export/extraExercisesReplys")
     @PreAuthorize("@pcs.hasPermissions('export/extraExercisesReplys')")
     public void extraExercisesReplys(ExtraExercilseReplyQueryInfo queryInfo, HttpServletResponse response) throws IOException {
-        queryInfo.setRows(999999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -1247,7 +1268,8 @@ public class ExportController extends BaseController {
     @GetMapping("export/exercisesSituations")
     @PreAuthorize("@pcs.hasPermissions('export/exercisesSituations')")
     public void exercisesSituations(StudentExercisesSituationQueryInfo queryInfo, HttpServletResponse response) throws IOException {
-        queryInfo.setRows(999999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -1301,7 +1323,8 @@ public class ExportController extends BaseController {
     @GetMapping("export/isSettlementCourseSalarys")
     @PreAuthorize("@pcs.hasPermissions('export/isSettlementCourseSalarys')")
     public void isSettlementCourseSalarys(CourseSalaryQueryInfo4Web queryInfo, HttpServletResponse response) throws IOException {
-        queryInfo.setRows(999999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -1353,7 +1376,7 @@ public class ExportController extends BaseController {
         try {
             HSSFWorkbook workbook = POIUtil.exportExcel(
                     new String[]{"分部", "课程组类型", "课程编号", "时间", "课程名称", "老师编号", "老师姓名", "签到时间", "签退时间",
-                            "实际收款", "应发课酬", "课酬扣款", "结算课酬", "状态", "备注"},
+                            "学员缴费", "应发课酬", "课酬扣款", "结算课酬", "状态", "备注"},
                     new String[]{"organName", "groupType.desc", "courseScheduleId", "startClassTime", "courseName", "teacherId", "teacherName",
                             "signInStatusStr", "signOutStatusStr", "actualReceipts", "actualSalary", "reduceSalary", "finalSalary", "confirmStatus.desc", "memo"}, rows);
             response.setContentType("application/octet-stream");
@@ -1379,7 +1402,8 @@ public class ExportController extends BaseController {
     @GetMapping("export/operatingStudents")
     @PreAuthorize("@pcs.hasPermissions('export/operatingStudents')")
     public void operatingStudents(StudentOperatingQueryInfo queryInfo, HttpServletResponse response) {
-        queryInfo.setRows(999999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         SysUser sysUser = sysUserFeignService.queryUserInfo();
         if (sysUser == null) {
             throw new BizException("用户信息获取失败");
@@ -1464,7 +1488,8 @@ public class ExportController extends BaseController {
             queryInfo.setOrganId(employee.getOrganIdList());
         }
         queryInfo.setIsExport(1);
-        queryInfo.setRows(99999);
+        queryInfo.setPage(1);
+        queryInfo.setRows(49999);
         PageInfo<CourseReviewDto> practiceGroupReviews = courseReviewService.getVipCourseReviews(queryInfo);
         if (practiceGroupReviews.getTotal() <= 0) {
             response.setStatus(500);

+ 31 - 0
mec-web/src/main/java/com/ym/mec/web/controller/education/EduRepairController.java

@@ -11,15 +11,21 @@ import com.ym.mec.biz.service.StudentRepairService;
 import com.ym.mec.biz.service.SubjectService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
+import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
 import java.util.Objects;
 
 @RequestMapping("eduRepair")
@@ -108,4 +114,29 @@ public class EduRepairController extends BaseController {
         return succeed(studentRepairService.getRepairInfo(id));
     }
 
+
+    @ApiOperation("获取维修列表")
+    @GetMapping(value = "/queryPage")
+    public HttpResponseResult queryPage(RepairStudentQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setEmployeeId(sysUser.getId());
+        Date endTime = queryInfo.getEndTime();
+        if(endTime != null){
+            queryInfo.setEndTime(DateUtil.addDays(endTime, 1));
+        }
+        queryInfo.setPayStatus(2);
+        return succeed(studentRepairService.queryPage(queryInfo));
+    }
+
+
+    @ApiOperation("维修完成")
+    @PostMapping(value = "/repairSuccess")
+    public HttpResponseResult repairSuccess(Integer id,String description,Integer repairStatus) {
+        studentRepairService.repairSuccess(id,description,repairStatus);
+        return succeed();
+    }
+
 }