瀏覽代碼

首页统计老师课程云教授使用时长

zouxuan 2 年之前
父節點
當前提交
eb81ddffa5

+ 21 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/dao/TeacherCloudCourseReportDao.java

@@ -0,0 +1,21 @@
+package com.ym.mec.biz.dal.dao;
+
+import com.ym.mec.biz.dal.entity.TeacherCloudCourseReport;
+import com.ym.mec.biz.dal.vo.TeacherCloudCourseReportDto;
+import com.ym.mec.common.dal.BaseDAO;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.Map;
+
+public interface TeacherCloudCourseReportDao extends BaseDAO<Long, TeacherCloudCourseReport> {
+
+
+    void batchSaveBySelect(@Param("classDate") String classDate);
+
+    void deleteByClassDate(@Param("classDate") String classDate);
+
+    int countReport(Map<String, Object> params);
+
+    List<TeacherCloudCourseReportDto> queryReport(Map<String, Object> params);
+}

+ 90 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/entity/TeacherCloudCourseReport.java

@@ -0,0 +1,90 @@
+package com.ym.mec.biz.dal.entity;
+
+import com.ym.mec.common.entity.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 对应数据库表(teacher_cloud_course_report):
+ */
+public class TeacherCloudCourseReport extends BaseEntity {
+
+	private Long id;
+
+	@ApiModelProperty(value = "老师编号")
+	private Long teacherId;
+
+	@ApiModelProperty(value = "分部")
+	private Integer organId;
+
+	@ApiModelProperty(value = "课程时长")
+	private Integer courseTime;
+
+	@ApiModelProperty(value = "训练时长")
+	private Integer playTime;
+
+	@ApiModelProperty(value = "上课时间")
+	private String classDate;
+
+	private Integer tenantId;
+
+	@Override
+	public Integer getTenantId() {
+		return tenantId;
+	}
+
+	@Override
+	public void setTenantId(Integer tenantId) {
+		this.tenantId = tenantId;
+	}
+
+	public Long getId() {
+		return id;
+	}
+
+	public void setId(Long id) {
+		this.id = id;
+	}
+
+	public Long getTeacherId() {
+		return teacherId;
+	}
+
+	public void setTeacherId(Long teacherId) {
+		this.teacherId = teacherId;
+	}
+
+	public Integer getOrganId() {
+		return organId;
+	}
+
+	public void setOrganId(Integer organId) {
+		this.organId = organId;
+	}
+
+	public Integer getCourseTime() {
+		return courseTime;
+	}
+
+	public void setCourseTime(Integer courseTime) {
+		this.courseTime = courseTime;
+	}
+
+	public Integer getPlayTime() {
+		return playTime;
+	}
+
+	public void setPlayTime(Integer playTime) {
+		this.playTime = playTime;
+	}
+
+	public String getClassDate() {
+		return classDate;
+	}
+
+	public void setClassDate(String classDate) {
+		this.classDate = classDate;
+	}
+}

+ 40 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/page/TeacherCloudCourseReportQueryInfo.java

@@ -0,0 +1,40 @@
+package com.ym.mec.biz.dal.page;
+
+import com.ym.mec.common.page.QueryInfo;
+
+/**
+* @author zx
+* @date 2021/9/26 15:52
+*/
+public class TeacherCloudCourseReportQueryInfo extends QueryInfo {
+
+    private String organId;
+
+    private String startTime;
+
+    private String endTime;
+
+    public String getOrganId() {
+        return organId;
+    }
+
+    public void setOrganId(String organId) {
+        this.organId = organId;
+    }
+
+    public String getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(String startTime) {
+        this.startTime = startTime;
+    }
+
+    public String getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(String endTime) {
+        this.endTime = endTime;
+    }
+}

+ 38 - 0
mec-biz/src/main/java/com/ym/mec/biz/dal/vo/TeacherCloudCourseReportDto.java

@@ -0,0 +1,38 @@
+package com.ym.mec.biz.dal.vo;
+
+import com.ym.mec.biz.dal.entity.TeacherCloudCourseReport;
+import io.swagger.annotations.ApiModel;
+
+@ApiModel(value = "老师课程云教练使用统计")
+public class TeacherCloudCourseReportDto extends TeacherCloudCourseReport {
+
+    private String organName;
+
+    private String subjectName;
+
+    private String teacherName;
+
+    public String getOrganName() {
+        return organName;
+    }
+
+    public void setOrganName(String organName) {
+        this.organName = organName;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getTeacherName() {
+        return teacherName;
+    }
+
+    public void setTeacherName(String teacherName) {
+        this.teacherName = teacherName;
+    }
+}

+ 17 - 0
mec-biz/src/main/java/com/ym/mec/biz/service/TeacherCloudCourseReportService.java

@@ -0,0 +1,17 @@
+package com.ym.mec.biz.service;
+
+import com.ym.mec.biz.dal.entity.TeacherCloudCourseReport;
+import com.ym.mec.biz.dal.page.TeacherCloudCourseReportQueryInfo;
+import com.ym.mec.biz.dal.vo.TeacherCloudCourseReportDto;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.BaseService;
+import org.springframework.stereotype.Service;
+
+@Service
+public interface TeacherCloudCourseReportService extends BaseService<Long, TeacherCloudCourseReport> {
+
+    void taskReport();
+
+
+    PageInfo<TeacherCloudCourseReportDto> queryReportPage(TeacherCloudCourseReportQueryInfo queryInfo);
+}

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

@@ -0,0 +1,57 @@
+package com.ym.mec.biz.service.impl;
+
+import com.ym.mec.biz.dal.dao.TeacherCloudCourseReportDao;
+import com.ym.mec.biz.dal.entity.TeacherCloudCourseReport;
+import com.ym.mec.biz.dal.page.TeacherCloudCourseReportQueryInfo;
+import com.ym.mec.biz.dal.vo.TeacherCloudCourseReportDto;
+import com.ym.mec.biz.service.TeacherCloudCourseReportService;
+import com.ym.mec.common.dal.BaseDAO;
+import com.ym.mec.common.page.PageInfo;
+import com.ym.mec.common.service.impl.BaseServiceImpl;
+import com.ym.mec.util.collection.MapUtil;
+import com.ym.mec.util.date.DateUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+@Service
+public class TeacherCloudCourseReportServiceImpl extends BaseServiceImpl<Long, TeacherCloudCourseReport>  implements TeacherCloudCourseReportService {
+	
+	@Autowired
+	private TeacherCloudCourseReportDao teacherCloudCourseReportDao;
+
+	@Override
+	public BaseDAO<Long, TeacherCloudCourseReport> getDAO() {
+		return teacherCloudCourseReportDao;
+	}
+
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public void taskReport() {
+		String classDate = DateUtil.format(DateUtil.addDays(new Date(),-1), DateUtil.DEFAULT_PATTERN);
+		teacherCloudCourseReportDao.deleteByClassDate(classDate);
+		teacherCloudCourseReportDao.batchSaveBySelect(classDate);
+	}
+
+	@Override
+	public PageInfo<TeacherCloudCourseReportDto> queryReportPage(TeacherCloudCourseReportQueryInfo queryInfo) {
+		PageInfo<TeacherCloudCourseReportDto> pageInfo = new PageInfo<>(queryInfo.getPage(), queryInfo.getRows());
+		Map<String, Object> params = new HashMap<String, Object>();
+		MapUtil.populateMap(params, queryInfo);
+
+		List<TeacherCloudCourseReportDto> dataList = null;
+		int count = teacherCloudCourseReportDao.countReport(params);
+		if (count > 0) {
+			pageInfo.setTotal(count);
+			params.put("offset", pageInfo.getOffset());
+			dataList = teacherCloudCourseReportDao.queryReport(params);
+		}
+		if (count == 0) {
+			dataList = new ArrayList<>();
+		}
+		pageInfo.setRows(dataList);
+		return pageInfo;
+	}
+}

+ 82 - 0
mec-biz/src/main/resources/config/mybatis/TeacherCloudCourseReportMapper.xml

@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<!--
+这个文件是自动生成的。
+不要修改此文件。所有改动将在下次重新自动生成时丢失。
+-->
+<mapper namespace="com.ym.mec.biz.dal.dao.TeacherCloudCourseReportDao">
+	
+	<resultMap type="com.ym.mec.biz.dal.entity.TeacherCloudCourseReport" id="TeacherCloudCourseReport">
+		<result column="id_" property="id" />
+		<result column="organ_id_" property="organId" />
+		<result column="teacher_id_" property="teacherId" />
+		<result column="course_time_" property="courseTime" />
+		<result column="play_time_" property="playTime" />
+		<result column="class_date_" property="classDate" />
+		<result column="tenant_id_" property="tenantId" />
+	</resultMap>
+	<insert id="batchSaveBySelect">
+		insert into teacher_cloud_course_report (teacher_id_, organ_id_, course_time_, play_time_, class_date_, tenant_id_)
+		select cs.actual_teacher_id_,cs.organ_id_,cs.courseTime,CASE WHEN SUM(mcr.play_time_) IS NULL THEN 0 ELSE SUM(mcr.play_time_)/60 END playTime,cs.class_date_,cs.tenant_id_ from (
+		select cs.actual_teacher_id_,cs.organ_id_,SUM(TIMESTAMPDIFF(MINUTE,cs.startTime,cs.endTime)) courseTime,cs.class_date_,cs.tenant_id_,cs.startTime,cs.endTime
+		FROM (select cs.actual_teacher_id_,concat(cs.class_date_,' ',cs.start_class_time_) startTime,
+		concat(cs.class_date_,' ',cs.end_class_time_) endTime,cs.organ_id_,cs.class_date_,cs.tenant_id_,cs.id_ FROM course_schedule cs
+		where cs.class_date_ = #{classDate} AND cs.teach_mode_ = 'OFFLINE' AND cs.group_type_ = 'MUSIC') cs
+		group by cs.actual_teacher_id_,cs.class_date_) cs
+		left join sys_music_compare_record mcr ON mcr.client_id_ = 'teacher' AND mcr.create_time_ BETWEEN cs.startTime AND cs.endTime AND cs.actual_teacher_id_ = mcr.user_id_
+		group by cs.actual_teacher_id_
+	</insert>
+	<delete id="deleteByClassDate">
+		delete from teacher_cloud_course_report where class_date_ = #{classDate}
+	</delete>
+	<resultMap id="TeacherCloudCourseReportDto" type="com.ym.mec.biz.dal.vo.TeacherCloudCourseReportDto" extends="TeacherCloudCourseReport">
+		<result property="organName" column="organName"/>
+		<result property="teacherName" column="teacherName"/>
+		<result property="subjectName" column="subjectName"/>
+	</resultMap>
+	<select id="queryReport" resultMap="TeacherCloudCourseReportDto">
+		select tccr.teacher_id_,tccr.organ_id_,SUM(tccr.course_time_) course_time_,sum(tccr.play_time_) play_time_,tccr.class_date_,
+		su.real_name_ teacherName,o.name_ organName,GROUP_CONCAT(distinct sb.name_) subjectName from teacher_cloud_course_report tccr
+		left join sys_user su ON su.id_ = tccr.teacher_id_
+		left join organization o ON o.id_ = tccr.organ_id_
+		left join teacher t ON t.id_ = tccr.teacher_id_
+		left join subject sb ON FIND_IN_SET(sb.id_,t.subject_id_)
+		<where>
+			<if test="startTime != null and startTime != ''">
+				AND tccr.class_date_ BETWEEN #{startTime} AND #{endTime}
+			</if>
+			<if test="organId != null and organId != ''">
+				AND FIND_IN_SET(tccr.organ_id_,#{organId})
+			</if>
+			<if test="search != null and search != ''">
+				AND (tccr.teacher_id_ = #{search} OR su.real_name_ LIKE CONCAT('%',#{search},'%'))
+			</if>
+			<if test="tenantId != null">
+				AND tccr.tenant_id_ = #{tenantId}
+			</if>
+		</where>
+		group by tccr.teacher_id_
+		<if test="sort != null and sort != ''">
+			order by ${sort} ${order}
+		</if>
+		<include refid="global.limit"/>
+	</select>
+	<select id="countReport" resultType="java.lang.Integer">
+		select COUNT(DISTINCT tccr.teacher_id_) from teacher_cloud_course_report tccr
+		left join sys_user su ON su.id_ = tccr.teacher_id_
+		<where>
+			<if test="startTime != null and startTime != ''">
+				AND tccr.class_date_ BETWEEN #{startTime} AND #{endTime}
+			</if>
+			<if test="organId != null and organId != ''">
+				AND FIND_IN_SET(tccr.organ_id_,#{organId})
+			</if>
+			<if test="tenantId != null">
+				AND tccr.tenant_id_ = #{tenantId}
+			</if>
+			<if test="search != null and search != ''">
+				AND (tccr.teacher_id_ = #{search} OR su.real_name_ LIKE CONCAT('%',#{search},'%'))
+			</if>
+		</where>
+	</select>
+</mapper>

+ 3 - 0
mec-client-api/src/main/java/com/ym/mec/task/TaskRemoteService.java

@@ -290,4 +290,7 @@ public interface TaskRemoteService {
 
     @GetMapping("task/initSysMusicCompareDayData")
     void initSysMusicCompareDayData();
+
+    @GetMapping("task/teacherCloudCourseReport")
+    void teacherCloudCourseReport();
 }

+ 5 - 0
mec-client-api/src/main/java/com/ym/mec/task/fallback/TaskRemoteServiceFallback.java

@@ -339,4 +339,9 @@ public class TaskRemoteServiceFallback implements TaskRemoteService {
     public void initSysMusicCompareDayData() {
 
     }
+
+    @Override
+    public void teacherCloudCourseReport() {
+
+    }
 }

+ 19 - 0
mec-task/src/main/java/com/ym/mec/task/jobs/TeacherCloudCourseReportTask.java

@@ -0,0 +1,19 @@
+package com.ym.mec.task.jobs;
+
+import com.ym.mec.task.TaskRemoteService;
+import com.ym.mec.task.core.BaseTask;
+import com.ym.mec.task.core.TaskException;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+@Service
+public class TeacherCloudCourseReportTask extends BaseTask {
+
+	@Autowired
+	private TaskRemoteService taskRemoteService;
+
+	@Override
+	public void execute() throws TaskException {
+		taskRemoteService.teacherCloudCourseReport();
+	}
+}

+ 8 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TaskController.java

@@ -126,6 +126,8 @@ public class TaskController extends BaseController {
     private CooperationShareProfitService cooperationShareProfitService;
     @Autowired
     private StudentTeacherMapperService studentTeacherMapperService;
+    @Autowired
+    private TeacherCloudCourseReportService teacherCloudCourseReportService;
 
 	@GetMapping(value = "/initSysMusicCompareDayData")
 	public void initSysMusicCompareDayData(){
@@ -621,6 +623,12 @@ public class TaskController extends BaseController {
         tempLittleArtistTrainingCampService.checkCampState();
     }
 
+    @ApiOperation("统计老师课程云教练使用时长")
+    @GetMapping(value = "/teacherCloudCourseReport")
+    public void  teacherCloudCourseReport(){
+		teacherCloudCourseReportService.taskReport();
+    }
+
     @ApiOperation("每天早上8点执行-提醒当天开启训练营并已分群的用户开始训练")
     @GetMapping(value = "/pushStartTrain")
     public void  pushStartTrain(){

+ 32 - 0
mec-web/src/main/java/com/ym/mec/web/controller/TeacherCloudCourseReportController.java

@@ -0,0 +1,32 @@
+package com.ym.mec.web.controller;
+
+import com.ym.mec.biz.dal.page.TeacherCloudCourseReportQueryInfo;
+import com.ym.mec.biz.dal.vo.TeacherCloudCourseReportDto;
+import com.ym.mec.biz.service.TeacherCloudCourseReportService;
+import com.ym.mec.common.controller.BaseController;
+import com.ym.mec.common.entity.HttpResponseResult;
+import com.ym.mec.common.page.PageInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@Api(tags = "老师课程云教练使用时长统计")
+@RequestMapping("teacherCloudCourseReport")
+@RestController
+public class TeacherCloudCourseReportController extends BaseController {
+
+    @Autowired
+    private TeacherCloudCourseReportService teacherCloudCourseReportService;
+
+    @ApiOperation(value = "分页查询")
+    @PostMapping("/queryReportPage")
+    @PreAuthorize("@pcs.hasPermissions('teacherCloudCourseReport/queryReportPage')")
+    public HttpResponseResult<PageInfo<TeacherCloudCourseReportDto>> queryReportPage(@RequestBody TeacherCloudCourseReportQueryInfo queryInfo){
+        return succeed(teacherCloudCourseReportService.queryReportPage(queryInfo));
+    }
+}