Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

周箭河 před 5 roky
rodič
revize
613b78f9ad
62 změnil soubory, kde provedl 2168 přidání a 61 odebrání
  1. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ClassGroupDao.java
  2. 14 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesDao.java
  3. 15 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesMessageDao.java
  4. 54 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java
  5. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherDao.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/CourseScheduleDto.java
  7. 60 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java
  8. 147 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java
  9. 92 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesMessage.java
  10. 125 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesReply.java
  11. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomework.java
  12. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentCourseHomeworkReply.java
  13. 4 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java
  14. 42 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExtraExercilseQueryInfo.java
  15. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseHomeworkReplyQueryInfo.java
  16. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/ClassGroupService.java
  17. 28 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesMessageService.java
  18. 50 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  19. 30 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesService.java
  20. 8 0
      mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java
  21. 4 4
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ClassGroupServiceImpl.java
  22. 10 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/CourseReviewServiceImpl.java
  23. 74 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesMessageServiceImpl.java
  24. 120 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  25. 95 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java
  26. 12 17
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java
  27. 16 2
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkReplyServiceImpl.java
  28. 9 6
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  29. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SysMessageServiceImpl.java
  30. 1 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TeacherServiceImpl.java
  31. 5 1
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/TenantPaymentOrderServiceImpl.java
  32. 5 1
      mec-biz/src/main/resources/config/mybatis/ClassGroupMapper.xml
  33. 1 1
      mec-biz/src/main/resources/config/mybatis/CourseHomeworkMapper.xml
  34. 2 1
      mec-biz/src/main/resources/config/mybatis/CourseScheduleMapper.xml
  35. 119 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml
  36. 107 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMessageMapper.xml
  37. 165 0
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  38. 1 1
      mec-biz/src/main/resources/config/mybatis/PracticeGroupMapper.xml
  39. 1 1
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  40. 3 0
      mec-biz/src/main/resources/config/mybatis/TeacherMapper.xml
  41. 13 1
      mec-client-api/src/main/java/com/ym/mec/im/ImFeignService.java
  42. 6 0
      mec-client-api/src/main/java/com/ym/mec/im/fallback/ImFeignServiceFallback.java
  43. 10 0
      mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImBaseMessage.java
  44. 81 0
      mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImMessageModel.java
  45. 114 0
      mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImPrivateMessage.java
  46. 38 0
      mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImTxtMessage.java
  47. 1 1
      mec-im/pom.xml
  48. 13 1
      mec-im/src/main/java/com/ym/controller/PrivateController.java
  49. 5 1
      mec-im/src/main/java/com/ym/service/Impl/MessageServiceImpl.java
  50. 44 0
      mec-student/src/main/java/com/ym/mec/student/controller/ExtracurricularExercisesMessageController.java
  51. 62 0
      mec-student/src/main/java/com/ym/mec/student/controller/ExtracurricularExercisesReplyController.java
  52. 19 1
      mec-student/src/main/java/com/ym/mec/student/controller/PracticeGroupController.java
  53. 35 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkController.java
  54. 35 0
      mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkReplyController.java
  55. 2 2
      mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java
  56. 45 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java
  57. 69 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java
  58. 44 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesMessageController.java
  59. 35 0
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherCourseHomeworkReplyController.java
  60. 2 2
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/TeacherManageController.java
  61. 5 10
      mec-web/src/main/java/com/ym/mec/web/controller/APIController.java
  62. 2 2
      mec-web/src/main/java/com/ym/mec/web/controller/education/ImController.java

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

@@ -157,7 +157,7 @@ public interface ClassGroupDao extends BaseDAO<Integer, ClassGroup> {
      * @param classGroupId
      * @return
      */
-    List<ImUserModel> findGroupUsers(Integer classGroupId);
+    List<ImUserModel> findGroupUsers(@Param("classGroupId") Integer classGroupId, @Param("search") String search);
 
     /**
      * count学员购买列表

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

@@ -0,0 +1,14 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
+import com.ym.mec.common.dal.BaseDAO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ExtracurricularExercisesDao extends BaseDAO<Long, ExtracurricularExercises> {
+
+    int countExtraExercises(Map<String, Object> params);
+    List<ExtracurricularExercises> findExtraExercises(Map<String, Object> params);
+
+}

+ 15 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesMessageDao.java

@@ -0,0 +1,15 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.dto.StudentCourseHomeworkCommentDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage;
+import com.ym.mec.common.dal.BaseDAO;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ExtracurricularExercisesMessageDao extends BaseDAO<Long, ExtracurricularExercisesMessage> {
+
+    int countStudentExtraComments(Map<String, Object> params);
+    List<StudentCourseHomeworkCommentDto> findStudentExtraComments(Map<String, Object> params);
+
+}

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

@@ -0,0 +1,54 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, ExtracurricularExercisesReply> {
+
+    /**
+     * @describe 批量插入
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param replies:
+     * @return int
+     */
+    int batchInsert(@Param("replies")List<ExtracurricularExercisesReply> replies);
+
+    /**
+     * @describe 获取课外训练的学生列表
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param extraExerciseId: 课外训练编号
+     * @param studentName: 学生名称
+     * @return java.util.List<com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto>
+     */
+    List<ExtraExerciseStudentsDto> findExtraExerciseStudents(@Param("extraExerciseId") Long extraExerciseId,
+                                                             @Param("studentName") String studentName);
+
+    /**
+     * @describe 获取学生课外训练详情
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param extraExerciseReplyId:
+     * @return com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto
+     */
+    ExtraExerciseStudentsDto findExtraExerciseReply(@Param("extraExerciseReplyId") Long extraExerciseReplyId);
+
+    int countStudentExtraExercises(Map<String, Object> params);
+    List<ExtraExerciseStudentsDto> findStudentExtraExercises(Map<String, Object> params);
+
+    /**
+     * @describe 统计已经提交的学生数量
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param extraExerciseId:
+     * @return int
+     */
+    int countIsSubmitStudents(@Param("extraExerciseId") Long extraExerciseId);
+	
+}

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

@@ -336,7 +336,7 @@ public interface TeacherDao extends BaseDAO<Integer, Teacher> {
      * @param teacherIds
      * @return
      */
-    List<ImUserModel> queryTeacherImModel(@Param("teacherIds") Set<Integer> teacherIds);
+    List<ImUserModel> queryTeacherImModel(@Param("teacherIds") Set<Integer> teacherIds, @Param("search") String search);
 
     /**
      * 获取和学员相关的乐团老师列表

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

@@ -67,6 +67,16 @@ public class CourseScheduleDto extends CourseSchedule {
     @ApiModelProperty(value = "学生评论id")
     private Long StudentReviewId;
 
+    private int isNew;
+
+    public int getIsNew() {
+        return isNew;
+    }
+
+    public void setIsNew(int isNew) {
+        this.isNew = isNew;
+    }
+
     public List<StudentNameAndPhoneDto> getStudents() {
         return students;
     }

+ 60 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java

@@ -0,0 +1,60 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/26
+ */
+public class ExtraExerciseStudentsDto extends ExtracurricularExercisesReply {
+
+    private String studentName;
+
+    private Integer teacherId;
+
+    private String teacherName;
+
+    private String title;
+
+    private String content;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public String getStudentName() {
+        return studentName;
+    }
+
+    public void setStudentName(String studentName) {
+        this.studentName = studentName;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+}

+ 147 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercises.java

@@ -0,0 +1,147 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(extracurricular_exercises):
+ */
+public class ExtracurricularExercises {
+
+	/**  */
+	private Long id;
+	
+	/** 老师编号 */
+	private Integer teacherId;
+	
+	/** 学生列表 */
+	private String studentIdList;
+	
+	/** 批次号 */
+	private String batchNo;
+	
+	/** 标题 */
+	private String title;
+	
+	/** 附件地址(多个用逗号分隔) */
+	private String attachments;
+	
+	/** 作业内容 */
+	private String content;
+	
+	/** 截止日期 */
+	private java.util.Date expireDate;
+	
+	/** 完成人数 */
+	private Integer completedNum;
+	
+	/** 预计人数 */
+	private Integer expectNum;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setTeacherId(Integer teacherId){
+		this.teacherId = teacherId;
+	}
+	
+	public Integer getTeacherId(){
+		return this.teacherId;
+	}
+			
+	public void setStudentIdList(String studentIdList){
+		this.studentIdList = studentIdList;
+	}
+	
+	public String getStudentIdList(){
+		return this.studentIdList;
+	}
+			
+	public void setBatchNo(String batchNo){
+		this.batchNo = batchNo;
+	}
+	
+	public String getBatchNo(){
+		return this.batchNo;
+	}
+			
+	public void setTitle(String title){
+		this.title = title;
+	}
+	
+	public String getTitle(){
+		return this.title;
+	}
+			
+	public void setAttachments(String attachments){
+		this.attachments = attachments;
+	}
+	
+	public String getAttachments(){
+		return this.attachments;
+	}
+			
+	public void setContent(String content){
+		this.content = content;
+	}
+	
+	public String getContent(){
+		return this.content;
+	}
+			
+	public void setExpireDate(java.util.Date expireDate){
+		this.expireDate = expireDate;
+	}
+	
+	public java.util.Date getExpireDate(){
+		return this.expireDate;
+	}
+			
+	public void setCompletedNum(Integer completedNum){
+		this.completedNum = completedNum;
+	}
+	
+	public Integer getCompletedNum(){
+		return this.completedNum;
+	}
+			
+	public void setExpectNum(Integer expectNum){
+		this.expectNum = expectNum;
+	}
+	
+	public Integer getExpectNum(){
+		return this.expectNum;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 92 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesMessage.java

@@ -0,0 +1,92 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(extracurricular_exercises_message):
+ */
+public class ExtracurricularExercisesMessage {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Long extracurricularExercisesReplyId;
+	
+	/** 留言人编号 */
+	private Integer userId;
+	
+	/** 角色(学生、老师) */
+	private String role;
+	
+	/** 留言内容 */
+	private String content;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/** 父级编号 */
+	private Long parentId;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setExtracurricularExercisesReplyId(Long extracurricularExercisesReplyId){
+		this.extracurricularExercisesReplyId = extracurricularExercisesReplyId;
+	}
+	
+	public Long getExtracurricularExercisesReplyId(){
+		return this.extracurricularExercisesReplyId;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setRole(String role){
+		this.role = role;
+	}
+	
+	public String getRole(){
+		return this.role;
+	}
+			
+	public void setContent(String content){
+		this.content = content;
+	}
+	
+	public String getContent(){
+		return this.content;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setParentId(Long parentId){
+		this.parentId = parentId;
+	}
+	
+	public Long getParentId(){
+		return this.parentId;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

+ 125 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/ExtracurricularExercisesReply.java

@@ -0,0 +1,125 @@
+package com.ym.mec.biz.dal.entity;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+
+/**
+ * 对应数据库表(extracurricular_exercises_reply):
+ */
+public class ExtracurricularExercisesReply {
+
+	/**  */
+	private Long id;
+	
+	/**  */
+	private Long extracurricularExercisesId;
+	
+	/**  */
+	private Integer userId;
+	
+	/** 作品附件 */
+	private String attachments;
+	
+	/**  */
+	private java.util.Date createTime;
+	
+	/**  */
+	private java.util.Date updateTime;
+	
+	/** 备注 */
+	private String remark;
+	
+	/** 提交状态 */
+	private Integer status;
+	
+	/** 是否回复 */
+	private Integer isReplied;
+	
+	/** 是否已查看 */
+	private Integer isView;
+	
+	public void setId(Long id){
+		this.id = id;
+	}
+	
+	public Long getId(){
+		return this.id;
+	}
+			
+	public void setExtracurricularExercisesId(Long extracurricularExercisesId){
+		this.extracurricularExercisesId = extracurricularExercisesId;
+	}
+	
+	public Long getExtracurricularExercisesId(){
+		return this.extracurricularExercisesId;
+	}
+			
+	public void setUserId(Integer userId){
+		this.userId = userId;
+	}
+	
+	public Integer getUserId(){
+		return this.userId;
+	}
+			
+	public void setAttachments(String attachments){
+		this.attachments = attachments;
+	}
+	
+	public String getAttachments(){
+		return this.attachments;
+	}
+			
+	public void setCreateTime(java.util.Date createTime){
+		this.createTime = createTime;
+	}
+	
+	public java.util.Date getCreateTime(){
+		return this.createTime;
+	}
+			
+	public void setUpdateTime(java.util.Date updateTime){
+		this.updateTime = updateTime;
+	}
+	
+	public java.util.Date getUpdateTime(){
+		return this.updateTime;
+	}
+			
+	public void setRemark(String remark){
+		this.remark = remark;
+	}
+	
+	public String getRemark(){
+		return this.remark;
+	}
+			
+	public void setStatus(Integer status){
+		this.status = status;
+	}
+	
+	public Integer getStatus(){
+		return this.status;
+	}
+			
+	public void setIsReplied(Integer isReplied){
+		this.isReplied = isReplied;
+	}
+	
+	public Integer getIsReplied(){
+		return this.isReplied;
+	}
+			
+	public void setIsView(Integer isView){
+		this.isView = isView;
+	}
+	
+	public Integer getIsView(){
+		return this.isView;
+	}
+			
+	@Override
+	public String toString() {
+		return ToStringBuilder.reflectionToString(this);
+	}
+
+}

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

@@ -45,6 +45,16 @@ public class StudentCourseHomework {
 	/**  */
 	private java.util.Date updateTime;
 
+	private boolean extra;
+
+	public boolean isExtra() {
+		return extra;
+	}
+
+	public void setExtra(boolean extra) {
+		this.extra = extra;
+	}
+
 	public String getAvatar() {
 		return avatar;
 	}

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

@@ -30,6 +30,16 @@ public class StudentCourseHomeworkReply {
 	@ApiModelProperty(value = "父级编号",required = true)
 	private Long parentId;
 
+	private boolean extra;
+
+	public boolean isExtra() {
+		return extra;
+	}
+
+	public void setExtra(boolean extra) {
+		this.extra = extra;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 4 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/MessageTypeEnum.java

@@ -47,6 +47,10 @@ public enum MessageTypeEnum implements BaseEnum<String, MessageTypeEnum> {
     STUDENT_PUSH_TEACHING_SCHOOL_CHANGE("STUDENT_PUSH_TEACHING_SCHOOL_CHANGE", "教学点变动"),
     STUDENT_PUSH_JOB_MESSAGE("STUDENT_PUSH_JOB_MESSAGE", "作业提醒"),
     HOMEWORK_REMIND("HOMEWORK_REMIND", "作业提醒-网管课"),
+    IM_HOMEWORK_REMIND("IM_HOMEWORK_REMIND", "作业提醒"),
+    IM_HOMEWORK_SUBMIT_PUSH("IM_HOMEWORK_SUBMIT_PUSH", "作业提交提醒"),
+    IM_HOMEWORK_STUDENT_REPLY_PUSH("IM_HOMEWORK_STUDENT_REPLY_PUSH", "作业回复提醒"),
+    IM_HOMEWORK_TEACHER_REPLY_PUSH("IM_HOMEWORK_TEACHER_REPLY_PUSH", "作业点评提醒"),
     STUDENT_PUSH_CLASS_MESSAGE("STUDENT_PUSH_CLASS_MESSAGE", "班级消息"),
     COMM_NO_STUDENTS_PUSH("COMM_NO_STUDENTS_PUSH", "对外课程组无学生提醒"),
     HOMEWORK_SUBMIT_PUSH("HOMEWORK_SUBMIT_PUSH", "学生提交作业提醒"),

+ 42 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/ExtraExercilseQueryInfo.java

@@ -0,0 +1,42 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/26
+ */
+public class ExtraExercilseQueryInfo extends QueryInfo {
+
+    private Integer teacherId;
+
+    private Integer studentId;
+
+    private Date createTime;
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public Integer getStudentId() {
+        return studentId;
+    }
+
+    public void setStudentId(Integer studentId) {
+        this.studentId = studentId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+}

+ 10 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseHomeworkReplyQueryInfo.java

@@ -17,6 +17,16 @@ public class StudentCourseHomeworkReplyQueryInfo extends QueryInfo {
 
     private Integer userId;
 
+    private boolean isExtra;
+
+    public boolean isExtra() {
+        return isExtra;
+    }
+
+    public void setIsExtra(boolean isExtra) {
+        isExtra = isExtra;
+    }
+
     public Integer getUserId() {
         return userId;
     }

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

@@ -151,7 +151,7 @@ public interface ClassGroupService extends BaseService<Integer, ClassGroup> {
      * @param groupId
      * @return
      */
-    List<ImUserModel> findGroupUsers(Integer groupId);
+    List<ImUserModel> findGroupUsers(Integer groupId,String search);
 
     /**
      * 分页查询学生购买记录

+ 28 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesMessageService.java

@@ -0,0 +1,28 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage;
+import com.ym.mec.biz.dal.page.StudentCourseHomeworkReplyQueryInfo;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.BaseService;
+
+public interface ExtracurricularExercisesMessageService extends BaseService<Long, ExtracurricularExercisesMessage> {
+
+    /**
+     * @describe 添加学生作业评论
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param extracurricularExercisesMessage:
+     * @return void
+     */
+    void addStudentExtraExerciseComment(ExtracurricularExercisesMessage extracurricularExercisesMessage);
+
+    /**
+     * @describe 获取学生课外作业评论列表
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo
+     */
+    PageInfo findStudentExtraExerciseComments(StudentCourseHomeworkReplyQueryInfo queryInfo);
+
+}

+ 50 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java

@@ -0,0 +1,50 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
+import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.List;
+
+public interface ExtracurricularExercisesReplyService extends BaseService<Long, ExtracurricularExercisesReply> {
+
+    /**
+     * @describe
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param extraExerciseId: 课外训练编号
+     * @return java.util.List<com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto>
+     */
+    List<StudentCourseHomework> findExtraExerciseStudents(Long extraExerciseId, String studentName);
+
+    /**
+     * @describe 获取学生的课外训练列表
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param queryInfo:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto>
+     */
+    PageInfo findStudentExtraExercises(ExtraExercilseQueryInfo queryInfo);
+
+    /**
+     * @describe 获取学生课外训练详情
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param studentExerciseId: 学生课外训练编号
+     * @return com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto
+     */
+    CourseHomeworkStudentDetailDto findStudentExtraExerciseDetail(Long studentExerciseId);
+
+    /**
+     * @describe 学生提交课外训练
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param extracurricularExercisesReply:
+     * @return void
+     */
+    void submitExtraExercise(ExtracurricularExercisesReply extracurricularExercisesReply);
+
+}

+ 30 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesService.java

@@ -0,0 +1,30 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
+import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
+import com.ym.mec.common.service.BaseService;
+
+import java.util.List;
+import java.util.Map;
+
+public interface ExtracurricularExercisesService extends BaseService<Long, ExtracurricularExercises> {
+
+    /**
+     * @describe 创建课外训练
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param exercises:
+     * @return void
+     */
+    void createExtraExercises(ExtracurricularExercises exercises);
+
+    /**
+     * @describe 获取教师创建的课外训练列表
+     * @author Joburgess
+     * @date 2020/3/26
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo
+     */
+    List<Map<String, Object>> findExtraExercilses(ExtraExercilseQueryInfo queryInfo);
+
+}

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/SysMessageService.java

@@ -29,6 +29,14 @@ public interface SysMessageService extends BaseService<Long, SysMessage> {
 	boolean batchSeoMessage(Set<Integer> userIds, MessageTypeEnum messageType,String memo, Object... args);
 
 	/**
+	 * 推送站内消息
+	 * @param senderId
+	 * @param messageType
+	 * @return
+	 */
+	void batchSendImMessage(MessageTypeEnum messageType,String senderId, String[] targetIds,String url, Object... args);
+
+	/**
 	 * 批量发送消息
 	 * @param messageSender 消息发送者
 	 * @param subject 消息主题

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

@@ -716,16 +716,16 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         imGroupModels.addAll(classGroupDao.queryUserCommGroups(userId, search));
         if (imGroupModels != null && imGroupModels.size() > 0) {
             imGroupModels.forEach(e -> {
-                e.setCount(classGroupService.findGroupUsers(Integer.parseInt(e.getId())).size());
+                e.setCount(classGroupService.findGroupUsers(Integer.parseInt(e.getId()),null).size());
             });
         }
         return imGroupModels;
     }
 
     @Override
-    public List<ImUserModel> findGroupUsers(Integer groupId) {
+    public List<ImUserModel> findGroupUsers(Integer groupId,String search) {
         //获取相关学员
-        List<ImUserModel> students = classGroupDao.findGroupUsers(groupId);
+        List<ImUserModel> students = classGroupDao.findGroupUsers(groupId,search);
         if (students == null) {
             students = new ArrayList<>();
         }
@@ -762,7 +762,7 @@ public class ClassGroupServiceImpl extends BaseServiceImpl<Integer, ClassGroup>
         }
         teacherIds.removeAll(Collections.singleton(null));
         if(teacherIds.size() > 0){
-            List<ImUserModel> userModels = teacherDao.queryTeacherImModel(teacherIds);
+            List<ImUserModel> userModels = teacherDao.queryTeacherImModel(teacherIds,search);
             for (ImUserModel e : userModels) {
                 if(musicGroup != null){
                     if(musicGroup.getTeamTeacherId() != null && Integer.parseInt(e.getId()) == musicGroup.getTeamTeacherId()){

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

@@ -11,6 +11,9 @@ import java.util.stream.Collectors;
 
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.enums.GroupType;
+import com.ym.mec.common.entity.ImPrivateMessage;
+import com.ym.mec.common.entity.ImTxtMessage;
+import com.ym.mec.im.ImFeignService;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -94,6 +97,9 @@ public class CourseReviewServiceImpl extends BaseServiceImpl<Integer, CourseSche
     private SysMessageService sysMessageService;
 
     @Autowired
+    private ImFeignService imFeignService;
+
+    @Autowired
     private TeacherDao teacherDao;
 
     @Autowired
@@ -213,7 +219,7 @@ public class CourseReviewServiceImpl extends BaseServiceImpl<Integer, CourseSche
                 courseHomeworkService.insert(courseHomework);
 
                 if (!CollectionUtils.isEmpty(courseScheduleStudentPayments)) {
-                    List<StudentCourseHomework> studentCourseHomeworks = new ArrayList<>();
+//                    List<StudentCourseHomework> studentCourseHomeworks = new ArrayList<>();
                     Teacher teacher = teacherDao.get(courseScheduleReview.getTeacherId());
                     String dateStr = DateUtil.dateToString(DateUtil.addDays(date, 1), "MM月dd日");
                     for (CourseScheduleStudentPayment courseScheduleStudentPayment : courseScheduleStudentPayments) {
@@ -231,6 +237,9 @@ public class CourseReviewServiceImpl extends BaseServiceImpl<Integer, CourseSche
                         Map<Integer, String> userMap = new HashMap<>();
                         userMap.put(courseScheduleStudentPayment.getUserId(), courseScheduleStudentPayment.getUserId().toString());
                         String notifyUrl = "3?courseScheduleID=" + courseSchedule.getId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId();
+                        sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_REMIND,courseScheduleReview.getTeacherId().toString(),
+                                                        new String[]{courseScheduleStudentPayment.getUserId().toString()},
+                                                        null,courseSchedule.getName(), dateStr,courseHomework.getContent());
                         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.HOMEWORK_REMIND,
                                 userMap, null, 0, notifyUrl, "STUDENT", teacher.getRealName(), courseSchedule.getName(), dateStr);
                     }

+ 74 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesMessageServiceImpl.java

@@ -0,0 +1,74 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.ExtracurricularExercisesMessageDao;
+import com.ym.mec.biz.dal.dao.ExtracurricularExercisesReplyDao;
+import com.ym.mec.biz.dal.dto.StudentCourseHomeworkCommentDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
+import com.ym.mec.biz.dal.page.StudentCourseHomeworkReplyQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesMessageService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+@Service
+public class ExtracurricularExercisesMessageServiceImpl extends BaseServiceImpl<Long, ExtracurricularExercisesMessage> implements ExtracurricularExercisesMessageService {
+	
+	@Autowired
+	private ExtracurricularExercisesMessageDao extracurricularExercisesMessageDao;
+	@Autowired
+	private ExtracurricularExercisesReplyDao extracurricularExercisesReplyDao;
+
+	@Override
+	public BaseDAO<Long, ExtracurricularExercisesMessage> getDAO() {
+		return extracurricularExercisesMessageDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void addStudentExtraExerciseComment(ExtracurricularExercisesMessage extracurricularExercisesMessage) {
+		if(Objects.isNull(extracurricularExercisesMessage.getExtracurricularExercisesReplyId())){
+			throw new BizException("请指定学生课外训练");
+		}
+		if(StringUtils.isBlank(extracurricularExercisesMessage.getContent())){
+			throw new BizException("请填写回复内容");
+		}
+		extracurricularExercisesMessageDao.insert(extracurricularExercisesMessage);
+		ExtracurricularExercisesReply extracurricularExercisesReply = extracurricularExercisesReplyDao.get(extracurricularExercisesMessage.getExtracurricularExercisesReplyId());
+		if(Objects.isNull(extracurricularExercisesReply)){
+			throw new BizException("课外训练不存在");
+		}
+		if("TEACHER".equals(extracurricularExercisesMessage.getRole())&&Objects.nonNull(extracurricularExercisesReply.getAttachments())){
+			extracurricularExercisesReply.setIsReplied(1);
+			extracurricularExercisesReplyDao.update(extracurricularExercisesReply);
+		}
+	}
+
+	@Override
+	public PageInfo findStudentExtraExerciseComments(StudentCourseHomeworkReplyQueryInfo queryInfo) {
+		PageInfo<StudentCourseHomeworkCommentDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<StudentCourseHomeworkCommentDto> dataList = null;
+		int count = extracurricularExercisesMessageDao.countStudentExtraComments(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = extracurricularExercisesMessageDao.findStudentExtraComments(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+}

+ 120 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java

@@ -0,0 +1,120 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.ExtracurricularExercisesDao;
+import com.ym.mec.biz.dal.dao.ExtracurricularExercisesReplyDao;
+import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
+import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
+import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+@Service
+public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Long, ExtracurricularExercisesReply> implements ExtracurricularExercisesReplyService {
+	
+	@Autowired
+	private ExtracurricularExercisesReplyDao extracurricularExercisesReplyDao;
+	@Autowired
+	private ExtracurricularExercisesDao extracurricularExercisesDao;
+
+	@Override
+	public BaseDAO<Long, ExtracurricularExercisesReply> getDAO() {
+		return extracurricularExercisesReplyDao;
+	}
+
+	@Override
+	public List<StudentCourseHomework> findExtraExerciseStudents(Long extraExerciseId, String studentName) {
+		if(Objects.isNull(extraExerciseId)){
+			throw new BizException("请选择课外训练");
+		}
+		List<ExtraExerciseStudentsDto> extraExerciseStudents = extracurricularExercisesReplyDao.findExtraExerciseStudents(extraExerciseId, studentName);
+		List<StudentCourseHomework> studentCourseHomeworks=new ArrayList<>();
+		for (ExtraExerciseStudentsDto extraExerciseStudent : extraExerciseStudents) {
+			StudentCourseHomework studentCourseHomework=new StudentCourseHomework();
+			studentCourseHomework.setId(extraExerciseStudent.getId());
+			studentCourseHomework.setUserId(extraExerciseStudent.getUserId());
+			studentCourseHomework.setUserName(extraExerciseStudent.getStudentName());
+			studentCourseHomework.setStatus(extraExerciseStudent.getStatus()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
+			studentCourseHomework.setIsReplied(extraExerciseStudent.getIsReplied()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
+			studentCourseHomework.setIsView(extraExerciseStudent.getIsView()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
+			studentCourseHomeworks.add(studentCourseHomework);
+		}
+		return studentCourseHomeworks;
+	}
+
+	@Override
+	public CourseHomeworkStudentDetailDto findStudentExtraExerciseDetail(Long studentExerciseId) {
+		ExtraExerciseStudentsDto extraExerciseReply = extracurricularExercisesReplyDao.findExtraExerciseReply(studentExerciseId);
+		CourseHomeworkStudentDetailDto detail=new CourseHomeworkStudentDetailDto();
+		detail.setCourseHomeworkId(extraExerciseReply.getId());
+		detail.setClassGroupName(extraExerciseReply.getTitle() + "•" + extraExerciseReply.getStudentName());
+		detail.setContent(extraExerciseReply.getContent());
+		detail.setAttachments(extraExerciseReply.getAttachments());
+		detail.setStatus(extraExerciseReply.getStatus()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
+		detail.setIsReplied(extraExerciseReply.getIsReplied()==0?YesOrNoEnum.NO:YesOrNoEnum.YES);
+		detail.setTeacherId(extraExerciseReply.getTeacherId());
+		detail.setTeacherName(extraExerciseReply.getTeacherName());
+		detail.setStudentId(extraExerciseReply.getUserId());
+		detail.setStudentName(extraExerciseReply.getStudentName());
+		return detail;
+	}
+
+	@Override
+	public PageInfo findStudentExtraExercises(ExtraExercilseQueryInfo queryInfo) {
+		PageInfo<ExtraExerciseStudentsDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<ExtraExerciseStudentsDto> dataList = null;
+		int count = extracurricularExercisesReplyDao.countStudentExtraExercises(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = extracurricularExercisesReplyDao.findStudentExtraExercises(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void submitExtraExercise(ExtracurricularExercisesReply extracurricularExercisesReply) {
+		if(Objects.isNull(extracurricularExercisesReply.getId())){
+			throw new BizException("请选择课外训练");
+		}
+		if(StringUtils.isBlank(extracurricularExercisesReply.getAttachments())){
+			throw new BizException("请先提交作业文件");
+		}
+		ExtracurricularExercisesReply existExtra = extracurricularExercisesReplyDao.get(extracurricularExercisesReply.getId());
+		if(Objects.isNull(existExtra)){
+			throw new BizException("作业不存在");
+		}
+		ExtracurricularExercises extracurricularExercises = extracurricularExercisesDao.get(existExtra.getExtracurricularExercisesId());
+		if(Objects.isNull(extracurricularExercises)){
+			throw new BizException("作业不存在");
+		}
+		existExtra.setAttachments(extracurricularExercisesReply.getAttachments());
+		existExtra.setStatus(1);
+		extracurricularExercisesReplyDao.update(existExtra);
+
+		int submitStudentNum=extracurricularExercisesReplyDao.countIsSubmitStudents(existExtra.getExtracurricularExercisesId());
+		extracurricularExercises.setCompletedNum(submitStudentNum);
+		extracurricularExercisesDao.update(extracurricularExercises);
+	}
+}

+ 95 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesServiceImpl.java

@@ -0,0 +1,95 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.ExtracurricularExercisesDao;
+import com.ym.mec.biz.dal.dao.ExtracurricularExercisesReplyDao;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
+import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.exception.BizException;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Isolation;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Service
+public class ExtracurricularExercisesServiceImpl extends BaseServiceImpl<Long, ExtracurricularExercises> implements ExtracurricularExercisesService {
+	
+	@Autowired
+	private ExtracurricularExercisesDao extracurricularExercisesDao;
+	@Autowired
+	private ExtracurricularExercisesReplyDao extracurricularExercisesReplyDao;
+
+	@Override
+	public BaseDAO<Long, ExtracurricularExercises> getDAO() {
+		return extracurricularExercisesDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
+	public void createExtraExercises(ExtracurricularExercises exercises) {
+		if(StringUtils.isBlank(exercises.getTitle())){
+			throw new BizException("请填写标题");
+		}
+		if(StringUtils.isBlank(exercises.getContent())){
+			throw new BizException("请填写内容");
+		}
+		if(Objects.isNull(exercises.getExpireDate())){
+			throw new BizException("请指定截至日期");
+		}
+		if(StringUtils.isBlank(exercises.getStudentIdList())){
+			throw new BizException("请指定学生");
+		}
+		List<Integer> studentIds = Arrays.asList(exercises.getStudentIdList().split(",")).stream().mapToInt(Integer::valueOf).boxed().collect(Collectors.toList());
+		exercises.setBatchNo(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss")));
+		exercises.setExpectNum(studentIds.size());
+		extracurricularExercisesDao.insert(exercises);
+		List<ExtracurricularExercisesReply> studentExtraExerises=new ArrayList<>();
+		for (Integer studentId : studentIds) {
+			ExtracurricularExercisesReply studentExtraExercise=new ExtracurricularExercisesReply();
+			studentExtraExercise.setExtracurricularExercisesId(exercises.getId());
+			studentExtraExercise.setUserId(studentId);
+			studentExtraExercise.setStatus(0);
+			studentExtraExercise.setIsReplied(0);
+			studentExtraExercise.setIsView(0);
+			studentExtraExerises.add(studentExtraExercise);
+		}
+		extracurricularExercisesReplyDao.batchInsert(studentExtraExerises);
+	}
+
+	@Override
+	public List<Map<String, Object>> findExtraExercilses(ExtraExercilseQueryInfo queryInfo) {
+		PageInfo<ExtracurricularExercises> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<ExtracurricularExercises> dataList = extracurricularExercisesDao.findExtraExercises(params);
+		Map<String, List<ExtracurricularExercises>> collect = dataList.stream().collect(Collectors.groupingBy(e -> DateUtil.dateToString(e.getCreateTime(), "yyyy-MM-dd")));
+
+		List<Map<String, Object>> result = new ArrayList<>();
+		List<Date> dates=new ArrayList<>();
+		collect.keySet().forEach(ds-> dates.add(DateUtil.stringToDate(ds,"yyyy-MM-dd")));
+		dates.sort(Comparator.comparing(Date::getTime));
+		dates.sort(Comparator.reverseOrder());
+		for (Date date : dates) {
+			String key=DateUtil.dateToString(date, "yyyy-MM-dd");
+			Map<String, Object> r = new HashMap<>();
+			r.put("day", key);
+			collect.get(key).sort(Comparator.comparing(ExtracurricularExercises::getCreateTime).reversed());
+			r.put("list", collect.get(key));
+			result.add(r);
+		}
+		return result;
+	}
+}

+ 12 - 17
mec-biz/src/main/java/com/ym/mec/biz/service/impl/PracticeGroupServiceImpl.java

@@ -133,8 +133,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
     //沈阳分部编号
     private static final Integer SHENYANG_ORGAN_ID = 6;
 
-    private static final Set<Integer> ENABLE_APPLY_ORGANIDS = new HashSet<>(Arrays.asList(new Integer[]{1, 43, 47}));
-
     private static Date activityStartDate, activityEndDate, applyStartDay, courseExpireDate;
 
     private static final Logger LOGGER = LoggerFactory
@@ -142,6 +140,8 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
     private static List<String> applyDayTimes = new ArrayList<>();
 
+    private static final Set<Integer> ENABLE_APPLY_ORGANIDS = new HashSet<>(Arrays.asList(new Integer[]{1, 43, 47}));
+
     static {
         applyStartDay = DateUtil.stringToDate("2020-03-25 00:00:00");
         activityStartDate = DateUtil.stringToDate("2020-03-25 00:00:00");
@@ -212,22 +212,21 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
 
     @Override
     public List<CourseScheduleDto> findUserPracticeCourses(Integer userId) {
-        return courseScheduleDao.findStudentPracticeCourses(userId);
+        List<CourseScheduleDto> studentPracticeCourses = courseScheduleDao.findStudentPracticeCourses(userId);
+        if(!CollectionUtils.isEmpty(studentPracticeCourses)){
+            studentPracticeCourses.sort(Comparator.comparing(CourseScheduleDto::getStartClassTime));
+            for (CourseScheduleDto studentPracticeCours : studentPracticeCourses) {
+                if(studentPracticeCours.getCreateTime().after(applyStartDay)){
+                    studentPracticeCours.setIsNew(1);
+                }
+            }
+        }
+        return studentPracticeCourses;
     }
 
     @Override
     public Map<String, Object> checkCanApplyFreePracticeGroup(Integer userId) {
         Map<String,Object> result=new HashMap<>();
-//        int recordNum = practiceLessonApplyDao.checkUserIsApply(userId);
-//        LocalDateTime now=LocalDateTime.now();
-//        if(recordNum>0){
-//            LocalDateTime applyExpireDateTime=LocalDateTime.parse("2020-02-29 00:00:00", DateUtil.dateTimeFormatter);
-//            result.put("canApply", now.compareTo(applyExpireDateTime)<=0?1:0);
-//        }else{
-//            LocalDateTime applyExpireDateTime=LocalDateTime.parse("2020-02-22 20:00:00", DateUtil.dateTimeFormatter);
-//            result.put("canApply", now.compareTo(applyExpireDateTime)<=0?1:0);
-//        }
-        result.put("canApply", 1);
         return result;
     }
 
@@ -767,7 +766,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         result.put("userDefaultSubjectIds", StringUtils.join(userDefaultSubjectIds.toArray(), ","));
         result.put("practiceApplyIntervalMinutes", practiceApplyIntervalTimeConfig.getParanValue(Integer.class));
         result.put("practiceCourseMinutes", practiceCourseMinutesConfig.getParanValue(Integer.class));
-        result.put("enableApply", applyTimes < 1 ? 1 : 0);
         return result;
     }
 
@@ -1626,9 +1624,6 @@ public class PracticeGroupServiceImpl extends BaseServiceImpl<Long, PracticeGrou
         if (Objects.isNull(practiceGroup.getUserId())) {
             throw new BizException("请选择老师");
         }
-        if(!ENABLE_APPLY_ORGANIDS.contains(practiceGroup.getOrganId())){
-            throw new BizException("所在城市暂不参与此活动");
-        }
         Map result = new HashMap();
         SysConfig practiceSubjectIdListConfig = sysConfigService.findByParamName(SysConfigService.PRACTICE_SUBJECT_ID_LIST);
         if (Objects.isNull(practiceGroup.getSubjectId())

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.service.impl;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.CourseScheduleDao;
 import com.ym.mec.biz.dal.dao.StudentCourseHomeworkReplyDao;
+import com.ym.mec.biz.dal.dao.SysConfigDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.dto.StudentCourseHomeworkCommentDto;
 import com.ym.mec.biz.dal.entity.CourseSchedule;
@@ -12,6 +13,7 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.page.StudentCourseHomeworkReplyQueryInfo;
 import com.ym.mec.biz.service.StudentCourseHomeworkReplyService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
+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;
@@ -38,6 +40,8 @@ public class StudentCourseHomeworkReplyServiceImpl extends BaseServiceImpl<Long,
 	@Autowired
 	private TeacherDao teacherDao;
 	@Autowired
+	private SysConfigDao sysConfigDao;
+	@Autowired
 	private SysMessageService sysMessageService;
 
 	@Override
@@ -56,9 +60,15 @@ public class StudentCourseHomeworkReplyServiceImpl extends BaseServiceImpl<Long,
 		Map<Integer, String> userMap = new HashMap<>();
 		userMap.put(courseSchedule.getActualTeacherId(), courseSchedule.getActualTeacherId().toString());
 		SysUser user = teacherDao.getUser(studentCourseHomework.getUserId());
-		String notifyUrl = "9?courseScheduleID=" + studentCourseHomework.getId() + "&userId=" + studentCourseHomework.getUserId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId();
+
+		String notifyUrl = "9?courseScheduleID=" + studentCourseHomework.getId() +
+				"&userId=" + studentCourseHomework.getUserId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId();
+		String courseDate = DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日");
+		sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_STUDENT_REPLY_PUSH,studentCourseHomework.getUserId().toString(),
+				new String[]{courseSchedule.getActualTeacherId().toString()},
+				null,courseDate,courseSchedule.getName(),bean.getContent());
 		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.HOMEWORK_STUDENT_REPLY_PUSH,
-				userMap, null, 0, notifyUrl, "TEACHER", courseSchedule.getName(), DateUtil.dateToString(courseSchedule.getClassDate(),"yyyy年MM月dd日"), user.getUsername());
+				userMap, null, 0, notifyUrl, "TEACHER", courseDate,courseSchedule.getName(), user.getUsername());
 		return super.insert(bean);
 	}
 
@@ -78,6 +88,10 @@ public class StudentCourseHomeworkReplyServiceImpl extends BaseServiceImpl<Long,
 		userMap.put(studentCourseHomework.getUserId(),studentCourseHomework.getUserId().toString());
 		SysUser user = teacherDao.get(courseSchedule.getTeacherId());
 		String notifyUrl = "3?courseScheduleID=" + courseSchedule.getId() + "&studentCourseHomeworkId=" + studentCourseHomework.getId();
+		String courseDate = DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日");
+		sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_TEACHER_REPLY_PUSH,courseSchedule.getTeacherId().toString(),
+				new String[]{studentCourseHomework.getUserId().toString()},
+				null, courseDate,courseSchedule.getName(),bean.getContent());
 		sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.HOMEWORK_TEACHER_REPLY_PUSH,
 				userMap, null, 0, notifyUrl, "STUDENT", user.getRealName(), courseSchedule.getName());
 		super.insert(bean);

+ 9 - 6
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -7,15 +7,13 @@ import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
 import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.dto.StudentCourseHomeworkDto;
 import com.ym.mec.biz.dal.dto.StudentHomeworkRecordDto;
-import com.ym.mec.biz.dal.entity.CourseHomework;
-import com.ym.mec.biz.dal.entity.CourseSchedule;
-import com.ym.mec.biz.dal.entity.CourseScheduleReview;
-import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
+import com.ym.mec.biz.service.SysConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
@@ -53,6 +51,8 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     private CourseScheduleReviewDao courseScheduleReviewDao;
     @Autowired
     private TeacherDao teacherDao;
+    @Autowired
+    private SysConfigDao sysConfigDao;
 
     @Override
     public BaseDAO<Long, StudentCourseHomework> getDAO() {
@@ -101,13 +101,16 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
                 courseScheduleReviewDao.update(review);
             }
         }
-
         Map<Integer, String> userMap = new HashMap<>();
         userMap.put(courseSchedule.getActualTeacherId(), courseSchedule.getActualTeacherId().toString());
         SysUser user = teacherDao.getUser(bean.getUserId());
         String notifyUrl = "9?courseScheduleID=" + bean.getId() + "&userId=" + bean.getUserId() + "&studentCourseHomeworkId=" + bean.getId();
+        String courseDate = DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日");
+        sysMessageService.batchSendImMessage(MessageTypeEnum.IM_HOMEWORK_SUBMIT_PUSH,bean.getUserId().toString(),
+                new String[]{courseSchedule.getActualTeacherId().toString()},
+                null,courseDate,courseSchedule.getName());
         sysMessageService.batchSendMessage(MessageSenderPluginContext.MessageSender.JIGUANG, MessageTypeEnum.HOMEWORK_SUBMIT_PUSH,
-                userMap, null, 0, notifyUrl, "TEACHER", courseSchedule.getName(), DateUtil.dateToString(courseSchedule.getClassDate(), "yyyy年MM月dd日"), user.getUsername());
+                userMap, null, 0, notifyUrl, "TEACHER", courseSchedule.getName(), courseDate, user.getUsername());
         courseHomeworkService.update(courseHomework);
     }
 

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

@@ -12,9 +12,12 @@ import com.ym.mec.biz.dal.enums.SendStatusEnum;
 import com.ym.mec.biz.service.SysMessageConfigService;
 import com.ym.mec.biz.service.SysMessageService;
 import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.entity.ImPrivateMessage;
+import com.ym.mec.common.entity.ImTxtMessage;
 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.im.ImFeignService;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext;
 import com.ym.mec.thirdparty.message.MessageSenderPluginContext.MessageSender;
 import com.ym.mec.util.string.MessageFormatter;
@@ -48,6 +51,9 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	private SysUserFeignService sysUserFeignService;
 
 	@Autowired
+	private ImFeignService imFeignService;
+
+	@Autowired
 	private RedisCache<String, Object> redisCache;
 
 	// 验证码有效期
@@ -166,6 +172,26 @@ public class SysMessageServiceImpl extends BaseServiceImpl<Long, SysMessage> imp
 	}
 
 	@Override
+	public void batchSendImMessage(MessageTypeEnum type, String senderId, String[] targetIds, String url, Object... args) {
+		SysMessageConfig messageConfig = sysMessageConfigService.queryByType(type);
+		if (messageConfig == null) {
+			throw new BizException("消息类型错误");
+		}else if(messageConfig.getSendFlag() == null || messageConfig.getSendFlag() == 0){
+			return;
+		}
+		String content = MessageFormatter.arrayFormat(messageConfig.getContent(), args);
+		if(StringUtils.isNotEmpty(url)){
+			content += url;
+		}
+		ImPrivateMessage privateMessage = new ImPrivateMessage();
+		privateMessage.setObjectName("RC:TxtMsg");
+		privateMessage.setTargetId(targetIds);
+		privateMessage.setSenderId(senderId);
+		privateMessage.setContent(new ImTxtMessage(content,null));
+		imFeignService.privateSend(privateMessage);
+	}
+
+	@Override
 	@Async
 	public boolean batchSendMessage(MessageSender messageSender, String subject, String content, Map<Integer, String> receivers, Date triggerTime,
 			Integer readStatus, String memo, String group,String jpushType) {

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

@@ -144,7 +144,7 @@ public class TeacherServiceImpl extends BaseServiceImpl<Integer, Teacher>  imple
 		List<ImGroupModel> imGroupModels =  classGroupDao.queryTeacherGroups(userId,search);
 		if(imGroupModels != null && imGroupModels.size() > 0){
 			imGroupModels.forEach(e -> {
-				e.setCount(classGroupService.findGroupUsers(Integer.parseInt(e.getId())).size());
+				e.setCount(classGroupService.findGroupUsers(Integer.parseInt(e.getId()),null).size());
 			});
 		}
 		return imGroupModels;

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

@@ -119,7 +119,11 @@ public class TenantPaymentOrderServiceImpl extends BaseServiceImpl<Long, TenantP
 				// 是否满足条件
 				if (tenantEntryActivities.getSuitableUser() == SuitableUser.NEW) {
 					if (po.getStatus() == DealStatusEnum.ING) {
-						throw new BizException("您参加的首充活动正在处理中,预计于{}分钟后处理完毕,请稍后。", 30 - DateUtil.minutesBetween(po.getCreateTime(), date));
+						int i = 30 - DateUtil.minutesBetween(po.getCreateTime(), date);
+						if(i <= 0){
+							throw new BizException("您的订单出现异常,请联系客服");
+						}
+						throw new BizException("您参加的首充活动正在处理中,预计于{}分钟后处理完毕,请稍后。", i);
 					}
 					if (po.getStatus() == DealStatusEnum.SUCCESS) {
 						throw new BizException("首充优惠活动每个用户限参与一次。");

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

@@ -348,7 +348,11 @@
     <select id="findGroupUsers" resultMap="com.ym.mec.biz.dal.dao.MusicGroupDao.ImUserModel">
         SELECT su.id_,su.avatar_,su.username_ FROM class_group_student_mapper cgsm
         LEFT JOIN sys_user su ON cgsm.user_id_ = su.id_
-        WHERE cgsm.class_group_id_ = #{classGroupId} AND cgsm.status_ != 'QUIT' GROUP BY su.id_
+        WHERE cgsm.class_group_id_ = #{classGroupId} AND cgsm.status_ != 'QUIT'
+        <if test="search != null and search != ''">
+            AND su.username_ LIKE CONCAT('%',#{search},'%')
+        </if>
+        GROUP BY su.id_
     </select>
     <select id="findGroupTeacher" resultType="java.lang.Integer">
         SELECT cgtm.user_id_ FROM class_group_teacher_mapper cgtm

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

@@ -183,7 +183,7 @@
 			cg.total_class_times_,
 			cg.current_class_times_,
 			cg.music_group_id_,
-			mg.name_ music_group_name_
+			IF(cs.group_type_='MUSIC',mg.name_,NULL) music_group_name_
 		FROM
 			course_homework ch
 			LEFT JOIN course_schedule cs ON ch.course_schedule_id_=cs.id_

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

@@ -2462,7 +2462,8 @@
                cs.teach_mode_,
                cs.music_group_id_,
                cs.group_type_,
-               su.real_name_                                     teacher_name_
+               su.real_name_ teacher_name_,
+               pg.create_time_
         FROM course_schedule_student_payment cssp
                  LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
                  LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_

+ 119 - 0
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMapper.xml

@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.ExtracurricularExercisesDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ExtracurricularExercises" id="ExtracurricularExercises">
+		<result column="id_" property="id" />
+		<result column="teacher_id_" property="teacherId" />
+		<result column="student_id_list_" property="studentIdList" />
+		<result column="batch_no_" property="batchNo" />
+		<result column="title_" property="title" />
+		<result column="attachments_" property="attachments" />
+		<result column="content_" property="content" />
+		<result column="expire_date_" property="expireDate" />
+		<result column="completed_num_" property="completedNum" />
+		<result column="expect_num_" property="expectNum" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ExtracurricularExercises" >
+		SELECT * FROM extracurricular_exercises WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ExtracurricularExercises">
+		SELECT * FROM extracurricular_exercises ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercises" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO extracurricular_exercises (id_,teacher_id_,student_id_list_,batch_no_,title_,attachments_,content_,expire_date_,completed_num_,expect_num_,create_time_,update_time_)
+		VALUES(#{id},#{teacherId},#{studentIdList},#{batchNo},#{title},#{attachments},#{content},#{expireDate},#{completedNum},#{expectNum},NOW(), NOW())
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercises">
+		UPDATE extracurricular_exercises
+		<set>
+			<if test="studentIdList != null">
+			student_id_list_ = #{studentIdList},
+			</if>
+			<if test="expireDate != null">
+			expire_date_ = #{expireDate},
+			</if>
+			<if test="batchNo != null">
+			batch_no_ = #{batchNo},
+			</if>
+			<if test="id != null">
+			id_ = #{id},
+			</if>
+			<if test="teacherId != null">
+			teacher_id_ = #{teacherId},
+			</if>
+			<if test="title != null">
+			title_ = #{title},
+			</if>
+			<if test="expectNum != null">
+			expect_num_ = #{expectNum},
+			</if>
+			<if test="content != null">
+			content_ = #{content},
+			</if>
+			<if test="attachments != null">
+			attachments_ = #{attachments},
+			</if>
+			<if test="completedNum != null">
+			completed_num_ = #{completedNum},
+			</if>
+			update_time_ = NOW()
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM extracurricular_exercises WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ExtracurricularExercises" parameterType="map">
+		SELECT * FROM extracurricular_exercises ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM extracurricular_exercises
+	</select>
+
+	<sql id="queryExtraExercisesCondition">
+		<where>
+			<if test="teacherId!=null">
+				teacher_id_=#{teacherId}
+			</if>
+			<if test="createTime!=null">
+				AND DATE_FORMAT(create_time_, '%Y-%m-%d') = DATE_FORMAT(#{createTime}, '%Y-%m-%d')
+			</if>
+		</where>
+	</sql>
+
+	<select id="countExtraExercises" resultType="int">
+		SELECT COUNT(id_) FROM extracurricular_exercises
+		<include refid="queryExtraExercisesCondition"/>
+	</select>
+	<select id="findExtraExercises" resultMap="ExtracurricularExercises">
+		SELECT * FROM extracurricular_exercises
+		<include refid="queryExtraExercisesCondition"/>
+		ORDER BY create_time_ DESC
+		<include refid="global.limit"/>
+	</select>
+</mapper>

+ 107 - 0
mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesMessageMapper.xml

@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.ExtracurricularExercisesMessageDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage" id="ExtracurricularExercisesMessage">
+		<result column="id_" property="id" />
+		<result column="extracurricular_exercises_reply_id_" property="extracurricularExercisesReplyId" />
+		<result column="user_id_" property="userId" />
+		<result column="role_" property="role" />
+		<result column="content_" property="content" />
+		<result column="create_time_" property="createTime" />
+		<result column="parent_id_" property="parentId" />
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ExtracurricularExercisesMessage" >
+		SELECT * FROM extracurricular_exercises_message WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ExtracurricularExercisesMessage">
+		SELECT * FROM extracurricular_exercises_message ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO extracurricular_exercises_message (id_,extracurricular_exercises_reply_id_,user_id_,role_,content_,create_time_,parent_id_)
+		VALUES(#{id},#{extracurricularExercisesReplyId},#{userId},#{role},#{content},NOW(),#{parentId})
+	</insert>
+	
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage">
+		UPDATE extracurricular_exercises_message
+		<set>
+			<if test="parentId != null">
+			parent_id_ = #{parentId},
+			</if>
+			<if test="userId != null">
+			user_id_ = #{userId},
+			</if>
+			<if test="role != null">
+			role_ = #{role},
+			</if>
+			<if test="id != null">
+			id_ = #{id},
+			</if>
+			<if test="content != null">
+			content_ = #{content},
+			</if>
+			<if test="extracurricularExercisesReplyId != null">
+			extracurricular_exercises_reply_id_ = #{extracurricularExercisesReplyId},
+			</if>
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM extracurricular_exercises_message WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ExtracurricularExercisesMessage" parameterType="map">
+		SELECT * FROM extracurricular_exercises_message ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM extracurricular_exercises_message
+	</select>
+
+	<sql id="StudentExtraCommentsQueryCondition">
+		<where>
+			<if test="studentCourseHomeworkId!=null">
+				extracurricular_exercises_reply_id_=#{studentCourseHomeworkId}
+			</if>
+		</where>
+	</sql>
+	<select id="countStudentExtraComments" resultType="int">
+		SELECT COUNT(id_) FROM extracurricular_exercises_message
+		<include refid="StudentExtraCommentsQueryCondition"/>
+	</select>
+	<select id="findStudentExtraComments" resultMap="com.ym.mec.biz.dal.dao.StudentCourseHomeworkReplyDao.studentCourseHomeworkComment">
+		SELECT
+			eem.id_ comment_id_,
+			eem.user_id_ comment_user_id_,
+			suc.username_ comment_user_name_,
+			suc.avatar_,
+			IF(suc.user_type_ LIKE '%STUDENT%',0,1) is_teacher_,
+			eem.content_ comment_content_,
+			eem.create_time_ comment_time
+		FROM
+			extracurricular_exercises_message eem
+		LEFT JOIN sys_user suc ON eem.user_id_=suc.id_
+		<include refid="StudentExtraCommentsQueryCondition"/>
+		ORDER BY schr.id_ DESC
+		<include refid="global.limit"/>
+	</select>
+</mapper>

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

@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.ExtracurricularExercisesReplyDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply" id="ExtracurricularExercisesReply">
+		<result column="id_" property="id" />
+		<result column="extracurricular_exercises_id_" property="extracurricularExercisesId" />
+		<result column="user_id_" property="userId" />
+		<result column="attachments_" property="attachments" />
+		<result column="create_time_" property="createTime" />
+		<result column="update_time_" property="updateTime" />
+		<result column="remark_" property="remark" />
+		<result column="status_" property="status" />
+		<result column="is_replied_" property="isReplied" />
+		<result column="is_view_" property="isView" />
+	</resultMap>
+
+	<resultMap id="ExtraExerciseStudentsDto" type="com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto" extends="ExtracurricularExercisesReply">
+		<result column="student_name_" property="studentName"/>
+		<result column="teacher_id_" property="teacherId"/>
+		<result column="teacher_name_" property="teacherName"/>
+		<result column="title_" property="title"/>
+		<result column="content_" property="content"/>
+	</resultMap>
+	
+	<!-- 根据主键查询一条记录 -->
+	<select id="get" resultMap="ExtracurricularExercisesReply" >
+		SELECT * FROM extracurricular_exercises_reply WHERE id_ = #{id} 
+	</select>
+	
+	<!-- 全查询 -->
+	<select id="findAll" resultMap="ExtracurricularExercisesReply">
+		SELECT * FROM extracurricular_exercises_reply ORDER BY id_
+	</select>
+	
+	<!-- 向数据库增加一条记录 -->
+	<insert id="insert" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		<!--
+		<selectKey resultClass="int" keyProperty="id" > 
+		SELECT SEQ_WSDEFINITION_ID.nextval AS ID FROM DUAL 
+		</selectKey>
+		-->
+		INSERT INTO extracurricular_exercises_reply (extracurricular_exercises_id_,user_id_,attachments_,create_time_,update_time_,remark_,status_,is_replied_,is_view_)
+		VALUES(#{extracurricularExercisesId},#{userId},#{attachments},NOW(),NOW(),#{remark},#{status},#{isReplied},#{isView})
+	</insert>
+
+	<!-- 向数据库增加一条记录 -->
+	<insert id="batchInsert" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
+		INSERT INTO extracurricular_exercises_reply (extracurricular_exercises_id_,user_id_,attachments_,create_time_,update_time_,remark_,status_,is_replied_,is_view_)
+		VALUES
+		<foreach collection="replies" item="reply" separator=",">
+			(#{reply.extracurricularExercisesId},#{reply.userId},#{reply.attachments},NOW(),NOW(),#{reply.remark},#{reply.status},#{reply.isReplied},#{reply.isView})
+		</foreach>
+	</insert>
+
+	<!-- 根据主键查询一条记录 -->
+	<update id="update" parameterType="com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply">
+		UPDATE extracurricular_exercises_reply
+		<set>
+			<if test="status != null">
+			status_ = #{status},
+			</if>
+			<if test="isView != null">
+			is_view_ = #{isView},
+			</if>
+			<if test="userId != null">
+			user_id_ = #{userId},
+			</if>
+			<if test="remark != null">
+			remark_ = #{remark},
+			</if>
+			<if test="id != null">
+			id_ = #{id},
+			</if>
+			<if test="isReplied != null">
+			is_replied_ = #{isReplied},
+			</if>
+			<if test="extracurricularExercisesId != null">
+			extracurricular_exercises_id_ = #{extracurricularExercisesId},
+			</if>
+			<if test="attachments != null">
+			attachments_ = #{attachments},
+			</if>
+			update_time_ = NOW()
+		</set> WHERE id_ = #{id}
+	</update>
+	
+	<!-- 根据主键删除一条记录 -->
+	<delete id="delete" >
+		DELETE FROM extracurricular_exercises_reply WHERE id_ = #{id} 
+	</delete>
+	
+	<!-- 分页查询 -->
+	<select id="queryPage" resultMap="ExtracurricularExercisesReply" parameterType="map">
+		SELECT * FROM extracurricular_exercises_reply ORDER BY id_ <include refid="global.limit"/>
+	</select>
+	
+	<!-- 查询当前表的总记录数 -->
+	<select id="queryCount" resultType="int">
+		SELECT COUNT(*) FROM extracurricular_exercises_reply
+	</select>
+	<select id="findExtraExerciseStudents" resultMap="ExtraExerciseStudentsDto">
+		SELECT
+			eer.*,
+			su.username_ student_name_
+		FROM
+			extracurricular_exercises_reply eer
+			LEFT JOIN sys_user su ON su.id_ = eer.user_id_
+		WHERE eer.extracurricular_exercises_id_= #{extraExerciseId}
+		<if test="studentName != null">
+			AND su.username_ LIKE CONCAT('%',#{studentName},'%')
+		</if>
+	</select>
+	<select id="findExtraExerciseReply" resultMap="ExtraExerciseStudentsDto">
+		SELECT
+			eer.*,
+			ee.title_,
+			ee.content_,
+			ee.teacher_id_,
+			su.username_ student_name_
+		FROM
+			extracurricular_exercises_reply eer
+			LEFT JOIN extracurricular_exercises ee ON ee.id_=eer.extracurricular_exercises_id_
+			LEFT JOIN sys_user su ON su.id_ = eer.user_id_
+		WHERE
+			eer.id_ = #{extraExerciseReplyId}
+	</select>
+
+	<sql id="queryStudentExtraExercisesCondition">
+		<where>
+			<if test="teacherId!=null">
+				user_id_=#{studentId}
+			</if>
+			<if test="createTime!=null">
+				DATE_FORMAT(create_time_, '%Y-%m-%d') = DATE_FORMAT(#{createTime}, '%Y-%m-%d')
+			</if>
+		</where>
+	</sql>
+	<select id="countStudentExtraExercises" resultType="int">
+		SELECT COUNT(id_) FROM extracurricular_exercises_reply
+		<include refid="queryStudentExtraExercisesCondition"/>
+	</select>
+	<select id="findStudentExtraExercises" resultMap="ExtraExerciseStudentsDto">
+		SELECT
+			eer.*,
+			ee.teacher_id_,
+			tea.real_name_ teacher_name_,
+			su.student_name_
+		FROM
+			extracurricular_exercises_reply eer
+			LEFT JOIN extracurricular_exercises ee ON ee.id_=eer.extracurricular_exercises_id_
+			LEFT JOIN sys_user su ON su.id_ = eer.user_id_
+			LEFT JOIN sys_user tea ON tea.id_=ee.teacher_id_
+			<include refid="queryStudentExtraExercisesCondition"/>
+			ORDER BY eer.create_time_ DESC
+		<include refid="global.limit"/>
+	</select>
+	<select id="countIsSubmitStudents" resultType="int">
+		SELECT COUNT(id_) FROM extracurricular_exercises_reply WHERE extracurricular_exercises_id_=#{extraExerciseId} AND attachments_ IS NOT NULL
+	</select>
+</mapper>

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

@@ -151,7 +151,7 @@
         WHERE student_id_ = #{userId}
           AND group_status_ = 'NORMAL'
           AND buy_months_ IS NULL
-          AND create_time_ > '2020-01-25'
+          AND create_time_ > '2020-03-25'
     </select>
     <select id="countPracticeGroupByOrgan" resultType="java.lang.Integer">
         SELECT count(*) FROM practice_group pg

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

@@ -168,7 +168,7 @@
         SELECT
             sch.id_,
             ch.*,
-            mg.name_ music_group_name_,
+            IF(cs.group_type_='MUSIC',mg.name_,NULL) music_group_name_,
             cg.name_ class_group_name_,
             CONCAT( class_date_, ' ', start_class_time_ ) start_class_time_,
             ch.expiry_date_,

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

@@ -827,6 +827,9 @@
         <foreach collection="teacherIds" item="userId" open="(" close=")" separator=",">
             #{userId}
         </foreach>
+        <if test="search != null and search != ''">
+            AND su.real_name_ LIKE CONCAT('%',#{search},'%')
+        </if>
     </select>
     <select id="findMusicTeacherIds" resultType="java.lang.Integer">
         SELECT DISTINCT cgtm.user_id_ FROM class_group_student_mapper cgsm

+ 13 - 1
mec-client-api/src/main/java/com/ym/mec/im/ImFeignService.java

@@ -1,5 +1,6 @@
 package com.ym.mec.im;
 
+import com.ym.mec.common.entity.ImPrivateMessage;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -25,7 +26,7 @@ public interface ImFeignService {
 	ImResult register(@RequestBody ImUserModel userModel);
 
 	/**
-	 * 用户注册
+	 * 用户信息修改
 	 * @param userModel
 	 * @return
 	 */
@@ -87,4 +88,15 @@ public interface ImFeignService {
 	 */
 	@PostMapping(value = "group/batchQuit")
 	Object groupBatchQuit(@RequestBody List<ImGroupModel> groupModels);
+
+	/**
+	 * 发送私聊消息
+	 * @param privateMessage
+	 * @return
+	 */
+	@PostMapping(value = "private/send")
+	//body模板
+	//{"senderId":"325","targetId":[1094986],"objectName":"RC:TxtMsg",
+	// "content":{"content":"www.baidu.com"}}
+	Object privateSend(@RequestBody ImPrivateMessage privateMessage);
 }

+ 6 - 0
mec-client-api/src/main/java/com/ym/mec/im/fallback/ImFeignServiceFallback.java

@@ -1,5 +1,6 @@
 package com.ym.mec.im.fallback;
 
+import com.ym.mec.common.entity.ImPrivateMessage;
 import org.springframework.stereotype.Component;
 
 import com.ym.mec.common.entity.ImGroupModel;
@@ -57,4 +58,9 @@ public class ImFeignServiceFallback implements ImFeignService {
     public Object groupBatchQuit(List<ImGroupModel> groupModels) {
         return null;
     }
+
+    @Override
+    public Object privateSend(ImPrivateMessage privateMessage) {
+        return null;
+    }
 }

+ 10 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImBaseMessage.java

@@ -0,0 +1,10 @@
+package com.ym.mec.common.entity;
+
+public abstract class ImBaseMessage {
+    public ImBaseMessage() {
+    }
+
+    public abstract String getType();
+
+    public abstract String toString();
+}

+ 81 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImMessageModel.java

@@ -0,0 +1,81 @@
+package com.ym.mec.common.entity;
+
+public class ImMessageModel {
+    //	发送人 Id  必填
+    private String senderId;
+    //接收人 Id  必填
+    private String[] targetId;
+    //消息类型, 分为两类: 内置消息类型 、自定义消息类型  RC:TxtMsg,RC:ImgMsg,RC:VcMsg,RC:ImgTextMsg,RC:FileMsg,RC:LBSMsg  必填
+    private String objectName;
+    //消息内容  必填
+    private ImTxtMessage content;
+    //push 内容, 分为两类 内置消息 Push 、自定义消息 Push  RC:TxtMsg,RC:ImgMsg,RC:VcMsg,RC:ImgTextMsg,RC:FileMsg,RC:LBSMsg
+    private String pushContent;
+    private String pushData;
+
+    public ImMessageModel() {
+    }
+
+    public ImMessageModel(String senderId, String[] targetId, String objectName, ImTxtMessage content, String pushContent, String pushData) {
+        this.senderId = senderId;
+        this.targetId = targetId;
+        this.objectName = objectName;
+        this.content = content;
+        this.pushContent = pushContent;
+        this.pushData = pushData;
+    }
+
+    public String[] getTargetId() {
+        return this.targetId;
+    }
+
+    public ImMessageModel setTargetId(String[] targetId) {
+        this.targetId = targetId;
+        return this;
+    }
+
+    public String getObjectName() {
+        return this.objectName;
+    }
+
+    public ImMessageModel setObjectName(String objectName) {
+        this.objectName = objectName;
+        return this;
+    }
+
+    public ImBaseMessage getContent() {
+        return this.content;
+    }
+
+    public ImMessageModel setContent(ImTxtMessage content) {
+        this.content = content;
+        return this;
+    }
+
+    public String getPushContent() {
+        return this.pushContent;
+    }
+
+    public ImMessageModel setPushContent(String pushContent) {
+        this.pushContent = pushContent;
+        return this;
+    }
+
+    public String getPushData() {
+        return this.pushData;
+    }
+
+    public ImMessageModel setPushData(String pushData) {
+        this.pushData = pushData;
+        return this;
+    }
+
+    public String getSenderId() {
+        return this.senderId;
+    }
+
+    public ImMessageModel setSenderId(String senderId) {
+        this.senderId = senderId;
+        return this;
+    }
+}

+ 114 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImPrivateMessage.java

@@ -0,0 +1,114 @@
+package com.ym.mec.common.entity;
+
+public class ImPrivateMessage extends ImMessageModel {
+    public String count;
+    //是否在融云服务器存储, 0: 不存储, 1: 存储, 默认: 1
+    public Integer isPersisted;
+    public Integer isCounted;
+    //是否过滤接收用户黑名单列表, 0: 不过滤 、1: 过滤,默认: 0
+    public Integer verifyBlacklist;
+    //发送者自己是否接收此条消息, 0: 不接收, 1: 接收, 默认: 0
+    public Integer isIncludeSender;
+    public Integer contentAvailable;
+
+    public ImPrivateMessage() {
+    }
+
+    public ImPrivateMessage(String senderId, String[] targetId, String objectName, ImTxtMessage content, String pushContent, String pushData, String count, Integer isPersisted, Integer isCounted, Integer verifyBlacklist, Integer isIncludeSender, Integer contentAvailable) {
+        super(senderId, targetId, objectName, content, pushContent, pushData);
+        this.count = count;
+        this.isPersisted = isPersisted;
+        this.isCounted = isCounted;
+        this.verifyBlacklist = verifyBlacklist;
+        this.isIncludeSender = isIncludeSender;
+        this.contentAvailable = contentAvailable;
+    }
+
+    public ImPrivateMessage setSenderId(String senderId) {
+        super.setSenderId(senderId);
+        return this;
+    }
+
+    public String[] getTargetId() {
+        return super.getTargetId();
+    }
+
+    public ImPrivateMessage setTargetId(String[] targetId) {
+        super.setTargetId(targetId);
+        return this;
+    }
+
+    public ImPrivateMessage setContent(ImTxtMessage content) {
+        super.setContent(content);
+        return this;
+    }
+
+    public ImPrivateMessage setPushContent(String pushContent) {
+        super.setPushContent(pushContent);
+        return this;
+    }
+
+    public ImPrivateMessage setPushData(String pushData) {
+        super.setPushData(pushData);
+        return this;
+    }
+
+    public String getCount() {
+        return this.count;
+    }
+
+    public ImPrivateMessage setCount(String count) {
+        this.count = count;
+        return this;
+    }
+
+    public Integer getVerifyBlacklist() {
+        return this.verifyBlacklist;
+    }
+
+    public ImPrivateMessage setVerifyBlacklist(Integer verifyBlacklist) {
+        this.verifyBlacklist = verifyBlacklist;
+        return this;
+    }
+
+    public Integer getIsPersisted() {
+        return this.isPersisted;
+    }
+
+    public ImPrivateMessage setIsPersisted(Integer isPersisted) {
+        this.isPersisted = isPersisted;
+        return this;
+    }
+
+    public Integer getIsCounted() {
+        return this.isCounted;
+    }
+
+    public ImPrivateMessage setIsCounted(Integer isCounted) {
+        this.isCounted = isCounted;
+        return this;
+    }
+
+    public Integer getIsIncludeSender() {
+        return this.isIncludeSender;
+    }
+
+    public ImPrivateMessage setIsIncludeSender(Integer isIncludeSender) {
+        this.isIncludeSender = isIncludeSender;
+        return this;
+    }
+
+    public ImPrivateMessage setObjectName(String objectName) {
+        super.setObjectName(objectName);
+        return this;
+    }
+
+    public Integer getContentAvailable() {
+        return this.contentAvailable;
+    }
+
+    public ImPrivateMessage setContentAvailable(Integer contentAvailable) {
+        this.contentAvailable = contentAvailable;
+        return this;
+    }
+}

+ 38 - 0
mec-common/common-core/src/main/java/com/ym/mec/common/entity/ImTxtMessage.java

@@ -0,0 +1,38 @@
+package com.ym.mec.common.entity;
+
+import com.alibaba.fastjson.JSONObject;
+
+public class ImTxtMessage extends ImBaseMessage {
+    private String content = "";
+    private String extra = "";
+    private static final transient String TYPE = "RC:TxtMsg";
+
+    public ImTxtMessage(String content, String extra) {
+        this.content = content;
+        this.extra = extra;
+    }
+
+    public String getType() {
+        return "RC:TxtMsg";
+    }
+
+    public String getContent() {
+        return this.content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getExtra() {
+        return this.extra;
+    }
+
+    public void setExtra(String extra) {
+        this.extra = extra;
+    }
+
+    public String toString() {
+        return JSONObject.toJSONString(this);
+    }
+}

+ 1 - 1
mec-im/pom.xml

@@ -90,7 +90,7 @@
     <dependency>
       <groupId>cn.rongcloud.im</groupId>
       <artifactId>server-sdk-java</artifactId>
-      <version>3.0.6</version>
+      <version>3.1.4</version>
     </dependency>
     <dependency>
       <groupId>org.springframework.cloud</groupId>

+ 13 - 1
mec-im/src/main/java/com/ym/controller/PrivateController.java

@@ -1,6 +1,10 @@
 package com.ym.controller;
 
+import com.ym.mec.common.entity.ImBaseMessage;
+import com.ym.mec.common.entity.ImPrivateMessage;
+import com.ym.mec.common.entity.ImTxtMessage;
 import com.ym.service.MessageService;
+import io.rong.messages.TxtMessage;
 import io.rong.models.message.PrivateMessage;
 import io.rong.models.message.RecallMessage;
 import io.rong.models.message.TemplateMessage;
@@ -21,7 +25,15 @@ public class PrivateController {
     MessageService messageService;
 
     @RequestMapping(value = "/send", method = RequestMethod.POST)
-    public Object send(@RequestBody PrivateMessage privateMessage) throws Exception {
+    public Object send(@RequestBody ImPrivateMessage imPrivateMessage) throws Exception {
+        PrivateMessage privateMessage = new PrivateMessage();
+        ImTxtMessage content = (ImTxtMessage)imPrivateMessage.getContent();
+        TxtMessage txtMessage = new TxtMessage(content.getContent(),content.getExtra());
+        privateMessage.setContent(txtMessage);
+        privateMessage.setTargetId(imPrivateMessage.getTargetId());
+        privateMessage.setSenderId(imPrivateMessage.getSenderId());
+        privateMessage.setObjectName(imPrivateMessage.getObjectName());
+        privateMessage.setIsIncludeSender(1);
         return messageService.privateSend(privateMessage);
     }
 

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

@@ -1,6 +1,7 @@
 package com.ym.service.Impl;
 
 import com.ym.service.MessageService;
+import io.rong.RongCloud;
 import io.rong.methods.message._private.Private;
 import io.rong.methods.message.chatroom.Chatroom;
 import io.rong.methods.message.group.Group;
@@ -25,7 +26,10 @@ public class MessageServiceImpl implements MessageService {
     private String appSecret;
 
     private Private getPrivate(){
-        return new Private(appKey,appSecret);
+        RongCloud rongCloud = RongCloud.getInstance(appKey, appSecret);
+        Private aPrivate = new Private(appKey, appSecret);
+        aPrivate.setRongCloud(rongCloud);
+        return aPrivate;
     }
     private Group getGroup(){
         return new Group(appKey,appSecret);

+ 44 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ExtracurricularExercisesMessageController.java

@@ -0,0 +1,44 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage;
+import com.ym.mec.biz.service.ExtracurricularExercisesMessageService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.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;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/26
+ */
+@Api(tags = "课外训练评论服务")
+@RequestMapping("extracurricularExercisesMessage")
+@RestController
+public class ExtracurricularExercisesMessageController extends BaseController {
+
+    @Autowired
+    private ExtracurricularExercisesMessageService extracurricularExercisesMessageService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "添加学生作业评论")
+    @GetMapping("/addStudentExtraExerciseComment")
+    public HttpResponseResult addStudentExtraExerciseComment(ExtracurricularExercisesMessage extracurricularExercisesMessage){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        extracurricularExercisesMessage.setUserId(sysUser.getId());
+        extracurricularExercisesMessage.setRole("STUDENT");
+        extracurricularExercisesMessageService.addStudentExtraExerciseComment(extracurricularExercisesMessage);
+        return succeed();
+    }
+
+}

+ 62 - 0
mec-student/src/main/java/com/ym/mec/student/controller/ExtracurricularExercisesReplyController.java

@@ -0,0 +1,62 @@
+package com.ym.mec.student.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
+import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.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;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/26
+ */
+@Api(tags = "课外训练服务")
+@RequestMapping("extracurricularExercisesReply")
+@RestController
+public class ExtracurricularExercisesReplyController extends BaseController {
+
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
+
+    @ApiOperation(value = "获取学生的课外训练列表")
+    @GetMapping("/findStudentExtraExercises")
+    public HttpResponseResult findStudentExtraExercises(ExtraExercilseQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        queryInfo.setStudentId(sysUser.getId());
+        return succeed(extracurricularExercisesReplyService.findStudentExtraExercises(queryInfo));
+    }
+
+    @ApiOperation(value = "获取课外训练学生")
+    @GetMapping("/findExtraExerciseStudents")
+    public HttpResponseResult findExtraExerciseStudents(Long extraExerciseId,String studentName){
+        return succeed(extracurricularExercisesReplyService.findExtraExerciseStudents(extraExerciseId,studentName));
+    }
+
+    @ApiOperation(value = "获取课外训练详情")
+    @GetMapping("/findStudentExtraExerciseDetail")
+    public HttpResponseResult findStudentExtraExerciseDetail(Long studentExerciseId){
+        return succeed(extracurricularExercisesReplyService.findStudentExtraExerciseDetail(studentExerciseId));
+    }
+
+    @ApiOperation(value = "提交课外训练作业")
+    @GetMapping("/submitExtraExercise")
+    public HttpResponseResult submitExtraExercise(ExtracurricularExercisesReply extracurricularExercisesReply){
+        extracurricularExercisesReplyService.submitExtraExercise(extracurricularExercisesReply);
+        return succeed();
+    }
+
+}

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

@@ -53,6 +53,8 @@ public class PracticeGroupController extends BaseController {
     @Autowired
     private CourseScheduleEvaluateDao courseScheduleEvaluateDao;
 
+    private static final Set<Integer> ENABLE_APPLY_ORGANIDS = new HashSet<>(Arrays.asList(new Integer[]{1, 43, 47}));
+
     @ApiOperation("获取学生的陪练课")
     @GetMapping(value = "/findUserPracticeCourses")
     public Object findUserPracticeCourses(){
@@ -71,6 +73,12 @@ public class PracticeGroupController extends BaseController {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
         Map<String,Object> result=practiceGroupService.checkCanApplyFreePracticeGroup(sysUser.getId());
+        if(ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
+            Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(sysUser.getId());
+            result.put("canApply", applyTimes < 1 ? 1 : 0);
+        }else{
+            result.put("canApply", 0);
+        }
         result.put("organId", sysUser.getOrganId());
         return succeed(result);
     }
@@ -82,7 +90,14 @@ public class PracticeGroupController extends BaseController {
         if (sysUser == null) {
             return failed(HttpStatus.FORBIDDEN, "请登录");
         }
-        return succeed(practiceGroupService.getPracticeApplyParams(sysUser.getId()));
+        Map<String,Object> result=practiceGroupService.getPracticeApplyParams(sysUser.getId());
+        if(ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
+            Integer applyTimes = practiceGroupDao.countUserPracticeApplyRecord(sysUser.getId());
+            result.put("enableApply", applyTimes < 1 ? 1 : 0);
+        }else{
+            result.put("enableApply", 0);
+        }
+        return succeed(result);
     }
 
     @ApiOperation("获取可以预约的教师")
@@ -135,6 +150,9 @@ public class PracticeGroupController extends BaseController {
         if(excludeOrganIds.contains(sysUser.getOrganId())){
             throw new BizException("请联系老师确认您的所属分部");
         }
+        if(!ENABLE_APPLY_ORGANIDS.contains(sysUser.getOrganId())){
+            throw new BizException("陪练课预约活动已结束");
+        }
         practiceGroup.setStudentId(sysUser.getId());
         return succeed(practiceGroupService.practiceApply(practiceGroup));
     }

+ 35 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkController.java

@@ -2,9 +2,11 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -30,6 +32,8 @@ public class StudentCourseHomeworkController extends BaseController {
     @Autowired
     private StudentCourseHomeworkService studentCourseHomeworkService;
     @Autowired
+    private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
+    @Autowired
     private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "提交作业")
@@ -50,6 +54,23 @@ public class StudentCourseHomeworkController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "重新提交-公用")
+    @PostMapping(value = "/updatePublic",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
+    public Object updatePublic(@RequestBody StudentCourseHomework studentCourseHomework){
+        if(!studentCourseHomework.isExtra()){
+            studentCourseHomework.setStatus(YesOrNoEnum.YES);
+            studentCourseHomework.setId(studentCourseHomework.getCourseHomeworkId());
+            studentCourseHomework.setCourseHomeworkId(null);
+            studentCourseHomeworkService.submitHomework(studentCourseHomework);
+        }else{
+            ExtracurricularExercisesReply extracurricularExercisesReply = new ExtracurricularExercisesReply();
+            extracurricularExercisesReply.setId(studentCourseHomework.getCourseHomeworkId());
+            extracurricularExercisesReply.setAttachments(studentCourseHomework.getAttachments());
+            extracurricularExercisesReplyService.submitExtraExercise(extracurricularExercisesReply);
+        }
+        return succeed();
+    }
+
     @ApiOperation(value = "获取学生作业界面详细信息")
     @GetMapping(value = "/findCourseHomeworkStudentDetail")
     public Object findCourseHomeworkStudentDetail(Long courseScheduleID) {
@@ -60,6 +81,20 @@ public class StudentCourseHomeworkController extends BaseController {
         return succeed(studentCourseHomeworkService.findCourseHomeworkStudentDetail(courseScheduleID,user.getId().longValue()));
     }
 
+    @ApiOperation(value = "获取学生作业界面详细信息-公用")
+    @GetMapping(value = "/findCourseHomeworkStudentDetailPublic")
+    public Object findCourseHomeworkStudentDetailPublic(Long courseScheduleID, boolean isExtra) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(user)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        if(!isExtra){
+            return succeed(studentCourseHomeworkService.findCourseHomeworkStudentDetail(courseScheduleID,user.getId().longValue()));
+        }else{
+            return succeed(extracurricularExercisesReplyService.findStudentExtraExerciseDetail(courseScheduleID));
+        }
+    }
+
     @ApiOperation(value = "获取学生作业记录")
     @GetMapping(value = "/findStudentHomeworkRecord")
     public HttpResponseResult findStudentHomeworkRecord(CourseHomeworkQueryInfo queryInfo){

+ 35 - 0
mec-student/src/main/java/com/ym/mec/student/controller/StudentCourseHomeworkReplyController.java

@@ -2,8 +2,10 @@ package com.ym.mec.student.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage;
 import com.ym.mec.biz.dal.entity.StudentCourseHomeworkReply;
 import com.ym.mec.biz.dal.page.StudentCourseHomeworkReplyQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesMessageService;
 import com.ym.mec.biz.service.StudentCourseHomeworkReplyService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
@@ -27,6 +29,8 @@ public class StudentCourseHomeworkReplyController extends BaseController {
 
     @Autowired
     private StudentCourseHomeworkReplyService studentCourseHomeworkReplyService;
+    @Autowired
+    private ExtracurricularExercisesMessageService extracurricularExercisesMessageService;
     @Resource
     private SysUserFeignService sysUserFeignService;
 
@@ -42,12 +46,43 @@ public class StudentCourseHomeworkReplyController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "新增回复-公用")
+    @PostMapping("/addPublic")
+    public Object addPublic(@RequestBody StudentCourseHomeworkReply studentCourseHomeworkReply) {
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        if(!studentCourseHomeworkReply.isExtra()){
+            studentCourseHomeworkReply.setUserId(sysUser.getId());
+            studentCourseHomeworkReplyService.insert(studentCourseHomeworkReply);
+        }else{
+            ExtracurricularExercisesMessage extracurricularExercisesMessage=new ExtracurricularExercisesMessage();
+            extracurricularExercisesMessage.setExtracurricularExercisesReplyId(studentCourseHomeworkReply.getStudentCourseHomeworkId());
+            extracurricularExercisesMessage.setContent(studentCourseHomeworkReply.getContent());
+            extracurricularExercisesMessage.setUserId(sysUser.getId());
+            extracurricularExercisesMessage.setRole("STUDENT");
+            extracurricularExercisesMessageService.addStudentExtraExerciseComment(extracurricularExercisesMessage);
+        }
+        return succeed();
+    }
+
     @ApiOperation(value = "回复查询")
     @PostMapping("/queryPage")
     public Object queryPage(@RequestBody StudentCourseHomeworkReplyQueryInfo queryInfo){
         return succeed(studentCourseHomeworkReplyService.queryPage(queryInfo));
     }
 
+    @ApiOperation(value = "回复查询-公用")
+    @PostMapping("/queryPagePublic")
+    public Object queryPagePublic(@RequestBody StudentCourseHomeworkReplyQueryInfo queryInfo){
+        if(!queryInfo.isExtra()){
+            return succeed(studentCourseHomeworkReplyService.queryPage(queryInfo));
+        }else{
+            return succeed(extracurricularExercisesMessageService.findStudentExtraExerciseComments(queryInfo));
+        }
+    }
+
     @ApiOperation(value = "删除回复")
     @DeleteMapping("/del/{id}")
     public Object del(@ApiParam(value = "回复ID", required = true) @PathVariable("id") Long id){

+ 2 - 2
mec-student/src/main/java/com/ym/mec/student/controller/StudentManageController.java

@@ -78,11 +78,11 @@ public class StudentManageController extends BaseController {
 
     @ApiOperation(value = "根据群编号,获取群组所有成员基本信息")
     @GetMapping("classGroup/findGroupUsers")
-    public Object findGroupUsers(Integer groupId) {
+    public Object findGroupUsers(Integer groupId,String search) {
         if (groupId == null) {
             return failed("参数校验错误");
         }
-        return succeed(classGroupService.findGroupUsers(groupId));
+        return succeed(classGroupService.findGroupUsers(groupId,search));
     }
 
     @ApiOperation(value = "分页查询群公告列表")

+ 45 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java

@@ -3,10 +3,12 @@ package com.ym.mec.teacher.controller;
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
+import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
@@ -33,6 +35,8 @@ public class CourseHomeworkController extends BaseController {
     @Autowired
     private StudentCourseHomeworkService studentCourseHomeworkService;
     @Autowired
+    private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
+    @Autowired
     private SysUserFeignService sysUserFeignService;
 
     @ApiOperation(value = "根据班级获取教师布置的作业")
@@ -52,6 +56,16 @@ public class CourseHomeworkController extends BaseController {
         return succeed(studentCourseHomeworkService.findStudentCourseHomeworkByCourse(courseScheduleId,userName));
     }
 
+    @ApiOperation(value = "根据课程计划获取需要交作业的学生-公用")
+    @GetMapping("/findCourseStudentsPublic")
+    public Object findCourseStudentsPublic(Long courseScheduleId,String userName, boolean isExtra){
+        if(!isExtra){
+            return succeed(studentCourseHomeworkService.findStudentCourseHomeworkByCourse(courseScheduleId,userName));
+        }else{
+            return succeed(extracurricularExercisesReplyService.findExtraExerciseStudents(courseScheduleId,userName));
+        }
+    }
+
     @ApiOperation(value = "获取学生作业界面详细信息")
     @GetMapping(value = "/findCourseHomeworkStudentDetail")
     public Object findCourseHomeworkStudentDetail(Long courseScheduleID,Long userId){
@@ -69,4 +83,35 @@ public class CourseHomeworkController extends BaseController {
         return succeed(courseHomeworkStudentDetail);
     }
 
+    @ApiOperation(value = "获取学生作业界面详细信息-公用")
+    @GetMapping(value = "/findCourseHomeworkStudentDetailPublic")
+    public Object findCourseHomeworkStudentDetailPublic(Long courseScheduleID,Long userId, boolean isExtra){
+        StudentCourseHomework studentCourseHomework1 = studentCourseHomeworkService.get(courseScheduleID);
+        if(Objects.isNull(studentCourseHomework1)){
+            return failed("作业不存在");
+        }
+        if(!isExtra){
+            CourseHomeworkStudentDetailDto courseHomeworkStudentDetail = studentCourseHomeworkService.findCourseHomeworkStudentDetail(studentCourseHomework1.getCourseScheduleId(), userId);
+            if(Objects.nonNull(courseHomeworkStudentDetail)){
+                StudentCourseHomework studentCourseHomework=new StudentCourseHomework();
+                studentCourseHomework.setId(studentCourseHomework1.getId());
+                studentCourseHomework.setIsView(YesOrNoEnum.YES);
+                studentCourseHomeworkService.update(studentCourseHomework);
+            }
+            return succeed(courseHomeworkStudentDetail);
+        }else{
+            CourseHomeworkStudentDetailDto studentExtraExerciseDetail = extracurricularExercisesReplyService.findStudentExtraExerciseDetail(courseScheduleID);
+            if(Objects.isNull(studentExtraExerciseDetail)){
+                return failed("作业不存在");
+            }
+            if(Objects.nonNull(studentExtraExerciseDetail.getAttachments())){
+                ExtracurricularExercisesReply extracurricularExercisesReply=new ExtracurricularExercisesReply();
+                extracurricularExercisesReply.setId(studentExtraExerciseDetail.getCourseHomeworkId());
+                extracurricularExercisesReply.setIsView(1);
+                extracurricularExercisesReplyService.update(extracurricularExercisesReply);
+            }
+            return succeed(studentExtraExerciseDetail);
+        }
+    }
+
 }

+ 69 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesController.java

@@ -0,0 +1,69 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
+import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
+import com.ym.mec.biz.service.ExtracurricularExercisesService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Objects;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/26
+ */
+@Api(tags = "课外训练服务")
+@RequestMapping("extracurricularExercises")
+@RestController
+public class ExtracurricularExercisesController extends BaseController {
+
+    @Autowired
+    private ExtracurricularExercisesService extracurricularExercisesService;
+    @Autowired
+    private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "创建课外训练")
+    @PostMapping("/createExtraExercises")
+    private HttpResponseResult createExtraExercises(ExtracurricularExercises exercises){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        exercises.setTeacherId(sysUser.getId());
+        extracurricularExercisesService.createExtraExercises(exercises);
+        return succeed();
+    }
+
+    @ApiOperation(value = "获取课外训练列表")
+    @GetMapping("/findExtraExercilses")
+    private HttpResponseResult findExtraExercilses(ExtraExercilseQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(sysUser)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        queryInfo.setTeacherId(sysUser.getId());
+        return succeed(extracurricularExercisesService.findExtraExercilses(queryInfo));
+    }
+
+    @ApiOperation(value = "获取课外训练详情")
+    @GetMapping("/findStudentExtraExerciseDetail")
+    private HttpResponseResult findStudentExtraExerciseDetail(Long studentExerciseId){
+        if(Objects.isNull(studentExerciseId)){
+            return failed("请选择课外训练作业");
+        }
+        return succeed(extracurricularExercisesReplyService.findStudentExtraExerciseDetail(studentExerciseId));
+    }
+}

+ 44 - 0
mec-teacher/src/main/java/com/ym/mec/teacher/controller/ExtracurricularExercisesMessageController.java

@@ -0,0 +1,44 @@
+package com.ym.mec.teacher.controller;
+
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage;
+import com.ym.mec.biz.service.ExtracurricularExercisesMessageService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.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;
+
+/**
+ * @Author Joburgess
+ * @Date 2020/3/26
+ */
+@Api(tags = "课外训练评论服务")
+@RequestMapping("extracurricularExercisesMessage")
+@RestController
+public class ExtracurricularExercisesMessageController extends BaseController {
+
+    @Autowired
+    private ExtracurricularExercisesMessageService extracurricularExercisesMessageService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+
+    @ApiOperation(value = "添加学生作业评论")
+    @GetMapping("/addStudentExtraExerciseComment")
+    public HttpResponseResult addStudentExtraExerciseComment(ExtracurricularExercisesMessage extracurricularExercisesMessage){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed(HttpStatus.FORBIDDEN, "请登录");
+        }
+        extracurricularExercisesMessage.setUserId(sysUser.getId());
+        extracurricularExercisesMessage.setRole("TEACHER");
+        extracurricularExercisesMessageService.addStudentExtraExerciseComment(extracurricularExercisesMessage);
+        return succeed();
+    }
+
+}

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

@@ -2,8 +2,10 @@ package com.ym.mec.teacher.controller;
 
 import com.ym.mec.auth.api.client.SysUserFeignService;
 import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesMessage;
 import com.ym.mec.biz.dal.entity.StudentCourseHomeworkReply;
 import com.ym.mec.biz.dal.page.StudentCourseHomeworkReplyQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesMessageService;
 import com.ym.mec.biz.service.StudentCourseHomeworkReplyService;
 import com.ym.mec.common.controller.BaseController;
 import io.swagger.annotations.Api;
@@ -25,6 +27,8 @@ import java.util.Objects;
 public class TeacherCourseHomeworkReplyController extends BaseController {
 
     @Autowired
+    private ExtracurricularExercisesMessageService extracurricularExercisesMessageService;
+    @Autowired
     private StudentCourseHomeworkReplyService studentCourseHomeworkReplyService;
     @Autowired
     private SysUserFeignService sysUserFeignService;
@@ -41,12 +45,43 @@ public class TeacherCourseHomeworkReplyController extends BaseController {
         return succeed();
     }
 
+    @ApiOperation(value = "新增回复-公用")
+    @PostMapping("/addPublic")
+    public Object addPublic(@RequestBody StudentCourseHomeworkReply studentCourseHomeworkReply) {
+        SysUser user = sysUserFeignService.queryUserInfo();
+        if(Objects.isNull(user)){
+            return failed(HttpStatus.FORBIDDEN,"请登录");
+        }
+        if(!studentCourseHomeworkReply.isExtra()){
+            studentCourseHomeworkReply.setUserId(user.getId());
+            studentCourseHomeworkReplyService.insertTeacherReply(studentCourseHomeworkReply);
+        }else{
+            ExtracurricularExercisesMessage extracurricularExercisesMessage=new ExtracurricularExercisesMessage();
+            extracurricularExercisesMessage.setExtracurricularExercisesReplyId(studentCourseHomeworkReply.getStudentCourseHomeworkId());
+            extracurricularExercisesMessage.setContent(studentCourseHomeworkReply.getContent());
+            extracurricularExercisesMessage.setUserId(user.getId());
+            extracurricularExercisesMessage.setRole("TEACHER");
+            extracurricularExercisesMessageService.addStudentExtraExerciseComment(extracurricularExercisesMessage);
+        }
+        return succeed();
+    }
+
     @ApiOperation(value = "回复查询")
     @GetMapping("/queryPage")
     public Object queryPage(StudentCourseHomeworkReplyQueryInfo queryInfo){
         return succeed(studentCourseHomeworkReplyService.queryPage(queryInfo));
     }
 
+    @ApiOperation(value = "回复查询-公用")
+    @PostMapping("/queryPagePublic")
+    public Object queryPagePublic(StudentCourseHomeworkReplyQueryInfo queryInfo){
+        if(!queryInfo.isExtra()){
+            return succeed(studentCourseHomeworkReplyService.queryPage(queryInfo));
+        }else{
+            return succeed(extracurricularExercisesMessageService.findStudentExtraExerciseComments(queryInfo));
+        }
+    }
+
     @ApiOperation(value = "删除回复")
     @PostMapping("/del/{id}")
     public Object del(@ApiParam(value = "回复ID", required = true) @PathVariable("id") Long id){

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

@@ -89,11 +89,11 @@ public class TeacherManageController extends BaseController {
 
     @ApiOperation(value = "根据群编号,获取群组所有成员基本信息")
     @GetMapping("classGroup/findGroupUsers")
-    public Object findGroupUsers(Integer groupId) {
+    public Object findGroupUsers(Integer groupId,String search) {
         if (groupId == null) {
             return failed("参数校验错误");
         }
-        return succeed(classGroupService.findGroupUsers(groupId));
+        return succeed(classGroupService.findGroupUsers(groupId,search));
     }
 
     @ApiOperation(value = "获取用户账户信息")

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

@@ -1,21 +1,16 @@
 package com.ym.mec.web.controller;
 
-import com.ym.mec.common.exception.BizException;
-import io.swagger.annotations.Api;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
 import com.ym.mec.biz.dal.dao.SysUserCashAccountDao;
 import com.ym.mec.biz.dal.dao.TeacherDao;
 import com.ym.mec.biz.dal.entity.SysUserCashAccount;
 import com.ym.mec.biz.dal.entity.Teacher;
 import com.ym.mec.biz.service.PracticeLessonApplyService;
 import com.ym.mec.common.controller.BaseController;
-
-import javax.swing.plaf.basic.BasicIconFactory;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 @RequestMapping("api")
 @Api(tags = "对外接口")

+ 2 - 2
mec-web/src/main/java/com/ym/mec/web/controller/education/ImController.java

@@ -74,11 +74,11 @@ public class ImController extends BaseController {
     @ApiOperation(value = "根据群编号,获取群组所有成员基本信息")
     @GetMapping("/findGroupUsers")
     @PreAuthorize("@pcs.hasPermissions('im/findGroupUsers','system')")
-    public Object findGroupUsers(Integer groupId) {
+    public Object findGroupUsers(Integer groupId,String search) {
         if (groupId == null) {
             return failed("参数校验错误");
         }
-        return succeed(classGroupService.findGroupUsers(groupId));
+        return succeed(classGroupService.findGroupUsers(groupId,search));
     }
 
     @ApiOperation(value = "根据群编号,获取用户群名片")