فهرست منبع

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

zouxuan 3 سال پیش
والد
کامیت
40bb5e2327

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

@@ -570,4 +570,8 @@ public interface CourseScheduleStudentPaymentDao extends BaseDAO<Long, CourseSch
     List<StudentVipPracticeExportDto> exportStudentVipPractice(@Param("organId") String organId, @Param("tenantId") Integer tenantId);
 
     List<BaseNameDto> queryLastOverTeacher(@Param("studentIds") List<Integer> studentIds, @Param("groupType") String groupType);
+
+    Boolean hasStudentMusicTheoryCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
+
+    List<ExportStudentCourseInfoDto> queryStudentCourseInfo(@Param("organId") String organId, @Param("tenantId") Integer tenantId, @Param("groupType") String groupType);
 }

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

@@ -0,0 +1,135 @@
+package com.ym.mec.biz.dal.dto;
+
+public class ExportStudentCourseInfoDto {
+    //分部
+    private String organName;
+
+    //学员
+    private String username;
+
+    //学员编号
+    private Integer userId;
+
+    //老师
+    private String teacherName;
+
+    //老师编号
+    private Integer teacherId;
+
+    //教务
+    private String eduName;
+
+    //教务编号
+    private Integer eduId;
+
+    //总课次
+    private Integer totalClassNum;
+
+    //已进行课时
+    private Integer startClassNum;
+
+    //剩余课时
+    private Integer subClassNum;
+
+    //上次课时
+    private String beforeClassNum;
+
+    //年纪
+    private Integer grade;
+
+    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 getTotalClassNum() {
+        return totalClassNum;
+    }
+
+    public void setTotalClassNum(Integer totalClassNum) {
+        this.totalClassNum = totalClassNum;
+    }
+
+    public Integer getStartClassNum() {
+        return startClassNum;
+    }
+
+    public void setStartClassNum(Integer startClassNum) {
+        this.startClassNum = startClassNum;
+    }
+
+    public Integer getSubClassNum() {
+        return subClassNum;
+    }
+
+    public void setSubClassNum(Integer subClassNum) {
+        this.subClassNum = subClassNum;
+    }
+
+    public String getBeforeClassNum() {
+        return beforeClassNum;
+    }
+
+    public void setBeforeClassNum(String beforeClassNum) {
+        this.beforeClassNum = beforeClassNum;
+    }
+
+    public Integer getGrade() {
+        return grade;
+    }
+
+    public void setGrade(Integer grade) {
+        this.grade = grade;
+    }
+}

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

@@ -70,6 +70,8 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     STUDENT_INSTRUMENT("STUDENT_INSTRUMENT", "乐保导出"),
     EXPORT_BILL("EXPORT_BILL", "对账单导出"),
     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", "乐理课学员课程信息导出"),
     EXERCISES_SITUATION("EXERCISES_SITUATION", "服务指标导出");
 
     private String code;

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

@@ -6,7 +6,9 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	ORDER(0, "订单列表"),
 	COURSE_SCHEDULE(1, "课表列表"),
 	ROUTE_ORDER(2, "财务管理"),
-	STUDENT_VIP_PRACTICE(3, "学员小课记录");
+	STUDENT_VIP_PRACTICE(3, "学员小课记录"),
+	STUDENT_MUSIC_THEORY_COURSE_INFO(4, "网管课学员课程信息导出"),
+	STUDENT_VIP_COURSE_INFO(5, "VIP课学员课程信息导出");
 
 	private Integer code;
 

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

@@ -255,6 +255,12 @@ public interface ExportService {
     //学员小课记录导出
     HttpResponseResult exportStudentVipPractice(Map<String, Object> info,List<String> headColumns);
 
+    //学员小课记录导出
+    HttpResponseResult exportStudentVipCourseInfo(Map<String, Object> info, List<String> headColumns);
+
+    //学员小课记录导出
+    HttpResponseResult exportStudentMusicTheoryCourseInfo(Map<String, Object> info, List<String> headColumns);
+
     //订单列表导出
     HttpResponseResult orderList(Map<String, Object> info,List<String> headColumns);
 
@@ -276,4 +282,6 @@ public interface ExportService {
 
     @Async
     abstract 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;
 }

+ 82 - 5
mec-biz/src/main/java/com/ym/mec/biz/service/impl/ExportServiceImpl.java

@@ -344,6 +344,8 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.ORDER_LIST1, (info,headColumns) -> orderList(info,headColumns));
         exportManageFuncMap.put(ExportEnum.ORDER_LIST2, (info,headColumns) -> orderList(info,headColumns));
         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));
 
     }
 
@@ -1420,6 +1422,48 @@ public class ExportServiceImpl implements ExportService {
         return succeed;
     }
 
+    //学员小课记录导出
+    @Override
+    public HttpResponseResult exportStudentVipCourseInfo(Map<String, Object> info, List<String> headColumns){
+        String organId = getParam(info, "organId", String.class);
+        Integer tenantId = TenantContextHolder.getTenantId();
+        Boolean hasCourse = courseScheduleStudentPaymentDao.hasStudentMusicTheoryCourseInfo(organId, tenantId,"VIP");
+        if (hasCourse == null || !hasCourse) {
+            return BaseController.failed("没有可导出的数据");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.STUDENT_VIP_COURSE_INFO,sysUser.getId());
+        try {
+            this.queryStudentCourseInfo(organId, tenantId,"VIP", managerDownload,headColumns,ExportEnum.STUDENT_VIP_COURSE_INFO);
+        } catch (FileNotFoundException e) {
+            return BaseController.failed(e.getMessage());
+        }
+        HttpResponseResult<Object> succeed = BaseController.succeed();
+        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
+
+    //学员小课记录导出
+    @Override
+    public HttpResponseResult exportStudentMusicTheoryCourseInfo(Map<String, Object> info, List<String> headColumns){
+        String organId = getParam(info, "organId", String.class);
+        Integer tenantId = TenantContextHolder.getTenantId();
+        Boolean hasCourse = courseScheduleStudentPaymentDao.hasStudentMusicTheoryCourseInfo(organId, tenantId,"THEORY");
+        if (hasCourse == null || !hasCourse) {
+            return BaseController.failed("没有可导出的数据");
+        }
+        SysUser sysUser = sysUserFeignService.queryUserInfo();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.STUDENT_MUSIC_THEORY_COURSE_INFO,sysUser.getId());
+        try {
+            this.queryStudentCourseInfo(organId, tenantId,"THEORY", managerDownload,headColumns,ExportEnum.STUDENT_MUSIC_THEORY_COURSE_INFO);
+        } catch (FileNotFoundException e) {
+            return BaseController.failed(e.getMessage());
+        }
+        HttpResponseResult<Object> succeed = BaseController.succeed();
+        succeed.setMsg(managerDownload.getName() + "导出申请已提交,请到【报表中心-下载列表查看】");
+        return succeed;
+    }
+
     //订单列表导出
     @Override
     public HttpResponseResult orderList(Map<String, Object> info,List<String> headColumns){
@@ -1497,7 +1541,7 @@ public class ExportServiceImpl implements ExportService {
                 .append(DateUtil.getDate(nowDate))
                 .append(".xls").toString();
         ManagerDownload managerDownload = new ManagerDownload();
-        managerDownload.setType(ExportTypeEnum.COURSE_SCHEDULE);
+        managerDownload.setType(exportTypeEnum);
         managerDownload.setUserId(userId);
         managerDownload.setName(fileName);
         managerDownload.setFileUrl("");
@@ -2418,10 +2462,6 @@ public class ExportServiceImpl implements ExportService {
 
         HSSFWorkbook workbook = null;
         try {
-            /*String[] header = {"分部", "学员编号", "学生姓名", "课程余额", "声部", "VIP已结束课时数", "VIP未开始课时数", "已结束VIP上课老师编号", "已结束VIP上课老师",
-                    "网管课已结束课时数", "网管课未开始课时数", "已结束网管课上课老师编号", "已结束网管课上课老师", "指导老师编号", "指导老师"};
-            String[] body = {"organName","userId", "username","courseBalance", "subjectName", "vipOverNum", "vipNotStartNum", "vipOverTeacherId", "vipOverTeacherName"
-                    , "practiceOverNum", "practiceNotStartNum", "practiceOverTeacherId", "practiceOverTeacherName","teacherId","teacherName"};*/
             Map<String, String> headMap = getExportMap(new ExportDto(ExportEnum.STUDENT_VIP_PRACTICE, headColumns));
             String[] header = headMap.keySet().toArray(new String[headMap.keySet().size()]);
             String[] body = headMap.values().toArray(new String[headMap.keySet().size()]);
@@ -2448,4 +2488,41 @@ public class ExportServiceImpl implements ExportService {
             }
         }
     }
+
+    @Override
+    @Async
+    public void queryStudentCourseInfo(String organId, Integer tenantId, String groupType, ManagerDownload managerDownload, List<String> headColumns,ExportEnum exportEnum) throws FileNotFoundException {
+        List<ExportStudentCourseInfoDto> studentCourseInfoDtos = courseScheduleStudentPaymentDao.queryStudentCourseInfo(organId,tenantId,groupType);
+        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();
+            }
+        }
+    }
 }

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

@@ -753,6 +753,7 @@ public class IndexBaseMonthDataServiceImpl extends BaseServiceImpl<Long, IndexBa
 				params.put("jobNature", JobNatureEnum.FULL_TIME);
 				params.put("unDone",1);
 				params.put("reminded",0);
+				params.put("tenantId",tenantId);
 				int serveErrTeacherNum = studentExtracurricularExercisesSituationDao.countTeacherServeInfo(params);
 				fourChild.add(new IndexErrInfoDto(IndexErrorType.TEACHER_SERVE_ERROR, IndexErrorType.TEACHER_SERVE_ERROR.getMsg(), serveErrTeacherNum, null));
 			}

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

@@ -874,4 +874,60 @@
 		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>
+    <select id="hasStudentMusicTheoryCourseInfo" resultType="java.lang.Boolean">
+		SELECT CASE WHEN cssp.user_id_ = NULL THEN 0 ELSE 1 END hasCourse
+		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 `sys_user` u on u.`id_` = cssp.`user_id_`
+		<include refid="hasStudentMusicTheoryCourseInfo"/>
+		LIMIT 1
+	</select>
+	<resultMap id="ExportStudentCourseInfoDto" type="com.ym.mec.biz.dal.dto.ExportStudentCourseInfoDto">
+		<result property="username" column="username_"/>
+		<result property="userId" column="user_id_"/>
+		<result property="organName" column="organ_name_"/>
+		<result property="teacherId" column="teacher_id_"/>
+		<result property="teacherName" column="teacher_name_"/>
+		<result property="beforeClassNum" column="before_class_num_"/>
+		<result property="eduId" column="edu_id_"/>
+		<result property="eduName" column="edu_name_"/>
+		<result property="grade" column="current_grade_num_"/>
+		<result property="startClassNum" column="start_class_num_"/>
+		<result property="subClassNum" column="sub_class_num_"/>
+		<result property="totalClassNum" column="total_class_num_"/>
+	</resultMap>
+	<select id="queryStudentCourseInfo" resultMap="ExportStudentCourseInfoDto">
+		SELECT o.`name_` organ_name_,u.`username_`,u.`id_` user_id_,tu.`real_name_` teacher_name_,
+		       tu.`id_` teacher_id_,edu.`real_name_` edu_name_ ,edu.`id_` edu_id_ ,
+			   count(vg.`online_classes_num_` + vg.`offline_classes_num_` )  total_class_num_,
+			   sum(case when cs.`status_` != 'NOT_START' then 1 else 0 end) start_class_num_,
+			   sum(case when cs.`status_` = 'NOT_START' then 1 else 0 end) sub_class_num_,
+			   max(case when cs.`status_` != 'NOT_START' then cs.`class_date_` end) before_class_num_,s.`current_grade_num_`
+		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 `sys_user` u on u.`id_` = cssp.`user_id_`
+				 LEFT JOIN `student` s on s.`user_id_` = cssp.`user_id_`
+				 LEFT JOIN `sys_user` tu on tu.`id_` = s.`teacher_id_`
+				 LEFT JOIN `sys_user` edu on edu.`id_` = vg.`educational_teacher_id_`
+				 LEFT JOIN `organization` o on o.`id_` = u.`organ_id_`
+		<include refid="hasStudentMusicTheoryCourseInfo"/>
+		GROUP BY cssp.`user_id_` ;
+	</select>
+	<sql id="hasStudentMusicTheoryCourseInfo">
+		<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)
+			<if test="groupType == 'VIP'">
+				AND vg.`vip_group_category_id_` != 16
+			</if>
+			<if test="groupType != 'VIP'">
+				AND vg.`vip_group_category_id_` = 16
+			</if>
+			<if test="organId != null and organId != ''">
+				AND FIND_IN_SET(u.organ_id_,#{organId})
+			</if>
+		</where>
+	</sql>
 </mapper>

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

@@ -262,6 +262,14 @@ fieldColumns = ["userName","phone","currentGrade","currentClass","subjectName ==
 headColumns = ["交易流水号", "订单号", "订单日期", "分部", "学员姓名", "学员编号", "所属乐团", "学员状态", "维修技师", "乐器名称", "具体型号", "乐保类型"]
 fieldColumns = ["transNo", "orderNo", "createTime", "organName", "studentName", "studentId", "musicGroupName", "studentStatus.msg", "repairerName", "goodsName", "specification", "type == '0' ? '新增' : '续费'"]
 
+[VIP课学员课程信息导出]
+headColumns = ["分部", "学员姓名", "学员编号", "指导老师", "指导老师编号", "教务老师", "教务老师编号", "总课次", "已进行课次", "剩余课次", "上次课时间", "年级"]
+fieldColumns = ["organName", "username", "userId", "teacherName", "teacherId", "eduName", "eduId", "totalClassNum", "startClassNum", "subClassNum", "beforeClassNum", "grade"]
+
+[乐理课学员课程信息导出]
+headColumns = ["分部", "学员姓名", "学员编号", "指导老师", "指导老师编号", "教务老师", "教务老师编号", "总课次", "已进行课次", "剩余课次", "上次课时间", "年级"]
+fieldColumns = ["organName", "username", "userId", "teacherName", "teacherId", "eduName", "eduId", "totalClassNum", "startClassNum", "subClassNum", "beforeClassNum", "grade"]
+
 [服务指标导出]
 headColumns = ["分部","老师编号","老师姓名","预计安排(人次)","实际安排(人次)","布置率(%)","提交人数","点评次数","点评率(%)","及时点评次数","及时点评率(%)"]
 fieldColumns = ["organName","teacherId","teacherName","expectExercisesNum","actualExercisesNum", "100 * actualExercisesNum / expectExercisesNum","exercisesReplyNum","exercisesMessageNum", "100 * exercisesMessageNum / exercisesReplyNum", "exercisesMessageTimelyNum","100 * exercisesMessageTimelyNum / exercisesReplyNum"]