提交 55520b74 编写于 作者: 1 1074760496

增加课程的学习统计与图表

上级 0687933a
package com.roncoo.education.course.common.interfaces;
import java.util.List;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
......@@ -10,25 +12,65 @@ import com.roncoo.education.course.common.bean.vo.CourseUserStudyLogVO;
import com.roncoo.education.util.base.Page;
/**
* 课程用户学习日志
* 课程用户学习日志
*
* @author wujing
*/
public interface BossCourseUserStudyLog {
@RequestMapping(value = "/boss/course/courseUserStudyLog/listForPage", method = RequestMethod.POST)
Page<CourseUserStudyLogVO> listForPage(@RequestBody CourseUserStudyLogQO qo);
@RequestMapping(value = "/boss/course/courseUserStudyLog/save", method = RequestMethod.POST)
int save(@RequestBody CourseUserStudyLogQO qo);
@RequestMapping(value = "/boss/course/courseUserStudyLog/delete/{id}", method = RequestMethod.DELETE)
int deleteById(@PathVariable(value = "id") Long id);
@RequestMapping(value = "/boss/course/courseUserStudyLog/update", method = RequestMethod.PUT)
int updateById(@RequestBody CourseUserStudyLogQO qo);
@RequestMapping(value = "/boss/course/courseUserStudyLog/get/{id}", method = RequestMethod.GET)
CourseUserStudyLogVO getById(@PathVariable(value = "id") Long id);
/**
* 分页-课程播放量排行榜
*
* @param qo
* @return
* @author YZJ
*/
@RequestMapping(value = "/boss/course/courseUserStudyLog/courseList", method = RequestMethod.POST)
Page<CourseUserStudyLogVO> courseList(@RequestBody CourseUserStudyLogQO qo);
/**
* 根据时间取得前五播放量的课程
*
* @param qo
* @return
* @author YZJ
*/
@RequestMapping(value = "/boss/course/courseUserStudyLog/countCourseIdByGmtCreate", method = RequestMethod.POST)
List<CourseUserStudyLogVO> countCourseIdByGmtCreate(@RequestBody CourseUserStudyLogQO qo);
/**
* 分页-课时播放量排行榜
*
* @param qo
* @return
* @author YZJ
*/
@RequestMapping(value = "/boss/course/courseUserStudyLog/periodList", method = RequestMethod.POST)
Page<CourseUserStudyLogVO> periodList(@RequestBody CourseUserStudyLogQO qo);
/**
* 根据时间和课程ID取得前五播放量的课时
*
* @param qo
* @return
* @author YZJ
*/
@RequestMapping(value = "/boss/course/courseUserStudyLog/countPeriodNoByCourseIdAndGmtCreate", method = RequestMethod.POST)
List<CourseUserStudyLogVO> countPeriodNoByCourseIdAndGmtCreate(@RequestBody CourseUserStudyLogQO qo);
}
......@@ -105,7 +105,7 @@ public class AuthApiCourseBiz extends BaseBiz {
// 免费:课时免费,章节免费,课程免费
if (IsFreeEnum.FREE.getCode().equals(courseChapterPeriod.getIsFree()) || IsFreeEnum.FREE.getCode().equals(courseChapter.getIsFree()) || IsFreeEnum.FREE.getCode().equals(course.getIsFree())) {
AuthCourseSignDTO authCourseSignDTO = getSgin(authCourseSignBO);
callbackExecutor.execute(new StudyLog(authCourseSignBO, courseChapterPeriod, course));
callbackExecutor.execute(new StudyLog(authCourseSignBO, courseChapterPeriod, course, courseChapter));
return Result.success(authCourseSignDTO);
}
......@@ -117,7 +117,7 @@ public class AuthApiCourseBiz extends BaseBiz {
// 成功
AuthCourseSignDTO authCourseSignDTO = getSgin(authCourseSignBO);
callbackExecutor.execute(new StudyLog(authCourseSignBO, courseChapterPeriod, course));
callbackExecutor.execute(new StudyLog(authCourseSignBO, courseChapterPeriod, course, courseChapter));
return Result.success(authCourseSignDTO);
}
......@@ -139,7 +139,7 @@ public class AuthApiCourseBiz extends BaseBiz {
// 查询课程介绍
CourseIntroduce courseIntroduce = courseIntroduceDao.getById(course.getIntroduceId());
dto.setIntroduce(BeanUtil.copyProperties(courseIntroduce, CourseIntroduceDTO.class).getIntroduce());
// 先假设为收费课程且用户未付款
dto.setIsPay(IsPayEnum.NO.getCode());
// 查询订单号,查看用户是否购买了课程,是否存在订单号
......@@ -155,16 +155,16 @@ public class AuthApiCourseBiz extends BaseBiz {
if (IsFreeEnum.FREE.getCode().equals(course.getIsFree())) {
dto.setIsPay(IsPayEnum.YES.getCode());
}
//此处用于测试支付课程,无论怎样都是未购买
// 此处用于测试支付课程,无论怎样都是未购买
if (SystemUtil.TEST_COURSE.equals(course.getId().toString())) {
dto.setIsPay(IsPayEnum.NO.getCode());
}
// 查询讲师信息
LecturerVO lecturerVO = bossLecturer.getByLecturerUserNo(dto.getLecturerUserNo());
dto.setLecturer(BeanUtil.copyProperties(lecturerVO, AuthLecturerDTO.class));
// 查询章节信息
List<CourseChapter> courseChapterList = courseChapterDao.listByCourseIdAndStatusId(authCourseViewBO.getCourseId(), StatusIdEnum.YES.getCode());
// 如果为空就直接返回
......@@ -178,7 +178,7 @@ public class AuthApiCourseBiz extends BaseBiz {
List<CourseChapterPeriod> courseChapterPeriodList = courseChapterPeriodDao.listByChapterId(courseChapterDTO.getId());
courseChapterDTO.setPeriodList(PageUtil.copyList(courseChapterPeriodList, CourseChapterPeriodDTO.class));
}
return Result.success(dto);
}
......@@ -221,8 +221,9 @@ public class AuthApiCourseBiz extends BaseBiz {
private AuthCourseSignBO authCourseSignBO;
private CourseChapterPeriod courseChapterPeriod;
private Course course;
private CourseChapter courseChapter;
public StudyLog(AuthCourseSignBO authCourseSignBO, CourseChapterPeriod courseChapterPeriod, Course course) {
public StudyLog(AuthCourseSignBO authCourseSignBO, CourseChapterPeriod courseChapterPeriod, Course course, CourseChapter courseChapter) {
this.authCourseSignBO = authCourseSignBO;
this.courseChapterPeriod = courseChapterPeriod;
this.course = course;
......@@ -234,7 +235,7 @@ public class AuthApiCourseBiz extends BaseBiz {
updateCount(course);
// 学习日志与统计
studyCount(authCourseSignBO, courseChapterPeriod, course);
studyCount(authCourseSignBO, courseChapterPeriod, course, courseChapter);
}
/**
......@@ -247,7 +248,7 @@ public class AuthApiCourseBiz extends BaseBiz {
return courseDao.updateById(record);
}
private void studyCount(AuthCourseSignBO authCourseSignBO, CourseChapterPeriod courseChapterPeriod, Course course) {
private void studyCount(AuthCourseSignBO authCourseSignBO, CourseChapterPeriod courseChapterPeriod, Course course, CourseChapter courseChapter) {
// 查找课程用户关联表
CourseUserStudy courseUserStudy = courseUserStudyDao.getByUserNoAndCourseId(authCourseSignBO.getUserNo(), courseChapterPeriod.getCourseId());
// 如果不存在记录
......@@ -261,8 +262,11 @@ public class AuthApiCourseBiz extends BaseBiz {
CourseUserStudyLog courseUserStudyLog = new CourseUserStudyLog();
courseUserStudyLog.setPeriodId(courseChapterPeriod.getId());
courseUserStudyLog.setPeriodName(courseChapterPeriod.getPeriodName());
courseUserStudyLog.setChapterId(courseChapterPeriod.getChapterId());
courseUserStudyLog.setChapterName(courseChapter.getChapterName());
courseUserStudyLog.setCourseId(courseChapterPeriod.getCourseId());
courseUserStudyLog.setCourseName(course.getCourseName());
courseUserStudyLog.setUserNo(authCourseSignBO.getUserNo());
courseUserStudyLogDao.save(courseUserStudyLog);
} else {
......@@ -271,8 +275,11 @@ public class AuthApiCourseBiz extends BaseBiz {
// 记录
courseUserStudyLog = new CourseUserStudyLog();
courseUserStudyLog.setPeriodId(courseChapterPeriod.getId());
courseUserStudyLog.setPeriodName(courseChapterPeriod.getPeriodName());
courseUserStudyLog.setChapterId(courseChapterPeriod.getChapterId());
courseUserStudyLog.setChapterName(courseChapter.getChapterName());
courseUserStudyLog.setCourseId(courseChapterPeriod.getCourseId());
courseUserStudyLog.setCourseName(course.getCourseName());
courseUserStudyLog.setUserNo(authCourseSignBO.getUserNo());
courseUserStudyLogDao.save(courseUserStudyLog);
......
package com.roncoo.education.course.service.controller;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.roncoo.education.course.common.bean.qo.CourseUserStudyLogQO;
import com.roncoo.education.course.common.bean.vo.CourseUserStudyLogVO;
......@@ -13,39 +15,59 @@ import com.roncoo.education.util.base.BaseController;
import com.roncoo.education.util.base.Page;
/**
* 课程用户学习日志
* 课程用户学习日志
*
* @author wujing
*/
@RestController
public class BossCourseUserStudyLogController extends BaseController implements BossCourseUserStudyLog{
public class BossCourseUserStudyLogController extends BaseController implements BossCourseUserStudyLog {
@Autowired
private BossCourseUserStudyLogBiz biz;
@Override
public Page<CourseUserStudyLogVO> listForPage(@RequestBody CourseUserStudyLogQO qo){
public Page<CourseUserStudyLogVO> listForPage(@RequestBody CourseUserStudyLogQO qo) {
return biz.listForPage(qo);
}
@Override
public int save(@RequestBody CourseUserStudyLogQO qo){
@Override
public int save(@RequestBody CourseUserStudyLogQO qo) {
return biz.save(qo);
}
@Override
public int deleteById(@PathVariable(value = "id") Long id){
@Override
public int deleteById(@PathVariable(value = "id") Long id) {
return biz.deleteById(id);
}
@Override
public int updateById(@RequestBody CourseUserStudyLogQO qo){
@Override
public int updateById(@RequestBody CourseUserStudyLogQO qo) {
return biz.updateById(qo);
}
@Override
public CourseUserStudyLogVO getById(@PathVariable(value = "id") Long id){
@Override
public CourseUserStudyLogVO getById(@PathVariable(value = "id") Long id) {
return biz.getById(id);
}
@Override
public Page<CourseUserStudyLogVO> courseList(@RequestBody CourseUserStudyLogQO qo) {
return biz.courseList(qo);
}
@Override
public List<CourseUserStudyLogVO> countCourseIdByGmtCreate(@RequestBody CourseUserStudyLogQO qo) {
return biz.countCourseIdByGmtCreate(qo);
}
@Override
public Page<CourseUserStudyLogVO> periodList(@RequestBody CourseUserStudyLogQO qo) {
return biz.periodList(qo);
}
@Override
public List<CourseUserStudyLogVO> countPeriodNoByCourseIdAndGmtCreate(@RequestBody CourseUserStudyLogQO qo) {
return biz.countPeriodNoByCourseIdAndGmtCreate(qo);
}
}
package com.roncoo.education.course.service.controller.biz;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import com.roncoo.education.util.tools.DateUtil;
import com.roncoo.education.course.common.bean.qo.CourseUserStudyLogQO;
import com.roncoo.education.course.common.bean.vo.CourseUserStudyLogVO;
import com.roncoo.education.course.service.dao.CourseChapterDao;
......@@ -19,7 +20,9 @@ import com.roncoo.education.course.service.dao.impl.mapper.entity.CourseUserStud
import com.roncoo.education.course.service.dao.impl.mapper.entity.CourseUserStudyLogExample.Criteria;
import com.roncoo.education.util.base.Page;
import com.roncoo.education.util.base.PageUtil;
import com.roncoo.education.util.tools.ArrayListUtil;
import com.roncoo.education.util.tools.BeanUtil;
import com.roncoo.education.util.tools.DateUtil;
/**
* 课程用户学习日志
......@@ -87,4 +90,24 @@ public class BossCourseUserStudyLogBiz {
return dao.updateById(record);
}
public Page<CourseUserStudyLogVO> courseList(CourseUserStudyLogQO qo) {
Page<CourseUserStudyLog> list = dao.courseList(qo.getPageCurrent(), qo.getPageSize(), qo.getBeginGmtCreate(), qo.getEndGmtCreate());
return PageUtil.transform(list, CourseUserStudyLogVO.class);
}
public List<CourseUserStudyLogVO> countCourseIdByGmtCreate(CourseUserStudyLogQO qo) {
List<CourseUserStudyLog> list = dao.countCourseIdByGmtCreate(qo.getBeginGmtCreate(), qo.getEndGmtCreate());
return ArrayListUtil.copy(list, CourseUserStudyLogVO.class);
}
public Page<CourseUserStudyLogVO> periodList(CourseUserStudyLogQO qo) {
Page<CourseUserStudyLog> list = dao.periodList(qo.getCourseId(), qo.getPageCurrent(), qo.getPageSize(), qo.getBeginGmtCreate(), qo.getEndGmtCreate());
return PageUtil.transform(list, CourseUserStudyLogVO.class);
}
public List<CourseUserStudyLogVO> countPeriodNoByCourseIdAndGmtCreate(CourseUserStudyLogQO qo) {
List<CourseUserStudyLog> list = dao.countPeriodNoByCourseIdAndGmtCreate(qo.getCourseId(), qo.getBeginGmtCreate(), qo.getEndGmtCreate());
return ArrayListUtil.copy(list, CourseUserStudyLogVO.class);
}
}
package com.roncoo.education.course.service.dao;
import java.util.List;
import com.roncoo.education.course.service.dao.impl.mapper.entity.CourseUserStudyLog;
import com.roncoo.education.course.service.dao.impl.mapper.entity.CourseUserStudyLogExample;
import com.roncoo.education.util.base.Page;
......@@ -16,4 +18,40 @@ public interface CourseUserStudyLogDao {
Page<CourseUserStudyLog> listForPage(int pageCurrent, int pageSize, CourseUserStudyLogExample example);
CourseUserStudyLog getByUserNoAndPeriodId(Long userNo, Long periodId);
/**
* 分页-课程播放量排行榜
*
* @param qo
* @return
* @author YZJ
*/
Page<CourseUserStudyLog> courseList(int pageCurrent, int pageSize, String beginGmtCreate, String endGmtCreate);
/**
* 根据时间取得前五播放量的课程
*
* @param qo
* @return
* @author YZJ
*/
List<CourseUserStudyLog> countCourseIdByGmtCreate(String beginGmtCreate, String endGmtCreate);
/**
* 分页-课时播放量排行榜
*
* @param qo
* @return
* @author YZJ
*/
Page<CourseUserStudyLog> periodList(Long courseId, int pageCurrent, int pageSize, String beginGmtCreate, String endGmtCreate);
/**
* 根据时间和课程ID取得前五播放量的课时
*
* @param qo
* @return
* @author YZJ
*/
List<CourseUserStudyLog> countPeriodNoByCourseIdAndGmtCreate(Long courseId, String beginGmtCreate, String endGmtCreate);
}
\ No newline at end of file
package com.roncoo.education.course.service.dao.impl;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import org.springframework.util.StringUtils;
import com.roncoo.education.course.service.dao.CourseUserStudyLogDao;
import com.roncoo.education.course.service.dao.impl.mapper.CourseUserStudyLogMapper;
......@@ -12,9 +17,14 @@ import com.roncoo.education.course.service.dao.impl.mapper.entity.CourseUserStud
import com.roncoo.education.util.base.Page;
import com.roncoo.education.util.base.PageUtil;
import com.roncoo.education.util.tools.IdWorker;
import com.roncoo.education.util.tools.SqlUtil;
@Repository
public class CourseUserStudyLogDaoImpl implements CourseUserStudyLogDao {
@Autowired
private JdbcTemplate jdbcTemplate;
@Autowired
private CourseUserStudyLogMapper courseUserStudyLogMapper;
......@@ -60,4 +70,120 @@ public class CourseUserStudyLogDaoImpl implements CourseUserStudyLogDao {
}
return list.get(0);
}
private <T> List<T> queryForObjectList(String sql, Class<T> clazz, Object... args) {
return jdbcTemplate.query(sql, args, new BeanPropertyRowMapper<T>(clazz));
}
@Override
public Page<CourseUserStudyLog> courseList(int PageCurrent, int PageSize, String beginGmtCreate, String endGmtCreate) {
StringBuilder sql = new StringBuilder();
sql.append("select course_name as courseName, course_id as courseId, count(course_id) as chapterId from course_user_study_log ");
if (!StringUtils.isEmpty(beginGmtCreate) && !StringUtils.isEmpty(endGmtCreate)) {
sql.append("where gmt_create >= '").append(beginGmtCreate).append(" 00:00:00' and ").append("gmt_create <= '").append(endGmtCreate).append(" 23:59:59' ").append("group by course_id order by chapterId desc limit ?,?");
} else if (!StringUtils.isEmpty(beginGmtCreate)) {
sql.append("where gmt_create >= '").append(beginGmtCreate).append(" 00:00:00' ").append("group by course_id order by chapterId desc limit ?,?");
} else if (!StringUtils.isEmpty(endGmtCreate)) {
sql.append("where gmt_create <= '").append(endGmtCreate).append(" 23:59:59' ").append("group by course_id order by chapterId desc limit ?,?");
} else {
sql.append("group by course_id order by chapterId desc limit ?,?");
}
int totalCount = courseTotalCount(beginGmtCreate, endGmtCreate);
int start = SqlUtil.countOffset(PageCurrent, PageSize);
int pageSize = PageUtil.checkPageSize(PageSize);
int pageCurrent = SqlUtil.checkPageCurrent(totalCount, pageSize, PageCurrent);
int totalPage = SqlUtil.countTotalPage(totalCount, pageSize);
List<CourseUserStudyLog> list = queryForObjectList(sql.toString(), CourseUserStudyLog.class, start, pageSize);
Page<CourseUserStudyLog> page = new Page<>(totalCount, totalPage, pageCurrent, pageSize, list);
return page;
}
private int courseTotalCount(String beginGmtCreate, String endGmtCreate) {
StringBuilder sql = new StringBuilder();
Map<String, Object> map = new HashMap<String, Object>();
if (!StringUtils.isEmpty(beginGmtCreate) && !StringUtils.isEmpty(endGmtCreate)) {
sql.append("select count(distinct course_id) as count from course_user_study_log ").append("where gmt_create >= '").append(beginGmtCreate).append(" 00:00:00' and ").append("gmt_create <= '").append(endGmtCreate).append(" 23:59:59'");
} else if (!StringUtils.isEmpty(beginGmtCreate)) {
sql.append("select count(distinct course_id) as count from course_user_study_log ").append("where gmt_create >= '").append(beginGmtCreate).append(" 00:00:00'");
} else if (!StringUtils.isEmpty(endGmtCreate)) {
sql.append("select count(distinct course_id) as count from course_user_study_log ").append("where gmt_create <= '").append(endGmtCreate).append(" 23:59:59'");
} else {
sql.append("select count(distinct course_id) as count from course_user_study_log ");
}
map = jdbcTemplate.queryForMap(sql.toString());
Integer count = 0;
if (!StringUtils.isEmpty(map.get("count"))) {
count = Integer.valueOf(String.valueOf(map.get("count")));
}
return count;
}
@Override
public List<CourseUserStudyLog> countCourseIdByGmtCreate(String beginGmtCreate, String endGmtCreate) {
StringBuilder sql = new StringBuilder();
sql.append("select count(course_id) as courseId, course_name as courseName from course_user_study_log ");
if (!StringUtils.isEmpty(beginGmtCreate) && !StringUtils.isEmpty(endGmtCreate)) {
sql.append("where gmt_create >= '").append(beginGmtCreate).append(" 00:00:00' and ").append("gmt_create <= '").append(endGmtCreate).append(" 23:59:59' ").append(" group by course_id order by courseId desc limit 0,5");
} else if (!StringUtils.isEmpty(beginGmtCreate)) {
sql.append("where gmt_create >= '").append(beginGmtCreate).append(" 00:00:00'").append(" group by course_id order by courseId desc limit 0,5");
} else if (!StringUtils.isEmpty(endGmtCreate)) {
sql.append("where gmt_create <= '").append(endGmtCreate).append(" 23:59:59'").append(" group by course_id order by courseId desc limit 0,5");
} else {
sql.append(" group by course_id order by courseId desc limit 0,5");
}
return queryForObjectList(sql.toString(), CourseUserStudyLog.class);
}
@Override
public Page<CourseUserStudyLog> periodList(Long courseId, int PageCurrent, int PageSize, String beginGmtCreate, String endGmtCreate) {
StringBuilder sql = new StringBuilder();
sql.append("select period_name as periodName, period_id as periodId, count(period_id) as chapterId from course_user_study_log where ");
if (!StringUtils.isEmpty(beginGmtCreate)) {
sql.append(" gmt_create >= '").append(beginGmtCreate).append(" 00:00:00' and ");
}
if (!StringUtils.isEmpty(endGmtCreate)) {
sql.append(" gmt_create <= '").append(endGmtCreate).append(" 23:59:59' and ");
}
sql.append("course_id = ? group by period_id order by chapterId desc limit ?,?");
int totalCount = periodTotalCount(courseId, beginGmtCreate, endGmtCreate);
int start = SqlUtil.countOffset(PageCurrent, PageSize);
int pageSize = PageUtil.checkPageSize(PageSize);
int pageCurrent = SqlUtil.checkPageCurrent(totalCount, pageSize, PageCurrent);
int totalPage = SqlUtil.countTotalPage(totalCount, pageSize);
List<CourseUserStudyLog> list = queryForObjectList(sql.toString(), CourseUserStudyLog.class, courseId, start, pageSize);
Page<CourseUserStudyLog> page = new Page<>(totalCount, totalPage, pageCurrent, pageSize, list);
return page;
}
private int periodTotalCount(Long courseId, String beginGmtCreate, String endGmtCreate) {
StringBuilder sql = new StringBuilder();
sql.append("select count(distinct period_id) as count from course_user_study_log where ");
if (!StringUtils.isEmpty(beginGmtCreate)) {
sql.append("gmt_create >= '").append(beginGmtCreate).append(" 00:00:00' and ");
}
if (!StringUtils.isEmpty(endGmtCreate)) {
sql.append("gmt_create <= '").append(endGmtCreate).append(" 23:59:59' and ");
}
sql.append("course_id = ?");
Integer count = 0;
Map<String, Object> map = jdbcTemplate.queryForMap(sql.toString(), courseId);
if (!StringUtils.isEmpty(map.get("count"))) {
count = Integer.valueOf(String.valueOf(map.get("count")));
}
return count;
}
@Override
public List<CourseUserStudyLog> countPeriodNoByCourseIdAndGmtCreate(Long courseId, String beginGmtCreate, String endGmtCreate) {
StringBuilder sql = new StringBuilder();
sql.append("select count(period_id) as periodId, period_name as periodName from course_user_study_log where ");
if (!StringUtils.isEmpty(beginGmtCreate)) {
sql.append("gmt_create >= '").append(beginGmtCreate).append(" 00:00:00' and ");
}
if (!StringUtils.isEmpty(endGmtCreate)) {
sql.append("gmt_create <= '").append(endGmtCreate).append(" 23:59:59' and ");
}
sql.append("course_id = ? group by period_id order by periodId desc limit 0,5");
return queryForObjectList(sql.toString(), CourseUserStudyLog.class, courseId);
}
}
\ No newline at end of file
......@@ -10,10 +10,16 @@ public class CourseUserStudyLog implements Serializable {
private Long courseId;
private String courseName;
private Long chapterId;
private String chapterName;
private Long periodId;
private String periodName;
private Long userNo;
private static final long serialVersionUID = 1L;
......@@ -42,6 +48,14 @@ public class CourseUserStudyLog implements Serializable {
this.courseId = courseId;
}
public String getCourseName() {
return courseName;
}
public void setCourseName(String courseName) {
this.courseName = courseName == null ? null : courseName.trim();
}
public Long getChapterId() {
return chapterId;
}
......@@ -50,6 +64,14 @@ public class CourseUserStudyLog implements Serializable {
this.chapterId = chapterId;
}
public String getChapterName() {
return chapterName;
}
public void setChapterName(String chapterName) {
this.chapterName = chapterName == null ? null : chapterName.trim();
}
public Long getPeriodId() {
return periodId;
}
......@@ -58,6 +80,14 @@ public class CourseUserStudyLog implements Serializable {
this.periodId = periodId;
}
public String getPeriodName() {
return periodName;
}
public void setPeriodName(String periodName) {
this.periodName = periodName == null ? null : periodName.trim();
}
public Long getUserNo() {
return userNo;
}
......@@ -75,8 +105,11 @@ public class CourseUserStudyLog implements Serializable {
sb.append(", id=").append(id);
sb.append(", gmtCreate=").append(gmtCreate);
sb.append(", courseId=").append(courseId);
sb.append(", courseName=").append(courseName);
sb.append(", chapterId=").append(chapterId);
sb.append(", chapterName=").append(chapterName);
sb.append(", periodId=").append(periodId);
sb.append(", periodName=").append(periodName);
sb.append(", userNo=").append(userNo);
sb.append(", serialVersionUID=").append(serialVersionUID);
sb.append("]");
......
......@@ -305,6 +305,76 @@ public class CourseUserStudyLogExample {
return (Criteria) this;
}
public Criteria andCourseNameIsNull() {
addCriterion("course_name is null");
return (Criteria) this;
}
public Criteria andCourseNameIsNotNull() {
addCriterion("course_name is not null");
return (Criteria) this;
}
public Criteria andCourseNameEqualTo(String value) {
addCriterion("course_name =", value, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameNotEqualTo(String value) {
addCriterion("course_name <>", value, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameGreaterThan(String value) {
addCriterion("course_name >", value, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameGreaterThanOrEqualTo(String value) {
addCriterion("course_name >=", value, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameLessThan(String value) {
addCriterion("course_name <", value, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameLessThanOrEqualTo(String value) {
addCriterion("course_name <=", value, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameLike(String value) {
addCriterion("course_name like", value, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameNotLike(String value) {
addCriterion("course_name not like", value, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameIn(List<String> values) {
addCriterion("course_name in", values, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameNotIn(List<String> values) {
addCriterion("course_name not in", values, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameBetween(String value1, String value2) {
addCriterion("course_name between", value1, value2, "courseName");
return (Criteria) this;
}
public Criteria andCourseNameNotBetween(String value1, String value2) {
addCriterion("course_name not between", value1, value2, "courseName");
return (Criteria) this;
}
public Criteria andChapterIdIsNull() {
addCriterion("chapter_id is null");
return (Criteria) this;
......@@ -365,6 +435,76 @@ public class CourseUserStudyLogExample {
return (Criteria) this;
}
public Criteria andChapterNameIsNull() {
addCriterion("chapter_name is null");
return (Criteria) this;
}
public Criteria andChapterNameIsNotNull() {
addCriterion("chapter_name is not null");
return (Criteria) this;
}
public Criteria andChapterNameEqualTo(String value) {
addCriterion("chapter_name =", value, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameNotEqualTo(String value) {
addCriterion("chapter_name <>", value, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameGreaterThan(String value) {
addCriterion("chapter_name >", value, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameGreaterThanOrEqualTo(String value) {
addCriterion("chapter_name >=", value, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameLessThan(String value) {
addCriterion("chapter_name <", value, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameLessThanOrEqualTo(String value) {
addCriterion("chapter_name <=", value, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameLike(String value) {
addCriterion("chapter_name like", value, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameNotLike(String value) {
addCriterion("chapter_name not like", value, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameIn(List<String> values) {
addCriterion("chapter_name in", values, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameNotIn(List<String> values) {
addCriterion("chapter_name not in", values, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameBetween(String value1, String value2) {
addCriterion("chapter_name between", value1, value2, "chapterName");
return (Criteria) this;
}
public Criteria andChapterNameNotBetween(String value1, String value2) {
addCriterion("chapter_name not between", value1, value2, "chapterName");
return (Criteria) this;
}
public Criteria andPeriodIdIsNull() {
addCriterion("period_id is null");
return (Criteria) this;
......@@ -425,6 +565,76 @@ public class CourseUserStudyLogExample {
return (Criteria) this;
}
public Criteria andPeriodNameIsNull() {
addCriterion("period_name is null");
return (Criteria) this;
}
public Criteria andPeriodNameIsNotNull() {
addCriterion("period_name is not null");
return (Criteria) this;
}
public Criteria andPeriodNameEqualTo(String value) {
addCriterion("period_name =", value, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameNotEqualTo(String value) {
addCriterion("period_name <>", value, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameGreaterThan(String value) {
addCriterion("period_name >", value, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameGreaterThanOrEqualTo(String value) {
addCriterion("period_name >=", value, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameLessThan(String value) {
addCriterion("period_name <", value, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameLessThanOrEqualTo(String value) {
addCriterion("period_name <=", value, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameLike(String value) {
addCriterion("period_name like", value, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameNotLike(String value) {
addCriterion("period_name not like", value, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameIn(List<String> values) {
addCriterion("period_name in", values, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameNotIn(List<String> values) {
addCriterion("period_name not in", values, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameBetween(String value1, String value2) {
addCriterion("period_name between", value1, value2, "periodName");
return (Criteria) this;
}
public Criteria andPeriodNameNotBetween(String value1, String value2) {
addCriterion("period_name not between", value1, value2, "periodName");
return (Criteria) this;
}
public Criteria andUserNoIsNull() {
addCriterion("user_no is null");
return (Criteria) this;
......
......@@ -5,8 +5,11 @@
<id column="id" property="id" jdbcType="BIGINT" />
<result column="gmt_create" property="gmtCreate" jdbcType="TIMESTAMP" />
<result column="course_id" property="courseId" jdbcType="BIGINT" />
<result column="course_name" property="courseName" jdbcType="VARCHAR" />
<result column="chapter_id" property="chapterId" jdbcType="BIGINT" />
<result column="chapter_name" property="chapterName" jdbcType="VARCHAR" />
<result column="period_id" property="periodId" jdbcType="BIGINT" />
<result column="period_name" property="periodName" jdbcType="VARCHAR" />
<result column="user_no" property="userNo" jdbcType="BIGINT" />
</resultMap>
<sql id="Example_Where_Clause" >
......@@ -68,7 +71,8 @@
</where>
</sql>
<sql id="Base_Column_List" >
id, gmt_create, course_id, chapter_id, period_id, user_no
id, gmt_create, course_id, course_name, chapter_id, chapter_name, period_id, period_name,
user_no
</sql>
<select id="selectByExample" resultMap="BaseResultMap" parameterType="com.roncoo.education.course.service.dao.impl.mapper.entity.CourseUserStudyLogExample" >
select
......@@ -105,10 +109,12 @@
</delete>
<insert id="insert" parameterType="com.roncoo.education.course.service.dao.impl.mapper.entity.CourseUserStudyLog" >
insert into course_user_study_log (id, gmt_create, course_id,
chapter_id, period_id, user_no
course_name, chapter_id, chapter_name,
period_id, period_name, user_no
)
values (#{id,jdbcType=BIGINT}, #{gmtCreate,jdbcType=TIMESTAMP}, #{courseId,jdbcType=BIGINT},
#{chapterId,jdbcType=BIGINT}, #{periodId,jdbcType=BIGINT}, #{userNo,jdbcType=BIGINT}
#{courseName,jdbcType=VARCHAR}, #{chapterId,jdbcType=BIGINT}, #{chapterName,jdbcType=VARCHAR},
#{periodId,jdbcType=BIGINT}, #{periodName,jdbcType=VARCHAR}, #{userNo,jdbcType=BIGINT}
)
</insert>
<insert id="insertSelective" parameterType="com.roncoo.education.course.service.dao.impl.mapper.entity.CourseUserStudyLog" >
......@@ -123,12 +129,21 @@
<if test="courseId != null" >
course_id,
</if>
<if test="courseName != null" >
course_name,
</if>
<if test="chapterId != null" >
chapter_id,
</if>
<if test="chapterName != null" >
chapter_name,
</if>
<if test="periodId != null" >
period_id,
</if>
<if test="periodName != null" >
period_name,
</if>
<if test="userNo != null" >
user_no,
</if>
......@@ -143,12 +158,21 @@
<if test="courseId != null" >
#{courseId,jdbcType=BIGINT},
</if>
<if test="courseName != null" >
#{courseName,jdbcType=VARCHAR},
</if>
<if test="chapterId != null" >
#{chapterId,jdbcType=BIGINT},
</if>
<if test="chapterName != null" >
#{chapterName,jdbcType=VARCHAR},
</if>
<if test="periodId != null" >
#{periodId,jdbcType=BIGINT},
</if>
<if test="periodName != null" >
#{periodName,jdbcType=VARCHAR},
</if>
<if test="userNo != null" >
#{userNo,jdbcType=BIGINT},
</if>
......@@ -172,12 +196,21 @@
<if test="record.courseId != null" >
course_id = #{record.courseId,jdbcType=BIGINT},
</if>
<if test="record.courseName != null" >
course_name = #{record.courseName,jdbcType=VARCHAR},
</if>
<if test="record.chapterId != null" >
chapter_id = #{record.chapterId,jdbcType=BIGINT},
</if>
<if test="record.chapterName != null" >
chapter_name = #{record.chapterName,jdbcType=VARCHAR},
</if>
<if test="record.periodId != null" >
period_id = #{record.periodId,jdbcType=BIGINT},
</if>
<if test="record.periodName != null" >
period_name = #{record.periodName,jdbcType=VARCHAR},
</if>
<if test="record.userNo != null" >
user_no = #{record.userNo,jdbcType=BIGINT},
</if>
......@@ -191,8 +224,11 @@
set id = #{record.id,jdbcType=BIGINT},
gmt_create = #{record.gmtCreate,jdbcType=TIMESTAMP},
course_id = #{record.courseId,jdbcType=BIGINT},
course_name = #{record.courseName,jdbcType=VARCHAR},
chapter_id = #{record.chapterId,jdbcType=BIGINT},
chapter_name = #{record.chapterName,jdbcType=VARCHAR},
period_id = #{record.periodId,jdbcType=BIGINT},
period_name = #{record.periodName,jdbcType=VARCHAR},
user_no = #{record.userNo,jdbcType=BIGINT}
<if test="_parameter != null" >
<include refid="Update_By_Example_Where_Clause" />
......@@ -207,12 +243,21 @@
<if test="courseId != null" >
course_id = #{courseId,jdbcType=BIGINT},
</if>
<if test="courseName != null" >
course_name = #{courseName,jdbcType=VARCHAR},
</if>
<if test="chapterId != null" >
chapter_id = #{chapterId,jdbcType=BIGINT},
</if>
<if test="chapterName != null" >
chapter_name = #{chapterName,jdbcType=VARCHAR},
</if>
<if test="periodId != null" >
period_id = #{periodId,jdbcType=BIGINT},
</if>
<if test="periodName != null" >
period_name = #{periodName,jdbcType=VARCHAR},
</if>
<if test="userNo != null" >
user_no = #{userNo,jdbcType=BIGINT},
</if>
......@@ -223,8 +268,11 @@
update course_user_study_log
set gmt_create = #{gmtCreate,jdbcType=TIMESTAMP},
course_id = #{courseId,jdbcType=BIGINT},
course_name = #{courseName,jdbcType=VARCHAR},
chapter_id = #{chapterId,jdbcType=BIGINT},
chapter_name = #{chapterName,jdbcType=VARCHAR},
period_id = #{periodId,jdbcType=BIGINT},
period_name = #{periodName,jdbcType=VARCHAR},
user_no = #{userNo,jdbcType=BIGINT}
where id = #{id,jdbcType=BIGINT}
</update>
......
package com.roncoo.education.web.boss.biz.course;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.github.abel533.echarts.Option;
import com.github.abel533.echarts.axis.CategoryAxis;
import com.github.abel533.echarts.axis.ValueAxis;
import com.github.abel533.echarts.code.AxisType;
import com.github.abel533.echarts.code.Magic;
import com.github.abel533.echarts.code.Tool;
import com.github.abel533.echarts.code.Trigger;
import com.github.abel533.echarts.feature.MagicType;
import com.github.abel533.echarts.series.Line;
import com.roncoo.education.course.common.bean.qo.CourseUserStudyLogQO;
import com.roncoo.education.course.common.bean.vo.CourseUserStudyLogVO;
import com.roncoo.education.course.feign.IBossCourseUserStudyLog;
......@@ -10,18 +21,18 @@ import com.roncoo.education.util.base.BaseBiz;
import com.roncoo.education.util.base.Page;
/**
* 课程用户学习日志
* 课程用户学习日志
*
* @author wujing
*/
@Component
public class CourseUserStudyLogBiz extends BaseBiz{
public class CourseUserStudyLogBiz extends BaseBiz {
@Autowired
private IBossCourseUserStudyLog bossCourseUserStudyLog;
public Page<CourseUserStudyLogVO> listForPage(CourseUserStudyLogQO qo) {
return bossCourseUserStudyLog.listForPage(qo);
return bossCourseUserStudyLog.listForPage(qo);
}
public int save(CourseUserStudyLogQO qo) {
......@@ -39,5 +50,93 @@ public class CourseUserStudyLogBiz extends BaseBiz{
public int updateById(CourseUserStudyLogQO qo) {
return bossCourseUserStudyLog.updateById(qo);
}
public Page<CourseUserStudyLogVO> courseList(CourseUserStudyLogQO qo) {
return bossCourseUserStudyLog.courseList(qo);
}
public Option coursePlayCount(CourseUserStudyLogQO qo) {
Option option = new Option();
option.legend().data("课程播放量排行榜");
option.tooltip().trigger(Trigger.axis).axisPointer();
option.calculable(true);
// 设置x轴数据
CategoryAxis categoryAxisc = new CategoryAxis();
// 根据时间取得前五播放量的课程
List<CourseUserStudyLogVO> courseUserStudyLogs = bossCourseUserStudyLog.countCourseIdByGmtCreate(qo);
for (CourseUserStudyLogVO courseUserStudyLog : courseUserStudyLogs) {
categoryAxisc.data(courseUserStudyLog.getCourseName());
}
categoryAxisc.interval(0);
option.xAxis(categoryAxisc);
// 设置左y轴数据
ValueAxis valueAxis = new ValueAxis();
valueAxis.type(AxisType.value);
valueAxis.splitArea().show(true);
valueAxis.axisLabel().formatter("{value}次");
option.yAxis(valueAxis);
// 设置右y轴数据
ValueAxis valueAxis1 = new ValueAxis();
valueAxis.type(AxisType.value);
valueAxis1.splitArea().show(true);
valueAxis1.axisLabel().formatter("{value}次");
option.yAxis(valueAxis1);
Line line1 = new Line();
for (CourseUserStudyLogVO courseUserStudyLog : courseUserStudyLogs) {
line1.data(courseUserStudyLog.getCourseId());
}
line1.name("课程播放数");
option.series(line1);
option.toolbox().show(true).feature(new MagicType(Magic.line, Magic.bar), Tool.restore, Tool.saveAsImage);
return option;
}
public Page<CourseUserStudyLogVO> periodList(CourseUserStudyLogQO qo) {
return bossCourseUserStudyLog.periodList(qo);
}
public Option periodPlayCount(CourseUserStudyLogQO qo) {
Option option = new Option();
option.legend().data("课时播放量排行榜");
option.tooltip().trigger(Trigger.axis).axisPointer();
option.calculable(true);
// 设置x轴数据
CategoryAxis categoryAxisc = new CategoryAxis();
List<CourseUserStudyLogVO> courseUserStudyLogs = bossCourseUserStudyLog.countPeriodNoByCourseIdAndGmtCreate(qo);
for (CourseUserStudyLogVO courseUserStudyLog : courseUserStudyLogs) {
categoryAxisc.data(courseUserStudyLog.getPeriodName());
}
categoryAxisc.interval(0);
option.xAxis(categoryAxisc);
// 设置左y轴数据
ValueAxis valueAxis = new ValueAxis();
valueAxis.type(AxisType.value);
valueAxis.splitArea().show(true);
valueAxis.axisLabel().formatter("{value}次");
option.yAxis(valueAxis);
// 设置右y轴数据
ValueAxis valueAxis1 = new ValueAxis();
valueAxis.type(AxisType.value);
valueAxis1.splitArea().show(true);
valueAxis1.axisLabel().formatter("{value}次");
option.yAxis(valueAxis1);
Line line1 = new Line();
for (CourseUserStudyLogVO courseUserStudyLog : courseUserStudyLogs) {
line1.data(courseUserStudyLog.getPeriodId());
}
line1.name("课程播放数");
option.series(line1);
option.toolbox().show(true).feature(new MagicType(Magic.line, Magic.bar), Tool.restore, Tool.saveAsImage);
return option;
}
}
......@@ -8,12 +8,13 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import com.roncoo.education.web.boss.biz.course.CourseUserStudyLogBiz;
import com.github.abel533.echarts.Option;
import com.roncoo.education.course.common.bean.qo.CourseUserStudyLogQO;
import com.roncoo.education.util.base.BaseController;
import com.roncoo.education.web.boss.biz.course.CourseUserStudyLogBiz;
/**
* 课程用户学习日志
* 课程用户学习日志
*
* @author wujing
*/
......@@ -25,53 +26,77 @@ public class CourseUserStudyLogController extends BaseController {
@Autowired
private CourseUserStudyLogBiz biz;
@RequestMapping(value = "/list")
public void list(@ModelAttribute CourseUserStudyLogQO qo, ModelMap modelMap){
public void list(@ModelAttribute CourseUserStudyLogQO qo, ModelMap modelMap) {
modelMap.put("page", biz.listForPage(qo));
modelMap.put("bean", qo);
}
@RequestMapping(value = "/add")
public void add(){
public void add() {
}
@ResponseBody
@RequestMapping(value = "/save")
public String save(@ModelAttribute CourseUserStudyLogQO qo){
public String save(@ModelAttribute CourseUserStudyLogQO qo) {
if (biz.save(qo) > 0) {
return success(TARGETID);
}
return error("添加失败");
}
@ResponseBody
@RequestMapping(value = "/delete")
public String delete(@RequestParam(value = "id") Long id){
public String delete(@RequestParam(value = "id") Long id) {
if (biz.deleteById(id) > 0) {
return delete(TARGETID);
}
return error("删除失败");
}
@RequestMapping(value = "/edit")
public void edit(@RequestParam(value = "id") Long id, ModelMap modelMap){
public void edit(@RequestParam(value = "id") Long id, ModelMap modelMap) {
modelMap.put("bean", biz.getById(id));
}
@ResponseBody
@RequestMapping(value = "/update")
public String update(@ModelAttribute CourseUserStudyLogQO qo){
public String update(@ModelAttribute CourseUserStudyLogQO qo) {
if (biz.updateById(qo) > 0) {
return success(TARGETID);
}
return error("修改失败");
}
@RequestMapping(value = "/view")
public void view(@RequestParam(value = "id") Long id, ModelMap modelMap){
public void view(@RequestParam(value = "id") Long id, ModelMap modelMap) {
modelMap.put("bean", biz.getById(id));
}
@RequestMapping(value = "/courseList")
public void courseList(@ModelAttribute CourseUserStudyLogQO qo, ModelMap modelMap) {
modelMap.put("page", biz.courseList(qo));
modelMap.put("bean", qo);
}
@ResponseBody
@RequestMapping(value = "/coursePlayCount")
public Option coursePlayCount(@ModelAttribute CourseUserStudyLogQO qo) {
return biz.coursePlayCount(qo);
}
@RequestMapping(value = "/periodList")
public void periodList(@ModelAttribute CourseUserStudyLogQO qo, ModelMap modelMap) {
modelMap.put("page", biz.periodList(qo));
modelMap.put("bean", qo);
}
@ResponseBody
@RequestMapping(value = "/periodPlayCount")
public Option periodPlayCount(@ModelAttribute CourseUserStudyLogQO qo) {
return biz.periodPlayCount(qo);
}
}
<#include "/macro/base.ftl" />
<div class="bjui-pageHeader">
<div class="panel-body">
<div style="mini-width:400px;height:280px" data-toggle="echarts" data-type="bar,line" data-url="${base!''}/course/courseUserStudyLog/coursePlayCount?orgNo=${bean.orgNo!''}&courseNo=${bean.courseNo!''}&beginGmtCreate=${bean.beginGmtCreate!''}&endGmtCreate=${bean.endGmtCreate!''}"></div>
</div>
<form id="pagerForm" data-toggle="ajaxsearch" action="${base}/course/courseUserStudyLog/courseList" method="post">
<@pageHeadr />
<div class="bjui-searchBar">
<@shiro.hasRole name="admin">
<label>机构:</label>
<input type="text" name="orgNo" value="<#if bean.orgNo?? && bean.orgNo !='admin'>${bean.orgNo!''}</#if>" class="form-control" size="12">&nbsp;
</@shiro.hasRole>
&nbsp;<label>统计时间:</label>
<input type="text" name="beginGmtCreate" value="${bean.beginGmtCreate!''}" data-toggle="datepicker" data-minDate="2015-01-01" data-rule="date" size="12">-<input type="text" name="endGmtCreate" value="${bean.endGmtCreate!''}" data-toggle="datepicker" data-rule="date" size="12">
<button type="submit" class="btn-default" data-icon="search">查询</button>&nbsp;
<a class="btn btn-orange" href="javascript:;" data-toggle="reloadsearch" data-clear-query="true" data-icon="undo">清空查询</a>
<@shiro.hasRole name="admin">
【总播放次数: <span class="red">${countMap.totalInOrgNo!'0'}</span>次】 -【课程总播放次数: <span class="red">${countMap.totalInCourse!'0'}</span>次】-【试卷总播放次数:<span class="red">${countMap.totalInPaper!'0'}</span>次】
</@shiro.hasRole>
</div>
</form>
</div>
<div class="bjui-pageContent tableContent">
<table class="table table-bordered table-hover table-top" data-toggle="tablefixed" data-selected-multi="true">
<thead>
<tr>
<th width="30">序号</th>
<th>课程名称</th>
<th>播放次数</th>
</tr>
</thead>
<tbody>
<#if page??>
<#list page.list as bean>
<tr>
<td align="center">${bean_index+1}</td>
<td><a href="${base}/course/courseUserStudyLog/periodList?courseId=${bean.courseId!}" data-toggle="dialog" data-options="{mask:true,title:'${bean.courseName}-详细信息',width:1400,height:600}">${bean.courseName!}</a></td>
<td>${bean.chapterId!}</td>
</tr>
</#list>
</#if>
</tbody>
</table>
</div>
<@pageFooter />
<#include "/macro/base.ftl" />
<div class="bjui-pageHeader">
<div class="panel-body">
<div style="mini-width:400px;height:280px" data-toggle="echarts" data-type="bar,line" data-url="${base!''}/course/courseUserStudyLog/periodPlayCount?courseId=${bean.courseId!''}&beginGmtCreate=${bean.beginGmtCreate!''}&endGmtCreate=${bean.endGmtCreate!''}"></div>
</div>
<form id="pagerForm" data-toggle="ajaxsearch" action="${base}/course/courseUserStudyLog/periodList?courseId=${bean.courseId!''}" method="post">
<@pageHeadr />
<div class="bjui-searchBar">
&nbsp;<label>统计时间:</label>
<input type="text" name="beginGmtCreate" value="${bean.beginGmtCreate!''}" data-toggle="datepicker" data-minDate="2015-01-01" data-rule="date" size="12">-<input type="text" name="endGmtCreate" value="${bean.endGmtCreate!''}" data-toggle="datepicker" data-rule="date" size="12">
<button type="submit" class="btn-default" data-icon="search">查询</button>&nbsp;
<a class="btn btn-orange" href="javascript:;" data-toggle="reloadsearch" data-clear-query="true" data-icon="undo">清空查询</a>
</div>
</form>
</div>
<div class="bjui-pageContent tableContent">
<table class="table table-bordered table-hover table-top" data-toggle="tablefixed" data-selected-multi="true">
<thead>
<tr>
<th width="30">序号</th>
<th>课时名称</th>
<th>播放次数</th>
</tr>
</thead>
<tbody>
<#if page??>
<#list page.list as bean>
<tr>
<td align="center">${bean_index+1}</td>
<td>${bean.periodName!}</td>
<td>${bean.chapterId!}</td>
</tr>
</#list>
</#if>
</tbody>
</table>
</div>
<@pageFooter />
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册