Browse Source

1、提交作业添加限制;
2、服务指标;

Joburgess 5 years ago
parent
commit
3b8702d2c8

+ 12 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/ExtracurricularExercisesReplyDao.java

@@ -97,6 +97,16 @@ public interface ExtracurricularExercisesReplyDao extends BaseDAO<Long, Extracur
     List<StudentServiceDetailDto> findStudentHomeworkDetailsInTimeZone(Map<String, Object> params);
     int countStudentHomeworkDetailsInTimeZone(Map<String, Object> params);
 
-
-	
+    /**
+     * @describe 获取在指定时间段内指定学员的课外训练
+     * @author Joburgess
+     * @date 2020.05.27
+     * @param startDate:
+     * @param endDate:
+     * @param studentIds:
+     * @return java.util.List<com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply>
+     */
+	List<ExtracurricularExercisesReply> getStudentExercisesWithTimeZone(@Param("startDate") String startDate,
+                                                                        @Param("endDate") String endDate,
+                                                                        @Param("studentIds") List<Integer> studentIds);
 }

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

@@ -3,6 +3,7 @@ package com.ym.mec.biz.dal.dao;
 import com.ym.mec.biz.dal.dto.CourseHomeworkStudentDetailDto;
 import com.ym.mec.biz.dal.dto.StudentCourseHomeworkDto;
 import com.ym.mec.biz.dal.dto.StudentHomeworkRecordDto;
+import com.ym.mec.biz.dal.dto.StudentServeCourseHomeworkDto;
 import com.ym.mec.biz.dal.entity.StudentCourseHomework;
 import com.ym.mec.common.dal.BaseDAO;
 import org.apache.ibatis.annotations.Param;
@@ -108,4 +109,16 @@ public interface StudentCourseHomeworkDao extends BaseDAO<Long, StudentCourseHom
 
     int countStudentHomeworkRecord(Map<String, Object> params);
     List<StudentHomeworkRecordDto> findStudentHomeworkRecord(Map<String, Object> params);
+
+    /**
+     * @describe 根据上课时间区间获取学员课堂作业
+     * @author Joburgess
+     * @date 2020.05.27
+     * @param startDate:
+     * @param endDate:
+     * @return java.util.List<com.ym.mec.biz.dal.dto.StudentServeCourseHomeworkDto>
+     */
+    List<StudentServeCourseHomeworkDto> findStudentHomeworkWithCourseDateRange(@Param("startDate") String startDate,
+                                                                               @Param("endDate") String endDate,
+                                                                               @Param("studentIds") List<Integer> studentIds);
 }

+ 32 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentServeCourseHomeworkDto.java

@@ -0,0 +1,32 @@
+package com.ym.mec.biz.dal.dto;
+
+import com.ym.mec.biz.dal.entity.StudentCourseHomework;
+
+import java.util.Date;
+
+/**
+ * @Author Joburgess
+ * @Date 2020.05.27
+ */
+public class StudentServeCourseHomeworkDto extends StudentCourseHomework {
+
+    private Date courseStartTime;
+
+    private Date homeworkCreateTime;
+
+    public Date getHomeworkCreateTime() {
+        return homeworkCreateTime;
+    }
+
+    public void setHomeworkCreateTime(Date homeworkCreateTime) {
+        this.homeworkCreateTime = homeworkCreateTime;
+    }
+
+    public Date getCourseStartTime() {
+        return courseStartTime;
+    }
+
+    public void setCourseStartTime(Date courseStartTime) {
+        this.courseStartTime = courseStartTime;
+    }
+}

+ 13 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/StudentExtracurricularExercisesSituation.java

@@ -2,6 +2,8 @@ package com.ym.mec.biz.dal.entity;
 
 import org.apache.commons.lang3.builder.ToStringBuilder;
 
+import java.util.Date;
+
 /**
  * 对应数据库表(student_extracurricular_exercises_situation_):
  */
@@ -45,7 +47,17 @@ public class StudentExtracurricularExercisesSituation {
 	
 	/**  */
 	private java.util.Date updateTime;
-	
+
+	private Date lastSubmitTime;
+
+	public Date getLastSubmitTime() {
+		return lastSubmitTime;
+	}
+
+	public void setLastSubmitTime(Date lastSubmitTime) {
+		this.lastSubmitTime = lastSubmitTime;
+	}
+
 	public void setId(Long id){
 		this.id = id;
 	}

+ 113 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentServeServiceImpl.java

@@ -1,11 +1,19 @@
 package com.ym.mec.biz.service.impl;
 
+import com.ym.mec.biz.dal.dao.ExtracurricularExercisesReplyDao;
+import com.ym.mec.biz.dal.dao.StudentCourseHomeworkDao;
 import com.ym.mec.biz.dal.dao.StudentDao;
 import com.ym.mec.biz.dal.dao.StudentExtracurricularExercisesSituationDao;
+import com.ym.mec.biz.dal.dto.StudentServeCourseHomeworkDto;
 import com.ym.mec.biz.dal.dto.StudentServeDto;
+import com.ym.mec.biz.dal.dto.StudentServiceHomeworkDto;
+import com.ym.mec.biz.dal.entity.ExtracurricularExercisesReply;
 import com.ym.mec.biz.dal.entity.Student;
+import com.ym.mec.biz.dal.entity.StudentExtracurricularExercisesSituation;
+import com.ym.mec.biz.dal.enums.YesOrNoEnum;
 import com.ym.mec.biz.service.StudentServeService;
 import com.ym.mec.util.date.DateUtil;
+import org.apache.commons.lang3.ArrayUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -15,6 +23,7 @@ import java.time.DayOfWeek;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Author Joburgess
@@ -26,6 +35,10 @@ public class StudentServeServiceImpl implements StudentServeService {
     @Autowired
     private StudentDao studentDao;
     @Autowired
+    private StudentCourseHomeworkDao studentCourseHomeworkDao;
+    @Autowired
+    private ExtracurricularExercisesReplyDao extracurricularExercisesReplyDao;
+    @Autowired
     private StudentExtracurricularExercisesSituationDao studentExtracurricularExercisesSituationDao;
 
     @Override
@@ -51,12 +64,15 @@ public class StudentServeServiceImpl implements StudentServeService {
             return;
         }
 
+        //本周不服务学员列表
+        Set<Integer> dontServeInCurrentWeekStudentIds=new HashSet<>();
         //本周有课学员编号集合
         Set<Integer> haveClassStudentIds=new HashSet<>();
         //本周无课学员编号集合
         Set<Integer> noClassStudentIds=new HashSet<>();
         for (StudentServeDto serviceStudent : serviceStudents) {
             if(Objects.nonNull(serviceStudent.getCourseStartTime())&&serviceStudent.getCourseStartTime().after(nextMonday)){
+                dontServeInCurrentWeekStudentIds.add(serviceStudent.getUserId());
                 continue;
             }
             if(Objects.nonNull(serviceStudent.getCourseStartTime())){
@@ -66,5 +82,102 @@ public class StudentServeServiceImpl implements StudentServeService {
             }
         }
 
+        Map<Integer, List<StudentServeCourseHomeworkDto>> studentHomeworkMap=new HashMap<>();
+        Map<Integer, List<ExtracurricularExercisesReply>> studentExercisesMap=new HashMap<>();
+
+        if (!CollectionUtils.isEmpty(haveClassStudentIds)){
+            List<StudentServeCourseHomeworkDto> studentHomeworks = studentCourseHomeworkDao.findStudentHomeworkWithCourseDateRange(monDayDate.toString(), sunDayDate.toString(), new ArrayList<>(haveClassStudentIds));
+            studentHomeworkMap = studentHomeworks.stream().filter(h -> DateUtil.daysBetween(h.getCourseStartTime(), h.getHomeworkCreateTime())<3).collect(Collectors.groupingBy(StudentServeCourseHomeworkDto::getUserId));
+        }
+
+        if(!CollectionUtils.isEmpty(noClassStudentIds)){
+            List<ExtracurricularExercisesReply> studentExercises = extracurricularExercisesReplyDao.getStudentExercisesWithTimeZone(monDayDate.toString(), sunDayDate.toString(), new ArrayList<>(noClassStudentIds));
+            studentExercisesMap = studentExercises.stream().collect(Collectors.groupingBy(ExtracurricularExercisesReply::getUserId));
+        }
+
+        List<StudentExtracurricularExercisesSituation> results=new ArrayList<>();
+        for (StudentServeDto serviceStudent : serviceStudents) {
+
+            if(dontServeInCurrentWeekStudentIds.contains(serviceStudent.getUserId())){
+                continue;
+            }
+
+            StudentExtracurricularExercisesSituation studentExtracurricularExercisesSituation=new StudentExtracurricularExercisesSituation();
+            studentExtracurricularExercisesSituation.setStudentId(serviceStudent.getUserId());
+            studentExtracurricularExercisesSituation.setTeacherId(serviceStudent.getTeacherId());
+            studentExtracurricularExercisesSituation.setExpectExercisesNum(1);
+            studentExtracurricularExercisesSituation.setWeekOfYear(nowDate.get(DateUtil.weekFields.weekOfYear()));
+            studentExtracurricularExercisesSituation.setMonday(DateUtil.stringToDate(monDayDate.toString(), "yyyy-MM-dd"));
+            studentExtracurricularExercisesSituation.setSunday(DateUtil.stringToDate(sunDayDate.toString(), "yyyy-MM-dd"));
+
+            if(haveClassStudentIds.contains(serviceStudent.getUserId())){
+                List<StudentServeCourseHomeworkDto> studentHomeworks = studentHomeworkMap.get(serviceStudent.getUserId());
+                if(CollectionUtils.isEmpty(studentHomeworks)){
+                    studentExtracurricularExercisesSituation.setActualExercisesNum(0);
+                    studentExtracurricularExercisesSituation.setExercisesReplyNum(0);
+                    studentExtracurricularExercisesSituation.setExercisesMessageNum(0);
+                    studentExtracurricularExercisesSituation.setExercisesMessageTimelyNum(0);
+                    results.add(studentExtracurricularExercisesSituation);
+                    continue;
+                }else{
+                    studentExtracurricularExercisesSituation.setActualExercisesNum(1);
+                    long replyNum = studentHomeworks.stream().filter(e -> YesOrNoEnum.YES.equals(e.getStatus())).count();
+                    Date lastSubmitTime = studentHomeworks.stream().max(Comparator.comparing(StudentServeCourseHomeworkDto::getSubmitTime)).get().getSubmitTime();
+                    studentExtracurricularExercisesSituation.setLastSubmitTime(lastSubmitTime);
+                    studentExtracurricularExercisesSituation.setExercisesReplyNum(replyNum>0?1:0);
+                    int exercisesMessageNum=0;
+                    int exercisesMessageTimelyNum=0;
+                    for (StudentServeCourseHomeworkDto studentHomework : studentHomeworks) {
+                        if(!new Integer(1).equals(studentHomework.getStatus())){
+                            continue;
+                        }
+                        if(!new Integer(1).equals(studentHomework.getIsReplied())){
+                            continue;
+                        }
+                        exercisesMessageNum+=1;
+                        if(new Integer(1).equals(studentHomework.getIsRepliedTimely())){
+                            exercisesMessageTimelyNum+=1;
+                        }
+                    }
+                    studentExtracurricularExercisesSituation.setExercisesMessageNum(exercisesMessageNum>0?1:0);
+                    studentExtracurricularExercisesSituation.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
+                    results.add(studentExtracurricularExercisesSituation);
+                }
+            }
+
+            if(noClassStudentIds.contains(serviceStudent.getUserId())){
+                List<ExtracurricularExercisesReply> studentExercises = studentExercisesMap.get(serviceStudent.getUserId());
+                if(CollectionUtils.isEmpty(studentExercises)){
+                    studentExtracurricularExercisesSituation.setActualExercisesNum(0);
+                    studentExtracurricularExercisesSituation.setExercisesReplyNum(0);
+                    studentExtracurricularExercisesSituation.setExercisesMessageNum(0);
+                    studentExtracurricularExercisesSituation.setExercisesMessageTimelyNum(0);
+                    results.add(studentExtracurricularExercisesSituation);
+                    continue;
+                }
+                studentExtracurricularExercisesSituation.setActualExercisesNum(1);
+                long replyNum = studentExercises.stream().filter(e -> e.getStatus()==1).count();
+                Date lastSubmitTime = studentExercises.stream().max(Comparator.comparing(ExtracurricularExercisesReply::getSubmitTime)).get().getSubmitTime();
+                studentExtracurricularExercisesSituation.setLastSubmitTime(lastSubmitTime);
+                studentExtracurricularExercisesSituation.setExercisesReplyNum(replyNum>0?1:0);
+                int exercisesMessageNum=0;
+                int exercisesMessageTimelyNum=0;
+                for (ExtracurricularExercisesReply studentHomework : studentExercises) {
+                    if(!new Integer(1).equals(studentHomework.getStatus())){
+                        continue;
+                    }
+                    if(!new Integer(1).equals(studentHomework.getIsReplied())){
+                        continue;
+                    }
+                    exercisesMessageNum+=1;
+                    if(new Integer(1).equals(studentHomework.getIsRepliedTimely())){
+                        exercisesMessageTimelyNum+=1;
+                    }
+                }
+                studentExtracurricularExercisesSituation.setExercisesMessageNum(exercisesMessageNum>0?1:0);
+                studentExtracurricularExercisesSituation.setExercisesMessageTimelyNum(exercisesMessageTimelyNum>0?1:0);
+                results.add(studentExtracurricularExercisesSituation);
+            }
+        }
     }
 }

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

@@ -475,5 +475,18 @@
 				sch.user_id_=#{studentId} AND DATE_FORMAT( sch.create_time_, '%Y-%m-%d' ) BETWEEN #{monday} AND #{sunday})
 		) t
 	</select>
+	<select id="getStudentExercisesWithTimeZone" resultMap="ExtracurricularExercisesReply">
+		SELECT
+			eer.id_,
+			eer.user_id_,
+			eer.status_,
+			eer.submit_time_,
+			eer.is_replied_,
+			eer.is_replied_timely_
+		FROM
+			extracurricular_exercises_reply eer
+		WHERE
+			DATE_FORMAT( eer.create_time_, '%Y-%m-%d' ) BETWEEN #{startDate} AND #{endDate}
+	</select>
 
 </mapper>

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

@@ -345,6 +345,26 @@
         </foreach>
     </select>
 
+    <resultMap id="StudentServeCourseHomeworkDto" type="com.ym.mec.biz.dal.dto.StudentServeCourseHomeworkDto" extends="StudentCourseHomework">
+        <result property="courseStartTime" column="course_start_time_"/>
+        <result property="homeworkCreateTime" column="homework_create_time_"/>
+    </resultMap>
+    <select id="findStudentHomeworkWithCourseDateRange" resultMap="StudentServeCourseHomeworkDto">
+        SELECT
+            sch.*,
+            DATE_FORMAT(sch.create_time_, '%Y-%m-%d') homework_create_time_,
+            cs.class_date_
+        FROM
+            student_course_homework sch
+            LEFT JOIN course_schedule cs ON sch.course_schedule_id_ = cs.id_
+        WHERE
+            cs.class_date_ BETWEEN #{startDate} AND #{endDate}
+            AND sch.user_id_ IN
+            <foreach collection="studentIds" item="studentId" separator="," open="(" close=")">
+                #{studentId}
+            </foreach>
+    </select>
+
     <delete id="delByCourseScheduleId">
 		DELETE FROM student_course_homework WHERE course_schedule_id_ = #{courseScheduleId} 
 	</delete>

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

@@ -334,7 +334,7 @@
     <resultMap id="StudentServeDto" type="com.ym.mec.biz.dal.dto.StudentServeDto" extends="Student">
             <result property="courseStartTime" column="course_start_time_"/>
     </resultMap>
-    <select id="getBeServiceStudents">
+    <select id="getBeServiceStudents" resultMap="StudentServeDto">
         SELECT
             s.*,
             MIN( CONCAT( cs.class_date_, ' ', cs.start_class_time_ ) ) course_start_time_