Ver código fonte

Merge remote-tracking branch 'origin/master'

zouxuan 4 anos atrás
pai
commit
1e58f3aaa3
25 arquivos alterados com 926 adições e 53 exclusões
  1. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java
  2. 26 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentCourseHomeworkDao.java
  3. 11 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dao/StudentRegistrationDao.java
  4. 140 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkCardDto.java
  5. 90 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkStatDto.java
  6. 10 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExtraExerciseStudentsDto.java
  7. 22 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/entity/MusicGroup.java
  8. 3 1
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/EmployeeRoleEnum.java
  9. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/enums/IndexDataType.java
  10. 43 0
      mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseHomeWorkQueryInfo.java
  11. 5 0
      mec-biz/src/main/java/com/ym/mec/biz/service/ExtracurricularExercisesReplyService.java
  12. 15 4
      mec-biz/src/main/java/com/ym/mec/biz/service/StudentCourseHomeworkService.java
  13. 16 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExtracurricularExercisesReplyServiceImpl.java
  14. 31 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java
  15. 31 21
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java
  16. 1 0
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/SoundServiceImpl.java
  17. 133 10
      mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java
  18. 2 2
      mec-biz/src/main/resources/config/mybatis/EmployeeMapper.xml
  19. 93 1
      mec-biz/src/main/resources/config/mybatis/ExtracurricularExercisesReplyMapper.xml
  20. 9 3
      mec-biz/src/main/resources/config/mybatis/MusicGroupMapper.xml
  21. 109 2
      mec-biz/src/main/resources/config/mybatis/StudentCourseHomeworkMapper.xml
  22. 10 0
      mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml
  23. 9 2
      mec-teacher/src/main/java/com/ym/mec/teacher/controller/CourseHomeworkController.java
  24. 12 7
      mec-web/src/main/java/com/ym/mec/web/controller/EmployeeController.java
  25. 82 0
      mec-web/src/main/java/com/ym/mec/web/controller/education/CourseHomeworkController.java

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

@@ -1,5 +1,6 @@
 package com.ym.mec.biz.dal.dao;
 
+import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
 import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
 import com.ym.mec.biz.dal.dto.StudentServiceDetailDto;
 import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
@@ -7,6 +8,7 @@ import com.ym.mec.biz.dal.dto.StudentServiceHomeworkDto;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -122,4 +124,24 @@ public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, Extracur
     Set<Integer> checkStudentHaveExercisesInDateRange(@Param("startDate") String startDate,
                                                      @Param("endDate") String endDate,
                                                      @Param("studentIds") List<Integer> studentIds);
+
+
+
+    /**
+     * @describe 获取课外训练列表-教务端
+     * @author Joburgess
+     * @date 2021/5/24 0024
+     * @param params:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.EduHomeworkCardDto>
+     */
+    List<EduHomeworkCardDto> getEduHomeworkList(Map<String, Object> params);
+    int countEduHomeworkList(Map<String, Object> params);
+
+    List<EduHomeworkCardDto> countEduHomeworkStudentNumWithMusicGroup(@Param("groupIds") List<String> groupIds,
+                                                                      @Param("startTime") Date startTime,
+                                                                      @Param("endTime") Date endTime);
+
+    List<EduHomeworkCardDto> countEduHomeworkSubjectStudentNumWithMusicGroup(@Param("groupId") String groupId,
+                                                                             @Param("startTime") Date startTime,
+                                                                             @Param("endTime") Date endTime);
 }

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

@@ -7,6 +7,7 @@ import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 
+import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -63,6 +64,7 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
      * @date 2019/10/20
      */
     List<StudentCourseHomework> findByCourseSchedule(@Param("courseScheduleId") Long courseScheduleId,
+                                                     @Param("homeworkId") Long homeworkId,
                                                      @Param("userName") String userName);
 
     /**
@@ -165,4 +167,28 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
      * @return
      */
     int getStudentCourseHomeWorksCount(Map<String, Object> params);
+
+    /**
+     * @describe 获取作业列表-教务端
+     * @author Joburgess
+     * @date 2021/5/24 0024
+     * @param params:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.EduHomeworkCardDto>
+     */
+    List<EduHomeworkCardDto> getEduCourseHomeworkList(Map<String, Object> params);
+    int countEduCourseHomeworkList(Map<String, Object> params);
+
+    /**
+     * @describe 统计指定乐团作业人次信息
+     * @author Joburgess
+     * @date 2021/5/25 0025
+     * @param groupIds:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.EduHomeworkCardDto>
+     */
+    List<EduHomeworkCardDto> countHomeworkStudentInfoWithMusicGroup(@Param("groupIds") List<String> groupIds,
+                                                                    @Param("startTime") Date startTime,
+                                                                    @Param("endTime") Date endTime);
+    List<EduHomeworkCardDto> countHomeworkSubjectStudentInfoWithMusicGroup(@Param("groupId") String groupId,
+                                                                           @Param("startTime") Date startTime,
+                                                                           @Param("endTime") Date endTime);
 }

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

@@ -7,6 +7,7 @@ import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.MusicGroup;
 import com.ym.mec.biz.dal.entity.Subject;
 
+import com.ym.mec.biz.dal.enums.StudentMusicGroupStatusEnum;
 import org.apache.ibatis.annotations.Param;
 
 import com.ym.mec.auth.api.entity.SysUser;
@@ -525,4 +526,14 @@ public interface StudentRegistrationDao extends BaseDAO<Long, StudentRegistratio
      * @return
      */
     int quitAllStudent(@Param("musicGroupId") String musicGroupId, @Param("remark") String remark);
+
+    /**
+     * @describe 获取指定乐团中的注册学员
+     * @author Joburgess
+     * @date 2021/5/24 0024
+     * @param groupIds:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.StudentRegistration>
+     */
+    List<StudentRegistration> findByMusicGroupIds(@Param("groupIds") List<String> groupIds,
+                                                  @Param("musicGroupStatus") StudentMusicGroupStatusEnum musicGroupStatus);
 }

+ 140 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkCardDto.java

@@ -0,0 +1,140 @@
+package com.ym.mec.biz.dal.dto;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/5/24 0024
+ */
+public class EduHomeworkCardDto {
+
+    private String groupId;
+
+    private Integer subjectId;
+
+    private Long courseId;
+
+    private Long homeworkId;
+
+    private String content;
+
+    private String courseName;
+
+    private Date courseStartTime;
+
+    private Integer teacherId;
+
+    private String teacherName;
+
+    private Integer exceptStudentNum;
+
+    private Integer submitStudentNum;
+
+    private Integer repliedStudentNum;
+
+    private Date createTime;
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Integer getSubjectId() {
+        return subjectId;
+    }
+
+    public void setSubjectId(Integer subjectId) {
+        this.subjectId = subjectId;
+    }
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getHomeworkId() {
+        return homeworkId;
+    }
+
+    public void setHomeworkId(Long homeworkId) {
+        this.homeworkId = homeworkId;
+    }
+
+    public Long getCourseId() {
+        return courseId;
+    }
+
+    public void setCourseId(Long courseId) {
+        this.courseId = courseId;
+    }
+
+    public String getCourseName() {
+        return courseName;
+    }
+
+    public void setCourseName(String courseName) {
+        this.courseName = courseName;
+    }
+
+    public Date getCourseStartTime() {
+        return courseStartTime;
+    }
+
+    public void setCourseStartTime(Date courseStartTime) {
+        this.courseStartTime = courseStartTime;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public Integer getExceptStudentNum() {
+        return exceptStudentNum;
+    }
+
+    public void setExceptStudentNum(Integer exceptStudentNum) {
+        this.exceptStudentNum = exceptStudentNum;
+    }
+
+    public Integer getSubmitStudentNum() {
+        return submitStudentNum;
+    }
+
+    public void setSubmitStudentNum(Integer submitStudentNum) {
+        this.submitStudentNum = submitStudentNum;
+    }
+
+    public Integer getRepliedStudentNum() {
+        return repliedStudentNum;
+    }
+
+    public void setRepliedStudentNum(Integer repliedStudentNum) {
+        this.repliedStudentNum = repliedStudentNum;
+    }
+}

+ 90 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/EduHomeworkStatDto.java

@@ -0,0 +1,90 @@
+package com.ym.mec.biz.dal.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import javax.validation.Valid;
+import java.math.BigDecimal;
+
+/**
+ * @Author Joburgess
+ * @Date 2021/5/24 0024
+ */
+public class EduHomeworkStatDto {
+
+    @ApiModelProperty(value = "课程组编号")
+    private String groupId;
+
+    @ApiModelProperty(value = "课程组名称")
+    private String groupName;
+
+    @ApiModelProperty(value = "声部")
+    private String subjectName;
+
+    @ApiModelProperty(value = "乐团人数")
+    private int groupStudentNum;
+
+    @ApiModelProperty(value = "作业人次")
+    private int exceptStudentNum;
+
+    @ApiModelProperty(value = "提交人次")
+    private int submitStudentNum;
+
+    @ApiModelProperty(value = "提交率")
+    private BigDecimal submitRate = BigDecimal.ZERO;
+
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public String getGroupName() {
+        return groupName;
+    }
+
+    public void setGroupName(String groupName) {
+        this.groupName = groupName;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public int getExceptStudentNum() {
+        return exceptStudentNum;
+    }
+
+    public void setExceptStudentNum(int exceptStudentNum) {
+        this.exceptStudentNum = exceptStudentNum;
+    }
+
+    public int getSubmitStudentNum() {
+        return submitStudentNum;
+    }
+
+    public void setSubmitStudentNum(int submitStudentNum) {
+        this.submitStudentNum = submitStudentNum;
+    }
+
+    public int getGroupStudentNum() {
+        return groupStudentNum;
+    }
+
+    public void setGroupStudentNum(int groupStudentNum) {
+        this.groupStudentNum = groupStudentNum;
+    }
+
+    public BigDecimal getSubmitRate() {
+        return submitRate;
+    }
+
+    public void setSubmitRate(BigDecimal submitRate) {
+        this.submitRate = submitRate;
+    }
+}

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

@@ -23,6 +23,8 @@ public class ExtraExerciseStudentsDto extends ExtracurricularExercisesReply {
 
     private String content;
 
+    private String phone;
+
     private java.util.Date expireDate;
 
     private String statusStr;
@@ -43,6 +45,14 @@ public class ExtraExerciseStudentsDto extends ExtracurricularExercisesReply {
         this.headUrl = headUrl;
     }
 
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
     public String getIsRepliedTimelyStr() {
         return isRepliedTimelyStr;
     }

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

@@ -64,6 +64,12 @@ public class MusicGroup {
 	/** 教务老师 */
 	@ApiModelProperty(value = "教务老师编号",required = false)
 	private Integer educationalTeacherId;
+
+	@ApiModelProperty(value = "衔接老师名字",required = false)
+	private String transactionTeacherName;
+
+	@ApiModelProperty(value = "衔接老师编号",required = false)
+	private Integer transactionTeacherId;
 	
 	/** 收费类型 */
 	@ApiModelProperty(value = "收费类型",required = false)
@@ -177,6 +183,22 @@ public class MusicGroup {
 	@ApiModelProperty(value = "进行中,缴费按钮控制",required = true)
 	private Boolean isRemedy = false;
 
+	public String getTransactionTeacherName() {
+		return transactionTeacherName;
+	}
+
+	public void setTransactionTeacherName(String transactionTeacherName) {
+		this.transactionTeacherName = transactionTeacherName;
+	}
+
+	public Integer getTransactionTeacherId() {
+		return transactionTeacherId;
+	}
+
+	public void setTransactionTeacherId(Integer transactionTeacherId) {
+		this.transactionTeacherId = transactionTeacherId;
+	}
+
 	public String getRepairUserName() {
 		return repairUserName;
 	}

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

@@ -6,7 +6,9 @@ import com.ym.mec.common.enums.BaseEnum;
  * 员工角色枚举
  */
 public enum EmployeeRoleEnum implements BaseEnum<String, EmployeeRoleEnum> {
-	TEAM_TEACHER("TEAM_TEACHER", "运营主管"), EDUCATION("EDUCATION", "乐团主管");
+	TEAM_TEACHER("TEAM_TEACHER", "运营主管"),
+	TRANSACTION("TRANSACTION", "衔接老师"),
+	EDUCATION("EDUCATION", "乐团主管");
 
 	private String code;
 

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

@@ -16,6 +16,7 @@ public enum IndexDataType implements BaseEnum<String, IndexDataType> {
     //运营数据类型
     SCHOOL("SCHOOL","合作单位", false, false),
     PROGRESS_MUSIC_GROUP_NUM("PROGRESS_MUSIC_GROUP_NUM","进行中乐团", false, false),
+    TRANSACTION_TEACHER_NUM("TRANSACTION_TEACHER_NUM", "衔接老师人数", false, false),
 
     //人事数据
     TEACHER_NUM("TEACHER_NUM","老师总数", false, false),

+ 43 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/StudentCourseHomeWorkQueryInfo.java

@@ -11,6 +11,15 @@ public class StudentCourseHomeWorkQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "学生id")
     private Long userId;
 
+    @ApiModelProperty(value = "课程组编号")
+    private String groupId;
+
+    @ApiModelProperty(value = "教师编号")
+    private Integer teacherId;
+
+    @ApiModelProperty(value = "衔接老师编号")
+    private Integer transactionTeacherId;
+
     @ApiModelProperty(value = "开始时间")
     private Date startTime;
 
@@ -23,6 +32,8 @@ public class StudentCourseHomeWorkQueryInfo extends QueryInfo {
     @ApiModelProperty(value = "是否回复")
     private YesOrNoEnum isReplied;
 
+    private Boolean extra = false;
+
     public Long getUserId() {
         return userId;
     }
@@ -31,6 +42,22 @@ public class StudentCourseHomeWorkQueryInfo extends QueryInfo {
         this.userId = userId;
     }
 
+    public String getGroupId() {
+        return groupId;
+    }
+
+    public void setGroupId(String groupId) {
+        this.groupId = groupId;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
     public Date getStartTime() {
         return startTime;
     }
@@ -62,4 +89,20 @@ public class StudentCourseHomeWorkQueryInfo extends QueryInfo {
     public void setIsReplied(YesOrNoEnum isReplied) {
         this.isReplied = isReplied;
     }
+
+    public Boolean getExtra() {
+        return extra;
+    }
+
+    public void setExtra(Boolean extra) {
+        this.extra = extra;
+    }
+
+    public Integer getTransactionTeacherId() {
+        return transactionTeacherId;
+    }
+
+    public void setTransactionTeacherId(Integer transactionTeacherId) {
+        this.transactionTeacherId = transactionTeacherId;
+    }
 }

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

@@ -1,15 +1,18 @@
 package com.ym.mec.biz.service;
 
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
+import com.ym.mec.biz.dal.dto.EduHomeworkCardDto;
 import com.ym.mec.biz.dal.dto.ExtraExerciseStudentsDto;
 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.biz.dal.page.ExtraExercilseReplyQueryInfo;
+import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.common.page.PageInfo;
 import com.ym.mec.common.service.BaseService;
 
 import java.util.List;
+import java.util.Map;
 
 public interface ExtracurricularExercisesReplyService extends BaseService<Long, ExtracurricularExercisesReply> {
 
@@ -67,4 +70,6 @@ public interface ExtracurricularExercisesReplyService extends BaseService<Long,
      */
     void exercisesSituationStatistics();
     void exercisesSituationStatistics2(String monday);
+
+    PageInfo<EduHomeworkCardDto> getEduHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo);
 }

+ 15 - 4
mec-biz/src/main/java/com/ym/mec/biz/service/StudentCourseHomeworkService.java

@@ -1,8 +1,6 @@
 package com.ym.mec.biz.service;
 
-import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
-import com.ym.mec.biz.dal.dto.StudentCourseHomeworkDto;
-import com.ym.mec.biz.dal.dto.StudentVisitCourseHomeWorkDto;
+import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.CourseHomework;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
@@ -40,7 +38,7 @@ public interface StudentCourseHomeworkService extends BaseService<Long, StudentC
      * @param userName: 用户名
      * @return java.util.List<com.ym.mec.biz.dal.entity.StudentCourseHomework>
      */
-    List<StudentCourseHomework> findStudentCourseHomeworkByCourse(Long courseSchedule,String userName);
+    List<StudentCourseHomework> findStudentCourseHomeworkByCourse(Long courseSchedule, Long homeworkId,String userName);
 
     /**
      * @describe 跟新学生作业回复状态
@@ -96,4 +94,17 @@ public interface StudentCourseHomeworkService extends BaseService<Long, StudentC
      * @return
      */
     PageInfo<StudentVisitCourseHomeWorkDto> getStudentHomeWorks(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    /**
+     * @describe 教务端课后作业列表
+     * @author Joburgess
+     * @date 2021/5/24 0024
+     * @param queryInfo:
+     * @return com.ym.mec.common.page.PageInfo<com.ym.mec.biz.dal.dto.EduHomeworkCardDto>
+     */
+    PageInfo<EduHomeworkCardDto> getEduCourseHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    PageInfo<EduHomeworkStatDto> queryEduHomeworkStatList(StudentCourseHomeWorkQueryInfo queryInfo);
+
+    List<EduHomeworkStatDto> queryEduHomeworkStatDetail(StudentCourseHomeWorkQueryInfo queryInfo);
 }

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

@@ -8,6 +8,7 @@ import com.ym.mec.biz.dal.enums.MessageTypeEnum;
 import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.dal.page.ExtraExercilseQueryInfo;
 import com.ym.mec.biz.dal.page.ExtraExercilseReplyQueryInfo;
+import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysMessageService;
@@ -364,4 +365,19 @@ public class ExtracurricularExercisesReplyServiceImpl extends BaseServiceImpl<Lo
             currentPage=currentPage.add(BigDecimal.ONE);
         }
 	}
+
+	@Override
+	public PageInfo<EduHomeworkCardDto> getEduHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo) {
+		PageInfo<EduHomeworkCardDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		int count = extracurricularExercisesReplyDao.countEduHomeworkList(params);
+		pageInfo.setTotal(count);
+		params.put("offset", pageInfo.getOffset());
+		List<EduHomeworkCardDto> dataList = extracurricularExercisesReplyDao.getEduHomeworkList(params);
+
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
 }

+ 31 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/IndexBaseMonthDataServiceImpl.java

@@ -8,10 +8,12 @@ import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.IndexBaseDto;
 import com.ym.mec.biz.dal.dto.IndexErrorDataExportDto;
 import com.ym.mec.biz.dal.dto.OrganVipGroupCategoryCourseNumDto;
+import com.ym.mec.biz.dal.dto.SimpleUserDto;
 import com.ym.mec.biz.dal.entity.IndexErrInfoDto;
 import com.ym.mec.biz.dal.entity.Organization;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.IndexDataQueryInfo;
+import com.ym.mec.biz.service.EmployeeService;
 import com.ym.mec.biz.service.StudentExtracurricularExercisesSituationService;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
@@ -60,6 +62,8 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 	private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 	@Autowired
 	private ClassGroupDao classGroupDao;
+	@Autowired
+	private EmployeeService employeeService;
 
 	private static ThreadLocal<Set<Integer>> organIds = new ThreadLocal<Set<Integer>>(){
 		@Override
@@ -258,6 +262,33 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.PROGRESS_MUSIC_GROUP_NUM)) {
 			saveData(indexBaseMonthDataDao.getMusicData(dayStr), dayStr, IndexDataType.PROGRESS_MUSIC_GROUP_NUM);
 		}
+		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(TRANSACTION_TEACHER_NUM)) {
+			List<SimpleUserDto> transactionTeachers = employeeService.findByRole("58", null);
+			Map<Integer, Integer> organTeacherNumMap = new HashMap<>();
+			for (SimpleUserDto transactionTeacher : transactionTeachers) {
+				Set<Integer> organIds = Arrays.stream(transactionTeacher.getOrganIds().split(",")).map(s -> Integer.valueOf(s)).collect(Collectors.toSet());
+				for (Integer organId : organIds) {
+					if(organTeacherNumMap.containsKey(organId)){
+						organTeacherNumMap.put(organId, organTeacherNumMap.get(organId)+1);
+					}else{
+						organTeacherNumMap.put(organId, 1);
+					}
+				}
+			}
+			List<IndexBaseMonthData> datas = new ArrayList<>();
+			Date month = DateUtil.stringToDate(dayStr, "yyyy-MM-dd");
+			for (Map.Entry<Integer, Integer> organTeacherNumMapEntry : organTeacherNumMap.entrySet()) {
+				IndexBaseMonthData data = new IndexBaseMonthData();
+				data.setOrganId(organTeacherNumMapEntry.getKey());
+				data.setMonth(month);
+				BigDecimal num = new BigDecimal(organTeacherNumMapEntry.getValue());
+				data.setTotalNum(num);
+				data.setActivateNum(num);
+				data.setPercent(num);
+				datas.add(data);
+			}
+			saveData(datas, dayStr, IndexDataType.TRANSACTION_TEACHER_NUM);
+		}
 
 		//人事数据
 		if(CollectionUtils.isEmpty(dataTypes)||dataTypes.contains(IndexDataType.TEACHER_NUM)) {

+ 31 - 21
mec-biz/src/main/java/com/ym/mec/biz/service/impl/MusicGroupServiceImpl.java

@@ -2564,28 +2564,32 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
         if (classGroups == null || classGroups.size() == 0) {
             return;
         }
-        Integer teamTeacherId = newMusicGroup.getTeamTeacherId();
-        Integer educationalTeacherId = newMusicGroup.getEducationalTeacherId();
-
-        Integer oldDirectorUserId = oldMusicGroup.getDirectorUserId();
-        if (oldDirectorUserId == null) {
-            oldDirectorUserId = teamTeacherId;
+        List<Integer> quitUserIdList = new ArrayList<>();
+        if(oldMusicGroup.getTeamTeacherId() != null){
+            quitUserIdList.add(oldMusicGroup.getTeamTeacherId());
         }
-        Integer directorUserId = newMusicGroup.getDirectorUserId();
-        if (directorUserId == null) {
-            directorUserId = teamTeacherId;
+        if(oldMusicGroup.getEducationalTeacherId() != null){
+            quitUserIdList.add(oldMusicGroup.getEducationalTeacherId());
+        }
+        if(oldMusicGroup.getDirectorUserId() != null){
+            quitUserIdList.add(oldMusicGroup.getDirectorUserId());
+        }
+        if(oldMusicGroup.getTransactionTeacherId() != null){
+            quitUserIdList.add(oldMusicGroup.getTransactionTeacherId());
+        }
+        Map<Integer, String> userRoleMap = new HashMap<>(4);
+        if(newMusicGroup.getTeamTeacherId() != null){
+            userRoleMap.put(newMusicGroup.getTeamTeacherId(), "运营主管");
+        }
+        if(newMusicGroup.getEducationalTeacherId() != null){
+            userRoleMap.put(newMusicGroup.getEducationalTeacherId(), "乐团主管");
+        }
+        if(newMusicGroup.getDirectorUserId() != null){
+            userRoleMap.put(newMusicGroup.getDirectorUserId(), "乐队指导");
+        }
+        if(newMusicGroup.getTransactionTeacherId() != null){
+            userRoleMap.put(newMusicGroup.getTransactionTeacherId(), "衔接老师");
         }
-
-        List<Integer> quitUserIdList = new ArrayList<Integer>();
-        quitUserIdList.add(oldMusicGroup.getTeamTeacherId());
-        quitUserIdList.add(oldMusicGroup.getEducationalTeacherId());
-        quitUserIdList.add(oldDirectorUserId);
-
-        Map<Integer, String> userRoleMap = new HashMap<Integer, String>();
-        userRoleMap.put(directorUserId, "乐队指导");
-        userRoleMap.put(educationalTeacherId, "乐团主管");
-        userRoleMap.put(teamTeacherId, "运营主管");
-
         classGroups.forEach(e -> {
             imGroupMemberService.quit(e.getId().longValue(), quitUserIdList);
             imGroupMemberService.join(e.getId().longValue(), userRoleMap);
@@ -2642,7 +2646,10 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 if(group.getDirectorUserId() != null){
                     quitUserIdList.add(group.getDirectorUserId());
                 }
-                Map<Integer, String> userRoleMap = new HashMap<>(3);
+                if(group.getTransactionTeacherId() != null){
+                    quitUserIdList.add(group.getTransactionTeacherId());
+                }
+                Map<Integer, String> userRoleMap = new HashMap<>(4);
                 if(musicGroup.getTeamTeacherId() != null){
                     userRoleMap.put(musicGroup.getTeamTeacherId(), "运营主管");
                 }
@@ -2652,6 +2659,9 @@ public class MusicGroupServiceImpl extends BaseServiceImpl<String, MusicGroup> i
                 if(musicGroup.getDirectorUserId() != null){
                     userRoleMap.put(musicGroup.getDirectorUserId(), "乐队指导");
                 }
+                if(musicGroup.getTransactionTeacherId() != null){
+                    userRoleMap.put(musicGroup.getTransactionTeacherId(), "衔接老师");
+                }
                 imGroupMemberService.quit(Long.parseLong(musicGroupId),quitUserIdList);
                 imGroupMemberService.join(Long.parseLong(musicGroupId),userRoleMap);
             }

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

@@ -213,6 +213,7 @@ public class SoundServiceImpl implements SoundService {
 
             score = intonation.multiply(new BigDecimal(0.4)).add(cadence.multiply(new BigDecimal(0.4))).add(integrity.multiply(new BigDecimal(0.2))).setScale(0, BigDecimal.ROUND_HALF_UP);
 
+
         } catch (UnsupportedAudioFileException e) {
             e.printStackTrace();
         } catch (IOException e) {

+ 133 - 10
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCourseHomeworkServiceImpl.java

@@ -5,15 +5,15 @@ import com.ym.mec.auth.api.entity.SysUser;
 import com.ym.mec.biz.dal.dao.*;
 import com.ym.mec.biz.dal.dto.*;
 import com.ym.mec.biz.dal.entity.*;
-import com.ym.mec.biz.dal.enums.GroupType;
-import com.ym.mec.biz.dal.enums.MessageTypeEnum;
-import com.ym.mec.biz.dal.enums.YesOrNoEnum;
+import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
+import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
 import com.ym.mec.biz.service.StudentCourseHomeworkService;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.biz.service.SysMessageService;
+import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.dal.BaseDAO;
 import com.ym.mec.common.exception.BizException;
 import com.ym.mec.common.page.PageInfo;
@@ -30,6 +30,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.math.BigDecimal;
 import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -37,8 +38,6 @@ import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.stream.Collectors;
 
-import com.ym.mec.biz.dal.entity.CourseSchedule.CourseScheduleType;
-
 @Service
 public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, StudentCourseHomework> implements StudentCourseHomeworkService {
 
@@ -71,9 +70,13 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     @Autowired
     private MusicGroupDao musicGroupDao;
     @Autowired
+    private StudentRegistrationDao studentRegistrationDao;
+    @Autowired
     private VipGroupDao vipGroupDao;
     @Autowired
     private PracticeGroupDao practiceGroupDao;
+    @Autowired
+    private ExtracurricularExercisesReplyDao extracurricularExercisesReplyDao;
 
     @Override
     public BaseDAO<Long, StudentCourseHomework> getDAO() {
@@ -277,11 +280,8 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
     }
 
     @Override
-    public List<StudentCourseHomework> findStudentCourseHomeworkByCourse(Long courseSchedule, String userName) {
-        if (Objects.isNull(courseSchedule)) {
-            throw new BizException("请指定课程");
-        }
-        return studentCourseHomeworkDao.findByCourseSchedule(courseSchedule, userName);
+    public List<StudentCourseHomework> findStudentCourseHomeworkByCourse(Long courseSchedule, Long homeworkId, String userName) {
+        return studentCourseHomeworkDao.findByCourseSchedule(courseSchedule, homeworkId, userName);
     }
 
     @Override
@@ -479,4 +479,127 @@ public class StudentCourseHomeworkServiceImpl extends BaseServiceImpl<Long, Stud
         pageInfo.setRows(dataList);
         return pageInfo;
     }
+
+    @Override
+    public PageInfo<EduHomeworkCardDto> getEduCourseHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo) {
+        PageInfo<EduHomeworkCardDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+
+        int count = studentCourseHomeworkDao.countEduCourseHomeworkList(params);
+        pageInfo.setTotal(count);
+        params.put("offset", pageInfo.getOffset());
+        List<EduHomeworkCardDto> dataList = studentCourseHomeworkDao.getEduCourseHomeworkList(params);
+
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public PageInfo<EduHomeworkStatDto> queryEduHomeworkStatList(StudentCourseHomeWorkQueryInfo queryInfo) {
+        PageInfo<EduHomeworkStatDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+        Map<String, Object> params = new HashMap<String, Object>();
+        MapUtil.populateMap(params, queryInfo);
+        params.put("musicGroupStatus", MusicGroupStatusEnum.PROGRESS.getCode());
+
+        int count = musicGroupDao.queryCount(params);
+        pageInfo.setTotal(count);
+        params.put("offset", pageInfo.getOffset());
+        List<MusicGroup> musicGroups = musicGroupDao.queryPage(params);
+
+        List<EduHomeworkStatDto> dataList = new ArrayList<>();
+        if(!CollectionUtils.isEmpty(musicGroups)){
+            List<String> groupIds = musicGroups.stream().map(MusicGroup::getId).collect(Collectors.toList());
+            List<StudentRegistration> studentRegistrations = studentRegistrationDao.findByMusicGroupIds(groupIds, StudentMusicGroupStatusEnum.NORMAL);
+            Map<String, Long> groupStudentNumMap = studentRegistrations.stream().collect(Collectors.groupingBy(StudentRegistration::getMusicGroupId, Collectors.counting()));
+
+            List<EduHomeworkCardDto> courseHomeworkStudentNumList = studentCourseHomeworkDao.countHomeworkStudentInfoWithMusicGroup(groupIds, queryInfo.getStartTime(), queryInfo.getEndTime());
+            List<EduHomeworkCardDto> homeworkStudentNumList = extracurricularExercisesReplyDao.countEduHomeworkStudentNumWithMusicGroup(groupIds, queryInfo.getStartTime(), queryInfo.getEndTime());
+            homeworkStudentNumList.addAll(courseHomeworkStudentNumList);
+            Map<String, List<EduHomeworkCardDto>> groupStudentListMap = homeworkStudentNumList.stream().collect(Collectors.groupingBy(EduHomeworkCardDto::getGroupId));
+            for (MusicGroup mg : musicGroups) {
+                EduHomeworkStatDto ehs = new EduHomeworkStatDto();
+                ehs.setGroupId(mg.getId());
+                ehs.setGroupName(mg.getName());
+                if(groupStudentNumMap.containsKey(mg.getId())){
+                    ehs.setGroupStudentNum(Math.toIntExact(groupStudentNumMap.get(mg.getId())));
+                }else{
+                    ehs.setGroupStudentNum(0);
+                }
+                int exceptStudentNum = 0;
+                int submitStudentNum = 0;
+                if(groupStudentListMap.containsKey(mg.getId())){
+                    List<EduHomeworkCardDto> eduHomeworkCardDtos = groupStudentListMap.get(mg.getId());
+                    for (EduHomeworkCardDto eduHomeworkCardDto : eduHomeworkCardDtos) {
+                        exceptStudentNum += eduHomeworkCardDto.getExceptStudentNum();
+                        submitStudentNum += eduHomeworkCardDto.getSubmitStudentNum();
+                    }
+                }
+                ehs.setExceptStudentNum(exceptStudentNum);
+                ehs.setSubmitStudentNum(submitStudentNum);
+                if(exceptStudentNum<=0){
+                    ehs.setSubmitRate(BigDecimal.ZERO);
+                }else{
+                    ehs.setSubmitRate(new BigDecimal(submitStudentNum).divide(new BigDecimal(exceptStudentNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+                }
+                dataList.add(ehs);
+            }
+        }
+
+        pageInfo.setRows(dataList);
+        return pageInfo;
+    }
+
+    @Override
+    public List<EduHomeworkStatDto> queryEduHomeworkStatDetail(StudentCourseHomeWorkQueryInfo queryInfo) {
+        List<EduHomeworkStatDto> dataList = new ArrayList<>();
+        MusicGroup musicGroup = musicGroupDao.get(queryInfo.getGroupId());
+        if(Objects.isNull(musicGroup)){
+            return dataList;
+        }
+        List<StudentRegistration> studentRegistrations = studentRegistrationDao.findByMusicGroupIds(Arrays.asList(queryInfo.getGroupId()), StudentMusicGroupStatusEnum.NORMAL);
+        Map<Integer, Long> subjectStudentNumMap = studentRegistrations.stream().collect(Collectors.groupingBy(StudentRegistration::getActualSubjectId, Collectors.counting()));
+
+        Map<Integer, Subject> idSubjectMap = new HashMap<>();
+        if(!CollectionUtils.isEmpty(subjectStudentNumMap)){
+            List<Subject> subjects = subjectDao.findBySubjectIds(new ArrayList<>(subjectStudentNumMap.keySet()));
+            idSubjectMap = subjects.stream().collect(Collectors.toMap(Subject::getId, s -> s, (s1, s2) -> s1));
+        }
+
+        List<EduHomeworkCardDto> courseHomeworkStudentNumList = studentCourseHomeworkDao.countHomeworkSubjectStudentInfoWithMusicGroup(queryInfo.getGroupId(), queryInfo.getStartTime(), queryInfo.getEndTime());
+        List<EduHomeworkCardDto> homeworkStudentNumList = extracurricularExercisesReplyDao.countEduHomeworkSubjectStudentNumWithMusicGroup(queryInfo.getGroupId(), queryInfo.getStartTime(), queryInfo.getEndTime());
+        homeworkStudentNumList.addAll(courseHomeworkStudentNumList);
+        Map<Integer, List<EduHomeworkCardDto>> subjectStudentListMap = homeworkStudentNumList.stream().collect(Collectors.groupingBy(EduHomeworkCardDto::getSubjectId));
+        for (Map.Entry<Integer, Long> subjectStudentNumEntry : subjectStudentNumMap.entrySet()) {
+            EduHomeworkStatDto ehs = new EduHomeworkStatDto();
+            if(idSubjectMap.containsKey(subjectStudentNumEntry.getKey())){
+                ehs.setSubjectName(idSubjectMap.get(subjectStudentNumEntry.getKey()).getName());
+            }
+            ehs.setGroupId(queryInfo.getGroupId());
+            ehs.setGroupName(musicGroup.getName());
+            if(subjectStudentNumMap.containsKey(subjectStudentNumEntry.getKey())){
+                ehs.setGroupStudentNum(Math.toIntExact(subjectStudentNumMap.get(subjectStudentNumEntry.getKey())));
+            }else{
+                ehs.setGroupStudentNum(0);
+            }
+            int exceptStudentNum = 0;
+            int submitStudentNum = 0;
+            if(subjectStudentListMap.containsKey(subjectStudentNumEntry.getKey())){
+                List<EduHomeworkCardDto> eduHomeworkCardDtos = subjectStudentListMap.get(subjectStudentNumEntry.getKey());
+                for (EduHomeworkCardDto eduHomeworkCardDto : eduHomeworkCardDtos) {
+                    exceptStudentNum += eduHomeworkCardDto.getExceptStudentNum();
+                    submitStudentNum += eduHomeworkCardDto.getSubmitStudentNum();
+                }
+            }
+            ehs.setExceptStudentNum(exceptStudentNum);
+            ehs.setSubmitStudentNum(submitStudentNum);
+            if(exceptStudentNum<=0){
+                ehs.setSubmitRate(BigDecimal.ZERO);
+            }else{
+                ehs.setSubmitRate(new BigDecimal(submitStudentNum).divide(new BigDecimal(exceptStudentNum), CommonConstants.DECIMAL_FINAL_PLACE, BigDecimal.ROUND_HALF_UP));
+            }
+            dataList.add(ehs);
+        }
+        return dataList;
+    }
 }

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

@@ -261,8 +261,8 @@
 
     <select id="findByRole" resultType="com.ym.mec.biz.dal.dto.SimpleUserDto">
         SELECT DISTINCT su.id_ userId,
-          su.real_name_ userName,
-          su.avatar_ avatar,
+            su.real_name_ userName,
+            su.avatar_ avatar,
             e.organ_id_list_ organIds
         FROM
             sys_user su

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

@@ -30,6 +30,7 @@
 		<result column="teacher_id_" property="teacherId"/>
 		<result column="teacher_name_" property="teacherName"/>
 		<result column="avatar_" property="headUrl"/>
+		<result column="phone_" property="phone"/>
 		<result column="title_" property="title"/>
 		<result column="content_" property="content"/>
 		<result column="expire_date_" property="expireDate"/>
@@ -171,7 +172,8 @@
 		SELECT
 			eer.*,
 			su.username_ student_name_,
-		    su.avatar_
+		    su.avatar_,
+		    su.phone_
 		FROM
 			extracurricular_exercises_reply eer
 			LEFT JOIN sys_user su ON su.id_ = eer.user_id_
@@ -511,4 +513,94 @@
 			</foreach>
 	</select>
 
+	<sql id="getEduHomeworkListCondition">
+		<where>
+			EXISTS (SELECT user_id_ FROM student_registration sr LEFT JOIN music_group mg ON mg.id_=sr.music_group_id_ WHERE sr.user_id_ = eer.user_id_ AND sr.music_group_status_='NORMAL' AND mg.status_ = 'PROGRESS' AND mg.transaction_teacher_id_=#{transactionTeacherId})
+			<if test="startTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &gt;= #{startTime}
+			</if>
+			<if test="endTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &lt;= #{endTime}
+			</if>
+		</where>
+	</sql>
+
+    <select id="getEduHomeworkList" resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+		SELECT
+			ee.id_ homeworkId,
+			su.real_name_ teacherName,
+			ee.create_time_ createTime,
+			COUNT( eer.user_id_ ) exceptStudentNum,
+			SUM( eer.status_ ) submitStudentNum,
+			SUM( eer.is_replied_ ) repliedStudentNum
+		FROM
+			extracurricular_exercises ee
+			LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_
+			LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
+		<include refid="getEduHomeworkListCondition" />
+		GROUP BY ee.id_
+		ORDER BY ee.create_time_ DESC
+		<include refid="global.limit"></include>
+	</select>
+
+	<select id="countEduHomeworkList" resultType="int">
+		SELECT
+			COUNT(DISTINCT ee.id_)
+		FROM
+		extracurricular_exercises ee
+		LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_
+		LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
+		<include refid="getEduHomeworkListCondition" />
+	</select>
+	<select id="countEduHomeworkStudentNumWithMusicGroup"
+			resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+		SELECT
+			sr.music_group_id_ groupId,
+			COUNT( eer.user_id_ ) exceptStudentNum,
+			SUM( eer.status_ ) submitStudentNum,
+			SUM( eer.is_replied_ ) repliedStudentNum
+		FROM
+			extracurricular_exercises ee
+			LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_
+			LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
+			LEFT JOIN student_registration sr ON eer.user_id_ = sr.user_id_
+		WHERE sr.music_group_status_='NORMAL'
+			<if test="groupIds!=null and groupIds.size()>0">
+				AND sr.music_group_id_ IN
+				<foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
+					#{groupId}
+				</foreach>
+			</if>
+			<if test="startTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &gt;= #{startTime}
+			</if>
+			<if test="endTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &lt;= #{endTime}
+			</if>
+		GROUP BY sr.music_group_id_
+	</select>
+
+	<select id="countEduHomeworkSubjectStudentNumWithMusicGroup"
+			resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+		SELECT
+		sr.actual_subject_id_ subjectId,
+		COUNT( eer.user_id_ ) exceptStudentNum,
+		SUM( eer.status_ ) submitStudentNum,
+		SUM( eer.is_replied_ ) repliedStudentNum
+		FROM
+		extracurricular_exercises ee
+		LEFT JOIN sys_user su ON ee.teacher_id_ = su.id_
+		LEFT JOIN extracurricular_exercises_reply eer ON ee.id_ = eer.extracurricular_exercises_id_
+		LEFT JOIN student_registration sr ON eer.user_id_ = sr.user_id_
+		WHERE sr.music_group_status_='NORMAL'
+			AND sr.music_group_id_ = #{groupId}
+			<if test="startTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &gt;= #{startTime}
+			</if>
+			<if test="endTime!=null">
+				AND DATE_FORMAT(ee.create_time_, "%Y-%m-%d") &lt;= #{endTime}
+			</if>
+		GROUP BY sr.actual_subject_id_
+	</select>
+
 </mapper>

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

@@ -12,6 +12,7 @@
         <result column="pre_apply_expire_date_" property="preApplyExpireDate"/>
         <result column="team_teacher_id_" property="teamTeacherId"/>
         <result column="educational_teacher_id_" property="educationalTeacherId"/>
+        <result column="transaction_teacher_id_" property="transactionTeacherId"/>
         <result column="charge_type_id_" property="chargeTypeId"/>
         <result column="course_form_" property="courseForm"/>
         <result column="create_time_" property="createTime"/>
@@ -73,7 +74,7 @@
          bill_start_date_, improvent_classes_num_, enroll_classes_, payment_expire_date_, is_extra_class_,
          settlement_type_, cooperation_organ_id_, enlightenment_course_time_,
          parent_meeting_time_, img_, director_user_id_, is_classroom_lessons_, memo_, expect_start_group_date_,
-         ownership_type_, repair_user_id_, del_flag_,payment_valid_start_date_,payment_valid_end_date_,payment_pattern_,course_view_type_)
+         ownership_type_, repair_user_id_, del_flag_,payment_valid_start_date_,payment_valid_end_date_,payment_pattern_,course_view_type_,transaction_teacher_id_)
         VALUES (#{id}, #{name}, #{organId}, #{schoolId}, #{applyExpireDate},#{preApplyExpireDate}, #{teamTeacherId}, #{educationalTeacherId},
                 #{chargeTypeId}, #{courseForm}, now(), now(),
                 #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{billStartDate},
@@ -83,7 +84,8 @@
                 #{cooperationOrganId}, #{enlightenmentCourseTime}, #{parentMeetingTime}, #{img}, #{directorUserId},
                 #{isClassroomLessons}, #{memo}, #{expectStartGroupDate},
                 #{ownershipType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}, #{repairUserId},
-                #{delFlag},#{paymentValidStartDate},#{paymentValidEndDate},#{paymentPattern},#{courseViewType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler})
+                #{delFlag},#{paymentValidStartDate},#{paymentValidEndDate},#{paymentPattern},
+                #{courseViewType,typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},#{transactionTeacherId})
     </insert>
 
     <!-- 根据主键查询一条记录 -->
@@ -104,6 +106,7 @@
                 status_ = #{status, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler},
             </if>
             repair_user_id_ = #{repairUserId},
+            transaction_teacher_id_ = #{transactionTeacherId},
             <if test="organId != null">
                 organ_id_ = #{organId},
             </if>
@@ -199,7 +202,7 @@
     <select id="queryPage" resultMap="MusicGroup" parameterType="map">
         SELECT * FROM music_group
         <include refid="musicGroupQueryPageSql"/>
-        ORDER BY create_time_ DESC
+        ORDER BY create_time_ DESC,id_
         <include refid="global.limit"/>
     </select>
 
@@ -221,6 +224,9 @@
             <if test="musicGroupId != null">
                 AND FIND_IN_SET(id_,#{musicGroupId})
             </if>
+            <if test="transactionTeacherId!=null">
+                AND transaction_teacher_id_ = #{transactionTeacherId}
+            </if>
             <if test="musicGroupIds!=null and musicGroupIds.size()>0">
                 AND id_ IN
                 <foreach collection="musicGroupIds" item="musicGroupId" open="(" close=")" separator=",">

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

@@ -258,12 +258,18 @@
         SELECT
         sch.*,
         su.username_,
-        su.avatar_
+        su.avatar_,
+        su.phone_
         FROM
         student_course_homework sch
         LEFT JOIN sys_user su ON sch.user_id_=su.id_
         <where>
-            sch.course_schedule_id_=#{courseScheduleId}
+            <if test="courseScheduleId!=null">
+                AND sch.course_schedule_id_=#{courseScheduleId}
+            </if>
+            <if test="homeworkId!=null">
+                AND sch.course_homework_id_=#{homeworkId}
+            </if>
             <if test="userName!=null and userName!=''">
                 AND su.username_ LIKE CONCAT('%',#{userName},'%')
             </if>
@@ -480,6 +486,107 @@
         <include refid="homeWorkCondition"/>
     </select>
 
+    <sql id="getEduCourseHomeworkListCondition">
+        <where>
+            mg.transaction_teacher_id_ = #{transactionTeacherId}
+            AND mg.status_ = "PROGRESS"
+            AND sr.music_group_status_='NORMAL'
+            <if test="startTime!=null">
+                AND cs.class_date_ &gt;= #{startTime}
+            </if>
+            <if test="endTime!=null">
+                AND cs.class_date_ &lt;= #{endTime}
+            </if>
+        </where>
+    </sql>
+
+    <select id="getEduCourseHomeworkList" resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+        SELECT
+            ch.id_ homeworkId,
+            cs.id_ courseId,
+            cs.name_ courseName,
+            CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) courseStartTime,
+            cs.actual_teacher_id_ teacherId,
+            su.real_name_ teacherName,
+            COUNT( sch.user_id_ ) exceptStudentNum,
+            SUM( sch.status_ ) submitStudentNum,
+            SUM( sch.is_replied_ ) repliedStudentNum
+        FROM
+            course_homework ch
+            LEFT JOIN music_group mg ON mg.id_ = ch.music_group_id_
+            LEFT JOIN course_schedule cs ON ch.course_schedule_id_ = cs.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+            LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+            LEFT JOIN student_registration sr ON sch.user_id_=sr.user_id_ AND ch.music_group_id_=sr.music_group_id_
+        <include refid="getEduCourseHomeworkListCondition" />
+        GROUP BY ch.id_
+        ORDER BY courseStartTime DESC
+        <include refid="global.limit"></include>
+    </select>
+
+    <select id="countEduCourseHomeworkList" resultType="int">
+        SELECT
+            COUNT(cs.id_)
+        FROM
+            course_homework ch
+            LEFT JOIN music_group mg ON mg.id_ = ch.music_group_id_
+            LEFT JOIN course_schedule cs ON ch.course_schedule_id_ = cs.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+            LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+            LEFT JOIN student_registration sr ON sch.user_id_=sr.user_id_ AND ch.music_group_id_=sr.music_group_id_
+        <include refid="getEduCourseHomeworkListCondition" />
+    </select>
+
+    <select id="countHomeworkStudentInfoWithMusicGroup" resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+        SELECT
+            ch.music_group_id_ groupId,
+            COUNT( sch.user_id_ ) exceptStudentNum,
+            SUM( sch.status_ ) submitStudentNum,
+            SUM( sch.is_replied_ ) repliedStudentNum
+        FROM
+            course_homework ch
+                LEFT JOIN course_schedule cs ON ch.course_schedule_id_ = cs.id_
+                LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+                LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+                LEFT JOIN student_registration sr ON sch.user_id_=sr.user_id_ AND ch.music_group_id_=sr.music_group_id_
+        WHERE sr.music_group_status_='NORMAL'
+            <if test="groupIds!=null and groupIds.size()>0">
+                AND ch.music_group_id_ IN
+                <foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
+                    #{groupId}
+                </foreach>
+            </if>
+            <if test="startTime!=null">
+                AND cs.class_date_ &gt;= #{startTime}
+            </if>
+            <if test="endTime!=null">
+                AND cs.class_date_ &lt;= #{endTime}
+            </if>
+        GROUP BY ch.music_group_id_
+    </select>
+
+    <select id="countHomeworkSubjectStudentInfoWithMusicGroup" resultType="com.ym.mec.biz.dal.dto.EduHomeworkCardDto">
+        SELECT
+            sr.actual_subject_id_ subjectId,
+            COUNT( sch.user_id_ ) exceptStudentNum,
+            SUM( sch.status_ ) submitStudentNum,
+            SUM( sch.is_replied_ ) repliedStudentNum
+        FROM course_homework ch
+            LEFT JOIN course_schedule cs ON ch.course_schedule_id_ = cs.id_
+            LEFT JOIN sys_user su ON cs.actual_teacher_id_ = su.id_
+            LEFT JOIN student_course_homework sch ON ch.id_ = sch.course_homework_id_
+            LEFT JOIN student_registration sr ON sch.user_id_=sr.user_id_ AND ch.music_group_id_=sr.music_group_id_
+        WHERE sr.music_group_status_='NORMAL'
+            AND ch.music_group_id_ = #{groupId}
+            <if test="startTime!=null">
+                AND cs.class_date_ &gt;= #{startTime}
+            </if>
+            <if test="endTime!=null">
+                AND cs.class_date_ &lt;= #{endTime}
+            </if>
+        GROUP BY sr.actual_subject_id_
+    </select>
+
     <sql id="homeWorkCondition">
         <where>
             <if test="userId!=null">

+ 10 - 0
mec-biz/src/main/resources/config/mybatis/StudentRegistrationMapper.xml

@@ -986,6 +986,16 @@
         </foreach>
         LIMIT 1
     </select>
+    <select id="findByMusicGroupIds" resultMap="StudentRegistration">
+        SELECT * FROM student_registration
+        WHERE music_group_id_ IN
+        <foreach collection="groupIds" item="groupId" open="(" close=")" separator=",">
+            #{groupId}
+        </foreach>
+        <if test="musicGroupStatus!=null">
+            AND music_group_status_=#{musicGroupStatus, typeHandler=com.ym.mec.common.dal.CustomEnumTypeHandler}
+        </if>
+    </select>
 
     <update id="quitAllStudent">
         UPDATE student_registration SET music_group_status_ = 'QUIT',remark_=#{remark} WHERE music_group_id_ = #{musicGroupId}

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

@@ -13,6 +13,7 @@ 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;
+import com.ym.mec.common.exception.BizException;
 import com.yonge.log.model.AuditLogAnnotation;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -64,14 +65,20 @@ public class CourseHomeworkController extends BaseController {
     @ApiOperation(value = "根据课程计划获取需要交作业的学生")
     @GetMapping("/findCourseStudents")
     public Object findCourseStudents(Long courseScheduleId,String userName){
-        return succeed(studentCourseHomeworkService.findStudentCourseHomeworkByCourse(courseScheduleId,userName));
+        if (Objects.isNull(courseScheduleId)) {
+            throw new BizException("请指定课程");
+        }
+        return succeed(studentCourseHomeworkService.findStudentCourseHomeworkByCourse(courseScheduleId, null,userName));
     }
 
     @ApiOperation(value = "根据课程计划获取需要交作业的学生-公用")
     @GetMapping("/findCourseStudentsPublic")
     public Object findCourseStudentsPublic(Long courseScheduleId,String userName, boolean extra){
         if(!extra){
-            return succeed(studentCourseHomeworkService.findStudentCourseHomeworkByCourse(courseScheduleId,userName));
+            if (Objects.isNull(courseScheduleId)) {
+                throw new BizException("请指定课程");
+            }
+            return succeed(studentCourseHomeworkService.findStudentCourseHomeworkByCourse(courseScheduleId, null,userName));
         }else{
             return succeed(extracurricularExercisesReplyService.findExtraExerciseStudents(courseScheduleId,userName));
         }

+ 12 - 7
mec-web/src/main/java/com/ym/mec/web/controller/EmployeeController.java

@@ -21,10 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
-import java.util.Arrays;
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 
 /**
  * @Author Joburgess
@@ -189,11 +186,19 @@ public class EmployeeController extends BaseController {
         }else{
             organIds = organId.toString();
         }
-        if(employeeRole == EmployeeRoleEnum.TEAM_TEACHER){
-            return succeed(employeeService.findByRole("5",organIds));
+        HashMap<String, Object> map = new HashMap<>();
+        if(employeeRole == null){
+            map.put("TEAM_TEACHER",employeeService.findByRole("5",organIds));
+            map.put("TRANSACTION",employeeService.findByRole("58",organIds));
+            map.put("EDUCATION",employeeService.findByRole("4",organIds));
+        }else if(employeeRole == EmployeeRoleEnum.TEAM_TEACHER){
+            map.put("TEAM_TEACHER",employeeService.findByRole("5",organIds));
+        }else if(employeeRole == EmployeeRoleEnum.TRANSACTION){
+            map.put("TRANSACTION",employeeService.findByRole("58",organIds));
         }else {
-            return succeed(employeeService.findByRole("4",organIds));
+            map.put("EDUCATION",employeeService.findByRole("4",organIds));
         }
+        return succeed(map);
     }
 
     @ApiOperation(value = "获取教务老师")

+ 82 - 0
mec-web/src/main/java/com/ym/mec/web/controller/education/CourseHomeworkController.java

@@ -1,5 +1,14 @@
 package com.ym.mec.web.controller.education;
 
+import com.ym.mec.auth.api.client.SysUserFeignService;
+import com.ym.mec.auth.api.entity.SysUser;
+import com.ym.mec.biz.dal.entity.CourseHomework;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercises;
+import com.ym.mec.biz.dal.page.StudentCourseHomeWorkQueryInfo;
+import com.ym.mec.biz.service.ExtracurricularExercisesReplyService;
+import com.ym.mec.biz.service.ExtracurricularExercisesService;
+import com.ym.mec.biz.service.StudentCourseHomeworkService;
+import com.ym.mec.common.entity.HttpResponseResult;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 
@@ -14,6 +23,10 @@ import com.ym.mec.biz.dal.page.CourseHomeworkQueryInfo;
 import com.ym.mec.biz.service.CourseHomeworkService;
 import com.ym.mec.common.controller.BaseController;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
 /**
  * @Author Joburgess
  * @Date 2019/9/18
@@ -25,6 +38,14 @@ public class CourseHomeworkController extends BaseController {
 
     @Autowired
     private CourseHomeworkService courseHomeworkService;
+    @Autowired
+    private StudentCourseHomeworkService studentCourseHomeworkService;
+    @Autowired
+    private SysUserFeignService sysUserFeignService;
+    @Autowired
+    private ExtracurricularExercisesService extracurricularExercisesService;
+    @Autowired
+    private ExtracurricularExercisesReplyService extracurricularExercisesReplyService;
 
     @ApiOperation(value = "分页查询作业列表")
     @GetMapping(value = "/queryPage")
@@ -32,4 +53,65 @@ public class CourseHomeworkController extends BaseController {
         return succeed(courseHomeworkService.queryPage(queryInfo));
     }
 
+    @ApiOperation(value = "作业列表")
+    @GetMapping(value = "getEduCourseHomeworkList")
+    public HttpResponseResult getEduCourseHomeworkList(StudentCourseHomeWorkQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setTeacherId(sysUser.getId());
+        queryInfo.setTransactionTeacherId(sysUser.getId());
+        if(!queryInfo.getExtra()){
+            return succeed(studentCourseHomeworkService.getEduCourseHomeworkList(queryInfo));
+        }else{
+            return succeed(extracurricularExercisesReplyService.getEduHomeworkList(queryInfo));
+        }
+    }
+
+    @ApiOperation(value = "根据课程计划获取需要交作业的学生-公用")
+    @GetMapping("/findHomeworkStudents")
+    public HttpResponseResult findHomeworkStudents(Long homeworkId,String userName, boolean extra){
+        if(Objects.isNull(extra)){
+            extra = false;
+        }
+        Map<String, Object> result = new HashMap<>();
+        result.put("content", "");
+        if(!extra){
+            CourseHomework courseHomework = courseHomeworkService.get(homeworkId);
+            if(Objects.nonNull(courseHomework)){
+                result.put("content", courseHomework.getContent());
+            }
+            result.put("data", studentCourseHomeworkService.findStudentCourseHomeworkByCourse(null, homeworkId,userName));
+        }else{
+            ExtracurricularExercises extracurricularExercises = extracurricularExercisesService.get(homeworkId);
+            if(Objects.nonNull(extracurricularExercises)){
+                result.put("content", extracurricularExercises.getContent());
+            }
+            result.put("data", extracurricularExercisesReplyService.findExtraExerciseStudents(homeworkId,userName));
+        }
+        return succeed(result);
+    }
+
+    @ApiOperation(value = "作业统计")
+    @GetMapping("/queryEduHomeworkStatList")
+    public HttpResponseResult queryEduHomeworkStatList(StudentCourseHomeWorkQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setTransactionTeacherId(sysUser.getId());
+        return succeed(studentCourseHomeworkService.queryEduHomeworkStatList(queryInfo));
+    }
+
+    @ApiOperation(value = "作业统计详情")
+    @GetMapping("/queryEduHomeworkStatDetail")
+    public HttpResponseResult queryEduHomeworkStatDetail(StudentCourseHomeWorkQueryInfo queryInfo){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        if (sysUser == null) {
+            return failed("用户信息获取失败");
+        }
+        queryInfo.setTransactionTeacherId(sysUser.getId());
+        return succeed(studentCourseHomeworkService.queryEduHomeworkStatDetail(queryInfo));
+    }
 }