Browse Source

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
Joburgess 5 years ago
parent
commit
57a08f025e
42 changed files with 1763 additions and 51 deletions
  1. 1 1
      cms/src/main/java/com/ym/mec/cms/controller/HelpCenterCatalogController.java
  2. 1 1
      cms/src/main/java/com/ym/mec/cms/controller/HelpCenterContentControlller.java
  3. 4 4
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  4. 6 0
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysUserDao.java
  5. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserLoginServiceImpl.java
  6. 2 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java
  7. 5 0
      mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml
  8. 41 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleReviewDao.java
  9. 31 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CoursesGroupDao.java
  10. 2 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java
  11. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  12. 162 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseReviewDto.java
  13. 29 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ReviewInfoDto.java
  14. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentCourseInfoDto.java
  15. 36 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassHeadInfo.java
  16. 294 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleReview.java
  17. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroup.java
  18. 66 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseReview4EduQueryInfo.java
  19. 133 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseReviewQueryInfo.java
  20. 59 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseReviewService.java
  21. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  22. 193 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseReviewServiceImpl.java
  23. 5 8
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleEvaluateServiceImpl.java
  24. 46 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  25. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/DemoGroupServiceImpl.java
  26. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  27. 6 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  28. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  29. 239 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleReviewMapper.xml
  30. 31 0
      mec-biz/src/main/resources/config/mybatis/CoursesGroupMapper.xml
  31. 18 11
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  32. 4 0
      mec-biz/src/main/resources/config/mybatis/SysTenantAccountMapper.xml
  33. 12 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  34. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/MusicGroupController.java
  35. 33 12
      mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java
  36. 2 2
      mec-task/src/main/java/com/ym/mec/task/jobs/PushNeedPostReportTask.java
  37. 85 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseReviewController.java
  38. 1 1
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysTenantAccountController.java
  39. 7 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  40. 69 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseReviewController.java
  41. 28 0
      mec-web/src/main/java/com/ym/mec/web/controller/CourseScheduleController.java
  42. 60 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/EduCourseReviewController.java

+ 1 - 1
cms/src/main/java/com/ym/mec/cms/controller/HelpCenterCatalogController.java

@@ -7,7 +7,7 @@ import io.swagger.annotations.ApiImplicitParams;
 import java.util.Date;
 import java.util.List;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.GetMapping;

+ 1 - 1
cms/src/main/java/com/ym/mec/cms/controller/HelpCenterContentControlller.java

@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiImplicitParam;
 
 import java.util.Date;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.GetMapping;

+ 4 - 4
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java

@@ -65,8 +65,8 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 	@Autowired
 	private ClientDetailsService clientDetailsService;
 
-//	@Value("${message.lesseeOrganId}")
-//	private Integer lesseeOrganId;
+	@Value("${auth.sysconfig.tenantId}")
+	private Integer tenantClientId;
 
 	@Autowired
 	private AuthorizationServerTokenServices defaultAuthorizationServerTokenServices;
@@ -141,11 +141,11 @@ public class BaseAuthenticationSuccessEventHandler extends SavedRequestAwareAuth
 			if (StringUtils.equalsIgnoreCase(clientId, "TEACHER")) {
 				// 查询老师所在分部
 				Integer organId = userFeignService.queryTeacherOrganId(sysUser.getId());
-				if (organId == 43) {
+				if (organId == tenantClientId) {
 					tenantId = "2";
 				}
 			} else if (StringUtils.equalsIgnoreCase(clientId, "STUDENT")) {
-				if (sysUser.getOrganId() == 43) {
+				if (sysUser.getOrganId() == tenantClientId) {
 					tenantId = "2";
 				}
 			}

+ 6 - 0
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/dal/dao/SysUserDao.java

@@ -66,4 +66,10 @@ public interface SysUserDao extends BaseDAO<Integer, SysUser> {
 	 * @return
 	 */
 	Integer getTeacherOrganId(Integer userId);
+
+	/**
+	 * 创建租户账户表
+	 * @param userId
+	 */
+    void insertSysTenantAccount(Integer userId);
 }

+ 1 - 1
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserLoginServiceImpl.java

@@ -3,7 +3,7 @@ package com.ym.mec.auth.service.impl;
 import java.util.Date;
 import java.util.List;
 
-import org.apache.commons.lang.time.DateUtils;
+import org.apache.commons.lang3.time.DateUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Propagation;

+ 2 - 2
mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java

@@ -35,10 +35,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 
 	@Autowired
 	private SysRoleMenuService sysRoleMenuService;
-
 	@Autowired
 	private ImFeignService imFeignService;
-	
 	@Autowired
 	private UserFeignService userFeignService;
 
@@ -154,6 +152,8 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 			//添加用户现金账户
 			imFeignService.register(new ImUserModel(sysUser.getId().toString(),phone,null));
 			userFeignService.createCashAccount(sysUser.getId());
+			//sysTenantAccount
+			sysUserDao.insertSysTenantAccount(sysUser.getId());
 			//创建teacher表
 			sysUserDao.insertTeacher(sysUser.getId(),lesseeOrganId);
 			return queryUserInfoByPhone(phone);

+ 5 - 0
mec-auth/mec-auth-server/src/main/resources/config/mybatis/SysUserMapper.xml

@@ -75,6 +75,11 @@
         INSERT INTO teacher
         (id_,organ_id_,create_time_,update_time_)VALUES(#{userId},#{lesseeOrganId},NOW(),NOW())
     </insert>
+    <insert id="insertSysTenantAccount">
+        INSERT INTO sys_tenant_account
+        (user_id_,available_minutes_,frozen_minutes_,status_,create_time_,update_time_)
+		VALUES(#{userId},0,0,1,NOW(),NOW())
+    </insert>
 
     <!-- 根据主键查询一条记录 -->
     <update id="update" parameterType="com.ym.mec.auth.api.entity.SysUser">

+ 41 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleReviewDao.java

@@ -0,0 +1,41 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.dto.CourseReviewDto;
+import com.ym.mec.biz.dal.entity.CourseScheduleReview;
+import com.ym.mec.common.dal.BaseDAO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface CourseScheduleReviewDao extends BaseDAO<Integer, CourseScheduleReview> {
+
+    /**
+     * 网管课评价列表
+     *
+     * @param params
+     * @return
+     */
+    List<CourseReviewDto> getPracticeGroupReviewList(Map<String, Object> params);
+
+    /**
+     * 网管课评价总条数
+     *
+     * @param params
+     * @return
+     */
+    Integer countPracticeGroupReviews(Map<String, Object> params);
+
+    /**
+     * 教务网管课评论列表
+     *
+     * @return
+     */
+    List<CourseScheduleReview> getPracticeGroupReview4EduList(Map<String, Object> params);
+
+    /**
+     * 教务网管课评论条数
+     *
+     * @return
+     */
+    Integer countPracticeGroupReviews4Edu(Map<String, Object> params);
+}

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

@@ -5,6 +5,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
 import java.util.List;
+import java.util.Map;
 
 public interface CoursesGroupDao extends BaseDAO<Long, CoursesGroup> {
 
@@ -16,5 +17,34 @@ public interface CoursesGroupDao extends BaseDAO<Long, CoursesGroup> {
      * @return java.util.List<com.ym.mec.biz.dal.entity.CoursesGroup>
      */
     List<CoursesGroup> findTeacherCourseGroups(@Param("teacherId") Integer teacherId);
-	
+
+    /**
+     * @describe 获取指定教师的课程组列表
+     * @author Joburgess
+     * @date 2020/3/8
+     * @return java.util.List<com.ym.mec.biz.dal.entity.CoursesGroup>
+     */
+    List<CoursesGroup> queryTeacherCourseGroups(Map<String, Object> params);
+
+    /**
+     * COUNT指定教师的课程组列表
+     * @param params
+     * @return
+     */
+    int countTeacherCourseGroups(Map<String, Object> params);
+
+    /**
+     * 获取冻结的课时
+     * @param groupIds
+     * @return
+     */
+    List<Map<Long, Long>> findFreezeMinutes(@Param("groupIds") List<Long> groupIds);
+
+    /**
+     * 获取已消耗的课时数
+     * @param groupIds
+     * @return
+     */
+    List<Map<Long, Long>> findConsumeMinutes(@Param("groupIds") List<Long> groupIds);
+
 }

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

@@ -191,10 +191,11 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
      * @param afterDate
      * @return
      */
-    List<CourseScheduleEvaluate> getNeedPostReportPracticeGroups(@Param("nowDate") Date nowDate, @Param("afterDate") Date afterDate);
+    List<CourseScheduleEvaluate> getNeedPostReportPracticeGroups(@Param("nowDate") Date nowDate, @Param("afterDate") Date afterDate, @Param("afterDateIsLastDay") boolean afterDateIsLastDay);
 
     /**
      * 获取报告的课次数
+     *
      * @param classGroupIds
      * @param startDate
      * @param endDate

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

@@ -390,4 +390,18 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @return
      */
     List<BasicUserDto> findCloseCourseStudentIds(@Param("teacherId") Integer teacherId,@Param("search") String search);
+
+    /**
+     * 获取学员相关的陪练课教务老师
+     * @param userId
+     * @return
+     */
+    Set<Integer> findPracticeEducationalTeacherId(Integer userId);
+
+    /**
+     * 获取学员相关的VIP课教务老师
+     * @param studentId
+     * @return
+     */
+    Set<Integer> findVipEducationalTeacherId(Integer studentId);
 }

+ 162 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseReviewDto.java

@@ -0,0 +1,162 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.Date;
+
+public class CourseReviewDto {
+
+    @ApiModelProperty(value = "分部id",required = false)
+    private Integer organId;
+
+    @ApiModelProperty(value = "分部名称",required = false)
+    private String organName;
+
+    @ApiModelProperty(value = "课程编号",required = false)
+    private Integer id;
+
+    @ApiModelProperty(value = "课程上课日期",required = false)
+    private Date classDate;
+
+    @ApiModelProperty(value = "课程名称",required = false)
+    private String courseName;
+
+    @ApiModelProperty(value = "声部id",required = false)
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "声部名称",required = false)
+    private String subjectName;
+
+    @ApiModelProperty(value = "老师名字",required = false)
+    private String teacherName;
+
+    @ApiModelProperty(value = "教务老师名字",required = false)
+    private String EduTeacherName;
+
+    @ApiModelProperty(value = "购买月数",required = false)
+    private Integer BuyMonths;
+
+    @ApiModelProperty(value = "评论id",required = false)
+    private Integer reviewId;
+
+    @ApiModelProperty(value = "学员评分",required = false)
+    private Integer studentReview;
+
+    @ApiModelProperty(value = "是否提交作业",required = false)
+    private Integer handHomework;
+
+    @ApiModelProperty(value = "教务评价",required = false)
+    private String courseReview;
+
+    public Integer getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(Integer organId) {
+        this.organId = organId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getEduTeacherName() {
+        return EduTeacherName;
+    }
+
+    public void setEduTeacherName(String eduTeacherName) {
+        EduTeacherName = eduTeacherName;
+    }
+
+    public Integer getBuyMonths() {
+        return BuyMonths;
+    }
+
+    public void setBuyMonths(Integer buyMonths) {
+        BuyMonths = buyMonths;
+    }
+
+    public Integer getReviewId() {
+        return reviewId;
+    }
+
+    public void setReviewId(Integer reviewId) {
+        this.reviewId = reviewId;
+    }
+
+    public Integer getStudentReview() {
+        return studentReview;
+    }
+
+    public void setStudentReview(Integer studentReview) {
+        this.studentReview = studentReview;
+    }
+
+    public Integer getHandHomework() {
+        return handHomework;
+    }
+
+    public void setHandHomework(Integer handHomework) {
+        this.handHomework = handHomework;
+    }
+
+    public String getCourseReview() {
+        return courseReview;
+    }
+
+    public void setCourseReview(String courseReview) {
+        this.courseReview = courseReview;
+    }
+
+    public Date getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(Date classDate) {
+        this.classDate = classDate;
+    }
+}

+ 29 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ReviewInfoDto.java

@@ -0,0 +1,29 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.CourseScheduleReview;
+import io.swagger.annotations.ApiModelProperty;
+
+public class ReviewInfoDto {
+
+    @ApiModelProperty(value = "课程信息",required = false)
+    private TeacherClassHeadInfo teacherClassHeadInfo;
+
+    @ApiModelProperty(value = "评价信息",required = false)
+    private CourseScheduleReview courseScheduleReview;
+
+    public TeacherClassHeadInfo getTeacherClassHeadInfo() {
+        return teacherClassHeadInfo;
+    }
+
+    public void setTeacherClassHeadInfo(TeacherClassHeadInfo teacherClassHeadInfo) {
+        this.teacherClassHeadInfo = teacherClassHeadInfo;
+    }
+
+    public CourseScheduleReview getCourseScheduleReview() {
+        return courseScheduleReview;
+    }
+
+    public void setCourseScheduleReview(CourseScheduleReview courseScheduleReview) {
+        this.courseScheduleReview = courseScheduleReview;
+    }
+}

+ 1 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentCourseInfoDto.java

@@ -5,7 +5,7 @@ import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.enums.TeachModeEnum;
 import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.ApiModelProperty;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 
 import java.math.BigDecimal;
 import java.util.Date;

+ 36 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassHeadInfo.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dto;
 
 import io.swagger.annotations.ApiModelProperty;
 
+import java.util.Date;
+
 /**
  * @Author Joburgess
  * @Date 2019/10/17
@@ -35,6 +37,16 @@ public class TeacherClassHeadInfo {
     @ApiModelProperty(value = "声部信息",required = false)
     private String subjectNames;
 
+    @ApiModelProperty(value = "上课日期",required = false)
+    private String classDate;
+
+    @ApiModelProperty(value = "上课时间",required = false)
+    private String startClassTime;
+
+    @ApiModelProperty(value = "下课时间",required = false)
+    private String endClassTime;
+
+
     public Integer getTotalClassTimes() {
         return totalClassTimes;
     }
@@ -106,4 +118,28 @@ public class TeacherClassHeadInfo {
     public void setSubjectNames(String subjectNames) {
         this.subjectNames = subjectNames;
     }
+
+    public String getStartClassTime() {
+        return startClassTime;
+    }
+
+    public void setStartClassTime(String startClassTime) {
+        this.startClassTime = startClassTime;
+    }
+
+    public String getEndClassTime() {
+        return endClassTime;
+    }
+
+    public void setEndClassTime(String endClassTime) {
+        this.endClassTime = endClassTime;
+    }
+
+    public String getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(String classDate) {
+        this.classDate = classDate;
+    }
 }

+ 294 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleReview.java

@@ -0,0 +1,294 @@
+package com.ym.mec.biz.dal.entity;
+
+import io.swagger.annotations.ApiModelProperty;
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+import java.util.Date;
+
+public class CourseScheduleReview {
+    /**
+    * 评价id
+    */
+    private Integer id;
+
+    /**
+    * 课程id
+    */
+    @ApiModelProperty(value = "课程编号",required = false)
+    private Integer courseScheduleId;
+
+    /**
+    * 班级id
+    */
+    private Integer classGroupId;
+
+    /**
+    * 老师id
+    */
+    private Integer teacherId;
+
+    /**
+    * 教务老师id
+    */
+    private Integer educationalTeacherId;
+
+    /**
+    * 学生id
+    */
+    private Integer studentId;
+
+    /**
+    * 教材内容
+    */
+    private String teachingMaterial;
+
+    /**
+    * 曲目
+    */
+    private String song;
+
+    /**
+    * 评价备注
+    */
+    private String memo;
+
+    /**
+    * 发音
+    */
+    private Integer pronunciation;
+
+    /**
+    * 节奏
+    */
+    private Integer tempo;
+
+    /**
+    * 乐理
+    */
+    private Integer musicTheory;
+
+    /**
+    * 是否双向沟通 0-否 1-是
+    */
+    private Integer hasLiaison;
+
+    /**
+    * 是否交作业 0-否 1-是
+    */
+    private Integer handHomework;
+
+    /**
+    * 课程评价
+    */
+    private String courseReview;
+
+    /**
+     * 学生评价
+     */
+    private Integer studentReview;
+
+    /**
+    * 评价时间
+    */
+    private Date createTime;
+
+    /**
+    * 修改时间
+    */
+    private Date updateTime;
+
+    /**
+     * 作业
+     */
+    private String homeWork;
+
+    @ApiModelProperty(value = "上课日期",required = false)
+    private Date classDate;
+
+    @ApiModelProperty(value = "课程名称",required = false)
+    private String courseName;
+
+    @ApiModelProperty(value = "老师名字",required = false)
+    private String teacherName;
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getCourseScheduleId() {
+        return courseScheduleId;
+    }
+
+    public void setCourseScheduleId(Integer courseScheduleId) {
+        this.courseScheduleId = courseScheduleId;
+    }
+
+    public Integer getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Integer classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Integer getEducationalTeacherId() {
+        return educationalTeacherId;
+    }
+
+    public void setEducationalTeacherId(Integer educationalTeacherId) {
+        this.educationalTeacherId = educationalTeacherId;
+    }
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public String getTeachingMaterial() {
+        return teachingMaterial;
+    }
+
+    public void setTeachingMaterial(String teachingMaterial) {
+        this.teachingMaterial = teachingMaterial;
+    }
+
+    public String getSong() {
+        return song;
+    }
+
+    public void setSong(String song) {
+        this.song = song;
+    }
+
+    public String getMemo() {
+        return memo;
+    }
+
+    public void setMemo(String memo) {
+        this.memo = memo;
+    }
+
+    public Integer getPronunciation() {
+        return pronunciation;
+    }
+
+    public void setPronunciation(Integer pronunciation) {
+        this.pronunciation = pronunciation;
+    }
+
+    public Integer getTempo() {
+        return tempo;
+    }
+
+    public void setTempo(Integer tempo) {
+        this.tempo = tempo;
+    }
+
+    public Integer getMusicTheory() {
+        return musicTheory;
+    }
+
+    public void setMusicTheory(Integer musicTheory) {
+        this.musicTheory = musicTheory;
+    }
+
+    public Integer getHasLiaison() {
+        return hasLiaison;
+    }
+
+    public void setHasLiaison(Integer hasLiaison) {
+        this.hasLiaison = hasLiaison;
+    }
+
+    public Integer getHandHomework() {
+        return handHomework;
+    }
+
+    public void setHandHomework(Integer handHomework) {
+        this.handHomework = handHomework;
+    }
+
+    public String getCourseReview() {
+        return courseReview;
+    }
+
+    public void setCourseReview(String courseReview) {
+        this.courseReview = courseReview;
+    }
+
+    public Integer getStudentReview() {
+        return studentReview;
+    }
+
+    public void setStudentReview(Integer studentReview) {
+        this.studentReview = studentReview;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
+
+    @Override
+    public String toString() {
+        return ToStringBuilder.reflectionToString(this);
+    }
+
+    public Date getClassDate() {
+        return classDate;
+    }
+
+    public void setClassDate(Date classDate) {
+        this.classDate = classDate;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getHomeWork() {
+        return homeWork;
+    }
+
+    public void setHomeWork(String homeWork) {
+        this.homeWork = homeWork;
+    }
+}

+ 22 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroup.java

@@ -45,6 +45,12 @@ public class CoursesGroup {
 	
 	/** 最大报名人数 */
 	private Integer maxStudentNum;
+
+	/** 已消耗课时数 */
+	private Integer consumeMinutes;
+
+	/** 已冻结课时数 */
+	private Integer freezeMinutes;
 	
 	/** 报名结束时间 */
 	private java.util.Date applyClosingDate;
@@ -67,6 +73,22 @@ public class CoursesGroup {
 	/**  */
 	private java.util.Date updateTime;
 
+	public Integer getConsumeMinutes() {
+		return consumeMinutes;
+	}
+
+	public void setConsumeMinutes(Integer consumeMinutes) {
+		this.consumeMinutes = consumeMinutes;
+	}
+
+	public Integer getFreezeMinutes() {
+		return freezeMinutes;
+	}
+
+	public void setFreezeMinutes(Integer freezeMinutes) {
+		this.freezeMinutes = freezeMinutes;
+	}
+
 	public BigDecimal getTotalCoursesPrice() {
 		return totalCoursesPrice;
 	}

+ 66 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseReview4EduQueryInfo.java

@@ -0,0 +1,66 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 课次评论
+ */
+public class CourseReview4EduQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "教务老师id",required = false)
+    private Integer eduTeacherId;
+
+    @ApiModelProperty(value = "是否评价 1-评价 0未评价",required = false)
+    private Integer hasReview;
+
+    @ApiModelProperty(value = "是否提价作业 1-提交 0未提交",required = false)
+    private Integer hasHandHomework;
+
+    @ApiModelProperty(value = "开始时间",required = false)
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间",required = false)
+    private String endTime;
+
+
+    public Integer getEduTeacherId() {
+        return eduTeacherId;
+    }
+
+    public void setEduTeacherId(Integer eduTeacherId) {
+        this.eduTeacherId = eduTeacherId;
+    }
+
+    public Integer getHasReview() {
+        return hasReview;
+    }
+
+    public void setHasReview(Integer hasReview) {
+        this.hasReview = hasReview;
+    }
+
+    public Integer getHasHandHomework() {
+        return hasHandHomework;
+    }
+
+    public void setHasHandHomework(Integer hasHandHomework) {
+        this.hasHandHomework = hasHandHomework;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+}

+ 133 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/CourseReviewQueryInfo.java

@@ -0,0 +1,133 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+ * 课次评论
+ */
+public class CourseReviewQueryInfo extends QueryInfo {
+
+    @ApiModelProperty(value = "分部id",required = false)
+    private String organId;
+
+    @ApiModelProperty(value = "分部id",required = false)
+    private Integer subjectId;
+
+    @ApiModelProperty(value = "指导老师id",required = false)
+    private Integer teacherId;
+
+    @ApiModelProperty(value = "教务老师id",required = false)
+    private Integer eduTeacherId;
+
+    @ApiModelProperty(value = "是否免费 1-免费 0收费",required = false)
+    private Integer isFree;
+
+    @ApiModelProperty(value = "学生评价",required = false)
+    private Integer studentReview;
+
+    @ApiModelProperty(value = "是否评价 1-评价 0未评价",required = false)
+    private Integer hasReview;
+
+    @ApiModelProperty(value = "是否提价作业 1-提交 0未提交",required = false)
+    private Integer hasHandHomework;
+
+    @ApiModelProperty(value = "教务评价",required = false)
+    private String courseReview;
+
+    @ApiModelProperty(value = "开始时间",required = false)
+    private String startTime;
+
+    @ApiModelProperty(value = "结束时间",required = false)
+    private String endTime;
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+
+    public Integer getIsFree() {
+        return isFree;
+    }
+
+    public void setIsFree(Integer isFree) {
+        this.isFree = isFree;
+    }
+
+
+    public Integer getEduTeacherId() {
+        return eduTeacherId;
+    }
+
+    public void setEduTeacherId(Integer eduTeacherId) {
+        this.eduTeacherId = eduTeacherId;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public Integer getStudentReview() {
+        return studentReview;
+    }
+
+    public void setStudentReview(Integer studentReview) {
+        this.studentReview = studentReview;
+    }
+
+    public Integer getHasReview() {
+        return hasReview;
+    }
+
+    public void setHasReview(Integer hasReview) {
+        this.hasReview = hasReview;
+    }
+
+    public Integer getHasHandHomework() {
+        return hasHandHomework;
+    }
+
+    public void setHasHandHomework(Integer hasHandHomework) {
+        this.hasHandHomework = hasHandHomework;
+    }
+
+    public String getCourseReview() {
+        return courseReview;
+    }
+
+    public void setCourseReview(String courseReview) {
+        this.courseReview = courseReview;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+}

+ 59 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CourseReviewService.java

@@ -0,0 +1,59 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.dto.*;
+import com.ym.mec.biz.dal.entity.CourseScheduleReview;
+import com.ym.mec.biz.dal.page.CourseReview4EduQueryInfo;
+import com.ym.mec.biz.dal.page.CourseReviewQueryInfo;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.BaseService;
+
+
+
+public interface CourseReviewService extends BaseService<Integer, CourseScheduleReview> {
+	/**
+	 * 获取网管课列表
+	 * @param queryInfo
+	 * @return
+	 */
+	PageInfo<CourseReviewDto> findPracticeGroupReviews(CourseReviewQueryInfo queryInfo);
+
+
+	/**
+	 * 教务网管课评论列表
+	 * @param queryInfo
+	 * @return
+	 */
+	PageInfo<CourseScheduleReview> findPracticeGroupReviews4Edu(CourseReview4EduQueryInfo queryInfo);
+
+
+
+	/**
+	 * 添加网管课评论
+	 * @param courseScheduleReview
+	 * @return
+	 */
+	CourseScheduleReview addPracticeGroupReview(CourseScheduleReview courseScheduleReview);
+
+
+	/**
+	 * 获取评论详情
+	 * @param id
+	 * @return
+	 */
+	ReviewInfoDto getReviewInfo(Integer id);
+
+	/**
+	 * 获取课程信息
+	 * @return
+	 */
+	TeacherClassHeadInfo getCourseInfoHead(Integer id);
+
+	/**
+	 * 跟新评论信息
+	 * @param courseScheduleReview
+	 * @return
+	 */
+	CourseScheduleReview updateReview(CourseScheduleReview courseScheduleReview);
+
+
+}

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

@@ -14,6 +14,7 @@ import com.ym.mec.biz.dal.page.EndCourseScheduleQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.dal.page.VipGroupQueryInfo;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.Date;
@@ -493,4 +494,10 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @return
 	 */
 	Object queryCourseInfoByGroupId(GroupType groupType, String groupId);
+
+	/**
+	 * 教师课时使用记录列表
+	 * @return
+	 */
+    Object teacherCourseMinutes(QueryInfo queryInfo);
 }

+ 193 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseReviewServiceImpl.java

@@ -0,0 +1,193 @@
+package com.ym.mec.biz.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.*;
+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.CourseReview4EduQueryInfo;
+import com.ym.mec.biz.dal.page.CourseReviewQueryInfo;
+import com.ym.mec.biz.dal.page.PracticeGroupQueryInfo;
+import com.ym.mec.biz.service.*;
+import com.ym.mec.common.constant.CommonConstants;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.entity.ImGroupMember;
+import com.ym.mec.common.entity.ImGroupModel;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.IdGeneratorService;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.im.ImFeignService;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
+import com.ym.mec.util.http.HttpUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.transaction.interceptor.TransactionAspectSupport;
+import org.springframework.util.CollectionUtils;
+
+import java.math.BigDecimal;
+import java.time.*;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.WeekFields;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class CourseReviewServiceImpl extends BaseServiceImpl<Integer, CourseScheduleReview> implements CourseReviewService {
+
+
+    @Autowired
+    private CourseScheduleReviewDao courseScheduleReviewDao;
+
+    @Autowired
+    private SubjectDao subjectDao;
+
+    @Autowired
+    private OrganizationDao organizationDao;
+
+    @Autowired
+    private CourseScheduleDao courseScheduleDao;
+
+    @Autowired
+    private PracticeGroupDao practiceGroupDao;
+
+    @Autowired
+    private ClassGroupService classGroupService;
+
+
+    @Override
+    public BaseDAO<Integer, CourseScheduleReview> getDAO() {
+        return courseScheduleReviewDao;
+    }
+
+
+    @Override
+    public PageInfo<CourseReviewDto> findPracticeGroupReviews(CourseReviewQueryInfo queryInfo) {
+        PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<CourseReviewDto> dataList = null;
+        int count = courseScheduleReviewDao.countPracticeGroupReviews(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = courseScheduleReviewDao.getPracticeGroupReviewList(params);
+            if (dataList != null && dataList.size() > 0) {
+                List<Integer> subjectIds = dataList.stream().map(CourseReviewDto::getSubjectId).distinct().collect(Collectors.toList());
+                Set<Integer> organIds = dataList.stream().map(CourseReviewDto::getOrganId).collect(Collectors.toSet());
+                //声部名称列表
+                Map<Long, String> subjectNames = MapUtil.convertMybatisMap(subjectDao.findBySubjecIds(StringUtils.join(subjectIds, ",")));
+                Map<Integer, String> organNames = MapUtil.convertMybatisMap(organizationDao.findOrganNameMapList(organIds));
+                dataList.forEach(e -> {
+                    e.setSubjectName(subjectNames.get(e.getSubjectId().intValue()));
+                    e.setOrganName(organNames.get(e.getOrganId()));
+                });
+            }
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public PageInfo<CourseScheduleReview> findPracticeGroupReviews4Edu(CourseReview4EduQueryInfo queryInfo) {
+        PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<>();
+        MapUtil.populateMap(params, queryInfo);
+
+        List<CourseScheduleReview> dataList = null;
+        int count = courseScheduleReviewDao.countPracticeGroupReviews4Edu(params);
+        if (count > 0) {
+            pageInfo.setTotal(count);
+            params.put("offset", pageInfo.getOffset());
+            dataList = courseScheduleReviewDao.getPracticeGroupReview4EduList(params);
+        }
+        if (count == 0) {
+            dataList = new ArrayList<>();
+        }
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public CourseScheduleReview addPracticeGroupReview(CourseScheduleReview courseScheduleReview) {
+        Integer courseScheduleId = courseScheduleReview.getCourseScheduleId();
+        if (courseScheduleId == null || courseScheduleId <= 0) {
+            throw new BizException("课程id必须大于0");
+        }
+        Date date = new Date();
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId.longValue());
+        PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(courseSchedule.getMusicGroupId()));
+
+        courseScheduleReview.setClassGroupId(courseSchedule.getClassGroupId());
+        courseScheduleReview.setEducationalTeacherId(practiceGroup.getEducationalTeacherId());
+        courseScheduleReview.setStudentId(practiceGroup.getStudentId());
+        courseScheduleReview.setCreateTime(date);
+        courseSchedule.setUpdateTime(date);
+        long num = courseScheduleReviewDao.insert(courseScheduleReview);
+        if (num <= 0) {
+            throw new BizException("评论提交失败,请重试");
+        }
+        return courseScheduleReview;
+    }
+
+    @Override
+    public ReviewInfoDto getReviewInfo(Integer id) {
+        CourseScheduleReview courseScheduleReview = courseScheduleReviewDao.get(id);
+        if (courseScheduleReview == null) {
+            throw new BizException("评价不存在");
+        }
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleReview.getCourseScheduleId().longValue());
+
+        TeacherClassHeadInfo teacherClassGroupInfo = classGroupService.findTeacherClassGroupInfo(courseScheduleReview.getClassGroupId().longValue());
+        teacherClassGroupInfo.setClassDate(courseSchedule.getClassDate().toString());
+        teacherClassGroupInfo.setStartClassTime(courseSchedule.getStartClassTime().toString());
+        teacherClassGroupInfo.setEndClassTime(courseSchedule.getEndClassTime().toString());
+
+        ReviewInfoDto reviewInfoDto = new ReviewInfoDto();
+        reviewInfoDto.setCourseScheduleReview(courseScheduleReview);
+        reviewInfoDto.setTeacherClassHeadInfo(teacherClassGroupInfo);
+        return reviewInfoDto;
+    }
+
+    @Override
+    public TeacherClassHeadInfo getCourseInfoHead(Integer id) {
+        CourseSchedule courseSchedule = courseScheduleDao.get(id.longValue());
+        TeacherClassHeadInfo teacherClassGroupInfo = classGroupService.findTeacherClassGroupInfo(courseSchedule.getClassGroupId().longValue());
+        teacherClassGroupInfo.setClassDate(courseSchedule.getClassDate().toString());
+        teacherClassGroupInfo.setStartClassTime(courseSchedule.getStartClassTime().toString());
+        teacherClassGroupInfo.setEndClassTime(courseSchedule.getEndClassTime().toString());
+        return teacherClassGroupInfo;
+    }
+
+    @Override
+    public CourseScheduleReview updateReview(CourseScheduleReview courseScheduleReview) {
+        if (courseScheduleReview.getId() == null || courseScheduleReview.getId() <= 0) {
+            throw new BizException("评论id为空");
+        }
+        CourseScheduleReview review = courseScheduleReviewDao.get(courseScheduleReview.getId());
+        if(review == null){
+            throw new BizException("评论不存在");
+        }
+        courseScheduleReviewDao.update(courseScheduleReview);
+        return courseScheduleReview;
+    }
+}

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

@@ -68,7 +68,7 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
             Integer classGroupCourseTimes = courseScheduleEvaluateDao.getClassGroupCourseTimes(classGroup.getId());
             Date date = new Date();
             courseScheduleEvaluate.setTimes(classGroupCourseTimes);
-            courseScheduleEvaluate.setTotalMinutes(classGroupCourseTimes);
+            courseScheduleEvaluate.setTotalMinutes(classGroupCourseTimes*25);
             courseScheduleEvaluate.setMusicGroupId(classGroup.getMusicGroupId());
             courseScheduleEvaluate.setCreateTime(date);
             courseScheduleEvaluate.setUpdateTime(date);
@@ -118,11 +118,6 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
         BasicUserDto teacherInfo = teacherDao.findTeacherInfo(studyReport.getTeacherId());
         studyReport.setStudent(user);
         studyReport.setTeacher(teacherInfo);
-        long practiceGroupId = Long.parseLong(studyReport.getMusicGroupId());
-        PracticeGroup practiceGroup = practiceGroupDao.get(practiceGroupId);
-        ClassGroup classGroup = classGroupDao.get(studyReport.getClassGroupId());
-        studyReport.setTimes(classGroup.getTotalClassTimes());
-        studyReport.setTotalMinutes(classGroup.getTotalClassTimes() * practiceGroup.getSingleClassMinutes());
         return studyReport;
     }
 
@@ -135,7 +130,9 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
     public List<CourseScheduleEvaluate> createEvaluate(Date nowDate) {
         Date startDate = DateUtil.trunc(nowDate);
         Date afterDate = DateUtil.addDays(DateUtil.getLastSecondWithDay(nowDate), 5);
-        List<CourseScheduleEvaluate> needPostReportPracticeGroups = practiceGroupDao.getNeedPostReportPracticeGroups(startDate, afterDate);
+        boolean afterDateIsLastDay = DateUtil.isSameDay(DateUtil.getLastDayOfMonth(startDate), afterDate);
+
+        List<CourseScheduleEvaluate> needPostReportPracticeGroups = practiceGroupDao.getNeedPostReportPracticeGroups(startDate, afterDate,afterDateIsLastDay);
 
         Map<Integer, Integer> courseTimesMap = new HashMap<>();
         if (needPostReportPracticeGroups.size() > 0) {
@@ -200,7 +197,7 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
         }
 
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.NEED_POST_STUDY_REPORT,
-                userMap, null, 0, "5?" + pushUrl, "TEACHER");
+                userMap, null, 0, "8?" + pushUrl, "TEACHER");
 
     }
 }

+ 46 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -20,6 +20,7 @@ import com.ym.mec.common.entity.ImGroupMember;
 import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.im.ImFeignService;
 import com.ym.mec.jiari.JiaRiFeignService;
@@ -77,6 +78,8 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
     private CourseScheduleTeacherSalaryService courseScheduleTeacherSalaryService;
     @Autowired
     private VipGroupDao vipGroupDao;
+	@Autowired
+	private CoursesGroupDao coursesGroupDao;
     @Autowired
     private TeacherDefaultVipGroupSalaryDao teacherDefaultVipGroupSalaryDao;
     @Autowired
@@ -3983,6 +3986,19 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				//统计授课次数
 				resultMap.put("teacherGiveLesson",courseScheduleTeacherSalaryDao.countTeacherGiveLesson(vipGroup.getUserId()));
 				break;
+			case COMM:
+				CoursesGroup coursesGroup = coursesGroupDao.get(Long.parseLong(groupId));
+				resultMap.put("groupName",coursesGroup.getName());
+				resultMap.put("startTime",coursesGroup.getCoursesStartDate());
+				resultMap.put("endTime",coursesGroup.getCoursesEndDate());
+				resultMap.put("groupStatus",coursesGroup.getStatus().getCode());
+				teacher = teacherDao.get(coursesGroup.getTeacherId());
+				resultMap.put("groupTeacher",teacher.getRealName());
+				resultMap.put("teacherIntroduction",teacher.getIntroduction());
+				resultMap.put("teacherAvatar",teacher.getAvatar());
+				//统计授课次数
+				resultMap.put("teacherGiveLesson",courseScheduleTeacherSalaryDao.countTeacherGiveLesson(coursesGroup.getTeacherId()));
+				break;
 			default:
 				throw new BizException("课程类型错误");
 		}
@@ -4003,6 +4019,36 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
+	public Object teacherCourseMinutes(QueryInfo queryInfo) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (null == user) {
+			throw new BizException("获取用户信息失败");
+		}
+		PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>(16);
+		MapUtil.populateMap(params, queryInfo);
+		params.put("userId",user.getId());
+		int count = coursesGroupDao.countTeacherCourseGroups(params);
+		if(count > 0){
+			pageInfo.setTotal(count);
+			List<CoursesGroup> courseGroups = coursesGroupDao.queryTeacherCourseGroups(params);
+			List<Long> collect = courseGroups.stream().map(e -> e.getId()).collect(Collectors.toList());
+			//获取冻结课时
+			Map<Long,Long> freezeMinutesMap = MapUtil.convertIntegerMap(coursesGroupDao.findFreezeMinutes(collect));
+			//获取已消耗课时
+			Map<Long,Long> consumeMinutesMap = MapUtil.convertIntegerMap(coursesGroupDao.findConsumeMinutes(collect));
+			courseGroups.forEach(e->{
+				Long aLong = freezeMinutesMap.get(e.getId());
+				e.setFreezeMinutes(aLong == null?0:aLong.intValue());
+				Long aLong1 = consumeMinutesMap.get(e.getId());
+				e.setConsumeMinutes(aLong1 == null?0:aLong1.intValue());
+			});
+			pageInfo.setRows(courseGroups);
+		}
+		return pageInfo;
+	}
+
+	@Override
 	public Object teacherCourseHeadInfo(Long courseScheduleId) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if (null == user) {

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

@@ -24,7 +24,7 @@ import com.ym.mec.common.service.impl.BaseServiceImpl;
 import com.ym.mec.util.collection.MapUtil;
 import com.ym.mec.util.date.DateUtil;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;

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

@@ -1107,6 +1107,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         teacherIds.addAll(teacherDao.findPracticeTeacherIds(studentId));
         //获取陪练课,vip课代课老师关联
         teacherIds.addAll(teacherDao.findCloseCourseTeacherIds(studentId));
+        //获取陪练课课程教务老师
+//        teacherIds.addAll(teacherDao.findPracticeEducationalTeacherId(studentId));
+        //获取VIP课程教务老师
+//        teacherIds.addAll(teacherDao.findVipEducationalTeacherId(studentId));
         if(teacherIds.size() > 0){
         	return teacherDao.queryTeacherBaseInfo(teacherIds,search);
         }

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

@@ -3469,9 +3469,13 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 //            }
 
             String pushUrl = baseApiUrl + "/#/reportDetail?classGroupId=" + report.getClassGroupId();
-
             String smsUrl = baseApiUrl + "/#/transfer?url=" + baseApiUrl + "&hash=reportDetail&classGroupId=" + report.getClassGroupId();
 
+            if(report.getVersion().equals(2)){
+                pushUrl = baseApiUrl + "/#/reportDetailNew?id=" + report.getId() + "&classGroupId="  + report.getClassGroupId();
+                smsUrl = baseApiUrl + "/#/transfer?url=" + baseApiUrl  + "&hash=reportDetailNew&id=" + report.getId() + "&classGroupId="  + report.getClassGroupId();
+            }
+
 //            SysUser student = sysUserFeignService.queryUserById(userFreePracticeGroup.getStudentId());
             SysUser student = teacherDao.getUser(userFreePracticeGroup.getStudentId());
 
@@ -3495,7 +3499,7 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
     @Override
     public PageInfo<PracticeGroupDto> findPracticeGroupReviews(PracticeGroupQueryInfo queryInfo) {
-        queryInfo.setMonth(queryInfo.getMonth() + "-01");
+        queryInfo.setMonth(queryInfo.getMonth());
         PageInfo pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
         Map<String, Object> params = new HashMap<>();
         MapUtil.populateMap(params, queryInfo);

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

@@ -19,7 +19,7 @@ import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.string.MessageFormatter;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;

+ 239 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleReviewMapper.xml

@@ -0,0 +1,239 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ym.mec.biz.dal.dao.CourseScheduleReviewDao">
+    <resultMap id="CourseScheduleReview" type="com.ym.mec.biz.dal.entity.CourseScheduleReview">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="course_schedule_id_" jdbcType="INTEGER" property="courseScheduleId"/>
+        <result column="class_group_id_" jdbcType="INTEGER" property="classGroupId"/>
+        <result column="teacher_id_" jdbcType="INTEGER" property="teacherId"/>
+        <result column="educational_teacher_id_" jdbcType="INTEGER" property="educationalTeacherId"/>
+        <result column="student_id_" jdbcType="INTEGER" property="studentId"/>
+        <result column="teaching_material_" jdbcType="VARCHAR" property="teachingMaterial"/>
+        <result column="song_" jdbcType="VARCHAR" property="song"/>
+        <result column="memo_" jdbcType="VARCHAR" property="memo"/>
+        <result column="pronunciation_" jdbcType="INTEGER" property="pronunciation"/>
+        <result column="tempo_" jdbcType="INTEGER" property="tempo"/>
+        <result column="music_theory_" jdbcType="INTEGER" property="musicTheory"/>
+        <result column="has_liaison_" jdbcType="TINYINT" property="hasLiaison"/>
+        <result column="hand_homework_" jdbcType="TINYINT" property="handHomework"/>
+        <result column="course_review_" jdbcType="VARCHAR" property="courseReview"/>
+        <result column="student_review_" jdbcType="TINYINT" property="studentReview"/>
+        <result column="create_time_" jdbcType="DATE" property="createTime"/>
+        <result column="update_time_" jdbcType="DATE" property="updateTime"/>
+        <result column="coursre_name_" jdbcType="VARCHAR" property="courseName"/>
+        <result column="teacher_name_" jdbcType="VARCHAR" property="teacherName"/>
+        <result column="class_date_" jdbcType="DATE" property="classDate"/>
+    </resultMap>
+
+    <select id="get" parameterType="java.lang.Integer" resultMap="CourseScheduleReview">
+        select * from course_schedule_review
+        where id_ = #{id,jdbcType=INTEGER}
+    </select>
+
+    <delete id="delete" parameterType="java.lang.Integer">
+        delete
+        from course_schedule_review
+        where id_ = #{id,jdbcType=INTEGER}
+    </delete>
+    <insert id="insert" keyColumn="id_" keyProperty="id" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleReview"
+            useGeneratedKeys="true">
+        <!--@mbg.generated-->
+        insert into course_schedule_review (course_schedule_id_, class_group_id_, teacher_id_,
+        educational_teacher_id_, student_id_, teaching_material_,
+        song_, memo_, pronunciation_,
+        tempo_, music_theory_, has_liaison_,
+        hand_homework_, course_review_, create_time_,
+        update_time_)
+        values (#{courseScheduleId,jdbcType=INTEGER}, #{classGroupId,jdbcType=INTEGER}, #{teacherId,jdbcType=INTEGER},
+        #{educationalTeacherId,jdbcType=INTEGER}, #{studentId,jdbcType=INTEGER}, #{teachingMaterial,jdbcType=VARCHAR},
+        #{song,jdbcType=VARCHAR}, #{memo,jdbcType=VARCHAR}, #{pronunciation,jdbcType=INTEGER},
+        #{tempo,jdbcType=INTEGER}, #{musicTheory,jdbcType=INTEGER}, #{hasLiaison,jdbcType=TINYINT},
+        #{handHomework,jdbcType=TINYINT}, #{courseReview,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
+        #{updateTime,jdbcType=TIMESTAMP})
+    </insert>
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleReview">
+        <!--@mbg.generated-->
+        update course_schedule_review
+        <set>
+            <if test="courseScheduleId != null">
+                course_schedule_id_ = #{courseScheduleId,jdbcType=INTEGER},
+            </if>
+            <if test="classGroupId != null">
+                class_group_id_ = #{classGroupId,jdbcType=INTEGER},
+            </if>
+            <if test="teacherId != null">
+                teacher_id_ = #{teacherId,jdbcType=INTEGER},
+            </if>
+            <if test="educationalTeacherId != null">
+                educational_teacher_id_ = #{educationalTeacherId,jdbcType=INTEGER},
+            </if>
+            <if test="studentId != null">
+                student_id_ = #{studentId,jdbcType=INTEGER},
+            </if>
+            <if test="teachingMaterial != null">
+                teaching_material_ = #{teachingMaterial,jdbcType=VARCHAR},
+            </if>
+            <if test="song != null">
+                song_ = #{song,jdbcType=VARCHAR},
+            </if>
+            <if test="memo != null">
+                memo_ = #{memo,jdbcType=VARCHAR},
+            </if>
+            <if test="pronunciation != null">
+                pronunciation_ = #{pronunciation,jdbcType=INTEGER},
+            </if>
+            <if test="tempo != null">
+                tempo_ = #{tempo,jdbcType=INTEGER},
+            </if>
+            <if test="musicTheory != null">
+                music_theory_ = #{musicTheory,jdbcType=INTEGER},
+            </if>
+            <if test="hasLiaison != null">
+                has_liaison_ = #{hasLiaison,jdbcType=TINYINT},
+            </if>
+            <if test="handHomework != null">
+                hand_homework_ = #{handHomework,jdbcType=TINYINT},
+            </if>
+            <if test="courseReview != null">
+                course_review_ = #{courseReview,jdbcType=VARCHAR},
+            </if>
+            <if test="studentReview != null">
+                student_review_ = #{studentReview,jdbcType=TINYINT},
+            </if>
+            <if test="createTime != null">
+                create_time_ = #{createTime,jdbcType=DATE},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime,jdbcType=DATE},
+            </if>
+        </set>
+        where id_ = #{id,jdbcType=INTEGER}
+    </update>
+    <resultMap id="CourseReviewDto" type="com.ym.mec.biz.dal.dto.CourseReviewDto">
+        <id column="id_" jdbcType="INTEGER" property="id"/>
+        <result column="subject_id_" jdbcType="INTEGER" property="subjectId"/>
+        <result column="organ_id_" jdbcType="INTEGER" property="organId"/>
+        <result column="class_date_" jdbcType="DATE" property="classDate"/>
+        <result column="coursre_name_" jdbcType="VARCHAR" property="courseName"/>
+        <result column="teacher_name_" jdbcType="VARCHAR" property="teacherName"/>
+        <result column="edu_teacher_name_" jdbcType="VARCHAR" property="eduTeacherName"/>
+        <result column="buy_months_" property="BuyMonths"/>
+        <result column="review_id_" property="reviewId"/>
+        <result column="student_review_" property="studentReview"/>
+        <result column="hand_homework_" property="handHomework"/>
+        <result column="course_review_" property="courseReview"/>
+    </resultMap>
+
+    <sql id="practiceGroupReviewsQueryCondition">
+        <where>
+            AND pg.id_ > 0 AND cs.group_type_='PRACTICE' AND cs.status_='OVER' AND (cs.del_flag_ = 0 OR cs.del_flag_ IS NULL)
+            <if test="organId != null">
+                AND FIND_IN_SET(pg.organ_id_,#{organId})
+            </if>
+            <if test="subjectId != null">
+                AND pg.subject_id_=#{subjectId}
+            </if>
+            <if test="teacherId != null">
+                AND cs.actual_teacher_id_=#{teacherId}
+            </if>
+            <if test="eduTeacherId != null">
+                AND pg.educational_teacher_id_=#{eduTeacherId}
+            </if>
+            <if test='isFree !=null and isFree=="0"'>
+                AND pg.buy_months_ > 0
+            </if>
+            <if test='isFree !=null and isFree=="1"'>
+                AND pg.buy_months_ IS NULL
+            </if>
+            <if test="studentReview !=null">
+                AND pg.student_review_ =#{studentReview}
+            </if>
+            <if test='hasReview !=null and hasReview=="1"'>
+                AND csr.id_ > 0
+            </if>
+            <if test='hasReview !=null and hasReview=="0"'>
+                AND csr.id_ IS NULL
+            </if>
+            <if test='hasHandHomework !=null and hasHandHomework=="1"'>
+                AND csr.hand_homework_ = 1
+            </if>
+            <if test='hasHandHomework !=null and hasHandHomework=="0"'>
+                AND csr.hand_homework_ IS NULL
+            </if>
+            <if test="courseReview != null">
+                AND csr.course_review_=#{courseReview}
+            </if>
+            <if test="startTime !=null">
+                <![CDATA[AND cs.class_date_ >= #{startTime} ]]>
+            </if>
+            <if test="endTime !=null">
+                <![CDATA[AND cs.class_date_ <= #{endTime} ]]>
+            </if>
+        </where>
+    </sql>
+
+    <select id="getPracticeGroupReviewList" resultMap="CourseReviewDto">
+        SELECT cs.id_,cs.class_date_, pg.subject_id_,pg.organ_id_,pg.name_ coursre_name_,su.real_name_ teacher_name_,edsu.real_name_
+        edu_teacher_name_,pg.buy_months_,csr.id_ review_id_, csr.student_review_,csr.hand_homework_,csr.course_review_
+        FROM course_schedule cs
+        LEFT JOIN practice_group pg ON cs.music_group_id_ = pg.id_
+        LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+        LEFT JOIN sys_user edsu ON pg.educational_teacher_id_ = edsu.id_
+        LEFT JOIN course_schedule_review csr on cs.id_ = csr.course_schedule_id_
+        <include refid="practiceGroupReviewsQueryCondition"/>
+        <include refid="global.limit"/>
+    </select>
+
+    <select id="countPracticeGroupReviews" resultType="java.lang.Integer">
+        SELECT count(*) FROM course_schedule cs
+        LEFT JOIN practice_group pg ON cs.music_group_id_ = pg.id_
+        LEFT JOIN course_schedule_review csr on cs.id_ = csr.course_schedule_id_
+        <include refid="practiceGroupReviewsQueryCondition"/>
+    </select>
+
+    <sql id="practiceGroupReviews4EduQueryCondition">
+        <where>
+            <if test="eduTeacherId != null">
+                AND pg.educational_teacher_id_=#{eduTeacherId}
+            </if>
+            <if test='hasReview !=null and hasReview=="1"'>
+                AND csr.course_review_ IS NOT NULL
+            </if>
+            <if test='hasReview !=null and hasReview=="0"'>
+                AND csr.course_review_ IS NULL
+            </if>
+            <if test='hasHandHomework !=null and hasHandHomework=="1"'>
+                AND csr.hand_homework_ = 1
+            </if>
+            <if test='hasHandHomework !=null and hasHandHomework=="0"'>
+                AND csr.hand_homework_ IS NULL
+            </if>
+            <if test="startTime !=null">
+                <![CDATA[AND cs.class_date_ >= #{startTime} ]]>
+            </if>
+            <if test="endTime !=null">
+                <![CDATA[AND cs.class_date_ <= #{endTime} ]]>
+            </if>
+        </where>
+    </sql>
+
+    <select id="getPracticeGroupReview4EduList" resultMap="CourseScheduleReview">
+        SELECT csr.id_,cs.class_date_, pg.name_ coursre_name_,su.real_name_ teacher_name_,csr.hand_homework_
+        FROM course_schedule_review csr
+        LEFT JOIN course_schedule cs on cs.id_ = csr.course_schedule_id_
+        LEFT JOIN practice_group pg ON cs.music_group_id_ = pg.id_
+        LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+        <include refid="practiceGroupReviews4EduQueryCondition"/>
+        <include refid="global.limit"/>
+    </select>
+
+
+    <select id="countPracticeGroupReviews4Edu" resultType="java.lang.Integer">
+        SELECT count(*) FROM course_schedule_review csr
+        LEFT JOIN course_schedule cs on cs.id_ = csr.course_schedule_id_
+        LEFT JOIN practice_group pg ON cs.music_group_id_ = pg.id_
+        <include refid="practiceGroupReviews4EduQueryCondition"/>
+    </select>
+
+
+</mapper>

+ 31 - 0
mec-biz/src/main/resources/config/mybatis/CoursesGroupMapper.xml

@@ -129,4 +129,35 @@
     <select id="findTeacherCourseGroups" resultMap="CoursesGroup">
 		SELECT * FROM courses_group WHERE teacher_id_=#{teacherId} AND status_ IN ('APPLYING', 'NORMAL') ORDER BY id_ DESC
     </select>
+
+    <select id="queryTeacherCourseGroups" resultMap="CoursesGroup">
+		SELECT * FROM courses_group
+		WHERE teacher_id_=#{userId} AND status_ IN ('APPLYING', 'NORMAL')
+		ORDER BY id_ DESC
+		<include refid="global.limit"/>
+    </select>
+    <select id="countTeacherCourseGroups" resultType="int">
+		SELECT COUNT(0) FROM courses_group
+		WHERE teacher_id_ = #{userId} AND status_ IN ('APPLYING', 'NORMAL')
+    </select>
+    <select id="findFreezeMinutes" resultType="java.util.Map">
+		SELECT COUNT(DISTINCT cs.id_) * cg.single_class_minutes_ 'value',cg.id_ 'key' FROM courses_group cg
+		LEFT JOIN course_schedule cs ON cg.id_ = cs.music_group_id_
+		WHERE cg.id_ IN
+		<foreach collection="groupIds" separator="," open="(" close=")" item="item">
+			#{item}
+		</foreach>
+		AND cs.group_type_ = 'COMM' AND CONCAT(cs.class_date_,' ',cs.start_class_time_) > NOW()
+		GROUP BY cg.id_
+	</select>
+	<select id="findConsumeMinutes" resultType="java.util.Map">
+		SELECT COUNT(DISTINCT cs.id_) * cg.single_class_minutes_ 'value',cg.id_ 'key' FROM courses_group cg
+		LEFT JOIN course_schedule cs ON cg.id_ = cs.music_group_id_
+		WHERE cg.id_ IN
+		<foreach collection="groupIds" separator="," open="(" close=")" item="item">
+			#{item}
+		</foreach>
+		AND cs.group_type_ = 'COMM' AND CONCAT(cs.class_date_,' ',cs.start_class_time_) &lt;= NOW()
+		GROUP BY cg.id_
+	</select>
 </mapper>

+ 18 - 11
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -273,6 +273,9 @@
     <sql id="practiceGroupReviewsQueryCondition">
         <where>
             pg.group_status_='NORMAL'
+            <if test="month != null">
+                AND DATE_FORMAT(cse.create_time_, '%Y-%m') = #{month}
+            </if>
             <if test="search!=null and search!=''">
                 AND (pg.name_ LIKE CONCAT('%',#{search},'%') OR pg.id_= #{search})
             </if>
@@ -299,11 +302,11 @@
                 <![CDATA[ AND pg.courses_expire_date_ <= NOW()
 			]]></if>
             <if test='hasReport !=null and hasReport=="0"'>
-                <![CDATA[AND cse.status =0
+                <![CDATA[AND cse.status_ =0
 			]]>
             </if>
             <if test='hasReport !=null and hasReport=="1"'>
-                <![CDATA[ AND cse.status = 1
+                <![CDATA[ AND cse.status_ = 1
 			]]></if>
         </where>
     </sql>
@@ -314,8 +317,7 @@
         FROM
         practice_group pg
         LEFT JOIN sys_user su ON pg.user_id_ = su.id_
-        LEFT JOIN course_schedule_evaluate cse ON pg.id_=cse.music_group_id_ AND DATE_FORMAT(cse.create_time_, '%Y%m') =
-        DATE_FORMAT(#{month},'%Y%m')
+        LEFT JOIN course_schedule_evaluate cse ON pg.id_=cse.music_group_id_
         <include refid="practiceGroupReviewsQueryCondition"/>
         ORDER BY pg.id_ DESC
         <include refid="global.limit"/>
@@ -324,8 +326,7 @@
 
     <select id="countPracticeGroupReviews" resultType="java.lang.Integer">
         SELECT count(*) FROM practice_group pg
-        LEFT JOIN course_schedule_evaluate cse ON pg.id_=cse.music_group_id_ AND DATE_FORMAT(cse.create_time_, '%Y%m') =
-        DATE_FORMAT(#{month},'%Y%m')
+        LEFT JOIN course_schedule_evaluate cse ON pg.id_=cse.music_group_id_
         <include refid="practiceGroupReviewsQueryCondition"/>
     </select>
 
@@ -338,13 +339,19 @@
                pg.single_class_minutes_ total_minutes_
         FROM practice_group pg
                  LEFT JOIN class_group cg on pg.id_ = cg.music_group_id_ AND cg.group_type_ = 'PRACTICE'
-        WHERE pg.courses_start_date_ <= #{nowDate}
-          AND pg.courses_expire_date_ >= #{afterDate}
-          AND DATE_FORMAT(pg.courses_expire_date_, '%d') = DATE_FORMAT(#{afterDate}, '%d')
+        WHERE pg.courses_start_date_ <= #{nowDate,jdbcType=DATE}
+          AND pg.courses_expire_date_ >= #{afterDate,jdbcType=DATE}
+        ]]>
+        <if test="afterDateIsLastDay == false">
+            AND DATE_FORMAT(pg.courses_expire_date_, '%d') = DATE_FORMAT(#{afterDate}, '%d')
+        </if>
+        <if test="afterDateIsLastDay == true">
+        <![CDATA[ AND DATE_FORMAT(pg.courses_expire_date_, '%d') >= DATE_FORMAT(#{afterDate}, '%d') ]]>
+        </if>
           AND cg.del_flag_ = 0
           AND pg.group_status_ != 'CANCEL'
           AND pg.group_status_ != 'LOCK'
-        ]]>
+
     </select>
 
     <select id="getReportCourseTimes" resultMap="com.ym.mec.biz.dal.dao.ClassGroupDao.ClassGroup">
@@ -352,7 +359,7 @@
         <foreach collection="classGroupIds" item="classGroupId" open="(" separator="," close=")">
             #{classGroupId}
         </foreach>
-        <![CDATA[AND class_date_ >= #{startDate} AND class_date_ <=#{endDate} ]]>
+        <![CDATA[AND class_date_ >= #{startDate,jdbcType=DATE} AND class_date_ <=#{endDate,jdbcType=DATE} ]]>
         AND (del_flag_ =0 OR del_flag_ IS NULL)
         GROUP BY class_group_id_
     </select>

+ 4 - 0
mec-biz/src/main/resources/config/mybatis/SysTenantAccountMapper.xml

@@ -13,6 +13,10 @@
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
 
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="SysTenantAccount">
+		SELECT * FROM sys_tenant_account WHERE user_id_ = #{uesrId}
+	</select>
 
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="SysTenantAccount">

+ 12 - 0
mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml

@@ -898,4 +898,16 @@
         </if>
         GROUP BY su.id_
     </select>
+    <select id="findPracticeEducationalTeacherId" resultType="java.lang.Integer">
+        SELECT DISTINCT pg.educational_teacher_id_ FROM class_group_student_mapper cgsm
+        LEFT JOIN class_group_teacher_mapper cgtm ON cgsm.class_group_id_ = cgtm.class_group_id_
+        LEFT JOIN practice_group pg ON pg.id_ = cgsm.music_group_id_
+        WHERE cgsm.group_type_ = 'PRACTICE' AND cgsm.user_id_ = #{userId}
+    </select>
+    <select id="findVipEducationalTeacherId" resultType="java.lang.Integer">
+        SELECT DISTINCT vg.educational_teacher_id_ FROM class_group_student_mapper cgsm
+        LEFT JOIN class_group_teacher_mapper cgtm ON cgsm.class_group_id_ = cgtm.class_group_id_
+        LEFT JOIN vip_group vg ON vg.id_ = cgsm.music_group_id_
+        WHERE cgsm.group_type_ = 'VIP' AND cgsm.user_id_ = #{userId}
+    </select>
 </mapper>

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

@@ -17,7 +17,7 @@ import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
 import org.springframework.ui.ModelMap;

+ 33 - 12
mec-student/src/main/java/com/ym/mec/student/controller/StudentOrderController.java

@@ -1,10 +1,5 @@
 package com.ym.mec.student.controller;
 
-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.service.*;
-import com.ym.mec.util.date.DateUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -12,16 +7,23 @@ import io.swagger.annotations.ApiOperation;
 
 import java.io.IOException;
 import java.math.BigDecimal;
-import java.math.RoundingMode;
 import java.net.URLEncoder;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
-import org.apache.commons.lang.StringUtils;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import org.snaker.engine.entity.Order;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -34,8 +36,29 @@ import org.springframework.web.bind.annotation.RestController;
 import com.alibaba.fastjson.JSON;
 import com.huifu.adapay.model.payment.PayChannelEnum;
 import com.huifu.adapay.model.payment.Payment;
+import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
+import com.ym.mec.biz.dal.dao.OrganizationDao;
+import com.ym.mec.biz.dal.dao.StudentPaymentOrderDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.dao.TeacherCourseStatisticsDao;
+import com.ym.mec.biz.dal.dto.LuckStatisDto;
+import com.ym.mec.biz.dal.dto.OrderStatisDto;
+import com.ym.mec.biz.dal.dto.PracticeGroupsDto;
+import com.ym.mec.biz.dal.dto.VipBuyResultDto;
+import com.ym.mec.biz.dal.dto.practiceGroupStatisDto;
+import com.ym.mec.biz.dal.entity.Goods;
+import com.ym.mec.biz.dal.entity.MusicGroup;
+import com.ym.mec.biz.dal.entity.Organization;
+import com.ym.mec.biz.dal.entity.SporadicChargeInfo;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
 import com.ym.mec.biz.dal.enums.DealStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.biz.service.MusicGroupService;
+import com.ym.mec.biz.service.SporadicChargeInfoService;
+import com.ym.mec.biz.service.StudentPaymentOrderDetailService;
+import com.ym.mec.biz.service.StudentPaymentOrderService;
+import com.ym.mec.biz.service.StudentRegistrationService;
+import com.ym.mec.biz.service.VipGroupService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.thirdparty.adapay.NotifyEvent;
@@ -46,8 +69,6 @@ import com.ym.mec.thirdparty.yqpay.YqPayFeignService;
 import com.ym.mec.thirdparty.yqpay.YqPayUtil;
 import com.ym.mec.util.http.HttpUtil;
 
-import javax.servlet.http.HttpServletResponse;
-
 @RequestMapping("studentOrder")
 @Api(tags = "订单回调")
 @RestController

+ 2 - 2
mec-task/src/main/java/com/ym/mec/task/jobs/NeedPostReportTask.java → mec-task/src/main/java/com/ym/mec/task/jobs/PushNeedPostReportTask.java

@@ -7,13 +7,13 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 @Service
-public class NeedPostReportTask extends BaseTask {
+public class PushNeedPostReportTask extends BaseTask {
 
     @Autowired
     private TaskRemoteService taskRemoteService;
 
     @Override
     public void execute() throws TaskException {
-        taskRemoteService.pushStudyReport();
+        taskRemoteService.pushNeedPostReport();
     }
 }

+ 85 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseReviewController.java

@@ -0,0 +1,85 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.CourseScheduleDao;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
+import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
+import com.ym.mec.biz.dal.entity.CourseScheduleReview;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.page.CourseReviewQueryInfo;
+import com.ym.mec.biz.dal.page.PracticeGroupQueryInfo;
+import com.ym.mec.biz.service.CourseReviewService;
+import com.ym.mec.biz.service.CourseScheduleEvaluateService;
+import com.ym.mec.biz.service.CourseScheduleService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.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.*;
+
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+@RequestMapping("courseReview")
+@Api(tags = "课程评价")
+@RestController
+public class CourseReviewController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private CourseReviewService courseReviewService;
+
+
+    @ApiOperation(value = "网管课评论列表")
+    @GetMapping("getPracticeGroup")
+    public Object getPracticeGroup(CourseReviewQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setTeacherId(sysUser.getId());
+        return succeed(courseReviewService.findPracticeGroupReviews(queryInfo));
+    }
+
+
+    @ApiOperation(value = "提交评论")
+    @PostMapping(value = "/add")
+    public HttpResponseResult add(CourseScheduleReview courseScheduleReview) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        courseScheduleReview.setTeacherId(sysUser.getId());
+        return succeed(courseReviewService.addPracticeGroupReview(courseScheduleReview));
+    }
+
+    @ApiOperation(value = "网管课评论详情")
+    @GetMapping("getReviewInfo")
+    public HttpResponseResult getReviewInfo(int id) {
+        return succeed(courseReviewService.getReviewInfo(id));
+    }
+
+    @ApiOperation(value = "获取课程头部信息")
+    @GetMapping("getCourseInfoHead")
+    public HttpResponseResult getCourseInfoHead(int courseId) {
+        return succeed(courseReviewService.getCourseInfoHead(courseId));
+    }
+
+    @ApiOperation(value = "修改评论信息")
+    @GetMapping("updateReviewInfo")
+    public HttpResponseResult updateReviewInfo(CourseScheduleReview courseScheduleReview) {
+        return succeed(courseReviewService.updateReview(courseScheduleReview));
+    }
+}

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

@@ -50,7 +50,7 @@ public class SysTenantAccountController extends BaseController {
 		}
 		queryInfo.setUserId(sysUser.getId());
 
-		return succeed(sysTenantAccountService.queryPage(queryInfo));
+		return succeed(sysTenantAccountDetailService.queryPage(queryInfo));
 	}
 
 }

+ 7 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java

@@ -2,6 +2,7 @@ package com.ym.mec.teacher.controller;
 
 import com.ym.mec.biz.dal.dto.TeacherRemarkCommitDto;
 
+import com.ym.mec.common.page.QueryInfo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
@@ -300,4 +301,10 @@ public class TeacherCourseScheduleController extends BaseController {
         return succeed(scheduleService.teacherCourseRates(courseScheduleId));
     }
 
+    @ApiOperation(value = "课时使用记录列表")
+    @GetMapping("/teacherCourseMinutes")
+    public Object teacherCourseMinutes(QueryInfo queryInfo){
+        return succeed(scheduleService.teacherCourseMinutes(queryInfo));
+    }
+
 }

+ 69 - 0
mec-web/src/main/java/com/ym/mec/web/controller/CourseReviewController.java

@@ -0,0 +1,69 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.page.CourseReviewQueryInfo;
+import com.ym.mec.biz.service.CourseReviewService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RequestMapping("courseReview")
+@Api(tags = "课程评价")
+@RestController
+public class CourseReviewController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private EmployeeDao employeeDao;
+
+    @Autowired
+    private CourseReviewService courseReviewService;
+
+
+    @ApiOperation(value = "网管课课程评论管理")
+    @GetMapping("getPracticeGroup")
+    @PreAuthorize("@pcs.hasPermissions('courseReview/getPracticeGroup')")
+    public Object getPracticeGroup(CourseReviewQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        if (!sysUser.getIsSuperAdmin()) {
+            Employee employee = employeeDao.get(sysUser.getId());
+            if (StringUtils.isEmpty(queryInfo.getOrganId())) {
+                queryInfo.setOrganId(employee.getOrganIdList());
+            } else if (StringUtils.isEmpty(employee.getOrganIdList())) {
+                return failed("用户所在分部异常");
+            } else {
+                List<String> list = Arrays.asList(employee.getOrganIdList().split(","));
+                if (!list.containsAll(Arrays.asList(queryInfo.getOrganId().split(",")))) {
+                    return failed("非法请求");
+                }
+            }
+        }
+        return succeed(courseReviewService.findPracticeGroupReviews(queryInfo));
+    }
+
+    @ApiOperation(value = "网管课评论详情")
+    @GetMapping("getReviewInfo")
+    @PreAuthorize("@pcs.hasPermissions('courseReview/getReviewInfo')")
+    public HttpResponseResult getReviewInfo(int id) {
+        return succeed(courseReviewService.getReviewInfo(id));
+    }
+
+}

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

@@ -1,5 +1,33 @@
 package com.ym.mec.web.controller;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+import org.apache.commons.lang3.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.ui.ModelMap;
+import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.ClassGroupDao;

+ 60 - 0
mec-web/src/main/java/com/ym/mec/web/controller/education/EduCourseReviewController.java

@@ -0,0 +1,60 @@
+package com.ym.mec.web.controller.education;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.dao.EmployeeDao;
+import com.ym.mec.biz.dal.entity.CourseScheduleReview;
+import com.ym.mec.biz.dal.entity.Employee;
+import com.ym.mec.biz.dal.page.CourseReview4EduQueryInfo;
+import com.ym.mec.biz.dal.page.CourseReviewQueryInfo;
+import com.ym.mec.biz.service.CourseReviewService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RequestMapping("eduCourseReview")
+@Api(tags = "课程评价")
+@RestController
+public class EduCourseReviewController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @Autowired
+    private CourseReviewService courseReviewService;
+
+
+    @ApiOperation(value = "网管课课程评论管理")
+    @GetMapping("getPracticeGroup")
+    public Object getPracticeGroup(CourseReview4EduQueryInfo queryInfo) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setEduTeacherId(sysUser.getId());
+        return succeed(courseReviewService.findPracticeGroupReviews4Edu(queryInfo));
+    }
+
+    @ApiOperation(value = "网管课评论详情")
+    @GetMapping("getReviewInfo")
+    public HttpResponseResult getReviewInfo(int id) {
+        return succeed(courseReviewService.getReviewInfo(id));
+    }
+
+    @ApiOperation(value = "教务评论")
+    @GetMapping("updateReviewInfo")
+    public HttpResponseResult updateReviewInfo(CourseScheduleReview courseScheduleReview) {
+        return succeed(courseReviewService.updateReview(courseScheduleReview));
+    }
+
+}