Преглед на файлове

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
Joburgess преди 5 години
родител
ревизия
5453bb59c5
променени са 35 файла, в които са добавени 1166 реда и са изтрити 414 реда
  1. 2 2
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  2. 1 1
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/service/impl/SysUserServiceImpl.java
  3. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleDao.java
  4. 25 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleEvaluateDao.java
  5. 20 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupDto.java
  7. 32 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleEvaluate.java
  8. 27 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysTenantAccount.java
  9. 106 57
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysTenantAccountDetail.java
  10. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  11. 38 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TenantAccountDetailQueryInfo.java
  12. 30 8
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleEvaluateService.java
  13. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleService.java
  14. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysConfigService.java
  15. 10 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  16. 114 11
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleEvaluateServiceImpl.java
  17. 29 12
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java
  18. 118 21
      mec-biz/src/main/resources/config/mybatis/CourseScheduleEvaluateMapper.xml
  19. 4 0
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  20. 3 3
      mec-biz/src/main/resources/config/mybatis/CourseScheduleTeacherSalaryMapper.xml
  21. 316 225
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  22. 28 16
      mec-biz/src/main/resources/config/mybatis/SysTenantAccountDetailMapper.xml
  23. 2 2
      mec-biz/src/main/resources/config/mybatis/SysTenantAccountMapper.xml
  24. 4 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  25. 5 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  26. 13 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseScheduleController.java
  27. 1 1
      mec-student/src/main/java/com/ym/mec/student/controller/StudyReportController.java
  28. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/NeedPostReportTask.java
  29. 1 1
      mec-teacher/src/main/java/com/ym/mec/teacher/config/ResourceServerConfig.java
  30. 84 43
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudyReportController.java
  31. 56 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysTenantAccountController.java
  32. 25 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  33. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/APIController.java
  34. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/PracticeGroupManageController.java
  35. 9 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

+ 2 - 2
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("${message.lesseeOrganId}")
+//	private Integer lesseeOrganId;
 
 	@Autowired
 	private AuthorizationServerTokenServices defaultAuthorizationServerTokenServices;

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

@@ -44,7 +44,7 @@ public class SysUserServiceImpl extends BaseServiceImpl<Integer, SysUser> implem
 
 	@Value("${message.autoRegister}")
 	private boolean autoRegister;
-	@Value("${message.lesseeOrganId}")
+	@Value("${auth.sysconfig.tenantId}")
 	private Integer lesseeOrganId;
 
 	@Override

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

@@ -1344,4 +1344,12 @@ public interface CourseScheduleDao extends BaseDAO<Long, CourseSchedule> {
      * @return
      */
     CourseSchedule getLastEndCourse(@Param("groupId") String groupId, @Param("groupType") String groupType);
+
+    /**
+     * 根据课程组获取课表信息
+     * @param groupType
+     * @param groupId
+     * @return
+     */
+    List<CourseSchedule> findCourseByGroupId(@Param("groupType") String groupType, @Param("groupId") String groupId);
 }

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

@@ -39,7 +39,7 @@ public interface CourseScheduleEvaluateDao extends BaseDAO<Long, CourseScheduleE
      * @param groupId
      * @return
      */
-    List<CourseScheduleEvaluate> findByGroupId(@Param("groupId") Integer groupId);
+    List<CourseScheduleEvaluate> findByGroupId(@Param("groupId") Integer groupId, @Param("status") Integer status);
 
     /**
      * 根据id获取报告
@@ -50,9 +50,33 @@ public interface CourseScheduleEvaluateDao extends BaseDAO<Long, CourseScheduleE
 
     /**
      * 获取当前课程教师的评价列表
+     *
      * @param teacherId
      * @param courseScheduleId
      * @return
      */
     List<CourseScheduleEvaluate> findByCourseAndTeacher(@Param("teacherId") Integer teacherId, @Param("courseScheduleId") Long courseScheduleId);
+
+    /**
+     * 获取要提交的报告
+     *
+     * @param teacherId
+     * @return
+     */
+    List<CourseScheduleEvaluate> getNeedPostReports(@Param("teacherId") Integer teacherId);
+
+    /**
+     * 批量插入报告
+     *
+     * @param list
+     * @return
+     */
+    int batchAdd(@Param("list") List<CourseScheduleEvaluate> list);
+
+    /**
+     * 获取班级课程数
+     * @param classGroupId
+     * @return
+     */
+    Integer getClassGroupCourseTimes(@Param("classGroupId") Integer classGroupId);
 }

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

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.dao;
 
 import com.ym.mec.biz.dal.dto.PracticeCourseDto;
 import com.ym.mec.biz.dal.dto.PracticeGroupDto;
+import com.ym.mec.biz.dal.entity.ClassGroup;
+import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
 import com.ym.mec.biz.dal.entity.PracticeGroup;
 import com.ym.mec.biz.dal.enums.GroupStatusEnum;
 import org.apache.ibatis.annotations.Param;
@@ -181,4 +183,22 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
     List<PracticeGroupDto> findPracticeGroupsReviews(Map<String, Object> params);
 
     Integer countPracticeGroupReviews(Map<String, Object> params);
+
+    /**
+     * 獲取要预生成报告的数据
+     *
+     * @param nowDate
+     * @param afterDate
+     * @return
+     */
+    List<CourseScheduleEvaluate> getNeedPostReportPracticeGroups(@Param("nowDate") Date nowDate, @Param("afterDate") Date afterDate);
+
+    /**
+     * 获取报告的课次数
+     * @param classGroupIds
+     * @param startDate
+     * @param endDate
+     * @return
+     */
+    List<ClassGroup> getReportCourseTimes(@Param("classGroupIds") List<Integer> classGroupIds, @Param("startDate") Date startDate, @Param("endDate") Date endDate);
 }

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupDto.java

@@ -26,6 +26,8 @@ public class PracticeGroupDto extends PracticeGroup {
 
     private Integer evaluateId;
 
+    private Integer evaluateStatus;
+
     public Integer getSubClassTimes() {
         return subClassTimes;
     }
@@ -105,4 +107,12 @@ public class PracticeGroupDto extends PracticeGroup {
     public void setEvaluateId(Integer evaluateId) {
         this.evaluateId = evaluateId;
     }
+
+    public Integer getEvaluateStatus() {
+        return evaluateStatus;
+    }
+
+    public void setEvaluateStatus(Integer evaluateStatus) {
+        this.evaluateStatus = evaluateStatus;
+    }
 }

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleEvaluate.java

@@ -11,6 +11,9 @@ public class CourseScheduleEvaluate {
 
     private String musicGroupId;
 
+    @ApiModelProperty(value = "课程组名称")
+    private String groupName;
+
     @ApiModelProperty(value = "班级id")
     private Integer classGroupId;
 
@@ -26,6 +29,8 @@ public class CourseScheduleEvaluate {
 
     private Date createTime;
 
+    private Date updateTime;
+
     private Integer studentId;
 
     @ApiModelProperty(value = "学生专业")
@@ -64,6 +69,9 @@ public class CourseScheduleEvaluate {
     @ApiModelProperty(value = "报告提交或查看Url")
     private String reportLink;
 
+    @ApiModelProperty(value = "状态 1-已提交 0-未提交")
+    private Integer status;
+
     public String getStudentIdList() {
         return studentIdList;
     }
@@ -241,4 +249,28 @@ public class CourseScheduleEvaluate {
     public void setReportLink(String reportLink) {
         this.reportLink = reportLink;
     }
+
+    public String getGroupName() {
+        return groupName;
+    }
+
+    public void setGroupName(String groupName) {
+        this.groupName = groupName;
+    }
+
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
 }

+ 27 - 3
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysTenantAccount.java

@@ -2,10 +2,34 @@ package com.ym.mec.biz.dal.entity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import com.ym.mec.common.enums.BaseEnum;
+
 /**
  * 对应数据库表(sys_tenant_account):
  */
 public class SysTenantAccount {
+	
+	public enum AccountStatus implements BaseEnum<Integer, AccountStatus> {
+		FREEZE(0, "冻结"), NORMAL(1, "正常"), LOGOUT(2, "注销");
+
+		private Integer code;
+
+		private String desc;
+
+		AccountStatus(Integer code, String desc) {
+			this.code = code;
+			this.desc = desc;
+		}
+
+		public String getDesc() {
+			return desc;
+		}
+
+		@Override
+		public Integer getCode() {
+			return this.code;
+		}
+	}
 
 	/**  */
 	private Integer userId;
@@ -17,7 +41,7 @@ public class SysTenantAccount {
 	private Integer frozenMinutes;
 	
 	/** 账户状态(0,冻结,1,正常;-1,注销;) */
-	private Integer status;
+	private AccountStatus status;
 	
 	/**  */
 	private java.util.Date createTime;
@@ -49,11 +73,11 @@ public class SysTenantAccount {
 		return this.frozenMinutes;
 	}
 			
-	public void setStatus(Integer status){
+	public void setStatus(AccountStatus status){
 		this.status = status;
 	}
 	
-	public Integer getStatus(){
+	public AccountStatus getStatus(){
 		return this.status;
 	}
 			

+ 106 - 57
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysTenantAccountDetail.java

@@ -2,132 +2,181 @@ package com.ym.mec.biz.dal.entity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import com.ym.mec.biz.dal.enums.DealStatusEnum;
+import com.ym.mec.common.enums.BaseEnum;
+
 /**
  * 对应数据库表(sys_tenant_account_detail):
  */
 public class SysTenantAccountDetail {
 
+	public enum TransStatus implements BaseEnum<String, DealStatusEnum> {
+		ING("ING", "交易中"), SUCCESS("SUCCESS", "成功交易"), FAILED("FAILED", "交易失败"), CLOSE("CLOSE", "交易关闭");
+
+		private String code;
+
+		private String desc;
+
+		TransStatus(String code, String desc) {
+			this.code = code;
+			this.desc = desc;
+		}
+
+		@Override
+		public String getCode() {
+			return code;
+		}
+
+		public String getDesc() {
+			return desc;
+		}
+
+	}
+	
+	public enum TransType implements BaseEnum<String, TransType> {
+		RECHARGE("RECHARGE", "充值"), CONSUME("CONSUME", "消费");
+
+		private String code;
+
+		private String desc;
+
+		TransType(String code, String desc) {
+			this.code = code;
+			this.desc = desc;
+		}
+
+		@Override
+		public String getCode() {
+			return code;
+		}
+
+		public String getDesc() {
+			return desc;
+		}
+
+	}
+
 	/**  */
 	private Long id;
-	
+
 	/**  */
 	private Integer userId;
-	
+
 	/** 交易类型 */
-	private String transType;
-	
+	private TransType transType;
+
 	/** 交易状态 */
-	private String transStatus;
-	
+	private TransStatus transStatus;
+
 	/** 交易流水 */
 	private String transNo;
-	
+
 	/** 现金数额 */
 	private java.math.BigDecimal transCashAmount;
-	
+
 	/** 账户总可用分钟数 */
 	private Integer totalAvailableMinutes;
-	
+
 	/** 交易的分钟数 */
 	private Integer transMinutes;
-	
+
 	/**  */
 	private String memo;
-	
+
 	/**  */
 	private java.util.Date createTime;
-	
+
 	/**  */
 	private java.util.Date updateTime;
-	
-	public void setId(Long id){
+
+	public void setId(Long id) {
 		this.id = id;
 	}
-	
-	public Long getId(){
+
+	public Long getId() {
 		return this.id;
 	}
-			
-	public void setUserId(Integer userId){
+
+	public void setUserId(Integer userId) {
 		this.userId = userId;
 	}
-	
-	public Integer getUserId(){
+
+	public Integer getUserId() {
 		return this.userId;
 	}
-			
-	public void setTransType(String transType){
+
+	public void setTransType(TransType transType) {
 		this.transType = transType;
 	}
-	
-	public String getTransType(){
+
+	public TransType getTransType() {
 		return this.transType;
 	}
-			
-	public void setTransStatus(String transStatus){
+
+	public void setTransStatus(TransStatus transStatus) {
 		this.transStatus = transStatus;
 	}
-	
-	public String getTransStatus(){
+
+	public TransStatus getTransStatus() {
 		return this.transStatus;
 	}
-			
-	public void setTransNo(String transNo){
+
+	public void setTransNo(String transNo) {
 		this.transNo = transNo;
 	}
-	
-	public String getTransNo(){
+
+	public String getTransNo() {
 		return this.transNo;
 	}
-			
-	public void setTransCashAmount(java.math.BigDecimal transCashAmount){
+
+	public void setTransCashAmount(java.math.BigDecimal transCashAmount) {
 		this.transCashAmount = transCashAmount;
 	}
-	
-	public java.math.BigDecimal getTransCashAmount(){
+
+	public java.math.BigDecimal getTransCashAmount() {
 		return this.transCashAmount;
 	}
-			
-	public void setTotalAvailableMinutes(Integer totalAvailableMinutes){
+
+	public void setTotalAvailableMinutes(Integer totalAvailableMinutes) {
 		this.totalAvailableMinutes = totalAvailableMinutes;
 	}
-	
-	public Integer getTotalAvailableMinutes(){
+
+	public Integer getTotalAvailableMinutes() {
 		return this.totalAvailableMinutes;
 	}
-			
-	public void setTransMinutes(Integer transMinutes){
+
+	public void setTransMinutes(Integer transMinutes) {
 		this.transMinutes = transMinutes;
 	}
-	
-	public Integer getTransMinutes(){
+
+	public Integer getTransMinutes() {
 		return this.transMinutes;
 	}
-			
-	public void setMemo(String memo){
+
+	public void setMemo(String memo) {
 		this.memo = memo;
 	}
-	
-	public String getMemo(){
+
+	public String getMemo() {
 		return this.memo;
 	}
-			
-	public void setCreateTime(java.util.Date createTime){
+
+	public void setCreateTime(java.util.Date createTime) {
 		this.createTime = createTime;
 	}
-	
-	public java.util.Date getCreateTime(){
+
+	public java.util.Date getCreateTime() {
 		return this.createTime;
 	}
-			
-	public void setUpdateTime(java.util.Date updateTime){
+
+	public void setUpdateTime(java.util.Date updateTime) {
 		this.updateTime = updateTime;
 	}
-	
-	public java.util.Date getUpdateTime(){
+
+	public java.util.Date getUpdateTime() {
 		return this.updateTime;
 	}
-			
+
 	@Override
 	public String toString() {
 		return ToStringBuilder.reflectionToString(this);

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

@@ -112,7 +112,9 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     BACKSTAGE_STUDENT_APPLY_QUIT_GROUP("BACKSTAGE_STUDENT_APPLY_QUIT_GROUP", "学员申请退团"),
     BACKSTAGE_STUDENT_APPLY_QUIT_COURSE("BACKSTAGE_STUDENT_APPLY_QUIT_COURSE", "学员申请退课"),
     BACKSTAGE_STUDENT_APPLY_WITHDRAW("BACKSTAGE_STUDENT_APPLY_WITHDRAW", "学员申请提现"),
-    PUSH_STUDY_REPORT("PUSH_STUDY_REPORT", "陪练报告");
+    PUSH_STUDY_REPORT("PUSH_STUDY_REPORT", "陪练报告"),
+    NEED_POST_STUDY_REPORT("NEED_POST_STUDY_REPORT", "新增待填写月报");
+
 
     MessageTypeEnum(String code, String msg) {
         this.code = code;

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TenantAccountDetailQueryInfo.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.biz.dal.entity.SysTenantAccountDetail.TransStatus;
+import com.ym.mec.biz.dal.entity.SysTenantAccountDetail.TransType;
+import com.ym.mec.common.page.QueryInfo;
+
+public class TenantAccountDetailQueryInfo extends QueryInfo {
+
+	private TransType transType;
+
+	private TransStatus transStatus;
+
+	private Integer userId;
+
+	public TransType getTransType() {
+		return transType;
+	}
+
+	public void setTransType(TransType transType) {
+		this.transType = transType;
+	}
+
+	public TransStatus getTransStatus() {
+		return transStatus;
+	}
+
+	public void setTransStatus(TransStatus transStatus) {
+		this.transStatus = transStatus;
+	}
+
+	public Integer getUserId() {
+		return userId;
+	}
+
+	public void setUserId(Integer userId) {
+		this.userId = userId;
+	}
+}

+ 30 - 8
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleEvaluateService.java

@@ -1,13 +1,8 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
-import com.ym.mec.biz.dal.entity.TeacherCourseStatistics;
-import com.ym.mec.biz.dal.page.TeacherCourseStatisticsQueryInfo;
-import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.List;
+import java.util.*;
 
 
 public interface CourseScheduleEvaluateService extends BaseService<Long, CourseScheduleEvaluate> {
@@ -22,13 +17,40 @@ public interface CourseScheduleEvaluateService extends BaseService<Long, CourseS
      * @param groupId
      * @return
      */
-    List<CourseScheduleEvaluate> findByGroupId(@Param("groupId") Integer groupId);
+    List<CourseScheduleEvaluate> findByGroupId(Integer groupId,Integer status);
 
     /**
      * 根据id获取报告
      *
      * @return
      */
-    CourseScheduleEvaluate findById(@Param("id") Integer id);
+    CourseScheduleEvaluate findById(Integer id);
+
+    /**
+     * 获取需评论的课程列表
+     * @param teacherId
+     * @return
+     */
+    List<CourseScheduleEvaluate> getNeedPostList(Integer teacherId);
+
+
+    /**
+     * 预生成学习报告
+     * @param NowDate
+     * @param afterDate
+     * @return
+     */
+    List<CourseScheduleEvaluate> createEvaluate(Date nowDate);
+
+    /**
+     * 更新学习报告
+     * @param courseScheduleEvaluate
+     * @return
+     */
+    boolean updateStudyReport(CourseScheduleEvaluate courseScheduleEvaluate);
 
+    /**
+     * 推栋需填写报告给老师
+     */
+    void pushNeedPostReport();
 }

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

@@ -477,4 +477,20 @@ public interface CourseScheduleService extends BaseService<Long, CourseSchedule>
 	 * @return
 	 */
 	Object teacherCourseRates(Long courseScheduleId);
+
+	/**
+	 * 根据课程组获取课程组老师信息
+	 * @param groupType
+	 * @param groupId
+	 * @return
+	 */
+	Object getTeacherCourseHeadInfo(GroupType groupType,String groupId);
+
+	/**
+	 * 根据课程组获取课表信息
+	 * @param groupType
+	 * @param groupId
+	 * @return
+	 */
+	Object queryCourseInfoByGroupId(GroupType groupType, String groupId);
 }

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

@@ -168,6 +168,11 @@ public interface SysConfigService extends BaseService<Long, SysConfig> {
     String PRACTICE_RENEW_URL = "practice_renew_url";
 
     /**
+     * @describe 老师端baseUrl
+     */
+    String TEACHER_BASE_URL = "teacher_base_url";
+
+    /**
      * @return com.ym.mec.biz.dal.entity.SysConfig
      * @params paramName
      * @describe 根据配置名称获取配置信息

+ 10 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java

@@ -674,9 +674,15 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
                 e.setStudentNames(practiceStuNames.get(e.getPracticeId()));
                 e.setPracticeRenewUrl(practiceRenewUrlConfig.getParanValue() + e.getPracticeId());
                 if(reportMap.containsKey(e.getClassGroupId())){
+                    List<CourseScheduleEvaluate> classGroupCourseScheduleEvaluates = reportMap.get(e.getClassGroupId());
+                    CourseScheduleEvaluate courseScheduleEvaluate = classGroupCourseScheduleEvaluates.get(classGroupCourseScheduleEvaluates.size() - 1);
                     e.setHasReport(true);
                     String baseUrl = sysConfigDao.findConfigValue(SysConfigService.BASE_API_URL);
-                    e.setStudyReportUrl(baseUrl + "/#/reportDetail?classGroupId=" + e.getClassGroupId());
+                    if(courseScheduleEvaluate.getVersion().equals(1)){
+                        e.setStudyReportUrl(baseUrl + "/#/reportDetail?classGroupId=" + e.getClassGroupId());
+                    }else if(courseScheduleEvaluate.getVersion().equals(2)){
+                        e.setStudyReportUrl(baseUrl + "/#/reportDetailNew?id=" + courseScheduleEvaluate.getId()+"&classGroupId=" + e.getClassGroupId());
+                    }
                 }
             }
             if (ClassGroupTypeEnum.VIP == e.getType()) {
@@ -1024,9 +1030,9 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
             //剩余课程为显示陪练报告入口rul
             if(teacherClassGroupDto.getType() == ClassGroupTypeEnum.PRACTICE){
                 List<CourseScheduleEvaluate> courseScheduleEvaluates = courseScheduleEvaluateDao.findByClassGroupIds(classGroupIds);
-                Map<Integer, Long> reportMap = new HashMap<>();
-                if(courseScheduleEvaluates.size() >0 ) {
-                    reportMap = courseScheduleEvaluates.stream().collect(Collectors.toMap(CourseScheduleEvaluate::getClassGroupId, CourseScheduleEvaluate::getId));
+                Map<Integer, List<CourseScheduleEvaluate>> reportMap = new HashMap<>();
+                if(courseScheduleEvaluates.size()>0) {
+                    reportMap = courseScheduleEvaluates.stream().collect(Collectors.groupingBy(CourseScheduleEvaluate::getClassGroupId));
                 }
                 if(reportMap.containsKey(teacherClassGroupDto.getClassGroupId().intValue())){
                     teacherClassGroupDto.setHasReport(true);

+ 114 - 11
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleEvaluateServiceImpl.java

@@ -2,26 +2,28 @@ package com.ym.mec.biz.service.impl;
 
 
 import com.ym.mec.auth.api.entity.SysUser;
-import com.ym.mec.biz.dal.dao.ClassGroupDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao;
-import com.ym.mec.biz.dal.dao.PracticeGroupDao;
-import com.ym.mec.biz.dal.dao.TeacherDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.BasicUserDto;
 import com.ym.mec.biz.dal.entity.ClassGroup;
 import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
 import com.ym.mec.biz.dal.entity.PracticeGroup;
+import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.service.CourseScheduleEvaluateService;
+import com.ym.mec.biz.service.SysConfigService;
+import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.redis.service.RedisCache;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
+import com.ym.mec.util.date.DateUtil;
 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 java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -37,6 +39,10 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
     private PracticeGroupDao practiceGroupDao;
     @Autowired
     private RedisCache<String, Object> redisCache;
+    @Autowired
+    private SysMessageService sysMessageService;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     @Override
     public BaseDAO<Long, CourseScheduleEvaluate> getDAO() {
@@ -45,7 +51,6 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
 
 
     @Override
-    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
     public boolean addStudyReport(CourseScheduleEvaluate courseScheduleEvaluate) {
         ClassGroup classGroup = classGroupDao.get(courseScheduleEvaluate.getClassGroupId());
         if (classGroup == null) {
@@ -60,8 +65,15 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
             if (hasOne != null) {
                 throw new BizException("报告已添加,请勿重复提交");
             }
+            Integer classGroupCourseTimes = courseScheduleEvaluateDao.getClassGroupCourseTimes(classGroup.getId());
+            Date date = new Date();
+            courseScheduleEvaluate.setTimes(classGroupCourseTimes);
+            courseScheduleEvaluate.setTotalMinutes(classGroupCourseTimes);
             courseScheduleEvaluate.setMusicGroupId(classGroup.getMusicGroupId());
-            courseScheduleEvaluate.setCreateTime(new Date());
+            courseScheduleEvaluate.setCreateTime(date);
+            courseScheduleEvaluate.setUpdateTime(date);
+            courseScheduleEvaluate.setStatus(1);
+            courseScheduleEvaluate.setVersion(1);
             long num = courseScheduleEvaluateDao.insert(courseScheduleEvaluate);
             if (num <= 0) {
                 throw new BizException("报告添加失败,请重试");
@@ -92,12 +104,103 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
     }
 
     @Override
-    public List<CourseScheduleEvaluate> findByGroupId(Integer groupId) {
-        return courseScheduleEvaluateDao.findByGroupId(groupId);
+    public List<CourseScheduleEvaluate> findByGroupId(Integer groupId, Integer status) {
+        return courseScheduleEvaluateDao.findByGroupId(groupId, status);
     }
 
     @Override
     public CourseScheduleEvaluate findById(Integer id) {
-        return courseScheduleEvaluateDao.findById(id);
+        CourseScheduleEvaluate studyReport = courseScheduleEvaluateDao.findById(id);
+        if (studyReport == null) {
+            throw new BizException("报告不存在");
+        }
+        SysUser user = teacherDao.getUser(studyReport.getStudentId());
+        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;
+    }
+
+    @Override
+    public List<CourseScheduleEvaluate> getNeedPostList(Integer teacherId) {
+        return courseScheduleEvaluateDao.getNeedPostReports(teacherId);
+    }
+
+    @Override
+    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);
+
+        Map<Integer, Integer> courseTimesMap = new HashMap<>();
+        if (needPostReportPracticeGroups.size() > 0) {
+            Date courseStartDate = DateUtil.addMonths(startDate, -1);
+            List<Integer> classGroupIds = needPostReportPracticeGroups.stream().map(CourseScheduleEvaluate::getClassGroupId).collect(Collectors.toList());
+            List<ClassGroup> reportCourseTimes = practiceGroupDao.getReportCourseTimes(classGroupIds, courseStartDate, startDate);
+            courseTimesMap = reportCourseTimes.stream().collect(Collectors.toMap(ClassGroup::getId, ClassGroup::getTotalClassTimes));
+        }
+        for (CourseScheduleEvaluate needPostReportPracticeGroup : needPostReportPracticeGroups) {
+            int times = 0;
+            if (courseTimesMap.containsKey(needPostReportPracticeGroup.getClassGroupId()) &&
+                    courseTimesMap.get(needPostReportPracticeGroup.getClassGroupId()) != null
+            ) {
+                times = courseTimesMap.get(needPostReportPracticeGroup.getClassGroupId());
+            }
+            needPostReportPracticeGroup.setTimes(times);
+            needPostReportPracticeGroup.setTotalMinutes(times * needPostReportPracticeGroup.getTotalMinutes());
+            needPostReportPracticeGroup.setCreateTime(nowDate);
+            needPostReportPracticeGroup.setUpdateTime(nowDate);
+            needPostReportPracticeGroup.setStatus(0);
+            needPostReportPracticeGroup.setVersion(2);
+        }
+        if (needPostReportPracticeGroups.size() > 0) {
+            courseScheduleEvaluateDao.batchAdd(needPostReportPracticeGroups);
+        }
+        return needPostReportPracticeGroups;
+    }
+
+    @Override
+    public boolean updateStudyReport(CourseScheduleEvaluate courseScheduleEvaluate) {
+        CourseScheduleEvaluate evaluate = courseScheduleEvaluateDao.get(courseScheduleEvaluate.getId());
+        if (evaluate == null) {
+            throw new BizException("课程不存在!");
+        }
+        evaluate.setUpdateTime(new Date());
+        evaluate.setStatus(1);
+        evaluate.setMusicTheory(courseScheduleEvaluate.getMusicTheory());
+        evaluate.setSong(courseScheduleEvaluate.getSong());
+        evaluate.setTeachingMaterial(courseScheduleEvaluate.getTeachingMaterial());
+        evaluate.setItem(courseScheduleEvaluate.getItem());
+        evaluate.setComment(courseScheduleEvaluate.getComment());
+        long num = courseScheduleEvaluateDao.update(evaluate);
+        if (num <= 0) {
+            throw new BizException("报告添加失败,请重试");
+        }
+        return true;
+    }
+
+    @Override
+    public void pushNeedPostReport() {
+        List<CourseScheduleEvaluate> needPostReports = courseScheduleEvaluateDao.getNeedPostReports(null);
+        if (needPostReports.size() == 0) {
+            return;
+        }
+        Map<Integer, List<CourseScheduleEvaluate>> teacherEvaluates = needPostReports.stream().collect(Collectors.groupingBy(CourseScheduleEvaluate::getTeacherId));
+        String teacherBaseUrl = sysConfigDao.findConfigValue(SysConfigService.TEACHER_BASE_URL);
+
+        String pushUrl = teacherBaseUrl + "/#/tobeReport";
+        Map<Integer, String> userMap = new HashMap<>();
+        for (Map.Entry<Integer, List<CourseScheduleEvaluate>> integerListEntry : teacherEvaluates.entrySet()) {
+            userMap.put(integerListEntry.getKey(), integerListEntry.getKey().toString());
+        }
+
+        sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.NEED_POST_STUDY_REPORT,
+                userMap, null, 0, "5?" + pushUrl, "TEACHER");
+
     }
 }

+ 29 - 12
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleServiceImpl.java

@@ -3940,21 +3940,12 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
-	public Object teacherCourseHeadInfo(Long courseScheduleId) {
-		SysUser user = sysUserFeignService.queryUserInfo();
-		if (null == user) {
-			throw new BizException("获取用户信息失败");
-		}
-		CourseSchedule schedule = courseScheduleDao.get(courseScheduleId);
-		if(schedule == null){
-			throw new BizException("课程不存在");
-		}
-		GroupType groupType = schedule.getGroupType();
+	public Object getTeacherCourseHeadInfo(GroupType groupType,String groupId){
 		Map<String,Object> resultMap = new HashMap<>(8);
 		Teacher teacher;
 		switch (groupType){
 			case PRACTICE:
-				PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(schedule.getMusicGroupId()));
+				PracticeGroup practiceGroup = practiceGroupDao.get(Long.parseLong(groupId));
 				resultMap.put("groupName",practiceGroup.getName());
 				resultMap.put("startTime",practiceGroup.getCoursesStartDate());
 				resultMap.put("endTime",practiceGroup.getCoursesExpireDate());
@@ -3967,7 +3958,7 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 				resultMap.put("teacherGiveLesson",courseScheduleTeacherSalaryDao.countTeacherGiveLesson(practiceGroup.getUserId()));
 				break;
 			case VIP:
-				VipGroup vipGroup = vipGroupDao.get(Long.parseLong(schedule.getMusicGroupId()));
+				VipGroup vipGroup = vipGroupDao.get(Long.parseLong(groupId));
 				resultMap.put("groupName",vipGroup.getName());
 				resultMap.put("startTime",vipGroup.getCourseStartDate());
 				resultMap.put("endTime",vipGroup.getCoursesExpireDate());
@@ -3986,6 +3977,32 @@ public class CourseScheduleServiceImpl extends BaseServiceImpl<Long, CourseSched
 	}
 
 	@Override
+	public Object queryCourseInfoByGroupId(GroupType groupType, String groupId) {
+    	List<CourseSchedule> courseSchedules = courseScheduleDao.findCourseByGroupId(groupType.getCode(),groupId);
+    	Map<String,Object> resultMap = new HashMap<>(4);
+    	resultMap.put("courseInfo",courseSchedules);
+    	resultMap.put("count",courseSchedules.size());
+		int online = courseSchedules.stream().filter(e -> e.getTeachMode() == TeachModeEnum.ONLINE).collect(Collectors.toList()).size();
+		int offline = courseSchedules.stream().filter(e -> e.getTeachMode() == TeachModeEnum.OFFLINE).collect(Collectors.toList()).size();
+		resultMap.put("online",online);
+		resultMap.put("offline",offline);
+		return resultMap;
+	}
+
+	@Override
+	public Object teacherCourseHeadInfo(Long courseScheduleId) {
+		SysUser user = sysUserFeignService.queryUserInfo();
+		if (null == user) {
+			throw new BizException("获取用户信息失败");
+		}
+		CourseSchedule schedule = courseScheduleDao.get(courseScheduleId);
+		if(schedule == null){
+			throw new BizException("课程不存在");
+		}
+		return getTeacherCourseHeadInfo(schedule.getGroupType(),schedule.getMusicGroupId());
+	}
+
+	@Override
 	public Object teacherCourseRates(Long courseScheduleId) {
 		SysUser user = sysUserFeignService.queryUserInfo();
 		if (null == user) {

+ 118 - 21
mec-biz/src/main/resources/config/mybatis/CourseScheduleEvaluateMapper.xml

@@ -10,6 +10,7 @@
         <result column="item_" jdbcType="VARCHAR" property="item"/>
         <result column="comment_" jdbcType="LONGVARCHAR" property="comment"/>
         <result column="create_time_" jdbcType="TIMESTAMP" property="createTime"/>
+        <result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
         <result column="student_id_" jdbcType="INTEGER" property="studentId"/>
         <result column="subject_name_" jdbcType="VARCHAR" property="subjectName"/>
         <result column="is_pushed_" jdbcType="INTEGER" property="isPushed"/>
@@ -17,29 +18,89 @@
         <result column="music_theory_" jdbcType="VARCHAR" property="musicTheory"/>
         <result column="song_" jdbcType="VARCHAR" property="song"/>
         <result column="teaching_material_" jdbcType="VARCHAR" property="teachingMaterial"/>
+        <result column="times_" jdbcType="INTEGER" property="times"/>
+        <result column="total_minutes_" jdbcType="INTEGER" property="totalMinutes"/>
         <result column="version_" jdbcType="INTEGER" property="version"/>
-		<result column="student_id_list_" jdbcType="VARCHAR" property="studentIdList"/>
+        <result column="student_id_list_" jdbcType="VARCHAR" property="studentIdList"/>
+        <result column="group_name_" jdbcType="VARCHAR" property="groupName"/>
+        <result column="status_" jdbcType="TINYINT" property="status"/>
     </resultMap>
     <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleEvaluate" useGeneratedKeys="true"
             keyColumn="id" keyProperty="id">
-        INSERT INTO course_schedule_evaluate (music_group_id_, class_group_id_, course_schedule_id_,music_theory_,song_,
-        teaching_material_,teacher_id_, item_, comment_,create_time_,student_id_list_,version_)
+        INSERT INTO course_schedule_evaluate (music_group_id_, class_group_id_, course_schedule_id_, music_theory_,
+                                              song_,times_,total_minutes_,
+                                              teaching_material_, teacher_id_, item_, comment_, create_time_,update_time_,
+                                              student_id_list_, version_, status_)
         values (#{musicGroupId,jdbcType=VARCHAR}, #{classGroupId,jdbcType=INTEGER}, #{courseScheduleId,jdbcType=BIGINT},
-                #{musicTheory,jdbcType=VARCHAR},#{song,jdbcType=VARCHAR},#{teachingMaterial,jdbcType=VARCHAR},#{teacherId,jdbcType=INTEGER},
-        #{item,jdbcType=VARCHAR}, #{comment,jdbcType=LONGVARCHAR},
-                NOW(),#{studentIdList},#{version,jdbcType=INTEGER})
+                #{musicTheory,jdbcType=VARCHAR}, #{song,jdbcType=VARCHAR},#{times,jdbcType=INTEGER},#{totalMinutes},#{teachingMaterial,jdbcType=VARCHAR},
+                #{teacherId,jdbcType=INTEGER}, #{item,jdbcType=VARCHAR}, #{comment,jdbcType=LONGVARCHAR}, #{createTime,jdbcType=TIMESTAMP},
+                #{updateTime,jdbcType=TIMESTAMP},#{studentIdList}, #{version,jdbcType=INTEGER}, #{status,jdbcType=TINYINT})
     </insert>
 
     <update id="update" parameterType="com.ym.mec.biz.dal.entity.CourseScheduleEvaluate">
-        update course_schedule_evaluate set is_pushed_=#{isPushed} where id_=#{id}
+        update course_schedule_evaluate
+        <set>
+            <if test="musicGroupId != null">
+                music_group_id_ = #{musicGroupId},
+            </if>
+            <if test="classGroupId != null">
+                class_group_id_ = #{classGroupId},
+            </if>
+            <if test="courseScheduleId != null">
+                course_schedule_id_ = #{courseScheduleId},
+            </if>
+            <if test="musicTheory != null">
+                music_theory_ = #{musicTheory},
+            </if>
+            <if test="song != null">
+                song_ = #{song},
+            </if>
+            <if test="teachingMaterial != null">
+                teaching_material_ = #{teachingMaterial},
+            </if>
+            <if test="item != null">
+                item_ = #{item},
+            </if>
+            <if test="comment != null">
+                comment_ = #{comment},
+            </if>
+            <if test="classGroupId != null">
+                class_group_id_ = #{classGroupId},
+            </if>
+            <if test="studentIdList != null">
+                student_id_list_ = #{studentIdList},
+            </if>
+            <if test="teacherId != null">
+                teacher_id_ = #{teacherId},
+            </if>
+            <if test="version != null != null">
+                version_ = #{version},
+            </if>
+            <if test="status != null">
+                status_ = #{status},
+            </if>
+            <if test="isPushed != null">
+                is_pushed_ = #{isPushed},
+            </if>
+            <if test="updateTime != null">
+                update_time_ = #{updateTime}
+            </if>
+        </set>
+        WHERE id_ = #{id}
     </update>
 
+    <select id="get" resultMap="CourseScheduleEvaluate">
+        SELECT * FROM course_schedule_evaluate WHERE id_ = #{id}
+    </select>
+
     <select id="findByClassGroupId" resultMap="CourseScheduleEvaluate">
         SELECT cse.*, s.name_ subject_name_, pg.student_id_
         FROM course_schedule_evaluate cse
                  LEFT JOIN practice_group pg ON pg.id_ = cse.music_group_id_
                  LEFT JOIN subject s on s.id_ = pg.subject_id_
-        WHERE cse.class_group_id_ = #{classGroupId} ORDER BY create_time_ DESC LIMIT 1
+        WHERE cse.class_group_id_ = #{classGroupId} AND status_=1 AND version_=1
+        ORDER BY create_time_ DESC
+        LIMIT 1
     </select>
 
     <select id="findByClassGroupIds" resultMap="CourseScheduleEvaluate">
@@ -47,6 +108,8 @@
         <foreach collection="classGroupIds" item="classGroupId" separator="," open="(" close=")">
             #{classGroupId}
         </foreach>
+        AND status_=1
+        ORDER BY create_time_ ASC
     </select>
 
     <resultMap id="PracticeGroupsOrgan" type="com.ym.mec.biz.dal.dto.PracticeGroupsDto">
@@ -86,12 +149,13 @@
                  LEFT JOIN practice_group pg on cse.music_group_id_ = pg.id_
             AND pg.buy_months_ IS NULL
             AND pg.group_status_ != 'LOCK'
+            AND cse.status_ = 1
         GROUP BY pg.organ_id_
     </select>
 
     <!-- 已完成课程数统计 -->
     <select id="getOrganPracticeGroups" resultMap="PracticeGroupsOrgan">
-        SELECT COUNT(class_group_id_) buy_nums_,cg.total_class_times_ total_nums_, pg.organ_id_
+        SELECT COUNT(class_group_id_) buy_nums_, cg.total_class_times_ total_nums_, pg.organ_id_
         FROM course_schedule cs
                  LEFT JOIN class_group cg on cg.id_ = cs.class_group_id_
                  LEFT JOIN practice_group pg ON cs.music_group_id_ = pg.id_
@@ -105,35 +169,68 @@
 
     <!-- 成交金额 -->
     <select id="getOrganMoney" resultMap="PracticeGroupsOrgan">
-        SELECT SUM(actual_amount_) total_money_,organ_id_ FROM student_payment_order
-        WHERE group_type_='PRACTICE' AND status_='SUCCESS'
+        SELECT SUM(actual_amount_) total_money_, organ_id_
+        FROM student_payment_order
+        WHERE group_type_ = 'PRACTICE'
+          AND status_ = 'SUCCESS'
         GROUP BY organ_id_
     </select>
     <select id="findExpiredDateBeforeReport" resultMap="CourseScheduleEvaluate">
-      SELECT * FROM course_schedule_evaluate
-      WHERE create_time_ &lt;= #{expiredDate}
-      AND (is_pushed_ = 0 OR is_pushed_ IS NULL)
+        SELECT *
+        FROM course_schedule_evaluate
+        WHERE status_ = 1 AND create_time_ &lt;= #{expiredDate}
+          AND (is_pushed_ = 0 OR is_pushed_ IS NULL)
     </select>
 
     <select id="findByGroupId" resultMap="CourseScheduleEvaluate">
-        SELECT id_,DATE_FORMAT(create_time_, '%Y年%m月') month_ FROM course_schedule_evaluate WHERE music_group_id_ = #{groupId}
+        SELECT id_,status_,class_group_id_,version_,times_,total_minutes_, DATE_FORMAT(create_time_, '%Y年%m月') month_
+        FROM course_schedule_evaluate
+        WHERE music_group_id_ = #{groupId}
+        <if test="status != null">
+            AND status_ = #{status}
+        </if>
         ORDER BY create_time_ ASC
     </select>
 
     <select id="findById" resultMap="CourseScheduleEvaluate">
         SELECT cse.*, s.name_ subject_name_, pg.student_id_
         FROM course_schedule_evaluate cse
-        LEFT JOIN practice_group pg ON pg.id_ = cse.music_group_id_
-        LEFT JOIN subject s on s.id_ = pg.subject_id_
+                 LEFT JOIN practice_group pg ON pg.id_ = cse.music_group_id_
+                 LEFT JOIN subject s on s.id_ = pg.subject_id_
         WHERE cse.id_ = #{id}
     </select>
 
     <select id="findByCourseAndTeacher" resultMap="CourseScheduleEvaluate">
-        SELECT * FROM course_schedule_evaluate cse
-        WHERE cse.teacher_id_ = #{teacherId} AND cse.course_schedule_id_ = #{courseScheduleId}
+        SELECT *
+        FROM course_schedule_evaluate cse
+        WHERE cse.teacher_id_ = #{teacherId}
+          AND cse.course_schedule_id_ = #{courseScheduleId}
     </select>
 
-<!--    <select id="getNeedReports" resultMap="CourseScheduleEvaluate">-->
+    <select id="getNeedPostReports" resultMap="CourseScheduleEvaluate">
+        SELECT cse.id_,DATE_FORMAT(cse.create_time_,'%Y年%m月') month_,pg.name_ group_name_,cse.teacher_id_ FROM course_schedule_evaluate cse
+        LEFT JOIN practice_group pg on cse.music_group_id_ = pg.id_ WHERE status_= 0
+        <if test="teacherId != null">
+            AND cse.teacher_id_ = #{teacherId}
+        </if>
+        ORDER BY cse.create_time_ ASC
+    </select>
 
-<!--    </select>-->
+    <insert id="batchAdd" parameterType="java.util.List" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+        INSERT INTO course_schedule_evaluate (music_group_id_, class_group_id_, course_schedule_id_, music_theory_,
+        song_,teaching_material_, teacher_id_, item_, comment_, create_time_,update_time_,student_id_list_, version_, status_,
+        times_,total_minutes_)
+        VALUE
+        <foreach collection="list" item="evaluate" separator=",">
+            (#{evaluate.musicGroupId,jdbcType=VARCHAR}, #{evaluate.classGroupId,jdbcType=INTEGER}, #{evaluate.courseScheduleId,jdbcType=BIGINT},
+            #{evaluate.musicTheory,jdbcType=VARCHAR}, #{evaluate.song,jdbcType=VARCHAR}, #{evaluate.teachingMaterial,jdbcType=VARCHAR},
+            #{evaluate.teacherId,jdbcType=INTEGER}, #{evaluate.item,jdbcType=VARCHAR}, #{evaluate.comment,jdbcType=LONGVARCHAR}, #{evaluate.createTime,jdbcType=LONGVARCHAR},
+            #{evaluate.updateTime,jdbcType=LONGVARCHAR}, #{evaluate.studentIdList}, #{evaluate.version,jdbcType=INTEGER}, #{evaluate.status,jdbcType=TINYINT},
+            #{evaluate.times,jdbcType=INTEGER},#{evaluate.totalMinutes,jdbcType=INTEGER})
+        </foreach>
+    </insert>
+
+    <select id="getClassGroupCourseTimes" resultType="int">
+        SELECT COUNT(*) FROM course_schedule WHERE class_group_id_ = #{classGroupId} AND (del_flag_=0 OR del_flag_ IS NULL)
+    </select>
 </mapper>

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

@@ -2785,6 +2785,10 @@
         GROUP BY
             cg.id_
     </select>
+    <select id="findCourseByGroupId" resultMap="CourseSchedule">
+        SELECT * FROM course_schedule cs
+        WHERE cs.music_group_id_ = #{groupId} AND cs.group_type_ = #{groupType} AND cs.del_flag_ = 0
+    </select>
 
     <update id="updateCourseNameByGroup">
         UPDATE course_schedule SET name_=#{name} WHERE group_type_=#{groupType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler} AND music_group_id_ = #{groupId};

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

@@ -567,7 +567,7 @@
 		CASE WHEN ta.sign_in_status_ = 0 THEN '异常' WHEN ta.sign_in_status_ = 1 THEN '正常' END signInStatus,
 		CASE WHEN ta.sign_out_status_=0 THEN '异常' WHEN ta.sign_out_status_ = 1 THEN '正常' END signOutStatus,
 		ROUND((UNIX_TIMESTAMP(ta.sign_out_time_)-UNIX_TIMESTAMP(ta.sign_in_time_))/60) currentTime,
-		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(sp.id_) studentNum
+		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(DISTINCT sp.id_) studentNum
 		FROM course_schedule_teacher_salary ts
 		LEFT JOIN course_schedule cs ON ts.course_schedule_id_ = cs.id_
 		LEFT JOIN `teacher_attendance` ta ON ta.`teacher_id_` = ts.`user_id_` AND ta.`course_schedule_id_` = ts.`course_schedule_id_`
@@ -597,7 +597,7 @@
 		CASE WHEN ta.sign_in_status_ = 0 THEN '异常' WHEN ta.sign_in_status_ = 1 THEN '正常' END signInStatus,
 		CASE WHEN ta.sign_out_status_=0 THEN '异常' WHEN ta.sign_out_status_ = 1 THEN '正常' END signOutStatus,
 		ROUND((UNIX_TIMESTAMP(ta.sign_out_time_)-UNIX_TIMESTAMP(ta.sign_in_time_))/60) currentTime,
-		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(sp.id_) studentNum,
+		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(DISTINCT sp.id_) studentNum,
 		vg.online_classes_unit_price_,vg.offline_classes_unit_price_,
 		GROUP_CONCAT(sa.sign_in_time_) studentSignInTime,GROUP_CONCAT(sa.sign_out_time_) studentSignOutTime
 		FROM course_schedule_teacher_salary ts
@@ -633,7 +633,7 @@
 		CASE WHEN ta.sign_in_status_ = 0 THEN '异常' WHEN ta.sign_in_status_ = 1 THEN '正常' END signInStatus,
 		CASE WHEN ta.sign_out_status_= 0 THEN '异常' WHEN ta.sign_out_status_ = 1 THEN '正常' END signOutStatus,
 		ROUND((UNIX_TIMESTAMP(ta.sign_out_time_)-UNIX_TIMESTAMP(ta.sign_in_time_))/60) currentTime,
-		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(sp.id_) studentNum,
+		ta.sign_in_time_ signInTime,ta.sign_out_time_ signOutTime,COUNT(DISTINCT sp.id_) studentNum,
 		GROUP_CONCAT(sa.sign_in_time_) studentSignInTime,GROUP_CONCAT(sa.sign_out_time_) studentSignOutTime
 		FROM course_schedule_teacher_salary ts
 		LEFT JOIN course_schedule cs ON ts.course_schedule_id_ = cs.id_

+ 316 - 225
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -5,55 +5,78 @@
 不要修改此文件。所有改动将在下次重新自动生成时丢失。
 -->
 <mapper namespace="com.ym.mec.biz.dal.dao.PracticeGroupDao">
-	
-	<resultMap type="com.ym.mec.biz.dal.entity.PracticeGroup" id="PracticeGroup">
-		<result column="id_" property="id" />
-		<result column="name_" property="name" />
-		<result column="subject_id_" property="subjectId" />
-		<result column="user_id_" property="userId" />
-		<result column="student_id_" property="studentId" />
-		<result column="single_class_minutes_" property="singleClassMinutes" />
-		<result column="organ_id_" property="organId" />
-		<result column="courses_start_date_" property="coursesStartDate" />
-		<result column="courses_expire_date_" property="coursesExpireDate" />
-		<result column="create_time_" property="createTime" />
-		<result column="update_time_" property="updateTime" />
-		<result column="memo_" property="memo" />
-		<result column="buy_months_" property="buyMonths" />
-		<result column="drill_times_on_week_" property="drillTimesOnWeek" />
-		<result column="drill_times_json_" property="drillTimesJson" />
-		<result column="group_status_" property="groupStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
-		<result column="be_renew_group_id_" property="beRenewGroupId"/>
-		<result column="educational_teacher_id_" property="educationalTeacherId" />
-	</resultMap>
 
-	<resultMap id="PracticeCourseDto" type="com.ym.mec.biz.dal.dto.PracticeCourseDto" extends="PracticeGroup">
-		<result property="teacherName" column="real_name_"/>
-		<result property="avatar" column="avatar_"/>
-		<result property="subjectName" column="subject_name_"/>
-	</resultMap>
+    <resultMap type="com.ym.mec.biz.dal.entity.PracticeGroup" id="PracticeGroup">
+        <result column="id_" property="id"/>
+        <result column="name_" property="name"/>
+        <result column="subject_id_" property="subjectId"/>
+        <result column="user_id_" property="userId"/>
+        <result column="student_id_" property="studentId"/>
+        <result column="single_class_minutes_" property="singleClassMinutes"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="courses_start_date_" property="coursesStartDate"/>
+        <result column="courses_expire_date_" property="coursesExpireDate"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+        <result column="memo_" property="memo"/>
+        <result column="buy_months_" property="buyMonths"/>
+        <result column="drill_times_on_week_" property="drillTimesOnWeek"/>
+        <result column="drill_times_json_" property="drillTimesJson"/>
+        <result column="group_status_" property="groupStatus"
+                typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
+        <result column="be_renew_group_id_" property="beRenewGroupId"/>
+        <result column="educational_teacher_id_" property="educationalTeacherId" />
+    </resultMap>
 
-	<resultMap type="com.ym.mec.biz.dal.dto.PracticeGroupDto" id="PracticeGroupDto" extends="PracticeGroup">
-		<result column="id_" property="id" />
-		<result column="name_" property="name" />
-		<result column="subject_id_" property="subjectId" />
-		<result column="user_id_" property="userId" />
-		<result column="single_class_minutes_" property="singleClassMinutes" />
-		<result column="organ_id_" property="organId" />
-		<result column="courses_start_date_" property="coursesStartDate" />
-		<result column="courses_expire_date_" property="coursesExpireDate" />
-		<result column="create_time_" property="createTime" />
-		<result column="update_time_" property="updateTime" />
-		<result column="memo_" property="memo" />
-		<result column="subject_name_" property="subjectName" />
-		<result column="teacher_name_" property="teacherName" />
-		<result column="evaluate_id_" property="evaluateId" />
-	</resultMap>
-	<update id="updateUserId">
-		UPDATE practice_group SET user_id_ = #{teacherId},update_time_ = NOW()
-		WHERE id_ = #{practiceGroupId}
-	</update>
+    <resultMap id="PracticeCourseDto" type="com.ym.mec.biz.dal.dto.PracticeCourseDto" extends="PracticeGroup">
+        <result property="teacherName" column="real_name_"/>
+        <result property="avatar" column="avatar_"/>
+        <result property="subjectName" column="subject_name_"/>
+    </resultMap>
+
+    <resultMap type="com.ym.mec.biz.dal.dto.PracticeGroupDto" id="PracticeGroupDto" extends="PracticeGroup">
+        <result column="id_" property="id"/>
+        <result column="name_" property="name"/>
+        <result column="subject_id_" property="subjectId"/>
+        <result column="user_id_" property="userId"/>
+        <result column="single_class_minutes_" property="singleClassMinutes"/>
+        <result column="organ_id_" property="organId"/>
+        <result column="courses_start_date_" property="coursesStartDate"/>
+        <result column="courses_expire_date_" property="coursesExpireDate"/>
+        <result column="create_time_" property="createTime"/>
+        <result column="update_time_" property="updateTime"/>
+        <result column="memo_" property="memo"/>
+        <result column="subject_name_" property="subjectName"/>
+        <result column="teacher_name_" property="teacherName"/>
+        <result column="evaluate_id_" property="evaluateId"/>
+        <result column="evaluate_status_" property="evaluateStatus"/>
+    </resultMap>
+    <update id="updateUserId">
+        UPDATE practice_group
+        SET user_id_     = #{teacherId},
+            update_time_ = NOW()
+        WHERE id_ = #{practiceGroupId}
+    </update>
 
+    <update id="update" parameterType="com.ym.mec.biz.dal.entity.PracticeGroup">
+        UPDATE practice_group
+        <set>
+            <if test="subjectId!=null">
+                subject_id_=#{subjectId},
+            </if>
+            <if test="memo!=null">
+                memo_=#{memo},
+            </if>
+            <if test="name!=null">
+                name_=#{name},
+            </if>
+            <if test="groupStatus!=null">
+                group_status_=#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+            </if>
+            update_time_ = NOW()
+        </set>
+        WHERE id_ = #{id}
+    </update>
 	<update id="update" parameterType="com.ym.mec.biz.dal.entity.PracticeGroup">
 		UPDATE practice_group
 		<set>
@@ -77,208 +100,276 @@
 		WHERE id_ = #{id}
 	</update>
 
-	<update id="batchUpdate">
-		<foreach collection="groups" item="group" separator=";">
-			UPDATE practice_group
-			<set>
-				<if test="group.groupStatus!=null">
-					group_status_=#{group.groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
-				</if>
-				update_time_ = NOW()
-			</set>
-			WHERE id_ = #{group.id}
-		</foreach>
-	</update>
+    <update id="batchUpdate">
+        <foreach collection="groups" item="group" separator=";">
+            UPDATE practice_group
+            <set>
+                <if test="group.groupStatus!=null">
+                    group_status_=#{group.groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
+                </if>
+                update_time_ = NOW()
+            </set>
+            WHERE id_ = #{group.id}
+        </foreach>
+    </update>
 
-	<!-- 根据主键查询一条记录 -->
-	<select id="get" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE id_ = #{id}
-	</select>
-	
-	<!-- 全查询 -->
-	<select id="findAll" resultMap="PracticeGroup">
-		SELECT * FROM practice_group
-	</select>
-	
-	<!-- 向数据库增加一条记录 -->
-	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.PracticeGroup" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
-		<!--
-		<selectKey resultClass="int" keyProperty="id" > 
-		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
-		</selectKey>
-		-->
-		INSERT INTO practice_group
-		(id_,name_,subject_id_,user_id_,student_id_,single_class_minutes_,organ_id_,courses_start_date_,courses_expire_date_,create_time_,update_time_,memo_,buy_months_,drill_times_on_week_,drill_times_json_,group_status_,be_renew_group_id_)
-		VALUES(#{id},#{name},#{subjectId},#{userId},#{studentId},#{singleClassMinutes},#{organId},#{coursesStartDate},#{coursesExpireDate},NOW(),NOW(),#{memo},#{buyMonths},#{drillTimesOnWeek},#{drillTimesJson},#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{beRenewGroupId})
-	</insert>
-	
-	<select id="getUserFreePracticeGroup" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE student_id_=#{userId} AND buy_months_ IS NULL
-	</select>
-	
-	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="PracticeGroup" parameterType="map">
-		SELECT * FROM practice_group <include refid="global.limit"/>
-	</select>
-	
-	<!-- 查询当前表的总记录数 -->
-	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM practice_group
-	</select>
+    <!-- 根据主键查询一条记录 -->
+    <select id="get" resultMap="PracticeGroup">
+        SELECT *
+        FROM practice_group
+        WHERE id_ = #{id}
+    </select>
+
+    <!-- 全查询 -->
+    <select id="findAll" resultMap="PracticeGroup">
+        SELECT *
+        FROM practice_group
+    </select>
+
+    <!-- 向数据库增加一条记录 -->
+    <insert id="insert" parameterType="com.ym.mec.biz.dal.entity.PracticeGroup" useGeneratedKeys="true" keyColumn="id"
+            keyProperty="id">
+        <!--
+        <selectKey resultClass="int" keyProperty="id" >
+        SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL
+        </selectKey>
+        -->
+        INSERT INTO practice_group
+        (id_,name_,subject_id_,user_id_,student_id_,single_class_minutes_,organ_id_,courses_start_date_,courses_expire_date_,create_time_,update_time_,memo_,buy_months_,drill_times_on_week_,drill_times_json_,group_status_,be_renew_group_id_)
+        VALUES(#{id},#{name},#{subjectId},#{userId},#{studentId},#{singleClassMinutes},#{organId},#{coursesStartDate},#{coursesExpireDate},NOW(),NOW(),#{memo},#{buyMonths},#{drillTimesOnWeek},#{drillTimesJson},#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{beRenewGroupId})
+    </insert>
+
+    <select id="getUserFreePracticeGroup" resultMap="PracticeGroup">
+        SELECT *
+        FROM practice_group
+        WHERE student_id_ = #{userId}
+          AND buy_months_ IS NULL
+    </select>
+
+    <!-- 分页查询 -->
+    <select id="queryPage" resultMap="PracticeGroup" parameterType="map">
+        SELECT * FROM practice_group
+        <include refid="global.limit"/>
+    </select>
+
+    <!-- 查询当前表的总记录数 -->
+    <select id="queryCount" resultType="int">
+        SELECT COUNT(*)
+        FROM practice_group
+    </select>
     <select id="getUserPracticeCoursesWithDateRange" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE user_id_=#{userId} AND (courses_start_date_ BETWEEN DATE_FORMAT(#{startDate},'%Y-%m-%d') AND DATE_FORMAT(#{endDate},'%Y-%m-%d'))
-	</select>
+        SELECT *
+        FROM practice_group
+        WHERE user_id_ = #{userId}
+          AND (courses_start_date_ BETWEEN DATE_FORMAT(#{startDate}, '%Y-%m-%d') AND DATE_FORMAT(#{endDate}, '%Y-%m-%d'))
+    </select>
     <select id="countUserPracticeApplyRecord" resultType="int">
-		SELECT COUNT(*) FROM practice_group WHERE student_id_=#{userId} AND group_status_='NORMAL' AND buy_months_ IS NULL;
+        SELECT COUNT(*)
+        FROM practice_group
+        WHERE student_id_ = #{userId}
+          AND group_status_ = 'NORMAL'
+          AND buy_months_ IS NULL;
     </select>
     <select id="countPracticeGroupByOrgan" resultType="java.lang.Integer">
-		SELECT count(*) FROM practice_group pg
-		<include refid="practiceGroupQueryCondition"/>
-	</select>
-	<select id="findAllByOrgan" resultMap="PracticeGroupDto">
-		SELECT pg.*,
-		su.real_name_ teacher_name_
-		FROM
-		practice_group pg
-		LEFT JOIN sys_user su ON pg.user_id_ = su.id_
-		<include refid="practiceGroupQueryCondition"/>
-		ORDER BY pg.id_ DESC
-		<include refid="global.limit"/>
-	</select>
-	<select id="countPracticeGroupOverCourse" resultType="java.util.Map">
+        SELECT count(*) FROM practice_group pg
+        <include refid="practiceGroupQueryCondition"/>
+    </select>
+    <select id="findAllByOrgan" resultMap="PracticeGroupDto">
+        SELECT pg.*,
+        su.real_name_ teacher_name_
+        FROM
+        practice_group pg
+        LEFT JOIN sys_user su ON pg.user_id_ = su.id_
+        <include refid="practiceGroupQueryCondition"/>
+        ORDER BY pg.id_ DESC
+        <include refid="global.limit"/>
+    </select>
+    <select id="countPracticeGroupOverCourse" resultType="java.util.Map">
 
-	</select>
+    </select>
 
     <select id="findUserLatestPracticeGroup" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE student_id_=#{userId} AND buy_months_ IS NOT NULL ORDER BY create_time_ DESC LIMIT 1;
-	</select>
+        SELECT *
+        FROM practice_group
+        WHERE student_id_ = #{userId}
+          AND buy_months_ IS NOT NULL
+        ORDER BY create_time_ DESC
+        LIMIT 1;
+    </select>
 
-	<select id="findUserBuyPracticeGroups" resultMap="PracticeCourseDto">
-		SELECT
-			pg.*,
-			su.real_name_,
-			su.avatar_,
-			s.name_ subject_name_
-		FROM
-			practice_group pg
-			LEFT JOIN sys_user su ON pg.user_id_ = su.id_
-			LEFT JOIN `subject` s ON pg.subject_id_ = s.id_
-		WHERE
-			student_id_=#{userId}
-			AND (pg.group_status_='NORMAL' OR pg.group_status_='LOCK')
-			AND pg.buy_months_ IS NOT NULL
-	</select>
+    <select id="findUserBuyPracticeGroups" resultMap="PracticeCourseDto">
+        SELECT pg.*,
+               su.real_name_,
+               su.avatar_,
+               s.name_ subject_name_
+        FROM practice_group pg
+                 LEFT JOIN sys_user su ON pg.user_id_ = su.id_
+                 LEFT JOIN `subject` s ON pg.subject_id_ = s.id_
+        WHERE student_id_ = #{userId}
+          AND (pg.group_status_ = 'NORMAL' OR pg.group_status_ = 'LOCK')
+          AND pg.buy_months_ IS NOT NULL
+    </select>
 
-	<select id="findUserBuyPracticeGroupsWithDate" resultMap="PracticeCourseDto">
-		SELECT
-			pg.*,
-			su.real_name_,
-			su.avatar_,
-			s.name_ subject_name_
-		FROM
-			practice_group pg
-			LEFT JOIN sys_user su ON pg.user_id_ = su.id_
-			LEFT JOIN `subject` s ON pg.subject_id_ = s.id_
-		WHERE
-			student_id_=#{userId}
-			AND courses_start_date_=#{date} AND group_status_='LOCK'
-			AND pg.buy_months_ IS NOT NULL
-	</select>
-	<select id="findUserPracticeGroup" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE student_id_=#{userId} AND id_=#{groupId};
-	</select>
-	<select id="findUserPracticeGroup2" resultMap="PracticeGroupDto">
-		SELECT pg.*,su.real_name_ teacher_name_ FROM practice_group pg
-		LEFT JOIN sys_user su ON pg.user_id_ = su.id_
-		WHERE pg.student_id_=#{userId} AND pg.id_=#{groupId};
-	</select>
+    <select id="findUserBuyPracticeGroupsWithDate" resultMap="PracticeCourseDto">
+        SELECT pg.*,
+               su.real_name_,
+               su.avatar_,
+               s.name_ subject_name_
+        FROM practice_group pg
+                 LEFT JOIN sys_user su ON pg.user_id_ = su.id_
+                 LEFT JOIN `subject` s ON pg.subject_id_ = s.id_
+        WHERE student_id_ = #{userId}
+          AND courses_start_date_ = #{date}
+          AND group_status_ = 'LOCK'
+          AND pg.buy_months_ IS NOT NULL
+    </select>
+    <select id="findUserPracticeGroup" resultMap="PracticeGroup">
+        SELECT *
+        FROM practice_group
+        WHERE student_id_ = #{userId}
+          AND id_ = #{groupId};
+    </select>
+    <select id="findUserPracticeGroup2" resultMap="PracticeGroupDto">
+        SELECT pg.*, su.real_name_ teacher_name_
+        FROM practice_group pg
+                 LEFT JOIN sys_user su ON pg.user_id_ = su.id_
+        WHERE pg.student_id_ = #{userId}
+          AND pg.id_ = #{groupId};
+    </select>
     <select id="findHistoryPracticeGroups" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE courses_expire_date_ &lt; NOW() AND group_status_='NORMAL'
+        SELECT *
+        FROM practice_group
+        WHERE courses_expire_date_ &lt; NOW()
+          AND group_status_ = 'NORMAL'
     </select>
 
     <sql id="practiceGroupQueryCondition">
-		<where>
-			pg.group_status_='NORMAL'
-			<if test="search!=null and search!=''">
-				AND (pg.name_ LIKE CONCAT('%',#{search},'%') OR pg.id_= #{search})
-			</if>
-			<if test="teacherId!=null">
-				AND pg.user_id_=#{teacherId}
-			</if>
-			<if test="organId != null">
-				AND FIND_IN_SET(pg.organ_id_,#{organId})
-			</if>
-		</where>
-	</sql>
+        <where>
+            pg.group_status_='NORMAL'
+            <if test="search!=null and search!=''">
+                AND (pg.name_ LIKE CONCAT('%',#{search},'%') OR pg.id_= #{search})
+            </if>
+            <if test="teacherId!=null">
+                AND pg.user_id_=#{teacherId}
+            </if>
+            <if test="organId != null">
+                AND FIND_IN_SET(pg.organ_id_,#{organId})
+            </if>
+        </where>
+    </sql>
 
-	<!-- 根据主键查询一条记录 -->
-	<select id="lockPracticeGroup" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE id_ = #{groupId} FOR UPDATE
-	</select>
-	<select id="findUserStatusPracticeGroups" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE  student_id_=#{userId} AND group_status_=#{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
-	</select>
+    <!-- 根据主键查询一条记录 -->
+    <select id="lockPracticeGroup" resultMap="PracticeGroup">
+        SELECT *
+        FROM practice_group
+        WHERE id_ = #{groupId} FOR
+        UPDATE
+    </select>
+    <select id="findUserStatusPracticeGroups" resultMap="PracticeGroup">
+        SELECT *
+        FROM practice_group
+        WHERE student_id_ = #{userId}
+          AND group_status_ = #{groupStatus,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+    </select>
     <select id="findUserLockPracticeGroupWithDate" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE student_id_=#{userId} AND courses_start_date_=#{date} AND group_status_='LOCK'
+        SELECT *
+        FROM practice_group
+        WHERE student_id_ = #{userId}
+          AND courses_start_date_ = #{date}
+          AND group_status_ = 'LOCK'
+    </select>
+    <select id="findUserLockPracticeGroupWithDateBefore" resultMap="PracticeGroup">
+        SELECT *
+        FROM practice_group
+        WHERE student_id_ = #{userId}
+          AND courses_start_date_ &lt;= #{date}
+          AND group_status_ = 'LOCK'
     </select>
-	<select id="findUserLockPracticeGroupWithDateBefore" resultMap="PracticeGroup">
-		SELECT * FROM practice_group WHERE student_id_=#{userId} AND courses_start_date_&lt;=#{date} AND group_status_='LOCK'
-	</select>
 
-	<sql id="practiceGroupReviewsQueryCondition">
-		<where>
-			pg.group_status_='NORMAL'
-			<if test="search!=null and search!=''">
-				AND (pg.name_ LIKE CONCAT('%',#{search},'%') OR pg.id_= #{search})
-			</if>
-			<if test="teacherId!=null">
-				AND pg.user_id_=#{teacherId}
-			</if>
-			<if test="organId != null">
-				AND FIND_IN_SET(pg.organ_id_,#{organId})
-			</if>
-			<if test="month != null">
-				AND pg.courses_expire_date_ >= #{month}
-			</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='isOver !=null and isOver=="0"'>
-				<![CDATA[AND pg.courses_expire_date_ > NOW()
+    <sql id="practiceGroupReviewsQueryCondition">
+        <where>
+            pg.group_status_='NORMAL'
+            <if test="search!=null and search!=''">
+                AND (pg.name_ LIKE CONCAT('%',#{search},'%') OR pg.id_= #{search})
+            </if>
+            <if test="teacherId!=null">
+                AND pg.user_id_=#{teacherId}
+            </if>
+            <if test="organId != null">
+                AND FIND_IN_SET(pg.organ_id_,#{organId})
+            </if>
+            <if test="month != null">
+                AND pg.courses_expire_date_ >= #{month}
+            </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='isOver !=null and isOver=="0"'>
+                <![CDATA[AND pg.courses_expire_date_ > NOW()
 			]]>
-			</if>
-			<if test='isOver !=null and isOver=="1"'>
-				<![CDATA[ AND pg.courses_expire_date_ <= NOW()
+            </if>
+            <if test='isOver !=null and isOver=="1"'>
+                <![CDATA[ AND pg.courses_expire_date_ <= NOW()
 			]]></if>
-			<if test='hasReport !=null and hasReport=="0"'>
-				<![CDATA[AND cse.id_ IS NULL
+            <if test='hasReport !=null and hasReport=="0"'>
+                <![CDATA[AND cse.status =0
 			]]>
-			</if>
-			<if test='hasReport !=null and hasReport=="1"'>
-				<![CDATA[ AND cse.id_ > 0
+            </if>
+            <if test='hasReport !=null and hasReport=="1"'>
+                <![CDATA[ AND cse.status = 1
 			]]></if>
-		</where>
-	</sql>
+        </where>
+    </sql>
+
+    <select id="findPracticeGroupsReviews" resultMap="PracticeGroupDto">
+        SELECT pg.*,cse.id_ evaluate_id_,cse.status_ evaluate_status_,
+        su.real_name_ teacher_name_
+        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')
+        <include refid="practiceGroupReviewsQueryCondition"/>
+        ORDER BY pg.id_ DESC
+        <include refid="global.limit"/>
+    </select>
 
-	<select id="findPracticeGroupsReviews" resultMap="PracticeGroupDto">
-		SELECT pg.*,cse.id_ evaluate_id_,
-		su.real_name_ teacher_name_
-		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')
-		<include refid="practiceGroupReviewsQueryCondition"/>
-		ORDER BY pg.id_ DESC
-		<include refid="global.limit"/>
-	</select>
 
+    <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')
+        <include refid="practiceGroupReviewsQueryCondition"/>
+    </select>
 
-	<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')
-		<include refid="practiceGroupReviewsQueryCondition"/>
-	</select>
+    <select id="getNeedPostReportPracticeGroups"
+            resultMap="com.ym.mec.biz.dal.dao.CourseScheduleEvaluateDao.CourseScheduleEvaluate">
+        <![CDATA[
+        SELECT pg.id_                   music_group_id_,
+               pg.user_id_              teacher_id_,
+               cg.id_                   class_group_id_,
+               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')
+          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">
+        SELECT COUNT(*) total_class_times_,class_group_id_ id_ from course_schedule WHERE class_group_id_ IN
+        <foreach collection="classGroupIds" item="classGroupId" open="(" separator="," close=")">
+            #{classGroupId}
+        </foreach>
+        <![CDATA[AND class_date_ >= #{startDate} AND class_date_ <=#{endDate} ]]>
+        AND (del_flag_ =0 OR del_flag_ IS NULL)
+        GROUP BY class_group_id_
+    </select>
 </mapper>

+ 28 - 16
mec-biz/src/main/resources/config/mybatis/SysTenantAccountDetailMapper.xml

@@ -7,8 +7,8 @@
 		id="SysTenantAccountDetail">
 		<result column="id_" property="id" />
 		<result column="user_id_" property="userId" />
-		<result column="trans_type_" property="transType" />
-		<result column="trans_status_" property="transStatus" />
+		<result column="trans_type_" property="transType" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
+		<result column="trans_status_" property="transStatus" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
 		<result column="trans_no_" property="transNo" />
 		<result column="trans_cash_amount_" property="transCashAmount" />
 		<result column="total_available_minutes_" property="totalAvailableMinutes" />
@@ -17,17 +17,29 @@
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
+	
+	<sql id="queryCondition">
+		<where>
+			<if test="transType != null">
+				and trans_type_ = #{transType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="transStatus != null">
+				and trans_status_ = #{transStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+			</if>
+			<if test="userId != null">
+				and user_id_ = #{userId}
+			</if>
+		</where>
+	</sql>
 
 	<!-- 根据主键查询一条记录 -->
 	<select id="get" resultMap="SysTenantAccountDetail">
-		SELECT *
-		FROM sys_tenant_account_detail WHERE id_ = #{id}
+		SELECT * FROM sys_tenant_account_detail WHERE id_ = #{id}
 	</select>
 
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="SysTenantAccountDetail">
-		SELECT * FROM
-		sys_tenant_account_detail ORDER BY id_
+		SELECT * FROM sys_tenant_account_detail ORDER BY id_
 	</select>
 
 	<!-- 向数据库增加一条记录 -->
@@ -37,7 +49,7 @@
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO sys_tenant_account_detail
 		(id_,user_id_,trans_type_,trans_status_,trans_no_,trans_cash_amount_,total_available_minutes_,trans_minutes_,memo_,create_time_,update_time_)
-		VALUES(#{id},#{userId},#{transType},#{transStatus},#{transNo},#{transCashAmount},#{totalAvailableMinutes},#{transMinutes},#{memo},#{createTime},#{updateTime})
+		VALUES(#{id},#{userId},#{transType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{transStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{transNo},#{transCashAmount},#{totalAvailableMinutes},#{transMinutes},#{memo},#{createTime},#{updateTime})
 	</insert>
 
 	<!-- 根据主键查询一条记录 -->
@@ -57,7 +69,7 @@
 				total_available_minutes_ = #{totalAvailableMinutes},
 			</if>
 			<if test="transType != null">
-				trans_type_ = #{transType},
+				trans_type_ = #{transType, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
 			<if test="updateTime != null">
 				update_time_ = #{updateTime},
@@ -66,7 +78,7 @@
 				memo_ = #{memo},
 			</if>
 			<if test="transStatus != null">
-				trans_status_ = #{transStatus},
+				trans_status_ = #{transStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
 			</if>
 			<if test="transNo != null">
 				trans_no_ = #{transNo},
@@ -83,20 +95,20 @@
 
 	<!-- 根据主键删除一条记录 -->
 	<delete id="delete">
-		DELETE FROM sys_tenant_account_detail WHERE
-		id_ = #{id}
+		DELETE FROM sys_tenant_account_detail WHERE id_ = #{id}
 	</delete>
 
 	<!-- 分页查询 -->
-	<select id="queryPage" resultMap="SysTenantAccountDetail"
-		parameterType="map">
-		SELECT * FROM sys_tenant_account_detail ORDER BY id_
+	<select id="queryPage" resultMap="SysTenantAccountDetail" parameterType="map">
+		SELECT * FROM sys_tenant_account_detail
+		<include refid="queryCondition" />
+		order by id_ desc
 		<include refid="global.limit" />
 	</select>
 
 	<!-- 查询当前表的总记录数 -->
 	<select id="queryCount" resultType="int">
-		SELECT COUNT(*) FROM
-		sys_tenant_account_detail
+		SELECT COUNT(*) FROM sys_tenant_account_detail
+		<include refid="queryCondition" />
 	</select>
 </mapper>

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

@@ -8,7 +8,7 @@
 		<result column="user_id_" property="userId" />
 		<result column="available_minutes_" property="availableMinutes" />
 		<result column="frozen_minutes_" property="frozenMinutes" />
-		<result column="status_" property="status" />
+		<result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler" />
 		<result column="create_time_" property="createTime" />
 		<result column="update_time_" property="updateTime" />
 	</resultMap>
@@ -26,7 +26,7 @@
 			AS ID FROM DUAL </selectKey> -->
 		INSERT INTO sys_tenant_account
 		(user_id_,available_minutes_,frozen_minutes_,status_,create_time_,update_time_)
-		VALUES(#{userId},#{availableMinutes},#{frozenMinutes},#{status},#{createTime},#{updateTime})
+		VALUES(#{userId},#{availableMinutes},#{frozenMinutes},#{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{createTime},#{updateTime})
 	</insert>
 
 

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

@@ -83,4 +83,8 @@ public interface TaskRemoteService {
 	//练习报告定时推送
 	@GetMapping("task/pushStudyReport")
 	void pushStudyReport();
+
+	//新增待填写月报定时推送(推送老师)
+	@GetMapping("task/pushNeedPostReport")
+	void pushNeedPostReport();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -105,4 +105,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
 	public void pushStudyReport() {
 		logger.info("练习报告推送失败");
 	}
+
+	@Override
+	public void pushNeedPostReport() {
+		logger.info("新增待填写月报推送失败");
+	}
 }

+ 13 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseScheduleController.java

@@ -3,6 +3,7 @@ package com.ym.mec.student.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.CourseScheduleComplaints;
+import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.dal.page.StudentCourseScheduleRecordQueryInfo;
 import com.ym.mec.biz.service.CourseScheduleService;
 import com.ym.mec.biz.service.StudentAttendanceService;
@@ -71,4 +72,16 @@ public class StudentCourseScheduleController extends BaseController {
 		return succeed();
 	}
 
+	@ApiOperation(value = "根据课程组获取课程组老师信息")
+	@GetMapping("/teacherCourseHeadInfo")
+	public Object teacherCourseHeadInfo(GroupType groupType,String groupId){
+		return succeed(scheduleService.getTeacherCourseHeadInfo(groupType,groupId));
+	}
+
+	@ApiOperation(value = "根据课程组获取课表信息")
+	@GetMapping("/queryCourseInfoByGroupId")
+	public Object queryCourseInfoByGroupId(GroupType groupType,String groupId){
+		return succeed(scheduleService.queryCourseInfoByGroupId(groupType,groupId));
+	}
+
 }

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

@@ -28,7 +28,7 @@ public class StudyReportController extends BaseController {
 	@ApiOperation(value = "课程组评论列表")
 	@GetMapping("getGroupReviews")
 	public Object getGroupReviews(Integer groupId) {
-		return succeed(courseScheduleEvaluateService.findByGroupId(groupId));
+		return succeed(courseScheduleEvaluateService.findByGroupId(groupId,1));
 	}
 
 	@ApiOperation(value = "评论详情")

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/NeedPostReportTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class NeedPostReportTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() throws TaskException {
+        taskRemoteService.pushStudyReport();
+    }
+}

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

@@ -25,7 +25,7 @@ public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
 	@Override
 	public void configure(HttpSecurity http) throws Exception {
 		http.csrf().disable().exceptionHandling().accessDeniedHandler(baseAccessDeniedHandler).authenticationEntryPoint(baseAuthenticationEntryPoint).and()
-				.authorizeRequests().antMatchers("/v2/api-docs","/code/*","/teacher/queryStudentApply","/teacher/querySubByMusicGroupId","/studentRegistration/updateSubject").permitAll().anyRequest().authenticated().and().httpBasic();
+				.authorizeRequests().antMatchers("/v2/api-docs","/code/*","/teacher/queryStudentApply","/teacher/querySubByMusicGroupId","/studentRegistration/updateSubject","/studyReport/createEvaluate").permitAll().anyRequest().authenticated().and().httpBasic();
 	}
 
 	@Override

+ 84 - 43
mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudyReportController.java

@@ -1,62 +1,103 @@
 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.SysConfigDao;
 import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
+import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.service.CourseScheduleEvaluateService;
+import com.ym.mec.biz.service.SysConfigService;
 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.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 
 @RequestMapping("studyReport")
 @Api(tags = "陪练报告")
 @RestController
 public class StudyReportController extends BaseController {
 
-	@Autowired
-	private CourseScheduleEvaluateService courseScheduleEvaluateService;
-
-
-	@ApiOperation("获取学生陪练报告信息")
-	@GetMapping(value = "info")
-	public Object info(Integer classGroupId) {
-		return succeed(courseScheduleEvaluateService.getStudyReport(classGroupId));
-	}
-
-	@ApiOperation(value = "课程组评论列表")
-	@GetMapping("getGroupReviews")
-	public Object getGroupReviews(Integer groupId) {
-		List<CourseScheduleEvaluate> courseScheduleEvaluates = courseScheduleEvaluateService.findByGroupId(groupId);
-		boolean hasReport = false;
-		Date nowDate = new Date();
-		for (CourseScheduleEvaluate courseScheduleEvaluate : courseScheduleEvaluates) {
-			courseScheduleEvaluate.setTimes(2);
-			courseScheduleEvaluate.setTotalMinutes(100);
-			courseScheduleEvaluate.setReportLink("http://www.baidu.com");
-			if(DateUtil.format(courseScheduleEvaluate.getCreateTime(),"yyyy-MM").equals(DateUtil.format(nowDate,"yyyy-MM"))){
-				hasReport = true;
-			}
-		}
-		if(!hasReport){
-			CourseScheduleEvaluate courseScheduleEvaluate = new CourseScheduleEvaluate();
-			courseScheduleEvaluate.setReportLink("http://www.baidu.com");
-			courseScheduleEvaluate.setTimes(2);
-			courseScheduleEvaluate.setTotalMinutes(100);
-			courseScheduleEvaluate.setMonth(DateUtil.format(nowDate,"yyyy年MM月"));
-		}
-
-		return succeed(courseScheduleEvaluates);
-	}
-
-	@ApiOperation(value = "评论详情")
-	@GetMapping("getReviewsInfo")
-	public Object getReviewsInfo(Integer id) {
-		return succeed(courseScheduleEvaluateService.findById(id));
-	}
+    @Autowired
+    private CourseScheduleEvaluateService courseScheduleEvaluateService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private SysConfigDao sysConfigDao;
+
+
+    @ApiOperation("获取学生陪练报告信息")
+    @GetMapping(value = "info")
+    public Object info(Integer classGroupId) {
+        return succeed(courseScheduleEvaluateService.getStudyReport(classGroupId));
+    }
+
+    @ApiOperation(value = "课程组报告列表")
+    @GetMapping("getGroupReviews")
+    public Object getGroupReviews(Integer groupId) {
+        List<CourseScheduleEvaluate> courseScheduleEvaluates = courseScheduleEvaluateService.findByGroupId(groupId,null);
+        String teacherBaseUrl = sysConfigDao.findConfigValue(SysConfigService.TEACHER_BASE_URL);
+        for (CourseScheduleEvaluate courseScheduleEvaluate : courseScheduleEvaluates) {
+            courseScheduleEvaluate.setReportLink(teacherBaseUrl + "/#/studyReportNew?id=" + courseScheduleEvaluate.getId() + "&classGroupId=" + courseScheduleEvaluate.getClassGroupId());
+            if (courseScheduleEvaluate.getStatus().equals(1) && courseScheduleEvaluate.getVersion().equals(2)) {
+                courseScheduleEvaluate.setReportLink(teacherBaseUrl + "/#/reportDetailNew?id=" + courseScheduleEvaluate.getId() + "&classGroupId=" + courseScheduleEvaluate.getClassGroupId());
+            } else if ((courseScheduleEvaluate.getStatus().equals(1) && courseScheduleEvaluate.getVersion().equals(1))){
+                courseScheduleEvaluate.setReportLink(teacherBaseUrl + "/#/reportDetail?classGroupId=" + courseScheduleEvaluate.getClassGroupId());
+            }
+        }
+        return succeed(courseScheduleEvaluates);
+    }
+
+    @ApiOperation(value = "评论详情")
+    @GetMapping("getReviewsInfo")
+    public Object getReviewsInfo(Integer id) {
+        return succeed(courseScheduleEvaluateService.findById(id));
+    }
+
+    @ApiOperation(value = "获取需评论的课程列表")
+    @GetMapping("getNeedPost")
+    public Object getNeedPost() {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        return succeed(courseScheduleEvaluateService.getNeedPostList(sysUser.getId()));
+    }
+
+    @ApiOperation(value = "预生成报告")
+    @GetMapping("createEvaluate")
+    public Object createEvaluate(Date date) {
+        Date nowDate = new Date();
+        if (date != null) {
+            nowDate = date;
+        }
+        return succeed(courseScheduleEvaluateService.createEvaluate(nowDate));
+    }
+
+    @ApiOperation(value = "提交陪练报告")
+    @PostMapping(value = "/addStudyReport")
+    public HttpResponseResult addStudyReport(@RequestBody CourseScheduleEvaluate courseScheduleEvaluate) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (Objects.isNull(sysUser)) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if (courseScheduleEvaluate.getId() == null || courseScheduleEvaluate.getId() < 0) {
+            return failed(HttpStatus.BAD_REQUEST, "报告id不能为空");
+        }
+        if (courseScheduleEvaluate.getClassGroupId() == null || courseScheduleEvaluate.getClassGroupId() < 0) {
+            return failed(HttpStatus.BAD_REQUEST, "班级id必须大于0");
+        }
+        if (courseScheduleEvaluate.getItem() == null || courseScheduleEvaluate.getItem().isEmpty()) {
+            return failed(HttpStatus.BAD_REQUEST, "课程评价选项不能为空");
+        }
+        courseScheduleEvaluate.setTeacherId(sysUser.getId());
+        return succeed(courseScheduleEvaluateService.updateStudyReport(courseScheduleEvaluate));
+    }
 }

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

@@ -0,0 +1,56 @@
+package com.ym.mec.teacher.controller;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+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.page.TenantAccountDetailQueryInfo;
+import com.ym.mec.biz.service.SysTenantAccountDetailService;
+import com.ym.mec.biz.service.SysTenantAccountService;
+import com.ym.mec.common.controller.BaseController;
+
+@RequestMapping("sysTenantAccount")
+@Api(tags = "租客账户管理")
+@RestController
+public class SysTenantAccountController extends BaseController {
+
+	@Autowired
+	private SysTenantAccountService sysTenantAccountService;
+
+	@Autowired
+	private SysTenantAccountDetailService sysTenantAccountDetailService;
+
+	@Autowired
+	private SysUserFeignService sysUserFeignService;
+
+	@ApiOperation(value = "获取账户信息")
+	@GetMapping("/get")
+	public Object get() {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+
+		return succeed(sysTenantAccountService.get(sysUser.getId()));
+	}
+
+	@ApiOperation(value = "获取账户明细")
+	@GetMapping("/queryTenantAccountDetail")
+	public Object queryTenantAccountDetail(TenantAccountDetailQueryInfo queryInfo) {
+		SysUser sysUser = sysUserFeignService.queryUserInfo();
+		if (sysUser == null) {
+			return failed(HttpStatus.FORBIDDEN, "请登录");
+		}
+		queryInfo.setUserId(sysUser.getId());
+
+		return succeed(sysTenantAccountService.queryPage(queryInfo));
+	}
+
+}

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

@@ -1,10 +1,12 @@
 package com.ym.mec.teacher.controller;
 
 import com.ym.mec.biz.dal.dto.TeacherRemarkCommitDto;
+
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
@@ -222,6 +224,29 @@ public class TeacherCourseScheduleController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "对外课时调整")
+    @PostMapping(value = "/updateCourseScheduleOfComm",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public Object updateCourseScheduleOfComm(CourseSchedule courseSchedule){
+    	CourseSchedule oldCourseSchedule = scheduleService.get(courseSchedule.getId());
+        if(Objects.isNull(oldCourseSchedule)){
+            return failed("未找到指定课程");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		Date date = new Date();
+		String endDateStr = DateUtil.format(oldCourseSchedule.getClassDate(), "yyyy-MM-dd") + " " + DateUtil.format(oldCourseSchedule.getStartClassTime(), "HH:mm:ss");
+		if (DateUtil.stringToDate(endDateStr, sdf).before(date)) {
+			throw new BizException("调整失败,未开始的课程才能调整");
+		}
+		
+        if(Objects.isNull(courseSchedule.getClassGroupId())){
+            courseSchedule.setClassGroupId(oldCourseSchedule.getClassGroupId());
+        }
+        List<CourseSchedule> courseSchedules=new ArrayList<>();
+        courseSchedules.add(courseSchedule);
+        scheduleService.courseAdjust(courseSchedules);
+        return succeed();
+    }
+
     @ApiOperation(value = "课时交换")
     @PostMapping(value = "/courseSwap",consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
     public Object courseSwap(Long courseScheduleId1,Long courseScheduleId2){

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

@@ -40,7 +40,7 @@ public class APIController extends BaseController {
 	public Integer queryTeacherOrganId(Integer userId) {
 		Teacher teacher = teacherDao.get(userId);
 		if (teacher != null) {
-			return teacher.getOrganId();
+			return teacher.getTeacherOrganId();
 		}
 		return null;
 	}

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

@@ -119,7 +119,7 @@ public class PracticeGroupManageController extends BaseController {
     @GetMapping("getGroupReviews")
     @PreAuthorize("@pcs.hasPermissions('practiceGroupManage/getGroupReviews')")
     public Object getGroupReviews(Integer groupId) {
-        return succeed(courseScheduleEvaluateService.findByGroupId(groupId));
+        return succeed(courseScheduleEvaluateService.findByGroupId(groupId,1));
     }
 
     @ApiOperation(value = "评论详情")

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

@@ -42,6 +42,9 @@ public class TaskController extends BaseController {
 	@Autowired
 	private PracticeGroupService practiceGroupService;
 
+	@Autowired
+	private CourseScheduleEvaluateService courseScheduleEvaluateService;
+
 	@GetMapping("/refreshPaymentFeeStatus")
 	// 刷新付费状态
 	public void refreshPaymentFeeStatus() {
@@ -156,4 +159,10 @@ public class TaskController extends BaseController {
 		practiceGroupService.pushStudyReport(null, "JIGUANG");
 	}
 
+	//新增待填写月报定时推送(推送老师)
+	@GetMapping("/pushNeedPostReport")
+	public void pushNeedPostReport(){
+		courseScheduleEvaluateService.pushNeedPostReport();
+	}
+
 }