Selaa lähdekoodia

Merge branch 'saas' of http://git.dayaedu.com/yonge/mec into master_saas

zouxuan 3 vuotta sitten
vanhempi
commit
aeff8f0865

+ 2 - 2
audio-analysis/src/main/java/com/yonge/netty/dto/UserChannelContext.java

@@ -742,7 +742,7 @@ public class UserChannelContext {
 		
 		NoteFrequencyRange noteFrequencyRange = null;
 		ChunkAnalysis chunkAnalysis = null;
-		boolean tempo = false;
+		boolean tempo = true;
 		//boolean isContinue = true;
 		//int unplayedSize = 0;
 		int firstPeakIndex = -1;
@@ -783,7 +783,7 @@ public class UserChannelContext {
 			totalTimes = chunkList.size();
 		}
 		
-		if (maxTimes / totalTimes < hardLevel.getIntegrityRange()) {
+		if (maxTimes * 100 / totalTimes < hardLevel.getIntegrityRange()) {
 			tempo = false;
 			LOGGER.debug("节奏错误原因:信号分堆后的最大数量不足指定的完成比例");
 		}

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

@@ -597,4 +597,6 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<BaseNameDto> queryClassTeacher(@Param("studentIds") List<Integer> studentIds);
 
     List<BaseNameDto> queryFirstNotStartTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
+
+    List<ExportVipStudentCourseManageDto> queryVipStudentCourseManage(@Param("organId") String organId, @Param("tenantId") Integer tenantId);
 }

+ 8 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportStudentCourseInfoDto.java

@@ -34,6 +34,14 @@ public class ExportStudentCourseInfoDto {
     //上次课时
     private String beforeClassNum;
 
+    //近30天消耗课时
+    private Integer consumerTimes;
+
+    //是否活跃
+    private String activeFlag;
+
+    private String courseType;
+
     //年纪
     private Integer grade;
 

+ 178 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dto/ExportVipStudentCourseManageDto.java

@@ -0,0 +1,178 @@
+package com.ym.mec.biz.dal.dto;
+
+public class ExportVipStudentCourseManageDto {
+    //分部
+    private String organName;
+
+    //学员
+    private String username;
+
+    //学员编号
+    private Integer userId;
+
+    //老师
+    private String teacherName;
+
+    //老师编号
+    private Integer teacherId;
+
+    //教务
+    private String eduName;
+
+    //教务编号
+    private Integer eduId;
+
+    //声部课老师
+    private String subjectTeacherName;
+
+    //声部课老师
+    private Integer subjectTeacherId;
+
+    //近30天消耗课时
+    private Integer consumerTimes;
+
+    //总课时
+    private Integer totalClassNum;
+
+    //已完成课次
+    private Integer completedTimes;
+
+    //剩余课次
+    private Integer remaindTimes;
+
+    //最近上课时间
+    private String lastCourseTime;
+
+    //是否活跃
+    private String activeFlag;
+
+    private String courseType;
+
+    public String getSubjectTeacherName() {
+        return subjectTeacherName;
+    }
+
+    public void setSubjectTeacherName(String subjectTeacherName) {
+        this.subjectTeacherName = subjectTeacherName;
+    }
+
+    public Integer getSubjectTeacherId() {
+        return subjectTeacherId;
+    }
+
+    public void setSubjectTeacherId(Integer subjectTeacherId) {
+        this.subjectTeacherId = subjectTeacherId;
+    }
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getUsername() {
+        return username;
+    }
+
+    public void setUsername(String username) {
+        this.username = username;
+    }
+
+    public Integer getUserId() {
+        return userId;
+    }
+
+    public void setUserId(Integer userId) {
+        this.userId = userId;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+
+    public Integer getTeacherId() {
+        return teacherId;
+    }
+
+    public void setTeacherId(Integer teacherId) {
+        this.teacherId = teacherId;
+    }
+
+    public String getEduName() {
+        return eduName;
+    }
+
+    public void setEduName(String eduName) {
+        this.eduName = eduName;
+    }
+
+    public Integer getEduId() {
+        return eduId;
+    }
+
+    public void setEduId(Integer eduId) {
+        this.eduId = eduId;
+    }
+
+    public Integer getConsumerTimes() {
+        return consumerTimes;
+    }
+
+    public void setConsumerTimes(Integer consumerTimes) {
+        this.consumerTimes = consumerTimes;
+    }
+
+    public Integer getTotalClassNum() {
+        return totalClassNum;
+    }
+
+    public void setTotalClassNum(Integer totalClassNum) {
+        this.totalClassNum = totalClassNum;
+    }
+
+    public Integer getCompletedTimes() {
+        return completedTimes;
+    }
+
+    public void setCompletedTimes(Integer completedTimes) {
+        this.completedTimes = completedTimes;
+    }
+
+    public Integer getRemaindTimes() {
+        return remaindTimes;
+    }
+
+    public void setRemaindTimes(Integer remaindTimes) {
+        this.remaindTimes = remaindTimes;
+    }
+
+    public String getLastCourseTime() {
+        return lastCourseTime;
+    }
+
+    public void setLastCourseTime(String lastCourseTime) {
+        this.lastCourseTime = lastCourseTime;
+    }
+
+    public String getActiveFlag() {
+        return activeFlag;
+    }
+
+    public void setActiveFlag(String activeFlag) {
+        this.activeFlag = activeFlag;
+    }
+
+    public String getCourseType() {
+        return courseType;
+    }
+
+    public void setCourseType(String courseType) {
+        this.courseType = courseType;
+    }
+}

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

@@ -72,6 +72,7 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
 //    QUESTIONNAIRE_USER_RESULT("QUESTIONNAIRE_USER_RESULT", "问卷调查导出"),
     STUDENT_VIP_COURSE_INFO("STUDENT_VIP_COURSE_INFO", "VIP课学员课程信息导出"),
     STUDENT_MUSIC_THEORY_COURSE_INFO("STUDENT_MUSIC_THEORY_COURSE_INFO", "乐理课学员课程信息导出"),
+    VIP_STUDENT_COURSE_MANAGE("VIP_STUDENT_COURSE_MANAGE", "vip学员课程管理"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出");
 
     private String code;

+ 2 - 1
mec-biz/src/main/java/com/ym/mec/biz/dal/enums/ExportTypeEnum.java

@@ -8,7 +8,8 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	ROUTE_ORDER(2, "财务管理"),
 	STUDENT_VIP_PRACTICE(3, "VIP网管课耗导出"),
 	STUDENT_MUSIC_THEORY_COURSE_INFO(4, "网管课学员课程信息导出"),
-	STUDENT_VIP_COURSE_INFO(5, "VIP课学员课程信息导出");
+	STUDENT_VIP_COURSE_INFO(5, "VIP课学员课程信息导出"),
+	VIP_STUDENT_COURSE_MANAGE(6, "vip学员课程管理");
 
 	private Integer code;
 

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

@@ -258,6 +258,9 @@ public interface ExportService {
     //学员小课记录导出
     HttpResponseResult exportStudentVipCourseInfo(Map<String, Object> info, List<String> headColumns);
 
+    //vip学员课程管理
+    HttpResponseResult exportVipStudentCourseManage(Map<String, Object> info, List<String> headColumns);
+
     //学员小课记录导出
     HttpResponseResult exportStudentMusicTheoryCourseInfo(Map<String, Object> info, List<String> headColumns);
 
@@ -279,4 +282,6 @@ public interface ExportService {
     void studentVipPractice(String organId, ManagerDownload managerDownload, Integer tenantId,List<String> headColumns) throws FileNotFoundException;
 
     void queryStudentCourseInfo(String organId, Integer tenantId, String vip, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws FileNotFoundException;
+
+    void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws FileNotFoundException;
 }

+ 57 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -338,6 +338,7 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.STUDENT_VIP_PRACTICE, (info,headColumns) -> exportStudentVipPractice(info,headColumns));
         exportManageFuncMap.put(ExportEnum.STUDENT_VIP_COURSE_INFO, (info,headColumns) -> exportStudentVipCourseInfo(info,headColumns));
         exportManageFuncMap.put(ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO, (info,headColumns) -> exportStudentMusicTheoryCourseInfo(info,headColumns));
+        exportManageFuncMap.put(ExportEnum.VIP_STUDENT_COURSE_MANAGE, (info,headColumns) -> exportVipStudentCourseManage(info,headColumns));
 
     }
 
@@ -1444,6 +1445,26 @@ public class ExportServiceImpl implements ExportService {
         return succeed;
     }
 
+    //vip学员课程管理
+    @Override
+    public HttpResponseResult exportVipStudentCourseManage(Map<String, Object> info, List<String> headColumns){
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        String organId = organizationService.getEmployeeOrgan(sysUser.getId(),getParam(info, "organId", String.class),sysUser.getIsSuperAdmin());
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.VIP_STUDENT_COURSE_MANAGE,sysUser.getId());
+        Integer tenantId = TenantContextHolder.getTenantId();
+        ExecutorService executor = Executors.newCachedThreadPool();
+        CompletableFuture.runAsync(()->{
+            try {
+                this.queryVipStudentCourseManage(organId, tenantId,managerDownload,headColumns,ExportEnum.VIP_STUDENT_COURSE_MANAGE);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        },executor);
+        HttpResponseResult<Object> succeed = BaseController.succeed();
+        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
+
     //学员小课记录导出
     @Override
     public HttpResponseResult exportStudentMusicTheoryCourseInfo(Map<String, Object> info, List<String> headColumns){
@@ -2674,4 +2695,40 @@ public class ExportServiceImpl implements ExportService {
             }
         }
     }
+
+    @Override
+    public void queryVipStudentCourseManage(String organId, Integer tenantId, ManagerDownload managerDownload, List<String> headColumns, ExportEnum exportEnum) throws FileNotFoundException {
+        List<ExportVipStudentCourseManageDto> studentCourseInfoDtos = courseScheduleStudentPaymentDao.queryVipStudentCourseManage(organId,tenantId);
+        String basePath = new ApplicationHome(this.getClass()).getSource().getParentFile().getPath();
+        File file = new File(basePath + "/" + managerDownload.getName());
+        FileOutputStream fileOutputStream = new FileOutputStream(file);
+
+        HSSFWorkbook workbook = null;
+        try {
+            Map<String, String> headMap = getExportMap(new ExportDto(exportEnum, headColumns));
+            String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
+            String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
+            workbook = POIUtil.exportExcel(header, body, studentCourseInfoDtos);
+            workbook.write(fileOutputStream);
+            fileOutputStream.getFD().sync();
+            fileOutputStream.close();
+
+            String folder = "download/" + UploadUtil.getFileFloder();
+            String url = storagePluginContext.uploadFile(KS3StoragePlugin.PLUGIN_NAME, folder, file);
+            //把记录插入下载表
+            managerDownload.setFileUrl(url);
+            managerDownload.setStatus(1);
+            managerDownloadDao.update(managerDownload);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            try {
+                fileOutputStream.close();
+                workbook.close();
+                file.delete();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
 }

+ 70 - 0
mec-biz/src/main/resources/config/mybatis/CourseScheduleStudentPaymentMapper.xml

@@ -998,4 +998,74 @@
 		</foreach>
 		GROUP BY cssp.user_id_
 	</select>
+	<resultMap id="ExportVipStudentCourseManageDto" type="com.ym.mec.biz.dal.dto.ExportVipStudentCourseManageDto">
+		<result property="username" column="student_name_"/>
+		<result property="userId" column="id_"/>
+		<result property="totalClassNum" column="total_times_"/>
+		<result property="eduName" column="eduName"/>
+		<result property="eduId" column="eduId"/>
+		<result property="teacherName" column="teacherName"/>
+		<result property="teacherId" column="teacherId"/>
+		<result property="organName" column="organ_name_"/>
+		<result property="courseType" column="course_type_"/>
+		<result property="activeFlag" column="activeFlag"/>
+		<result property="completedTimes" column="completed_times_"/>
+		<result property="consumerTimes" column="consumerTimes"/>
+		<result property="lastCourseTime" column="last_course_time_"/>
+		<result property="remaindTimes" column="remaind_times_"/>
+		<result property="subjectTeacherName" column="subjectTeacherName"/>
+		<result property="subjectTeacherId" column="subjectTeacherId"/>
+	</resultMap>
+    <select id="queryVipStudentCourseManage" resultMap="ExportVipStudentCourseManageDto">
+		SELECT a.organ_name_ ,a.student_name_, a.id_,a.course_type_,a.total_times_,
+		a.completed_times_, a.remaind_times_, a.last_course_time_,
+		ifnull(b.vip_teacher_name_,a.teacher_name_) teacherName,ifnull(b.actual_teacher_id_,a.teacher_id_) teacherId,
+		ifnull(b.edu_teacher_name_,a.edu_teacher_name_) eduName,ifnull(b.educational_teacher_id_,a.edu_teacher_id_) eduId,
+		c.real_name_ subjectTeacherName,c.actual_teacher_id_ subjectTeacherId,ifnull(d.month_count_,0) consumerTimes,
+		       CASE WHEN d.month_count_ > 2 THEN '是' ELSE '否' END activeFlag FROM
+		(
+		SELECT o.`name_` organ_name_,u.`username_` student_name_,vgc.`name_` course_type_,u.`id_` ,
+		count(vg.`online_classes_num_` + vg.`offline_classes_num_` )  total_times_,
+		sum(case when cs.`status_` != 'NOT_START' then 1 else 0 end) completed_times_,
+		sum(case when cs.`status_` = 'NOT_START' then 1 else 0 end) remaind_times_,
+		max(case when cs.`status_` != 'NOT_START' then cs.`class_date_` end) last_course_time_ ,
+		vg.`vip_group_category_id_` ,tu.id_ teacher_id_ ,tu.`real_name_` teacher_name_,edu.`id_` edu_teacher_id_,edu.`real_name_` edu_teacher_name_
+		FROM `course_schedule_student_payment` cssp
+		LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+		LEFT JOIN `vip_group` vg on vg.`id_` = cssp.`music_group_id_` AND cssp.`group_type_` = 'VIP'
+		LEFT JOIN `vip_group_category` vgc on vgc.`id_` = vg.`vip_group_category_id_`
+		LEFT JOIN `sys_user` u on u.`id_` = cssp.`user_id_`
+		LEFT JOIN `sys_user` tu on tu.`id_` = vg.`user_id_`
+		LEFT JOIN `sys_user` edu on edu.`id_` = vg.`educational_teacher_id_`
+		LEFT JOIN `organization` o on o.`id_` = u.`organ_id_`
+		WHERE cssp.`group_type_` = 'VIP' AND cs.`del_flag_` != 1 AND cs.`is_lock_` != 1
+		AND u.`organ_id_` not in (38,43,56,36) AND vg.`group_status_` in (2, 4) AND u.tenant_id_ = #{tenantId}
+		<if test="organId != null and organId != ''">
+			AND FIND_IN_SET(u.`organ_id_`,#{organId})
+		</if>
+		GROUP BY cssp.`user_id_` ,vg.`vip_group_category_id_`
+		) a LEFT JOIN
+		(
+		SELECT cssp.`user_id_` ,cs.`actual_teacher_id_`,tu.`real_name_` vip_teacher_name_,vg.`educational_teacher_id_` ,edu.`real_name_` edu_teacher_name_,vg.`vip_group_category_id_`     FROM `course_schedule_student_payment` cssp LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+		LEFT JOIN `sys_user` tu on tu.`id_` = cs.`actual_teacher_id_`
+		LEFT JOIN `vip_group` vg on vg.`id_` = cssp.`music_group_id_`
+		LEFT JOIN `sys_user` edu on edu.`id_` = vg.`educational_teacher_id_`
+		WHERE cs.`status_` = 'OVER' AND cssp.`group_type_` = 'VIP'
+		GROUP BY cssp.`user_id_`,vg.`vip_group_category_id_`
+		) b on a.id_ = b.user_id_ and a.vip_group_category_id_ = b.vip_group_category_id_
+		LEFT JOIN
+		(
+		SELECT cssp.`user_id_` ,cs.`actual_teacher_id_`,tu.`real_name_` FROM `course_schedule_student_payment` cssp LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+		LEFT JOIN `sys_user` tu on tu.`id_` = cs.`actual_teacher_id_`
+		WHERE cs.`status_` = 'OVER' and cs.`type_` = 'SINGLE'
+		GROUP BY cssp.`user_id_`
+		) c on b.user_id_ = c.user_id_
+		LEFT JOIN
+		(
+		SELECT cssp.`user_id_` ,vg.`vip_group_category_id_` ,ifnull(count(cssp.`id_`),0) month_count_  FROM `course_schedule_student_payment` cssp LEFT JOIN `course_schedule` cs on cssp.`course_schedule_id_` = cs.`id_`
+		LEFT JOIN `vip_group` vg on vg.`id_` = cssp.`music_group_id_`
+		WHERE cs.`status_` = 'OVER' and cssp.`group_type_` = 'VIP' AND DATE_SUB(CURDATE(), INTERVAL 30 DAY) &lt; cs.`class_date_`
+		GROUP BY cssp.`user_id_` ,vg.`vip_group_category_id_`
+		) d on b.user_id_ = d.user_id_ and a.vip_group_category_id_ = d.vip_group_category_id_
+	</select>
 </mapper>

+ 4 - 0
mec-web/src/main/resources/exportColumnMapper.ini

@@ -266,6 +266,10 @@ fieldColumns = ["transNo", "orderNo", "createTime", "organName", "studentName",
 headColumns = ["分部", "学员姓名", "学员编号", "指导老师", "指导老师编号", "教务老师", "教务老师编号", "总课次", "已进行课次", "剩余课次", "上次课时间", "年级"]
 fieldColumns = ["organName", "username", "userId", "teacherName", "teacherId", "eduName", "eduId", "totalClassNum", "startClassNum", "subClassNum", "beforeClassNum", "grade"]
 
+[vip学员课程管理]
+headColumns = ["分部", "学员姓名", "学员编号", "指导老师", "指导老师编号", "教务老师", "教务老师编号", "声部课老师", "声部课老师编号", "总课次", "已进行课次", "剩余课次", "上次课时间", "近30天消耗课时", "是否活跃", "课程类型"]
+fieldColumns = ["organName", "username", "userId", "teacherName", "teacherId", "eduName", "eduId",  "subjectTeacherName",  "subjectTeacherId", "totalClassNum", "completedTimes", "remaindTimes", "lastCourseTime", "consumerTimes", "activeFlag", "courseType"]
+
 [乐理课学员课程信息导出]
 headColumns = ["分部", "学员姓名", "学员编号", "指导老师", "指导老师编号", "教务老师", "教务老师编号", "总课次", "已进行课次", "剩余课次", "上次课时间", "年级"]
 fieldColumns = ["organName", "username", "userId", "teacherName", "teacherId", "eduName", "eduId", "totalClassNum", "startClassNum", "subClassNum", "beforeClassNum", "grade"]