Pārlūkot izejas kodu

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

zouxuan 5 gadi atpakaļ
vecāks
revīzija
47d2a98eec
45 mainītis faili ar 1267 papildinājumiem un 206 dzēšanām
  1. 4 4
      mec-auth/mec-auth-server/src/main/java/com/ym/mec/auth/core/handler/BaseAuthenticationSuccessEventHandler.java
  2. 28 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupStudentMapperDao.java
  3. 7 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleEvaluateDao.java
  4. 17 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/PracticeGroupDao.java
  5. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroupStudentInfoDto.java
  6. 110 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/GroupHeadInfoDto.java
  7. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/PracticeGroupDto.java
  8. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/SimpleUserDto.java
  9. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/TeacherClassStudentDto.java
  10. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CourseScheduleEvaluate.java
  11. 22 20
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/CoursesGroup.java
  12. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/PracticeGroup.java
  13. 27 3
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysTenantAccount.java
  14. 106 57
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/SysTenantAccountDetail.java
  15. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/VipGroup.java
  16. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  17. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java
  18. 38 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/TenantAccountDetailQueryInfo.java
  19. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  20. 13 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java
  21. 6 10
      mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleEvaluateService.java
  22. 23 0
      mec-biz/src/main/java/com/ym/mec/biz/service/CoursesGroupService.java
  23. 9 0
      mec-biz/src/main/java/com/ym/mec/biz/service/TeacherCourseScheduleService.java
  24. 7 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  25. 6 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupStudentMapperServiceImpl.java
  26. 72 24
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleEvaluateServiceImpl.java
  27. 314 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java
  28. 6 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  29. 34 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherCourseScheduleServiceImpl.java
  30. 43 0
      mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml
  31. 27 11
      mec-biz/src/main/resources/config/mybatis/CourseScheduleEvaluateMapper.xml
  32. 51 31
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  33. 28 16
      mec-biz/src/main/resources/config/mybatis/SysTenantAccountDetailMapper.xml
  34. 6 2
      mec-biz/src/main/resources/config/mybatis/SysTenantAccountMapper.xml
  35. 4 0
      mec-biz/src/main/resources/config/mybatis/VipGroupMapper.xml
  36. 8 0
      mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java
  37. 10 0
      mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java
  38. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/CreateEvaluateTask.java
  39. 19 0
      mec-task/src/main/java/com/ym/mec/task/jobs/PushNeedPostReportTask.java
  40. 3 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java
  41. 6 8
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudyReportController.java
  42. 56 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/SysTenantAccountController.java
  43. 25 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseScheduleController.java
  44. 1 1
      mec-web/src/main/java/com/ym/mec/web/controller/APIController.java
  45. 17 0
      mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

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

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

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

@@ -1,8 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
-import com.ym.mec.biz.dal.dto.StudentAttendanceViewDto;
-import com.ym.mec.biz.dal.dto.StudentNameAndPhoneDto;
-import com.ym.mec.biz.dal.dto.TeacherClassStudentDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
@@ -192,6 +190,19 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
     List<ClassGroupStudentMapper> findByClassGroup(@Param("classGroupId") Integer classGroupId);
 
     /**
+     * @describe 获取团体或者班级上的学员
+     * @author Joburgess
+     * @date 2020/3/10
+     * @param groupId:
+     * @param groupType:
+     * @param classGroupId:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.SimpleUserDto>
+     */
+    List<ClassGroupStudentInfoDto> findByGroupOrClassGroup(@Param("groupId") String groupId,
+                                               @Param("groupType") GroupType groupType,
+                                               @Param("classGroupId") Integer classGroupId);
+
+    /**
      * 查询班级某状态下所有的学生
      *
      * @param classGroupId
@@ -346,4 +357,18 @@ public interface ClassGroupStudentMapperDao extends BaseDAO<Long, ClassGroupStud
      * @return
      */
     List<ClassGroupStudentMapper> queryNewStudentListByCourseScheduleId(Long courseScheduleId);
+
+    /**
+     * @describe 获取课程组上的学生
+     * @author Joburgess
+     * @date 2020/3/11
+     * @param groupId:
+     * @param groupType:
+     * @param userId:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ClassGroupStudentMapper>
+     */
+    List<ClassGroupStudentMapper> findGroupStudents(@Param("groupId") String groupId,
+                                                    @Param("groupType") GroupType groupType,
+                                                    @Param("userId") Integer userId,
+                                                    @Param("status") ClassGroupStudentStatusEnum status);
 }

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

@@ -72,4 +72,11 @@ public interface CourseScheduleEvaluateDao extends BaseDAO<Long, CourseScheduleE
      * @return
      */
     int batchAdd(@Param("list") List<CourseScheduleEvaluate> list);
+
+    /**
+     * 获取班级课程数
+     * @param classGroupId
+     * @return
+     */
+    Integer getClassGroupCourseTimes(@Param("classGroupId") Integer classGroupId);
 }

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

@@ -2,6 +2,7 @@ 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;
@@ -183,5 +184,21 @@ public interface PracticeGroupDao extends com.ym.mec.common.dal.BaseDAO<Long, Pr
 
     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);
 }

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ClassGroupStudentInfoDto.java

@@ -0,0 +1,30 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/10
+ */
+public class ClassGroupStudentInfoDto extends ClassGroupStudentMapper {
+
+    private String avatar;
+
+    private String phone;
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+}

+ 110 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/GroupHeadInfoDto.java

@@ -0,0 +1,110 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/10
+ */
+public class GroupHeadInfoDto {
+
+    private String groupId;
+
+    private String groupName;
+
+    private Integer classGroupId;
+
+    private Date courseStartDate;
+
+    private Date courseExpireDate;
+
+    private Integer teacherId;
+
+    private String teacherName;
+
+    private String avatar;
+
+    private Integer lectureNum;
+
+    private String introduction;
+
+    public String getIntroduction() {
+        return introduction;
+    }
+
+    public void setIntroduction(String introduction) {
+        this.introduction = introduction;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getGroupName() {
+        return groupName;
+    }
+
+    public void setGroupName(String groupName) {
+        this.groupName = groupName;
+    }
+
+    public Integer getClassGroupId() {
+        return classGroupId;
+    }
+
+    public void setClassGroupId(Integer classGroupId) {
+        this.classGroupId = classGroupId;
+    }
+
+    public Date getCourseStartDate() {
+        return courseStartDate;
+    }
+
+    public void setCourseStartDate(Date courseStartDate) {
+        this.courseStartDate = courseStartDate;
+    }
+
+    public Date getCourseExpireDate() {
+        return courseExpireDate;
+    }
+
+    public void setCourseExpireDate(Date courseExpireDate) {
+        this.courseExpireDate = courseExpireDate;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getAvatar() {
+        return avatar;
+    }
+
+    public void setAvatar(String avatar) {
+        this.avatar = avatar;
+    }
+
+    public Integer getLectureNum() {
+        return lectureNum;
+    }
+
+    public void setLectureNum(Integer lectureNum) {
+        this.lectureNum = lectureNum;
+    }
+}

+ 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;
+    }
 }

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

@@ -16,6 +16,16 @@ public class SimpleUserDto {
 
     private String introduction;
 
+    private String phone;
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
     public SimpleUserDto(Integer userId, String userName) {
         this.userId = userId;
         this.userName = userName;

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

@@ -17,9 +17,19 @@ public class TeacherClassStudentDto {
     @ApiModelProperty(value = "头像")
     private String avatar;
 
+    private String phone;
+
     @ApiModelProperty(value = "连续旷课次数")
     private Integer continuousAbsenteeismTimes;
 
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
     public Long getUserId() {
         return userId;
     }

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

@@ -29,6 +29,8 @@ public class CourseScheduleEvaluate {
 
     private Date createTime;
 
+    private Date updateTime;
+
     private Integer studentId;
 
     @ApiModelProperty(value = "学生专业")
@@ -263,4 +265,12 @@ public class CourseScheduleEvaluate {
     public void setStatus(Integer status) {
         this.status = status;
     }
+
+    public Date getUpdateTime() {
+        return updateTime;
+    }
+
+    public void setUpdateTime(Date updateTime) {
+        this.updateTime = updateTime;
+    }
 }

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

@@ -3,6 +3,8 @@ package com.ym.mec.biz.dal.entity;
 import com.ym.mec.biz.dal.enums.GroupStatusEnum;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import java.math.BigDecimal;
+
 /**
  * 对应数据库表(courses_group):
  */
@@ -54,17 +56,33 @@ public class CoursesGroup {
 	private String teacherSalarySettlementMethod;
 	
 	/** 课程总价 */
-	private long totalCoursesPrice;
+	private BigDecimal totalCoursesPrice;
 	
 	/** 课程折扣价 */
-	private long totalCourseDiscountPrice;
+	private BigDecimal totalCourseDiscountPrice;
 	
 	/**  */
 	private java.util.Date createTime;
 	
 	/**  */
 	private java.util.Date updateTime;
-	
+
+	public BigDecimal getTotalCoursesPrice() {
+		return totalCoursesPrice;
+	}
+
+	public void setTotalCoursesPrice(BigDecimal totalCoursesPrice) {
+		this.totalCoursesPrice = totalCoursesPrice;
+	}
+
+	public BigDecimal getTotalCourseDiscountPrice() {
+		return totalCourseDiscountPrice;
+	}
+
+	public void setTotalCourseDiscountPrice(BigDecimal totalCourseDiscountPrice) {
+		this.totalCourseDiscountPrice = totalCourseDiscountPrice;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}
@@ -184,23 +202,7 @@ public class CoursesGroup {
 	public String getTeacherSalarySettlementMethod(){
 		return this.teacherSalarySettlementMethod;
 	}
-			
-	public void setTotalCoursesPrice(long totalCoursesPrice){
-		this.totalCoursesPrice = totalCoursesPrice;
-	}
-	
-	public long getTotalCoursesPrice(){
-		return this.totalCoursesPrice;
-	}
-			
-	public void setTotalCourseDiscountPrice(long totalCourseDiscountPrice){
-		this.totalCourseDiscountPrice = totalCourseDiscountPrice;
-	}
-	
-	public long getTotalCourseDiscountPrice(){
-		return this.totalCourseDiscountPrice;
-	}
-			
+
 	public void setCreateTime(java.util.Date createTime){
 		this.createTime = createTime;
 	}

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

@@ -59,6 +59,16 @@ public class PracticeGroup {
 
 	private Long beRenewGroupId;
 
+	private Integer educationalTeacherId;
+
+	public Integer getEducationalTeacherId() {
+		return educationalTeacherId;
+	}
+
+	public void setEducationalTeacherId(Integer educationalTeacherId) {
+		this.educationalTeacherId = educationalTeacherId;
+	}
+
 	public Long getBeRenewGroupId() {
 		return beRenewGroupId;
 	}

+ 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);

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

@@ -124,6 +124,16 @@ public class VipGroup {
 	@ApiModelProperty(value = "指定学员列表")
 	private String studentIdList;
 
+	private Integer educationalTeacherId;
+
+	public Integer getEducationalTeacherId() {
+		return educationalTeacherId;
+	}
+
+	public void setEducationalTeacherId(Integer educationalTeacherId) {
+		this.educationalTeacherId = educationalTeacherId;
+	}
+
 	public Integer getSubClassTimes() {
 		return subClassTimes;
 	}

+ 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;

+ 1 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/OrderTypeEnum.java

@@ -12,6 +12,7 @@ public enum OrderTypeEnum implements BaseEnum<String, OrderTypeEnum> {
 	OTHER("OTHER", "其他"),
 	SMALL_CLASS_TO_BUY("SMALL_CLASS_TO_BUY", "小课购买"),
 	PRACTICE_GROUP_BUY("PRACTICE_GROUP_BUY", "网管课购买"),
+	COURSE_GROUP_BUY("COURSE_GROUP_BUY","对外课程购买"),
 	LUCK("LUCK", "福袋活动");
 
 	private String 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;
+	}
+}

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

@@ -12,7 +12,6 @@ import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.page.QueryInfo;
 import com.ym.mec.common.service.BaseService;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -413,4 +412,5 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @return
      */
     Map<String,Object> getUserInfoWithUserId(Integer groupId, Integer userId);
+
 }

+ 13 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupStudentMapperService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.service;
 
+import com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto;
 import com.ym.mec.biz.dal.entity.ClassGroupStudentMapper;
 import com.ym.mec.biz.dal.entity.StudentRegistration;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
@@ -65,4 +66,16 @@ public interface ClassGroupStudentMapperService extends BaseService<Long, ClassG
     List<ClassGroupStudentMapper> findMusicGroupClassGroupByType(String musicGroupId, ClassGroupTypeEnum type);
 
     void classGroupStudentsInsert(List<ClassGroupStudentMapper> classGroupStudentMappers);
+
+    /**
+     * @describe 获取团体或者班级下的学员
+     * @author Joburgess
+     * @date 2020/3/10
+     * @param groupId:
+     * @param classGroupId:
+     * @param groupType:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto>
+     */
+    List<ClassGroupStudentInfoDto> findStudentByGroupOrClassGroup(String groupId, Integer classGroupId, GroupType groupType);
+
 }

+ 6 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/CourseScheduleEvaluateService.java

@@ -1,16 +1,8 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.entity.ClassGroup;
 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.exception.BizException;
-import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
-import org.apache.ibatis.annotations.Param;
-
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 
 
 public interface CourseScheduleEvaluateService extends BaseService<Long, CourseScheduleEvaluate> {
@@ -48,7 +40,7 @@ public interface CourseScheduleEvaluateService extends BaseService<Long, CourseS
      * @param afterDate
      * @return
      */
-    List<CourseScheduleEvaluate> createEvaluate(Date NowDate,Date afterDate);
+    List<CourseScheduleEvaluate> createEvaluate(Date nowDate);
 
     /**
      * 更新学习报告
@@ -57,4 +49,8 @@ public interface CourseScheduleEvaluateService extends BaseService<Long, CourseS
      */
     boolean updateStudyReport(CourseScheduleEvaluate courseScheduleEvaluate);
 
+    /**
+     * 推栋需填写报告给老师
+     */
+    void pushNeedPostReport();
 }

+ 23 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/CoursesGroupService.java

@@ -2,7 +2,10 @@ package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.CourseGroupCreateDto;
 import com.ym.mec.biz.dal.dto.CourseGroupTeacherCardDto;
+import com.ym.mec.biz.dal.dto.GroupHeadInfoDto;
 import com.ym.mec.biz.dal.entity.CoursesGroup;
+import com.ym.mec.biz.dal.entity.StudentPaymentOrder;
+import com.ym.mec.common.entity.HttpResponseResult;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
@@ -27,4 +30,24 @@ public interface CoursesGroupService extends BaseService<Long, CoursesGroup> {
      */
     List<CourseGroupTeacherCardDto> findTeacherCourseGroups(Integer teacherId);
 
+    /**
+     * @describe 获取课程对应班级头部信息
+     * @author Joburgess
+     * @date 2020/3/10
+     * @param courseScheduleId: 课程编号
+     * @return com.ym.mec.biz.dal.dto.GroupHeadInfoDto
+     */
+    GroupHeadInfoDto getGroupHeadInfo(Long courseScheduleId);
+
+    /**
+     * @describe 购买课程组
+     * @author Joburgess
+     * @date 2020/3/11
+     * @param userId:
+     * @param courseGroupId:
+     * @return void
+     */
+    HttpResponseResult buyCourseGroup(Integer userId, Long courseGroupId, boolean isUseBalancePayment);
+
+    void orderCallback(StudentPaymentOrder studentPaymentOrder);
 }

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

@@ -34,4 +34,13 @@ public interface TeacherCourseScheduleService {
      */
     List<CourseScheduleDto> findCourseSchedulesWithDate(Integer teacherId, Date classDate, String groupId, GroupType groupType);
 
+    /**
+     * @describe 根据课程编号获取课程所在课程组的课程
+     * @author Joburgess
+     * @date 2020/3/10
+     * @param courseScheduleId:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.CourseScheduleDto>
+     */
+    List<CourseScheduleDto> findGroupClassesWithCourse(Long courseScheduleId);
+
 }

+ 7 - 1
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()) {

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

@@ -1,6 +1,7 @@
 package com.ym.mec.biz.service.impl;
 
 import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
+import com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.ClassGroupTypeEnum;
@@ -20,7 +21,6 @@ import org.springframework.transaction.annotation.Transactional;
 import java.io.IOException;
 import java.math.BigDecimal;
 import java.util.*;
-import java.util.stream.Collectors;
 
 @Service
 public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, ClassGroupStudentMapper> implements ClassGroupStudentMapperService {
@@ -232,4 +232,9 @@ public class ClassGroupStudentMapperServiceImpl extends BaseServiceImpl<Long, Cl
     public void classGroupStudentsInsert(List<ClassGroupStudentMapper> classGroupStudentMappers) {
         classGroupStudentMapperDao.classGroupStudentsInsert(classGroupStudentMappers);
     }
+
+    @Override
+    public List<ClassGroupStudentInfoDto> findStudentByGroupOrClassGroup(String groupId, Integer classGroupId, GroupType groupType) {
+        return classGroupStudentMapperDao.findByGroupOrClassGroup(groupId,groupType,classGroupId);
+    }
 }

+ 72 - 24
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseScheduleEvaluateServiceImpl.java

@@ -2,27 +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.ArrayList;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -38,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() {
@@ -60,8 +65,13 @@ 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);
@@ -94,8 +104,8 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
     }
 
     @Override
-    public List<CourseScheduleEvaluate> findByGroupId(Integer groupId,Integer status) {
-        return courseScheduleEvaluateDao.findByGroupId(groupId,status);
+    public List<CourseScheduleEvaluate> findByGroupId(Integer groupId, Integer status) {
+        return courseScheduleEvaluateDao.findByGroupId(groupId, status);
     }
 
     @Override
@@ -108,11 +118,6 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
         BasicUserDto teacherInfo = teacherDao.findTeacherInfo(studyReport.getTeacherId());
         studyReport.setStudent(user);
         studyReport.setTeacher(teacherInfo);
-        long practiceGroupId = Long.parseLong(studyReport.getMusicGroupId());
-        PracticeGroup practiceGroup = practiceGroupDao.get(practiceGroupId);
-        ClassGroup classGroup = classGroupDao.get(studyReport.getClassGroupId());
-        studyReport.setTimes(classGroup.getTotalClassTimes());
-        studyReport.setTotalMinutes(classGroup.getTotalClassTimes() * practiceGroup.getSingleClassMinutes());
         return studyReport;
     }
 
@@ -122,10 +127,29 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
     }
 
     @Override
-    public List<CourseScheduleEvaluate> createEvaluate(Date NowDate, Date afterDate) {
-        List<CourseScheduleEvaluate> needPostReportPracticeGroups = practiceGroupDao.getNeedPostReportPracticeGroups(NowDate, afterDate);
+    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) {
-            needPostReportPracticeGroup.setCreateTime(NowDate);
+            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);
         }
@@ -137,17 +161,41 @@ public class CourseScheduleEvaluateServiceImpl extends BaseServiceImpl<Long, Cou
 
     @Override
     public boolean updateStudyReport(CourseScheduleEvaluate courseScheduleEvaluate) {
-        ClassGroup classGroup = classGroupDao.get(courseScheduleEvaluate.getClassGroupId());
-        if (classGroup == null) {
+        CourseScheduleEvaluate evaluate = courseScheduleEvaluateDao.get(courseScheduleEvaluate.getId());
+        if (evaluate == null) {
             throw new BizException("课程不存在!");
         }
-        courseScheduleEvaluate.setMusicGroupId(classGroup.getMusicGroupId());
-        courseScheduleEvaluate.setStatus(1);
-        courseScheduleEvaluate.setVersion(2);
-        long num = courseScheduleEvaluateDao.update(courseScheduleEvaluate);
+        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, "8?" + pushUrl, "TEACHER");
+
+    }
 }

+ 314 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/CoursesGroupServiceImpl.java

@@ -3,18 +3,23 @@ package com.ym.mec.biz.service.impl;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.ym.mec.biz.dal.dao.*;
-import com.ym.mec.biz.dal.dto.CourseGroupCreateDto;
-import com.ym.mec.biz.dal.dto.CourseGroupTeacherCardDto;
-import com.ym.mec.biz.dal.dto.CourseTimeDto;
-import com.ym.mec.biz.dal.dto.GroupCourseTimesDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
-import com.ym.mec.biz.service.CourseScheduleService;
-import com.ym.mec.biz.service.CoursesGroupService;
+import com.ym.mec.biz.service.*;
+import com.ym.mec.common.constant.CommonConstants;
+import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.entity.ImGroupMember;
+import com.ym.mec.common.entity.ImGroupModel;
 import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.service.IdGeneratorService;
 import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.im.ImFeignService;
 import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
@@ -46,6 +51,35 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
     private SubjectDao subjectDao;
     @Autowired
     private ClassGroupStudentMapperDao classGroupStudentMapperDao;
+    @Autowired
+    private TeacherDao teacherDao;
+    @Autowired
+    private IdGeneratorService idGeneratorService;
+    @Autowired
+    private StudentPaymentOrderService studentPaymentOrderService;
+    @Autowired
+    private SysUserCashAccountService sysUserCashAccountService;
+    @Autowired
+    private SysConfigDao sysConfigDao;
+    @Autowired
+    private PayService payService;
+    @Autowired
+    private StudentPaymentOrderDao studentPaymentOrderDao;
+    @Autowired
+    private GroupClassService groupService;
+    @Autowired
+    private SysUserCashAccountDetailService sysUserCashAccountDetailService;
+    @Autowired
+    private ContractService contractService;
+    @Autowired
+    private TeacherService teacherService;
+    @Autowired
+    private ImFeignService imFeignService;
+    @Autowired
+    private CourseScheduleStudentPaymentDao courseScheduleStudentPaymentDao;
+
+    private static final Logger LOGGER = LoggerFactory
+            .getLogger(PracticeGroupService.class);
 
     @Override
     public BaseDAO<Long, CoursesGroup> getDAO() {
@@ -218,4 +252,278 @@ public class CoursesGroupServiceImpl extends BaseServiceImpl<Long, CoursesGroup>
         }
         return groupCards;
     }
+
+    @Override
+    public GroupHeadInfoDto getGroupHeadInfo(Long courseScheduleId) {
+        if(Objects.isNull(courseScheduleId)){
+            throw new BizException("请选择课程");
+        }
+        CourseSchedule courseSchedule = courseScheduleDao.get(courseScheduleId);
+        if(Objects.isNull(courseSchedule)){
+            throw new BizException("课程不存在");
+        }
+        CoursesGroup coursesGroup = coursesGroupDao.get(Long.valueOf(courseSchedule.getMusicGroupId()));
+        Teacher teacher = teacherDao.get(courseSchedule.getActualTeacherId());
+
+        GroupHeadInfoDto groupHeadInfo=new GroupHeadInfoDto();
+        groupHeadInfo.setGroupId(coursesGroup.getId().toString());
+        groupHeadInfo.setGroupName(coursesGroup.getName());
+        groupHeadInfo.setClassGroupId(courseSchedule.getClassGroupId());
+        groupHeadInfo.setCourseStartDate(coursesGroup.getCoursesStartDate());
+        groupHeadInfo.setCourseExpireDate(coursesGroup.getCoursesEndDate());
+        groupHeadInfo.setTeacherName(teacher.getRealName());
+        groupHeadInfo.setAvatar(teacher.getAvatar());
+        groupHeadInfo.setIntroduction(teacher.getIntroduction());
+        groupHeadInfo.setLectureNum(teacher.getLectureNum());
+
+        return groupHeadInfo;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+    public HttpResponseResult buyCourseGroup(Integer userId, Long courseGroupId, boolean isUseBalancePayment) {
+        if(Objects.isNull(courseGroupId)){
+            throw new BizException("请指定课程组");
+        }
+        List<ClassGroupStudentMapper> groupStudents = classGroupStudentMapperDao.findGroupStudents(courseGroupId.toString(), GroupType.COMM, userId, null);
+        if(!CollectionUtils.isEmpty(groupStudents)){
+            throw new BizException("您已购买过此课程组");
+        }
+        CoursesGroup coursesGroup = coursesGroupDao.get(courseGroupId);
+        if(Objects.isNull(coursesGroup)){
+            throw new BizException("此课程组不存在");
+        }
+
+        Date now=new Date();
+
+        ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(courseGroupId.toString(), GroupType.COMM.getCode());
+
+        BigDecimal amount = coursesGroup.getTotalCoursesPrice();
+        if(Objects.isNull(amount)){
+            amount=BigDecimal.ZERO;
+        }
+
+        StudentPaymentOrder studentPaymentOrder=new StudentPaymentOrder();
+        studentPaymentOrder.setUserId(userId);
+        studentPaymentOrder.setGroupType(GroupType.COMM);
+        String orderNo=idGeneratorService.generatorId("payment") + "";
+        studentPaymentOrder.setOrderNo(orderNo);
+        studentPaymentOrder.setStatus(DealStatusEnum.ING);
+        studentPaymentOrder.setType(OrderTypeEnum.COURSE_GROUP_BUY);
+        studentPaymentOrder.setExpectAmount(amount);
+        studentPaymentOrder.setMusicGroupId(coursesGroup.getId().toString());
+        studentPaymentOrder.setActualAmount(studentPaymentOrder.getExpectAmount());
+        studentPaymentOrder.setClassGroupId(classGroup.getId());
+        studentPaymentOrder.setVersion(0);
+
+        if(amount.compareTo(BigDecimal.ZERO)<=0){
+            this.orderCallback(studentPaymentOrder);
+            return BaseController.succeed();
+        }else{
+            studentPaymentOrderService.insert(studentPaymentOrder);
+
+            if(isUseBalancePayment || studentPaymentOrder.getExpectAmount().doubleValue() == 0){
+                SysUserCashAccount userCashAccount = sysUserCashAccountService.getLocked(userId);
+                if(userCashAccount == null){
+                    throw new BizException("用户账户找不到");
+                }
+                studentPaymentOrder.setPaymentChannel("BALANCE");
+                if(userCashAccount.getBalance().subtract(studentPaymentOrder.getExpectAmount()).doubleValue() >= 0){
+                    // 更新订单信息
+                    studentPaymentOrder.setActualAmount(new BigDecimal(0));
+                    studentPaymentOrder.setBalancePaymentAmount(studentPaymentOrder.getExpectAmount());
+                    studentPaymentOrder.setStatus(DealStatusEnum.SUCCESS);
+                    studentPaymentOrder.setUpdateTime(now);
+                    studentPaymentOrder.setRoutingOrganId(42);
+
+                    sysUserCashAccountService.updateBalance(userId, studentPaymentOrder.getExpectAmount().negate(),PlatformCashAccountDetailTypeEnum.PAY_FEE,"对外课程购买");
+
+                    this.orderCallback(studentPaymentOrder);
+
+                    Map<String,Object> result=new HashMap<>();
+                    result.put("orderNo",studentPaymentOrder.getOrderNo());
+
+                    return BaseController.succeed(result);
+                }else{
+                    if (userCashAccount.getBalance().doubleValue() > 0) {
+                        sysUserCashAccountService.updateBalance(userId, userCashAccount.getBalance().negate(), PlatformCashAccountDetailTypeEnum.PAY_FEE, "对外课程购买");
+                        amount = studentPaymentOrder.getExpectAmount().subtract(userCashAccount.getBalance());
+                        studentPaymentOrder.setActualAmount(amount);
+                        studentPaymentOrder.setBalancePaymentAmount(userCashAccount.getBalance());
+                    } else {
+                        studentPaymentOrder.setBalancePaymentAmount(new BigDecimal(0));
+                    }
+                }
+            }
+
+            String baseApiUrl = sysConfigDao.findConfigValue("base_api_url");
+            Map<String, BigDecimal> classFee = new HashMap<>();
+            classFee.put("course",amount);
+            classFee.put("instrument",BigDecimal.ZERO);
+            classFee.put("accessories",BigDecimal.ZERO);
+            classFee.put("other",BigDecimal.ZERO);
+            try {
+                Map<String,Object> payMap = payService.getPayMap(
+                        amount,
+                        orderNo,
+                        baseApiUrl+"/api-student/studentOrder/notify",
+                        baseApiUrl+"/api-student/studentOrder/paymentResult?orderNo=" + orderNo,
+                        "网管课购买",
+                        coursesGroup.getName(),
+                        userId,
+                        classFee,
+                        null
+                );
+
+                Map<String,BigDecimal> routingFee = (Map<String,BigDecimal>)payMap.get("routingFee");
+                studentPaymentOrder.setRoutingOrganId(42);
+                studentPaymentOrder.setComAmount(routingFee.get("COM"));
+                studentPaymentOrder.setPerAmount(routingFee.get("PER"));
+                studentPaymentOrder.setMerNos((String) payMap.get("routingMerNos"));
+                studentPaymentOrder.setPaymentChannel((String) payMap.get("type"));
+                studentPaymentOrder.setUpdateTime(now);
+                studentPaymentOrderService.update(studentPaymentOrder);
+
+                return BaseController.succeed(payMap);
+            } catch (Exception e) {
+                throw new BizException("订单提交超时,请尝试重新提交购买");
+            }
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class,isolation = Isolation.READ_COMMITTED)
+    public void orderCallback(StudentPaymentOrder order) {
+        if(order.getExpectAmount().compareTo(BigDecimal.ZERO)>0){
+            StudentPaymentOrder studentPaymentOrder = studentPaymentOrderDao.get(order.getId());
+            if(!studentPaymentOrder.getStatus().equals(DealStatusEnum.ING)){
+                return;
+            }
+            SysUserCashAccount sysUserCashAccount = sysUserCashAccountService.get(order.getUserId());
+            List<StudentPaymentOrder> userGroupOrders = studentPaymentOrderDao.findUserGroupOrders(order.getUserId(), order.getMusicGroupId(), order.getGroupType(),null);
+            Map<DealStatusEnum, Long> statusOrderNumMap = userGroupOrders.stream().collect(Collectors.groupingBy(StudentPaymentOrder::getStatus, Collectors.counting()));
+            Long successOrderNum=statusOrderNumMap.get(DealStatusEnum.SUCCESS);
+            if(Objects.nonNull(successOrderNum)&&successOrderNum>0){
+                if(order.getStatus().equals(DealStatusEnum.FAILED)&&Objects.nonNull(order.getBalancePaymentAmount())&&order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO)>0){
+                    sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课支付失败,退还余额");
+                }
+                if(order.getStatus().equals(DealStatusEnum.SUCCESS)){
+                    sysUserCashAccountService.updateBalance(order.getUserId(), order.getExpectAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "重复支付,退还余额");
+                    order.setMemo("重复支付,进入余额");
+                }
+                studentPaymentOrderDao.update(order);
+                return;
+            }
+
+            Long ingOrderNum=statusOrderNumMap.get(DealStatusEnum.ING);
+            if(Objects.nonNull(ingOrderNum)&&ingOrderNum>1&&order.getStatus().equals(DealStatusEnum.FAILED)){
+                if(Objects.nonNull(order.getBalancePaymentAmount())&&order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO)>0){
+                    sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课支付失败,退还余额");
+                }
+                studentPaymentOrderDao.update(order);
+                return;
+            }
+
+            if(order.getStatus().equals(DealStatusEnum.SUCCESS)){
+                courseScheduleDao.updateGroupCourseLock(order.getMusicGroupId(),GroupType.PRACTICE,0);
+            }else{
+                if(Objects.nonNull(order.getBalancePaymentAmount())&&order.getBalancePaymentAmount().compareTo(BigDecimal.ZERO)>0){
+                    sysUserCashAccountService.updateBalance(order.getUserId(), order.getBalancePaymentAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "网管课支付失败,退还余额");
+                }
+                studentPaymentOrderDao.update(order);
+                CoursesGroup coursesGroup = coursesGroupDao.get(Long.valueOf(order.getMusicGroupId()));
+                coursesGroup.setStatus(GroupStatusEnum.CANCEL);
+                coursesGroupDao.update(coursesGroup);
+                groupService.deleteGroupOtherInfo(order.getMusicGroupId(),GroupType.PRACTICE);
+                return;
+            }
+            studentPaymentOrderDao.update(order);
+
+            //插入缴费明细
+            //收入
+            SysUserCashAccountDetail sysUserIncomeCashAccountDetail = new SysUserCashAccountDetail();
+            sysUserIncomeCashAccountDetail.setUserId(order.getUserId());
+            sysUserIncomeCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.RECHARGE);
+            sysUserIncomeCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+            sysUserIncomeCashAccountDetail.setAmount(order.getActualAmount());
+            sysUserIncomeCashAccountDetail.setBalance(sysUserCashAccount.getBalance().add(order.getActualAmount()));
+            sysUserIncomeCashAccountDetail.setAttribute(order.getTransNo());
+            sysUserIncomeCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+            sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount());
+            sysUserIncomeCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount());
+
+            //支出
+            SysUserCashAccountDetail sysUserExpendCashAccountDetail = new SysUserCashAccountDetail();
+            sysUserExpendCashAccountDetail.setUserId(order.getUserId());
+            sysUserExpendCashAccountDetail.setType(PlatformCashAccountDetailTypeEnum.PAY_FEE);
+            sysUserExpendCashAccountDetail.setStatus(DealStatusEnum.SUCCESS);
+            sysUserExpendCashAccountDetail.setAmount(order.getActualAmount().negate());
+            sysUserExpendCashAccountDetail.setBalance(sysUserCashAccount.getBalance());
+            sysUserExpendCashAccountDetail.setAttribute(order.getTransNo());
+            sysUserExpendCashAccountDetail.setChannel(studentPaymentOrder.getPaymentChannel());
+
+            if(studentPaymentOrder.getComAmount() != null){
+                sysUserIncomeCashAccountDetail.setComAmount(studentPaymentOrder.getComAmount().negate());
+            }
+            if(studentPaymentOrder.getPerAmount() != null){
+                sysUserExpendCashAccountDetail.setPerAmount(studentPaymentOrder.getPerAmount().negate());
+            }
+
+            sysUserCashAccountDetailService.insert(sysUserIncomeCashAccountDetail);
+            sysUserCashAccountDetailService.insert(sysUserExpendCashAccountDetail);
+
+            CoursesGroup coursesGroup = coursesGroupDao.get(Long.valueOf(order.getMusicGroupId()));
+            if(!coursesGroup.getStatus().equals(GroupStatusEnum.NORMAL)){
+                order.setVersion(order.getVersion()+1);
+                order.setMemo("支付成功,但课程组不处于正常状态");
+                studentPaymentOrderDao.update(order);
+
+                sysUserCashAccountService.updateBalance(order.getUserId(), order.getExpectAmount(), PlatformCashAccountDetailTypeEnum.REFUNDS, "支付成功,但课程组不处于正常状态");
+
+                return;
+            }
+        }
+        CoursesGroup coursesGroup = coursesGroupDao.get(Long.valueOf(order.getMusicGroupId()));
+        ClassGroup classGroup = classGroupDao.findByMusicGroupAndType(order.getMusicGroupId(), GroupType.COMM.getCode());
+
+        ClassGroupStudentMapper classGroupStudentMapper = new ClassGroupStudentMapper();
+        classGroupStudentMapper.setMusicGroupId(order.getMusicGroupId());
+        classGroupStudentMapper.setClassGroupId(classGroup.getId());
+        classGroupStudentMapper.setUserId(order.getUserId());
+        classGroupStudentMapper.setStatus(ClassGroupStudentStatusEnum.NORMAL);
+        classGroupStudentMapper.setGroupType(GroupType.COMM);
+        classGroupStudentMapperDao.insert(classGroupStudentMapper);
+
+        List<CourseScheduleStudentPayment> courseScheduleStudentPayments = new ArrayList<>();
+        List<CourseSchedule> groupNotStartCourses = courseScheduleDao.findGroupNotStartCourses(order.getMusicGroupId(), GroupType.COMM);
+        if(CollectionUtils.isEmpty(groupNotStartCourses)){
+            throw new BizException("没有剩余课时");
+        }
+        BigDecimal singleCoursePrice = order.getExpectAmount().divide(new BigDecimal(groupNotStartCourses.size()), CommonConstants.DECIMAL_PLACE, BigDecimal.ROUND_DOWN);
+        for (CourseSchedule courseSchedule : groupNotStartCourses) {
+            //学生缴费记录
+            CourseScheduleStudentPayment courseScheduleStudentPayment = new CourseScheduleStudentPayment();
+            courseScheduleStudentPayment.setGroupType(GroupType.COMM);
+            courseScheduleStudentPayment.setMusicGroupId(order.getMusicGroupId());
+            courseScheduleStudentPayment.setCourseScheduleId(courseSchedule.getId());
+            courseScheduleStudentPayment.setUserId(order.getUserId());
+            courseScheduleStudentPayment.setExpectPrice(singleCoursePrice);
+            courseScheduleStudentPayment.setClassGroupId(classGroup.getId());
+            courseScheduleStudentPayments.add(courseScheduleStudentPayment);
+        }
+        courseScheduleStudentPaymentDao.batchInsert(courseScheduleStudentPayments);
+
+        try {
+//            contractService.transferPracticeCoursesContract(order.getUserId(),classGroup.getTotalClassTimes(),practiceGroup.getCoursesStartDate(),practiceGroup.getCoursesExpireDate(),order.getExpectAmount());
+        } catch (Exception e) {
+            LOGGER.error("网管课[{}]购买协议错误:{}",order.getMusicGroupId(),e.getMessage(),e.getMessage());
+        }
+
+        List<ImGroupMember> imGroupMemberList = new ArrayList<>();
+        imGroupMemberList.add(new ImGroupMember(coursesGroup.getTeacherId().toString()));
+        imGroupMemberList.add(new ImGroupMember(order.getUserId().toString()));
+        ImGroupMember[] imGroupMembers = imGroupMemberList.toArray(new ImGroupMember[imGroupMemberList.size()]);
+        // 创建群组
+        imFeignService.groupCreate(new ImGroupModel(classGroup.getId().toString(), imGroupMembers, classGroup.getName()));
+    }
 }

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

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

+ 34 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherCourseScheduleServiceImpl.java

@@ -1,17 +1,16 @@
 package com.ym.mec.biz.service.impl;
 
-import com.ym.mec.biz.dal.dao.ClassGroupStudentMapperDao;
-import com.ym.mec.biz.dal.dao.CourseScheduleDao;
-import com.ym.mec.biz.dal.dao.StudentAttendanceDao;
-import com.ym.mec.biz.dal.dao.SubjectDao;
+import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.CourseScheduleDto;
 import com.ym.mec.biz.dal.dto.StudentNameAndPhoneDto;
+import com.ym.mec.biz.dal.entity.CourseSchedule;
 import com.ym.mec.biz.dal.entity.SysConfig;
 import com.ym.mec.biz.dal.enums.ClassGroupStudentStatusEnum;
 import com.ym.mec.biz.dal.enums.CourseStatusEnum;
 import com.ym.mec.biz.dal.enums.GroupType;
 import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.TeacherCourseScheduleService;
+import com.ym.mec.common.exception.BizException;
 import com.ym.mec.util.collection.MapUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -116,4 +115,35 @@ public class TeacherCourseScheduleServiceImpl implements TeacherCourseScheduleSe
         }
         return teacherCourseSchedulesWithDate;
     }
+
+    @Override
+    public List<CourseScheduleDto> findGroupClassesWithCourse(Long courseScheduleId) {
+        if(Objects.isNull(courseScheduleId)){
+            throw new BizException("请指定课程");
+        }
+        CourseSchedule currentCourseSchedule = courseScheduleDao.get(courseScheduleId);
+        List<CourseScheduleDto> teacherCourseSchedulesWithDate = courseScheduleDao.findCourseSchedulesWithDate(null,null,currentCourseSchedule.getMusicGroupId(),currentCourseSchedule.getGroupType());
+        List<CourseScheduleDto> notStartClasses=new ArrayList<>();
+        List<CourseScheduleDto> overClasses=new ArrayList<>();
+        CourseScheduleDto currentClasses=null;
+        Date now=new Date();
+        for (CourseScheduleDto courseScheduleDto : teacherCourseSchedulesWithDate) {
+            if(currentCourseSchedule.getId().equals(courseScheduleDto.getId())){
+                currentClasses=courseScheduleDto;
+                continue;
+            }
+            if(courseScheduleDto.getEndClassTime().before(now)){
+                overClasses.add(courseScheduleDto);
+            }else{
+                notStartClasses.add(courseScheduleDto);
+            }
+        }
+
+        List<CourseScheduleDto> courseSchedules=new ArrayList<>();
+        courseSchedules.add(currentClasses);
+        courseSchedules.addAll(notStartClasses);
+        courseSchedules.addAll(overClasses);
+
+        return courseSchedules;
+    }
 }

+ 43 - 0
mec-biz/src/main/resources/config/mybatis/ClassGroupStudentMapperMapper.xml

@@ -18,6 +18,11 @@
         <result column="status_" property="status" typeHandler="com.ym.mec.common.dal.CustomEnumTypeHandler"/>
     </resultMap>
 
+    <resultMap id="ClassGroupStudentInfoDto" type="com.ym.mec.biz.dal.dto.ClassGroupStudentInfoDto" extends="ClassGroupStudentMapper">
+        <result property="avatar" column="avatar_"/>
+        <result property="phone" column="phone_"/>
+    </resultMap>
+
     <!-- 根据主键查询一条记录 -->
     <select id="get" resultMap="ClassGroupStudentMapper">
 		SELECT * FROM class_group_student_mapper WHERE id_ = #{id} 
@@ -136,6 +141,7 @@
         <result property="userId" column="user_id_"/>
         <result property="userName" column="username_"/>
         <result property="avatar" column="avatar_"/>
+        <result property="phone" column="phone_"/>
         <result property="continuousAbsenteeismTimes" column="continuous_absenteeism_times_"/>
     </resultMap>
 
@@ -144,6 +150,7 @@
             su.id_ user_id_,
             su.username_,
             su.avatar_,
+            su.phone_,
             mgsf.continuous_absenteeism_times_
         FROM
             class_group_student_mapper cgsm
@@ -407,4 +414,40 @@
               #{groupId}
           </foreach>
     </select>
+    <select id="findByGroupOrClassGroup" resultMap="ClassGroupStudentInfoDto">
+        SELECT
+            cgsm.*,
+            su.username_,
+            su.avatar_,
+            su.phone_
+        FROM class_group_student_mapper cgsm
+          LEFT JOIN sys_user su ON cgsm.user_id_ = su.id_
+        <where>
+            <if test="groupType!=null">
+                AND cgsm.group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="groupId!=null">
+                AND cgsm.music_group_id_ = #{groupId}
+            </if>
+            <if test="classGroupId!=null">
+                AND cgsm.class_group_id_=#{classGroupId}
+            </if>
+        </where>
+    </select>
+    <select id="findGroupStudents" resultMap="ClassGroupStudentMapper">
+        SELECT * FROM class_group_student_mapper
+        WHERE
+            <if test="groupType!=null">
+                AND cgsm.group_type_=#{groupType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+            <if test="groupId!=null">
+                AND cgsm.music_group_id_ = #{groupId}
+            </if>
+            <if test="userId!=null">
+                AND user_id_=#{userId}
+            </if>
+            <if test="status!=null">
+                AND status_=#{status,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+            </if>
+    </select>
 </mapper>

+ 27 - 11
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,6 +18,8 @@
         <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="group_name_" jdbcType="VARCHAR" property="groupName"/>
@@ -25,13 +28,13 @@
     <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_,
+                                              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}, #{status,jdbcType=TINYINT})
+                #{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">
@@ -77,18 +80,25 @@
                 status_ = #{status},
             </if>
             <if test="isPushed != null">
-                is_pushed_ = #{isPushed}
+                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} AND status_=1
+        WHERE cse.class_group_id_ = #{classGroupId} AND status_=1 AND version_=1
         ORDER BY create_time_ DESC
         LIMIT 1
     </select>
@@ -173,7 +183,7 @@
     </select>
 
     <select id="findByGroupId" resultMap="CourseScheduleEvaluate">
-        SELECT id_,status_,class_group_id_,version_, DATE_FORMAT(create_time_, '%Y年%m月') month_
+        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">
@@ -198,7 +208,7 @@
     </select>
 
     <select id="getNeedPostReports" resultMap="CourseScheduleEvaluate">
-        SELECT cse.id_,DATE_FORMAT(cse.create_time_,'%Y年%m月') month_,pg.name_ group_name_ FROM course_schedule_evaluate cse
+        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}
@@ -208,13 +218,19 @@
 
     <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_,student_id_list_, version_, status_)
+        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.studentIdList}, #{evaluate.version,jdbcType=INTEGER}, #{evaluate.status,jdbcType=TINYINT})
+            #{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>

+ 51 - 31
mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml

@@ -25,6 +25,7 @@
         <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">
@@ -48,6 +49,7 @@
         <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
@@ -56,25 +58,28 @@
         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>
+			<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>
+			<if test="educationalTeacherId!=null">
+				educational_teacher_id_=#{educationalTeacherId},
+			</if>
+			update_time_ = NOW()
+		</set>
+		WHERE id_ = #{id}
+	</update>
 
     <update id="batchUpdate">
         <foreach collection="groups" item="group" separator=";">
@@ -265,6 +270,9 @@
     <sql id="practiceGroupReviewsQueryCondition">
         <where>
             pg.group_status_='NORMAL'
+            <if test="month != null">
+                AND DATE_FORMAT(cse.create_time_, '%Y-%m') = #{month}
+            </if>
             <if test="search!=null and search!=''">
                 AND (pg.name_ LIKE CONCAT('%',#{search},'%') OR pg.id_= #{search})
             </if>
@@ -291,23 +299,22 @@
                 <![CDATA[ AND pg.courses_expire_date_ <= NOW()
 			]]></if>
             <if test='hasReport !=null and hasReport=="0"'>
-                <![CDATA[AND cse.id_ IS NULL
+                <![CDATA[AND cse.status_ =0
 			]]>
             </if>
             <if test='hasReport !=null and hasReport=="1"'>
-                <![CDATA[ AND cse.id_ > 0
+                <![CDATA[ AND cse.status_ = 1
 			]]></if>
         </where>
     </sql>
 
     <select id="findPracticeGroupsReviews" resultMap="PracticeGroupDto">
-        SELECT pg.*,cse.id_ evaluate_id_,
+        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')
+        LEFT JOIN course_schedule_evaluate cse ON pg.id_=cse.music_group_id_
         <include refid="practiceGroupReviewsQueryCondition"/>
         ORDER BY pg.id_ DESC
         <include refid="global.limit"/>
@@ -316,22 +323,35 @@
 
     <select id="countPracticeGroupReviews" resultType="java.lang.Integer">
         SELECT count(*) FROM practice_group pg
-        LEFT JOIN course_schedule_evaluate cse ON pg.id_=cse.music_group_id_ AND DATE_FORMAT(cse.create_time_, '%Y%m') =
-        DATE_FORMAT(#{month},'%Y%m')
+        LEFT JOIN course_schedule_evaluate cse ON pg.id_=cse.music_group_id_
         <include refid="practiceGroupReviewsQueryCondition"/>
     </select>
 
     <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_
-        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_, '%m%d') = DATE_FORMAT(#{afterDate}, '%m%d')
+        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,jdbcType=DATE}
+          AND pg.courses_expire_date_ >= #{afterDate,jdbcType=DATE}
+          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,jdbcType=DATE} AND class_date_ <=#{endDate,jdbcType=DATE} ]]>
+        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>

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

@@ -8,11 +8,15 @@
 		<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>
 
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="SysTenantAccount">
+		SELECT * FROM sys_tenant_account WHERE user_id_ = #{uesrId}
+	</select>
 
 	<!-- 全查询 -->
 	<select id="findAll" resultMap="SysTenantAccount">
@@ -26,7 +30,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-biz/src/main/resources/config/mybatis/VipGroupMapper.xml

@@ -41,6 +41,7 @@
         <result column="organ_name_" property="organName" />
         <result column="school_name_" property="schoolName" />
         <result column="subject_name_" property="subjectName" />
+        <result column="educational_teacher_id_" property="educationalTeacherId" />
     </resultMap>
     
     <resultMap type="com.ym.mec.biz.dal.entity.School" id="School">
@@ -282,6 +283,9 @@
             <if test="studentIdList!=null">
                 student_id_list_=#{studentIdList},
             </if>
+            <if test="educationalTeacherId!=null">
+                educational_teacher_id_=#{educationalTeacherId},
+            </if>
         </set>
         WHERE id_ = #{id}
     </update>

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

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

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

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

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/CreateEvaluateTask.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 CreateEvaluateTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() throws TaskException {
+        taskRemoteService.createEvaluate();
+    }
+}

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/PushNeedPostReportTask.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 PushNeedPostReportTask extends BaseTask {
+
+    @Autowired
+    private TaskRemoteService taskRemoteService;
+
+    @Override
+    public void execute() throws TaskException {
+        taskRemoteService.pushNeedPostReport();
+    }
+}

+ 3 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ClassGroupController.java

@@ -5,6 +5,7 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.entity.CourseScheduleEvaluate;
 import com.ym.mec.biz.dal.page.CourseScheduleQueryInfo;
 import com.ym.mec.biz.service.ClassGroupService;
+import com.ym.mec.biz.service.ClassGroupStudentMapperService;
 import com.ym.mec.biz.service.CourseScheduleEvaluateService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -32,6 +33,8 @@ public class ClassGroupController extends BaseController {
     private CourseScheduleEvaluateService courseScheduleEvaluateService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private ClassGroupStudentMapperService classGroupStudentMapperService;
 
     @ApiOperation(value = "教师关联班级获取")
     @GetMapping("/findTeacherClassGroups")

+ 6 - 8
mec-teacher/src/main/java/com/ym/mec/teacher/controller/StudyReportController.java

@@ -39,18 +39,17 @@ public class StudyReportController extends BaseController {
         return succeed(courseScheduleEvaluateService.getStudyReport(classGroupId));
     }
 
-    @ApiOperation(value = "课程组评论列表")
+    @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.setTimes(2);
-            courseScheduleEvaluate.setTotalMinutes(100);
-            if (courseScheduleEvaluate.getStatus().equals(1)) {
+            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 {
-                courseScheduleEvaluate.setReportLink(teacherBaseUrl + "/#/studyReportNew?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);
@@ -79,8 +78,7 @@ public class StudyReportController extends BaseController {
         if (date != null) {
             nowDate = date;
         }
-        Date afterDate = DateUtil.addDays1(nowDate, 5);
-        return succeed(courseScheduleEvaluateService.createEvaluate(nowDate, afterDate));
+        return succeed(courseScheduleEvaluateService.createEvaluate(nowDate));
     }
 
     @ApiOperation(value = "提交陪练报告")

+ 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(sysTenantAccountDetailService.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;
 	}

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

@@ -8,6 +8,8 @@ import org.springframework.web.bind.annotation.RestController;
 
 import com.ym.mec.common.controller.BaseController;
 
+import java.util.Date;
+
 @RequestMapping("task")
 @RestController
 public class TaskController extends BaseController {
@@ -42,6 +44,9 @@ public class TaskController extends BaseController {
 	@Autowired
 	private PracticeGroupService practiceGroupService;
 
+	@Autowired
+	private CourseScheduleEvaluateService courseScheduleEvaluateService;
+
 	@GetMapping("/refreshPaymentFeeStatus")
 	// 刷新付费状态
 	public void refreshPaymentFeeStatus() {
@@ -156,4 +161,16 @@ public class TaskController extends BaseController {
 		practiceGroupService.pushStudyReport(null, "JIGUANG");
 	}
 
+	//新增待填写月报定时推送(推送老师)
+	@GetMapping("/pushNeedPostReport")
+	public void pushNeedPostReport(){
+		courseScheduleEvaluateService.pushNeedPostReport();
+	}
+
+	//定时预生成待提交月报
+	@GetMapping("/createEvaluate")
+	public void createEvaluate(){
+		courseScheduleEvaluateService.createEvaluate(new Date());
+	}
+
 }