Browse Source

添加导出

yuanliang 1 year ago
parent
commit
7a0de7ab1f

+ 34 - 0
mec-application/src/main/java/com/ym/mec/web/controller/StudentCoursewarePlayRecordController.java

@@ -1,11 +1,15 @@
 package com.ym.mec.web.controller;
 
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.microsvc.toolkit.common.response.paging.QueryInfo;
 import com.ym.mec.biz.dal.entity.StudentCoursewarePlayRecord;
+import com.ym.mec.biz.dal.enums.ExportEnum;
 import com.ym.mec.biz.dal.wrapper.StudentCoursewarePlayRecordWrapper;
+import com.ym.mec.biz.service.ExportService;
 import com.ym.mec.biz.service.StudentCoursewarePlayRecordService;
 import com.ym.mec.common.controller.BaseController;
 import com.ym.mec.common.entity.HttpResponseResult;
@@ -14,6 +18,7 @@ import com.ym.mec.common.page.PageUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.beanutils.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -24,7 +29,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
+import java.util.Map;
 
 @Slf4j
 @Validated
@@ -36,6 +43,9 @@ public class StudentCoursewarePlayRecordController extends BaseController {
     @Autowired
     private StudentCoursewarePlayRecordService studentCoursewarePlayRecordService;
 
+    @Autowired
+    private ExportService exportService;
+
     @ApiOperation(value = "详情", notes = "学生课件播放统计记录-根据详情ID查询单条, 传入id")
     @PreAuthorize("@pcs.hasPermissions('studentCoursewarePlayRecord/detail')")
 //    @GetMapping("/detail/{id}")
@@ -91,6 +101,18 @@ public class StudentCoursewarePlayRecordController extends BaseController {
         return succeed(studentCoursewarePlayRecordService.statList(statQuery));
     }
 
+
+    /**
+     * 练习统计导出
+     */
+    @PostMapping("/exportStatList")
+//    @PreAuthorize("@pcs.hasPermissions('studentCoursewarePlayRecord/exportStatList')")
+    public HttpResponseResult<List<StudentCoursewarePlayRecordWrapper.StatQueryData>> exportStatList(@RequestBody StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
+        exportService.getExportManageFuncMap().get(ExportEnum.VIDEO_PLAY_STAT).apply(JSON.parseObject(JSON.toJSONString(statQuery), Map.class));
+        return succeed();
+    }
+
+
     /**
      * 练习详情统计
      */
@@ -99,4 +121,16 @@ public class StudentCoursewarePlayRecordController extends BaseController {
     public HttpResponseResult<PageInfo<StudentCoursewarePlayRecordWrapper.StatQueryData>> statDetailPage(@RequestBody StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
         return succeed(PageUtil.pageInfo(studentCoursewarePlayRecordService.statDetailPage(statQuery)));
     }
+
+    /**
+     * 练习统计详情导出
+     */
+    @PostMapping("/exportStatDetailPage")
+//    @PreAuthorize("@pcs.hasPermissions('studentCoursewarePlayRecord/exportStatDetailPage')")
+    public HttpResponseResult<List<StudentCoursewarePlayRecordWrapper.StatQueryData>> exportStatDetailPage(@RequestBody StudentCoursewarePlayRecordWrapper.StatQuery statQuery) {
+        statQuery.setPage(1);
+        statQuery.setRows(9999);
+        exportService.getExportManageFuncMap().get(ExportEnum.VIDEO_PLAY_DETAIL_STAT).apply(JSON.parseObject(JSON.toJSONString(statQuery), Map.class));
+        return succeed();
+    }
 }

+ 9 - 1
mec-application/src/main/resources/exportColumnMapper.ini

@@ -400,4 +400,12 @@ fieldColumns = ["organName","musicGroupId","musicGroupName","studentId","student
 
 [平衡关系(分表)-乐团退团学员]
 headColumns = ["分部","乐团编号","乐团名称","学员编号","学员名称"]
-fieldColumns = ["organName","musicGroupId","musicGroupName","studentId","studentName"]
+fieldColumns = ["organName","musicGroupId","musicGroupName","studentId","studentName"]
+
+[视频观看统计]
+headColumns = ["分部名称","会员人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长"]
+fieldColumns = ["organizationName","memberNum","noPlayNum","playTimeLess10","playTimeLess60","playTimeLess120","playTimeLess240","playTimeRather240","avgPlayTime"]
+
+[视频观看详情统计]
+headColumns = ["声部老师","会员人数","无练习人数","0-10分钟","10-60分钟","60-120分钟","120-240分钟",">240分钟","平均时长"]
+fieldColumns = ["teacherName","memberNum","noPlayNum","playTimeLess10","playTimeLess60","playTimeLess120","playTimeLess240","playTimeRather240","avgPlayTime"]

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

@@ -103,6 +103,8 @@ public enum ExportEnum implements BaseEnum<String, ExportEnum> {
     EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO("EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO","平衡关系-学员情况总表"),
     EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL("EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL","平衡关系(分表)-乐团在读学员"),
     EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL("EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL","平衡关系(分表)-乐团退团学员"),
+    VIDEO_PLAY_STAT("VIDEO_PLAY_STAT","视频观看统计"),
+    VIDEO_PLAY_DETAIL_STAT("VIDEO_PLAY_DETAIL_STAT","视频观看详情统计"),
     ;
 
     private String code;

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

@@ -41,6 +41,8 @@ public enum ExportTypeEnum implements BaseEnum<Integer, ExportTypeEnum> {
 	EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO(34,"平衡关系-学员情况总表"),
 	EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL(35,"平衡关系(分表)-乐团在读学员"),
 	EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL(36,"平衡关系(分表)-乐团退团学员"),
+	VIDEO_PLAY_STAT(37,"视频观看统计"),
+	VIDEO_PLAY_DETAIL_STAT(38,"视频观看详情统计"),
 	;
 
 	private Integer code;

+ 8 - 2
mec-biz/src/main/java/com/ym/mec/biz/dal/wrapper/StudentCoursewarePlayRecordWrapper.java

@@ -101,6 +101,12 @@ public class StudentCoursewarePlayRecordWrapper {
     @ApiModel("云课堂观看统计查询")
     public static class StatQuery implements QueryInfo {
 
+        @ApiModelProperty("当前页")
+        private Integer page;
+
+        @ApiModelProperty("分页行数")
+        private Integer rows;
+
         @ApiModelProperty("开始时间")
         private Date startTime;
 
@@ -110,7 +116,7 @@ public class StudentCoursewarePlayRecordWrapper {
         @ApiModelProperty("分部ID")
         private Long organizationId;
 
-        @ApiModelProperty("排序值,1:在读,2:无练习,3:10分钟,4:60分钟,5:120分钟,6:240分钟,7:>240分钟,8:平均时长")
+        @ApiModelProperty("排序值,1:会员,2:无练习,3:10分钟,4:60分钟,5:120分钟,6:240分钟,7:>240分钟,8:平均时长")
         private Integer sort = 1;
 
         @ApiModelProperty("声降序,true:升序,false:降序")
@@ -120,7 +126,7 @@ public class StudentCoursewarePlayRecordWrapper {
         private String sortBy;
 
         @ApiModelProperty(hidden = true)
-        private static List<String> sortKeys = Arrays.asList("readingNum", "noPlayNum", "playTimeLess10", "playTimeLess60", "playTimeLess120", "playTimeLess240", "playTimeRather240", "avgPlayTime");
+        private static List<String> sortKeys = Arrays.asList("memberNum", "noPlayNum", "playTimeLess10", "playTimeLess60", "playTimeLess120", "playTimeLess240", "playTimeRather240", "avgPlayTime");
 
         public String getSortBy() {
             String key = sortKeys.get(getSort() > sortKeys.size() ? 0 : getSort() - 1);

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

@@ -11,6 +11,7 @@ import com.ym.mec.biz.dal.entity.*;
 import com.ym.mec.biz.dal.enums.*;
 import com.ym.mec.biz.dal.page.*;
 import com.ym.mec.biz.dal.vo.TeacherCloudCourseReportDto;
+import com.ym.mec.biz.dal.wrapper.StudentCoursewarePlayRecordWrapper;
 import com.ym.mec.biz.service.*;
 import com.ym.mec.common.constant.CommonConstants;
 import com.ym.mec.common.controller.BaseController;
@@ -180,6 +181,9 @@ public class ExportServiceImpl implements ExportService {
     @Resource
     private HfMerchantConfigService hfMerchantConfigService;
 
+    @Resource
+    private StudentCoursewarePlayRecordService studentCoursewarePlayRecordService;
+
     private static final ExecutorService exportExecutorService = Executors.newFixedThreadPool(10);
 
     @Value("${spring.profiles.active:dev}")
@@ -384,6 +388,24 @@ public class ExportServiceImpl implements ExportService {
         exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_STUDENT_INFO, this::exportBalancedRelationshipStudentInfo);
         exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_STUDENT_NORMAL_DETAIL, this::exportBalancedRelationshipStudentNormalDetail);
         exportManageFuncMap.put(ExportEnum.EXPORT_BALANCED_RELATIONSHIP_STUDENT_QUIT_DETAIL, this::exportBalancedRelationshipStudentQuitDetail);
+        exportManageFuncMap.put(ExportEnum.VIDEO_PLAY_STAT, this::exportVideoPlayStat);
+        exportManageFuncMap.put(ExportEnum.VIDEO_PLAY_DETAIL_STAT, this::exportVideoPlayDetailStat);
+    }
+
+    private HttpResponseResult<String> exportVideoPlayStat(Map<String, Object> info) {
+        StudentCoursewarePlayRecordWrapper.StatQuery queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info), StudentCoursewarePlayRecordWrapper.StatQuery.class);
+        SysUser sysUser = sysUserService.getUser();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.VIDEO_PLAY_STAT, sysUser.getId());
+        return this.asyncExport(() -> this.initExportInfo(studentCoursewarePlayRecordService.statList(queryInfo), managerDownload, ExportEnum.VIDEO_PLAY_STAT),
+                managerDownload.getName());
+    }
+
+    private HttpResponseResult<String> exportVideoPlayDetailStat(Map<String, Object> info) {
+        StudentCoursewarePlayRecordWrapper.StatQuery queryInfo = JSONObject.parseObject(JSONObject.toJSONString(info), StudentCoursewarePlayRecordWrapper.StatQuery.class);
+        SysUser sysUser = sysUserService.getUser();
+        ManagerDownload managerDownload = saveManagerDownload(ExportTypeEnum.VIDEO_PLAY_DETAIL_STAT, sysUser.getId());
+        return this.asyncExport(() -> this.initExportInfo(studentCoursewarePlayRecordService.statDetailPage(queryInfo).getRecords(), managerDownload, ExportEnum.VIDEO_PLAY_DETAIL_STAT),
+                managerDownload.getName());
     }
 
     private HttpResponseResult<String> exportOaSummaryExpenses(Map<String, Object> info) {

+ 2 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/impl/StudentCoursewarePlayRecordServiceImpl.java

@@ -120,4 +120,6 @@ public class StudentCoursewarePlayRecordServiceImpl extends ServiceImpl<StudentC
         page.setRecords(statQueryData);
         return page;
     }
+
+
 }

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

@@ -22,7 +22,7 @@
              , count(distinct if(pr.play_time_ > 10 * 60 and 120 * 60 >= pr.play_time_, pr.user_id_, null))  as playTimeLess120
              , count(distinct if(pr.play_time_ > 120 * 60 and 240 * 60 >= pr.play_time_, pr.user_id_, null)) as playTimeLess240
              , count(distinct if(pr.play_time_ > 240 * 60, pr.user_id_, null))                               as playTimeRather240
-             , (sum(pr.play_time_) / (count(distinct pr.user_id_)))                                          as avgPlayTime
+             , if(count(distinct pr.user_id_) = 0, 0, (sum(pr.play_time_) / (count(distinct pr.user_id_))))  as avgPlayTime
         from organization o
                  left join student s on s.cooperation_organ_id_ = o.id_
                  left join student_courseware_play_record pr on s.user_id_ = pr.user_id_ and pr.create_time_ > #{statQuery.startTime} and #{statQuery.endTime} > pr.create_time_
@@ -40,7 +40,7 @@
              , count(distinct if(pr.play_time_ > 10 * 60 and 120 * 60 >= pr.play_time_, pr.user_id_, null))  as playTimeLess120
              , count(distinct if(pr.play_time_ > 120 * 60 and 240 * 60 >= pr.play_time_, pr.user_id_, null)) as playTimeLess240
              , count(distinct if(pr.play_time_ > 240 * 60, pr.user_id_, null))                               as playTimeRather240
-             , (sum(pr.play_time_) / (count(distinct pr.user_id_)))                                          as avgPlayTime
+             , if(count(distinct pr.user_id_) = 0, 0, (sum(pr.play_time_) / (count(distinct pr.user_id_))))  as avgPlayTime
         from organization o
                  left join student s on s.cooperation_organ_id_ = o.id_
                  left join student_registration sr on sr.user_id_ = s.user_id_