Jelajahi Sumber

管乐迷迭代

zouxuan 3 tahun lalu
induk
melakukan
78175ed3d3

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/CourseScheduleStudentPaymentDao.java

@@ -578,4 +578,6 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     * @date 2021/11/5 11:54 
     */
     List<StudentVipPracticeExportDto> exportStudentVipPractice(@Param("organId") String organId);
+
+    List<BaseNameDto> queryLastOverTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
 }

+ 33 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/BaseNameDto.java

@@ -0,0 +1,33 @@
+package com.ym.mec.biz.dal.dto;
+
+public class BaseNameDto {
+    private Integer userId;
+
+    private Integer teacherId;
+
+    private String teacherName;
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    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;
+    }
+}

+ 36 - 36
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/StudentVipPracticeExportDto.java

@@ -9,9 +9,9 @@ public class StudentVipPracticeExportDto{
 
     private Integer vipNotStartNum;
 
-    private String vipOverTeacherIds;
+    private Integer vipOverTeacherId;
 
-    private String vipOverTeacherNames;
+    private String vipOverTeacherName;
 
     private String vipNotStartTeacherIds;
 
@@ -21,9 +21,9 @@ public class StudentVipPracticeExportDto{
 
     private Integer practiceNotStartNum;
 
-    private String practiceOverTeacherIds;
+    private Integer practiceOverTeacherId;
 
-    private String practiceOverTeacherNames;
+    private String practiceOverTeacherName;
 
     private String practiceNotStartTeacherIds;
 
@@ -43,22 +43,6 @@ public class StudentVipPracticeExportDto{
         this.organName = organName;
     }
 
-    public String getVipOverTeacherIds() {
-        return vipOverTeacherIds;
-    }
-
-    public void setVipOverTeacherIds(String vipOverTeacherIds) {
-        this.vipOverTeacherIds = vipOverTeacherIds;
-    }
-
-    public String getVipOverTeacherNames() {
-        return vipOverTeacherNames;
-    }
-
-    public void setVipOverTeacherNames(String vipOverTeacherNames) {
-        this.vipOverTeacherNames = vipOverTeacherNames;
-    }
-
     public String getVipNotStartTeacherIds() {
         return vipNotStartTeacherIds;
     }
@@ -75,22 +59,6 @@ public class StudentVipPracticeExportDto{
         this.vipNotStartTeacherNames = vipNotStartTeacherNames;
     }
 
-    public String getPracticeOverTeacherIds() {
-        return practiceOverTeacherIds;
-    }
-
-    public void setPracticeOverTeacherIds(String practiceOverTeacherIds) {
-        this.practiceOverTeacherIds = practiceOverTeacherIds;
-    }
-
-    public String getPracticeOverTeacherNames() {
-        return practiceOverTeacherNames;
-    }
-
-    public void setPracticeOverTeacherNames(String practiceOverTeacherNames) {
-        this.practiceOverTeacherNames = practiceOverTeacherNames;
-    }
-
     public String getPracticeNotStartTeacherIds() {
         return practiceNotStartTeacherIds;
     }
@@ -170,4 +138,36 @@ public class StudentVipPracticeExportDto{
     public void setPracticeNotStartNum(Integer practiceNotStartNum) {
         this.practiceNotStartNum = practiceNotStartNum;
     }
+
+    public Integer getVipOverTeacherId() {
+        return vipOverTeacherId;
+    }
+
+    public void setVipOverTeacherId(Integer vipOverTeacherId) {
+        this.vipOverTeacherId = vipOverTeacherId;
+    }
+
+    public String getVipOverTeacherName() {
+        return vipOverTeacherName;
+    }
+
+    public void setVipOverTeacherName(String vipOverTeacherName) {
+        this.vipOverTeacherName = vipOverTeacherName;
+    }
+
+    public Integer getPracticeOverTeacherId() {
+        return practiceOverTeacherId;
+    }
+
+    public void setPracticeOverTeacherId(Integer practiceOverTeacherId) {
+        this.practiceOverTeacherId = practiceOverTeacherId;
+    }
+
+    public String getPracticeOverTeacherName() {
+        return practiceOverTeacherName;
+    }
+
+    public void setPracticeOverTeacherName(String practiceOverTeacherName) {
+        this.practiceOverTeacherName = practiceOverTeacherName;
+    }
 }

+ 29 - 15
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -888,21 +888,35 @@ public class ExportServiceImpl implements ExportService {
     @Async
     public void studentVipPractice(String organId, ManagerDownload managerDownload) throws FileNotFoundException {
         List<StudentVipPracticeExportDto> studentVipPracticeExportDtos = courseScheduleStudentPaymentDao.exportStudentVipPractice(organId);
-        for (StudentVipPracticeExportDto studentVipPracticeExportDto : studentVipPracticeExportDtos) {
-            String vipOverTeacherIds = studentVipPracticeExportDto.getVipOverTeacherIds();
-            String vipOverTeacherNames = studentVipPracticeExportDto.getVipOverTeacherNames();
-            if(StringUtils.isNotEmpty(vipOverTeacherIds) && vipOverTeacherIds.contains(",")){
-                studentVipPracticeExportDto.setVipOverTeacherIds(vipOverTeacherIds.split(",")[0]);
-                studentVipPracticeExportDto.setVipOverTeacherNames(vipOverTeacherNames.split(",")[0]);
-            }
-            String practiceOverTeacherIds = studentVipPracticeExportDto.getPracticeOverTeacherIds();
-            String practiceOverTeacherNames = studentVipPracticeExportDto.getPracticeOverTeacherNames();
-            if(StringUtils.isNotEmpty(practiceOverTeacherIds) && practiceOverTeacherIds.contains(",")){
-                studentVipPracticeExportDto.setPracticeOverTeacherIds(practiceOverTeacherIds.split(",")[0]);
-                studentVipPracticeExportDto.setPracticeOverTeacherNames(practiceOverTeacherNames.split(",")[0]);
+        if(studentVipPracticeExportDtos != null && studentVipPracticeExportDtos.size() > 0){
+            List<Integer> studentIds = studentVipPracticeExportDtos.stream().map(e -> e.getUserId()).collect(Collectors.toList());
+            //获取学员最后一节已结束的vip课的老师以及编号
+            List<BaseNameDto> vipBaseNameDtos = courseScheduleStudentPaymentDao.queryLastOverTeacher(studentIds,"VIP");
+            Map<Integer, List<BaseNameDto>> vipBaseNameMap = new HashMap<>();
+            if(vipBaseNameDtos != null && vipBaseNameDtos.size() > 0){
+                vipBaseNameMap = vipBaseNameDtos.stream().collect(Collectors.groupingBy(BaseNameDto::getUserId));
+            }
+            //获取学员最后一节已结束的网管课的老师以及编号
+            List<BaseNameDto> practiceBaseNameDtos = courseScheduleStudentPaymentDao.queryLastOverTeacher(studentIds,"PRACTICE");
+            Map<Integer, List<BaseNameDto>> practiceBaseNameMap = new HashMap<>();
+            if(practiceBaseNameDtos != null && practiceBaseNameDtos.size() > 0){
+                practiceBaseNameMap = practiceBaseNameDtos.stream().collect(Collectors.groupingBy(BaseNameDto::getUserId));
+            }
+            for (StudentVipPracticeExportDto studentVipPracticeExportDto : studentVipPracticeExportDtos) {
+                List<BaseNameDto> baseNameDtos = vipBaseNameMap.get(studentVipPracticeExportDto.getUserId());
+                if(baseNameDtos != null && baseNameDtos.size() > 0){
+                    BaseNameDto baseNameDto = baseNameDtos.get(0);
+                    studentVipPracticeExportDto.setVipOverTeacherId(baseNameDto.getTeacherId());
+                    studentVipPracticeExportDto.setVipOverTeacherName(baseNameDto.getTeacherName());
+                }
+                List<BaseNameDto> baseNameDtos1 = practiceBaseNameMap.get(studentVipPracticeExportDto.getUserId());
+                if(baseNameDtos1 != null && baseNameDtos1.size() > 0){
+                    BaseNameDto baseNameDto = baseNameDtos1.get(0);
+                    studentVipPracticeExportDto.setPracticeOverTeacherId(baseNameDto.getTeacherId());
+                    studentVipPracticeExportDto.setPracticeOverTeacherName(baseNameDto.getTeacherName());
+                }
             }
         }
-
         String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
         File file = new File(basePath + "/" + managerDownload.getName());
         FileOutputStream fileOutputStream = new FileOutputStream(file);
@@ -911,8 +925,8 @@ public class ExportServiceImpl implements ExportService {
         try {
             String[] header = {"分部", "学员编号", "学生姓名", "VIP已结束课时数", "VIP未开始课时数", "已结束VIP上课老师编号", "已结束VIP上课老师",
                     "网管课已结束课时数", "网管课未开始课时数", "已结束网管课上课老师编号", "已结束网管课上课老师", "指导老师编号", "指导老师"};
-            String[] body = {"organName","userId", "username", "vipOverNum", "vipNotStartNum", "vipOverTeacherIds", "vipOverTeacherNames"
-                    , "practiceOverNum", "practiceNotStartNum", "practiceOverTeacherIds", "practiceOverTeacherNames","teacherId","teacherName"};
+            String[] body = {"organName","userId", "username", "vipOverNum", "vipNotStartNum", "vipOverTeacherId", "vipOverTeacherName"
+                    , "practiceOverNum", "practiceNotStartNum", "practiceOverTeacherId", "practiceOverTeacherName","teacherId","teacherName"};
             workbook = POIUtil.exportExcel(header, body, studentVipPracticeExportDtos);
             workbook.write(fileOutputStream);
             fileOutputStream.getFD().sync();

+ 21 - 14
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -848,16 +848,8 @@
 		<result property="username" column="username_"/>
 		<result property="vipOverNum" column="vip_over_num_"/>
 		<result property="vipNotStartNum" column="vip_not_start_num_"/>
-		<result property="vipOverTeacherIds" column="vip_over_teacher_ids_"/>
-		<result property="vipOverTeacherNames" column="vip_over_teacher_names_"/>
-		<result property="vipNotStartTeacherIds" column="vip_not_start_teacher_ids_"/>
-		<result property="vipNotStartTeacherNames" column="vip_not_start_teacher_names_"/>
 		<result property="practiceOverNum" column="practice_over_num_"/>
 		<result property="practiceNotStartNum" column="practice_not_start_num_"/>
-		<result property="practiceOverTeacherIds" column="practice_over_teacher_ids_"/>
-		<result property="practiceOverTeacherNames" column="practice_over_teacher_names_"/>
-		<result property="practiceNotStartTeacherIds" column="practice_not_start_teacher_ids_"/>
-		<result property="practiceNotStartTeacherNames" column="practice_not_start_teacher_names_"/>
 		<result property="teacherId" column="teacher_id_"/>
 		<result property="teacherName" column="real_name_"/>
 		<result property="organName" column="organ_name_"/>
@@ -866,24 +858,39 @@
 		SELECT s.user_id_,su.username_,o.name_ organ_name_,
 		COUNT(CASE WHEN cssp.group_type_ = 'VIP' AND cs.status_ != 'NOT_START' THEN 1 ELSE NULL END) vip_over_num_,
 		COUNT(CASE WHEN cssp.group_type_ = 'VIP' AND cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) vip_not_start_num_,
-		GROUP_CONCAT(DISTINCT (CASE WHEN cssp.group_type_ = 'VIP' AND cs.status_ != 'NOT_START' THEN sut.id_ ELSE NULL END) ORDER BY cs.class_date_ DESC,start_class_time_ DESC) vip_over_teacher_ids_,
-		GROUP_CONCAT(DISTINCT (CASE WHEN cssp.group_type_ = 'VIP' AND cs.status_ != 'NOT_START' THEN sut.real_name_ ELSE NULL END) ORDER BY cs.class_date_ DESC,start_class_time_ DESC) vip_over_teacher_names_,
 		COUNT(CASE WHEN cssp.group_type_ = 'PRACTICE' AND cs.status_ != 'NOT_START' THEN 1 ELSE NULL END) practice_over_num_,
 		COUNT(CASE WHEN cssp.group_type_ = 'PRACTICE' AND cs.status_ = 'NOT_START' THEN 1 ELSE NULL END) practice_not_start_num_,
-		GROUP_CONCAT(DISTINCT (CASE WHEN cssp.group_type_ = 'PRACTICE' AND cs.status_ != 'NOT_START' THEN sut.id_ ELSE NULL END) ORDER BY cs.class_date_ DESC,start_class_time_ DESC) practice_over_teacher_ids_,
-		GROUP_CONCAT(DISTINCT (CASE WHEN cssp.group_type_ = 'PRACTICE' AND cs.status_ != 'NOT_START' THEN sut.real_name_ ELSE NULL END) ORDER BY cs.class_date_ DESC,start_class_time_ DESC) practice_over_teacher_names_,
 		s.teacher_id_,ste.real_name_
 		FROM student s
 		LEFT JOIN course_schedule_student_payment cssp FORCE INDEX(group_type_) ON cssp.user_id_ = s.user_id_
 		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
 		LEFT JOIN sys_user su ON s.user_id_ = su.id_
 		LEFT JOIN sys_user ste ON s.teacher_id_ = ste.id_
-		LEFT JOIN sys_user sut ON cs.actual_teacher_id_ = sut.id_
 		LEFT JOIN organization o ON o.id_ = su.organ_id_
 		WHERE cssp.group_type_ IN ('VIP','PRACTICE')
 		<if test="organId != null">
-			AND FIND_IN_SET(su.organ_id_,#{organId}) AND FIND_IN_SET(cs.organ_id_,#{organId})
+			AND FIND_IN_SET(su.organ_id_,#{organId})
 		</if>
 		GROUP BY s.user_id_
 	</select>
+	<resultMap id="BaseNameDto" type="com.ym.mec.biz.dal.dto.BaseNameDto">
+		<result property="teacherName" column="real_name_"/>
+		<result property="teacherId" column="teacher_id_"/>
+		<result property="userId" column="user_id_"/>
+	</resultMap>
+	<select id="queryLastOverTeacher" resultMap="BaseNameDto">
+		SELECT cssp.user_id_,su.real_name_,su.id_ teacher_id_ FROM course_schedule_student_payment cssp
+		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+		LEFT JOIN (
+		SELECT cssp.user_id_,MAX(CONCAT(cs.class_date_,' ',start_class_time_)) class_date_
+		FROM course_schedule_student_payment cssp
+		LEFT JOIN course_schedule cs ON cs.id_ = cssp.course_schedule_id_
+		WHERE cssp.group_type_ = #{groupType} AND cs.status_ != 'NOT_START' AND cssp.user_id_ IN
+		<foreach collection="studentIds" open="(" close=")" item="userId" separator=",">
+			#{userId}
+		</foreach>
+		GROUP BY cssp.user_id_) c ON 1=1
+		LEFT JOIN sys_user su ON su.id_ = cs.actual_teacher_id_
+		WHERE cssp.user_id_ = c.user_id_ AND CONCAT(cs.class_date_,' ',cs.start_class_time_) = c.class_date_ AND cssp.group_type_ = #{groupType}
+	</select>
 </mapper>