package com.qxueyou.scc.stucontroller; import java.math.BigDecimal; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.querydsl.jpa.hibernate.HibernateQueryFactory; import com.qxueyou.scc.base.dao.BaseDAO; import com.qxueyou.scc.base.model.UserInfoWrapper; import com.qxueyou.scc.teach.subject.model.Subject; import com.qxueyou.scc.teach.subject.model.SubjectChapter; import com.qxueyou.scc.teach.subject.model.SubjectLecture; import com.qxueyou.scc.teach.subject.model.SubjectUtils; import com.qxueyou.scc.teach.subject.model.view.*; import com.qxueyou.scc.user.model.User; import org.hibernate.Session; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.CacheEvict; import org.springframework.orm.hibernate4.HibernateTemplate; import org.springframework.orm.jpa.vendor.HibernateJpaSessionFactoryBean; import org.springframework.web.bind.annotation.*; import com.alibaba.druid.util.StringUtils; import com.qxueyou.scc.admin.classes.model.ClsSubjectLecture; import com.qxueyou.scc.admin.classes.service.IClassLectureService; import com.qxueyou.scc.admin.progress.dao.ProgressDAO; import com.qxueyou.scc.admin.progress.model.view.SubjectProgressTreeV; import com.qxueyou.scc.base.model.Pager; import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.base.util.ClientUtils; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.base.util.CommonUtils; import com.qxueyou.scc.base.util.QBeanUtils; import com.qxueyou.scc.evaluate.service.IEvaluateService; import com.qxueyou.scc.operation.topic.service.ITopicService; import com.qxueyou.scc.teach.res.service.IResAudioService; import com.qxueyou.scc.teach.subject.service.ILectureService; import com.qxueyou.scc.teach.subject.service.ISubjectService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 学习端 课程前端控制器 * * @author chenjunliang */ @Api(tags = "课程管理-学员端") @RestController @CrossOrigin(origins = "*", maxAge = 3600) @RequestMapping(value = "stu/subject") public class StuSubjectController { @Autowired ISubjectService subjectService; @Autowired ILectureService lectureService; @Autowired IClassLectureService clsLectureService; @Autowired IResAudioService audioService; @Autowired ProgressDAO progressDao; @Autowired ITopicService topicService; @Autowired IEvaluateService evaluateService; //--------------------------------------------------------------app端接口--------------------------------------------------------------------------------------------------- /** * 学习端获取 所有课件 * * @param classId * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。) */ @ApiOperation(value = "获取班级所有课件-学习端", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)") @ApiImplicitParams({ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sort", value = "排序方式(desc从大到小,asc从小到大)", required = false, paramType = "query", dataType = "String"), }) @GetMapping(value = "/app/getCoursewareLstByClassId") public Result appCoursewareLst(String classId, @RequestParam(defaultValue = "desc") String sort, Pager pager) { System.out.println(classId); return clsLectureService.listSubjectLecture(CommonUtils.getClassId(classId), sort, pager); } /** * 学习端获取课程列表 */ @ApiOperation(value = "学习端获取课程学年列表") @ApiImplicitParams({ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), }) @GetMapping(value = "/app/termList") public Result termList(String classId) { classId = CommonUtils.getClassId(classId); if (StringUtils.isEmpty(classId)) { return new Result(false, "班级id不能为空"); } //课程 List> lstSubject = subjectService.clsSubjectlist(classId, null, null); //组装的学期和课程 List> lstTerm = subjectService.termSubjectList(classId, lstSubject); return new Result(true, "success", CollectionUtils.newObjectMap("termList", lstTerm, "allSubject", lstSubject)); } /** * 学习端获取课程列表 */ @ApiOperation(value = "我的课程按学期分类") @ApiImplicitParams({ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), }) @GetMapping(value = "/app/myTermSubjectList") public Result myTermSubjectList(String classId) { classId = CommonUtils.getClassId(classId); System.out.println("vvvvvvvvv" + classId); if (StringUtils.isEmpty(classId)) { return new Result(false, "班级id不能为空"); } return new Result(true, "success", subjectService.myTermSubjectList(classId)); } /** * 学习端获取课程列表 */ @ApiOperation(value = "我的课程按时间排序") @ApiImplicitParams({ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), }) @GetMapping(value = "/app/mySubjectList") public Result mySubjectList(String classId, Pager pager) { // System.out.println("0.0.0.0"+classId); classId = CommonUtils.getClassId(classId); long count = subjectService.myClsSubjectCount(classId); return new Result(true, "success", CollectionUtils.newObjectMap("count", count, "listData", subjectService.mySubjectList(classId, pager))); } /** * 我的课程详情 * * @param subjectId * @param classId * @return */ @ApiOperation(value = "我的课程详情") @ApiImplicitParams({ @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), }) @GetMapping(value = "/app/mySubjectInfo") public Result mySubjectInfo(String subjectId, String classId) { classId = CommonUtils.getClassId(classId); if (StringUtils.isEmpty(classId)) { return new Result(false, "班级id不能为空"); } if (StringUtils.isEmpty(subjectId)) { return new Result(false, "课程id不能为空"); } return new Result(true, "success", subjectService.mySubjectInfo(subjectId, classId)); } /** * 学习端获取课程列表 */ @ApiOperation(value = "我的班级信息") @ApiImplicitParams({ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), }) @GetMapping(value = "/app/myClassInfo") public Result myClassInfo(String classId) { classId = ClientUtils.getClassId(); if (StringUtils.isEmpty(classId)) { return new Result(false, "班级id不能为空"); } return new Result(true, "success", subjectService.myClassInfo(classId)); } /** * 学习端获取课程列表 */ @ApiOperation(value = "学习端获取课程列表") @ApiImplicitParams({ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "schoolYear", value = "学年", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "term", value = "学期", required = true, paramType = "query", dataType = "String") }) @GetMapping(value = "/app/subjectList") public Result subjectList(String classId, Integer schoolYear, Integer term) { return new Result(true, "success", subjectService.clsSubjectlist(CommonUtils.getClassId(classId), schoolYear, term)); } /** * 学习端获取课程列表 */ @ApiOperation(value = "学习端获取课程下课件,按创建时间排序") @ApiImplicitParams({ @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "sort", value = "排序方式(desc从大到小,asc从小到大)", required = false, paramType = "query", dataType = "String"), }) @GetMapping(value = "/app/listLectureBySubject") public Result listLectureBySubject(String subjectId, String classId, @RequestParam(defaultValue = "desc") String sort, Pager pager) { return new Result(true, "success", clsLectureService.listLectureBySubjectOrderCreateTime(subjectId, CommonUtils.getClassId(classId), sort, pager)); } /** * 学习端获取其他课件统计 */ @ApiOperation(value = "学习端获取其他课件统计") @GetMapping(value = "/app/otherLectureCount") public Result otherLectureCount() { return new Result(true, "success", CollectionUtils.newObjectMap("topicCount", topicService.getClassTopicCount(ClientUtils.getClassId()), "evaluate", this.evaluateService.queryStuEvaluateCount())); } /** * 学习端获取课程列表 */ @ApiOperation(value = "学习端获取课程下课件,按目录分类", notes = "") @ApiImplicitParams({ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType = "query", dataType = "String") }) @GetMapping(value = "/app/coursewareList") public Result coursewareList(String classId, String subjectId, String type) { classId = CommonUtils.getClassId(classId); if (StringUtils.isEmpty(subjectId)) { return new Result(false, "课程id不能为空"); } return this.clsLectureService.coursewareChapterList(classId, subjectId, type); } /** * 我的公开课列表 */ @ApiOperation(value = "我的公开课列表", notes = "") @GetMapping(value = "/app/myOpenSubjectList") public Result myOpenSubjectList(Pager pager, @RequestParam(defaultValue = "") String keyword) { return new Result(true, "success", this.subjectService.myOpenSubjectList(pager.getOffset(), pager.getPageSize(), keyword)); } /** * 公开课列表 */ @ApiOperation(value = "公开课列表", notes = "") @GetMapping(value = "/app/openSubjectList") public Result openSubjectList(Pager pager, @RequestParam(defaultValue = "") String keyword) { return new Result(true, "success", this.subjectService.openSubjectList(pager.getOffset(), pager.getPageSize(), keyword)); } /** * 公开课详情 */ @ApiOperation(value = "公开课详情", notes = "") @GetMapping(value = "/app/openSubjectInfo") public Result openSubjectInfo(@RequestParam(defaultValue = "") String subjectId) { return new Result(true, "success", this.subjectService.openSubjectInfo(subjectId)); } //--------------------------------------------------------后台端接口--------------------------------------------------------------------------------------------------- /** * 加载课件tree */ @ApiOperation(value = "加载课件tree", notes = "") @ApiImplicitParams({ @ApiImplicitParam(name = "subjectId", value = "班级id", required = false, paramType = "query", dataType = "String") }) @GetMapping(value = "categoryTree") public Result categoryTree(String subjectId, String parentId) { Subject subject = subjectService.read(subjectId); if (subject.getType() == 3) { List openChapterLst = lectureService.getListChapter(subjectId, parentId); return new Result(true, "success", QBeanUtils.listBean2ListMap(openChapterLst, CollectionUtils .newStringMap("name", "name", "chapterId", "id", "parentChapterId", "parentId"))); } else { // classId = StringUtils.isEmpty(classId)?ClientUtils.getClassId():classId; List chapterLst = clsLectureService.getChapterTreeVList(subjectId, parentId); for (SubjectProgressTreeV v : chapterLst) { v.setNodeName(v.getNodeName() + "(" + String.format("%.2f", v.getPercent() * 100) + "%)"); //保留两位小数 } return new Result(true, "success", QBeanUtils.listBean2ListMap(chapterLst, CollectionUtils .newStringMap("nodeName", "name", "id.nodeId", "id", "parentId", "parentId", "percent", "percent"))); } } /** * 学习端获取 所有课件 * * @param classId * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。) */ @ApiOperation(value = "学习端获取 所有课件", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)") @ApiImplicitParams({ @ApiImplicitParam(name = "subjectId", value = "班级id", required = false, paramType = "query", dataType = "String") }) @GetMapping(value = "getCoursewareLstByClassId") public Result getCoursewareLst(String subjectId) { List lectureLst = clsLectureService.listLecture(subjectId); if (lectureLst.size() > 0) { // id为小节id //返回的数据按照tree的小节排序 return new Result(true, "success", QBeanUtils.listBean2ListMap(lectureLst, CollectionUtils.newStringMap("name", "name", "lectureId", "id", "lectureType", "type", "chapterId", "chapterId"))); } else { List lectureList = lectureService.listLectureBySubjectId(subjectId); // id为小节id //返回的数据按照tree的小节排序 return new Result(true, "success", QBeanUtils.listBean2ListMap(lectureList, CollectionUtils.newStringMap("name", "name", "lectureId", "id", "lectureType", "type", "chapterId", "chapterId"))); } } /** * 获取课件列表 * * @param chapterId 章节id * @param type 课件类型 * @param keyword 搜索关键字 * @param limit 每页显示几条 * @param pageNum 页码 * @return 状态说明(0, 视频 。 1, 音频 。 2, 文档 。 3, 练习 。) */ @ApiOperation(value = "根据章节获取课件列表", notes = "状态说明(0,视频。1,音频。2,文档。3,练习。)") @ApiImplicitParams({ @ApiImplicitParam(name = "chapterId", value = "章节id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "type", value = "课件类型", required = false, paramType = "query", dataType = "String") }) @GetMapping(value = "coursewareListByChapterId") public Result coursewareList(String chapterId, String type, String keyword, Integer limit, @RequestParam(defaultValue = "1") Integer pageNum) { List lectures = clsLectureService.listLectureV(ClientUtils.getUserId(), chapterId, keyword, limit, pageNum, type); if (lectures.size() == 0) { List lecturesTwo = lectureService.getSubjectLectureVByChapterId(chapterId, keyword, limit, pageNum); List lecturesThree = lectureService.getMyOpenLectureVByChapterId(ClientUtils.getUserId(), chapterId, keyword, limit, pageNum); for (SubjectLecture subjectLecture : lecturesTwo) { boolean isNull = true; MyLectureV myLectureV = new MyLectureV(new MyLectureVId()); for (MyOpenLectureV myOpenLectureV : lecturesThree) { if (subjectLecture.getLectureId().equals(myOpenLectureV.getLectureId())) { isNull = false; myLectureV.setLectureName(myOpenLectureV.getLectureName()); myLectureV.getId().setLectureId(myOpenLectureV.getLectureId()); myLectureV.setLectureType(myOpenLectureV.getLectureType()); myLectureV.setLectureUpdateTime(myOpenLectureV.getLectureUpdateTime()); myLectureV.setPercent(myOpenLectureV.getPercent()); lectures.add(myLectureV); } } if (isNull) { myLectureV.setLectureName(subjectLecture.getName()); myLectureV.getId().setLectureId(subjectLecture.getLectureId()); myLectureV.setLectureType(subjectLecture.getLectureType()); myLectureV.setLectureUpdateTime(subjectLecture.getUpdateTime()); myLectureV.setPercent(0.0); lectures.add(myLectureV); } } return new Result(true, "success", CollectionUtils.newObjectMap("coursewareLst", QBeanUtils.listBean2ListMap(lectures, CollectionUtils.newStringMap("lectureName", "name", "id.lectureId", "id", "lectureType", "type", "lectureUpdateTime", "endUpdateTime", "percent", "percent")))); } else { return new Result(true, "success", CollectionUtils.newObjectMap("coursewareLst", QBeanUtils.listBean2ListMap(lectures, CollectionUtils.newStringMap("lectureName", "name", "id.lectureId", "id", "lectureType", "type", "lectureUpdateTime", "endUpdateTime", "percent", "percent")))); } } /** * 课件学习进度提交 stu/subject/study * * @param lectureId 课件id * @param from 开始学习位置 ,如视频,则为时分秒(00:10:12),如文档,则无需提交该参数 * @param to 结束学习位置,同to */ @ApiOperation(value = "提交学习进度") @ApiImplicitParams({ @ApiImplicitParam(name = "lectureId", value = "课件id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "from", value = "开始学习位置 ,如视频,则为时分秒(00:10:12),如文档,则无需提交该参数", required = true, paramType = "query", dataType = "Double"), @ApiImplicitParam(name = "to", value = "结束学习位置,同to", required = true, paramType = "query", dataType = "Double"), @ApiImplicitParam(name = "subjectId", value = "课程id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "lectureParentId", value = "父课件id", required = false, paramType = "query", dataType = "String"), }) @GetMapping(value = "study") public Result study(String lectureId, @RequestParam(defaultValue = "1") Double from, @RequestParam(defaultValue = "0") Double to, String subjectId, String classId, String lectureParentId) { String userId = ClientUtils.getUserId(); classId = CommonUtils.getClassId(classId); progressDao.putStudyById(userId, subjectId, lectureId, lectureParentId, classId);// 记录学员每个课程的学习位置; progressDao.putStudyByUserId(userId, subjectId, lectureId, lectureParentId, classId);// 记录学员上次学习的位置; return clsLectureService.doStudy(lectureId, from, to); } /** * 音频时长提交 stu/subject/submitAudioDuration * * @param lectureId 课件id * @param seconds 时长 */ @ApiOperation(value = "音频时长提交") @ApiImplicitParams({ @ApiImplicitParam(name = "lectureId", value = "课件id", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "seconds", value = "时长", required = true, paramType = "query", dataType = "Double") }) @CacheEvict(value = "LectureAudioV", key = "#lectureId") @GetMapping(value = "submitAudioDuration") public Result submitAudioDuration(String lectureId, double seconds) { LectureAudioV audio = lectureService.readAudioLecture(lectureId); return audioService.updateDuration(audio.getAudioId(), (int) seconds); } /** * 课程列表 * * @param clssId 班级id * @param startTime 开班时间 */ @ApiOperation(value = "课程列表") @ApiImplicitParams({ @ApiImplicitParam(name = "classId", value = "班级id", required = false, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "startTime", value = "开班时间", required = false, paramType = "query", dataType = "String") }) @GetMapping(value = "getSubjectLst") public Result getList(String userId, String classId, String startTime, Integer limit, @RequestParam(defaultValue = "1") Integer pageNum, HttpServletRequest request) { userId = StringUtils.isEmpty(userId) ? ClientUtils.getUserId() : userId; classId = StringUtils.isEmpty(classId) ? ClientUtils.getClassId() : classId; List resultMs = subjectService.listMySubjectV(classId, userId); List result = new ArrayList<>(); List lecurelist = new ArrayList<>(); for (MySubjectV ms : resultMs) { SubjectUtils subjectUtils = new SubjectUtils(); List myLectureVList = lectureService.listLectureVBySubjectId(userId, ms.getId().getSubjectId(), "", 1000, 1, null); Double percent = 0.0; Double progressValue = 0.0; Double percentAvg = 0.0; if (!myLectureVList.isEmpty()) { for (MyLectureV myLectureV : myLectureVList) { if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) { percent += myLectureV.getPercent(); progressValue += myLectureV.getProgressValue().intValue(); } } percentAvg = percent / myLectureVList.size(); if (percentAvg.isNaN()) { percentAvg = 0.0; } subjectUtils.setCoursewareName(myLectureVList.get(0).getLectureName()); subjectUtils.setSubjectId(myLectureVList.get(0).getSubjectId()); subjectUtils.setPercent(new BigDecimal(percentAvg)); subjectUtils.setStudyTime(new BigDecimal(progressValue)); } else { subjectUtils.setCoursewareName(null); subjectUtils.setSubjectId(ms.getId().getSubjectId()); subjectUtils.setPercent(new BigDecimal(percentAvg)); subjectUtils.setStudyTime(new BigDecimal(progressValue)); } result.add(ms); lecurelist.add(subjectUtils); } List openSubjects = subjectService.listOpenSubjectV(); for (OpenSubjectV openSubjectV : openSubjects) { MySubjectV mySubjectV = new MySubjectV(new MySubjectVId()); SubjectUtils subjectUtils = new SubjectUtils(); List subjectLectureList = lectureService.listLectureBySubjectId(openSubjectV.getSubjectId()); List myLectureVList = lectureService.listOpenLectureVBySubjectId(userId, openSubjectV.getSubjectId(), "", 1000, 1, null); Double percent = 0.0; Double progressValue = 0.0; Double percentAvg = 0.0; if (!myLectureVList.isEmpty()) { for (MyOpenLectureV myOpenLectureV : myLectureVList) { if (myOpenLectureV.getPercent() != null && myOpenLectureV.getProgressValue() != null) { percent += myOpenLectureV.getPercent(); progressValue += myOpenLectureV.getProgressValue().intValue(); } } percentAvg = percent / subjectLectureList.size(); if (percentAvg.isNaN()) { percentAvg = 0.0; } subjectUtils.setCoursewareName(myLectureVList.get(0).getLectureName()); subjectUtils.setSubjectId(myLectureVList.get(0).getSubjectId()); subjectUtils.setPercent(new BigDecimal(percentAvg)); subjectUtils.setStudyTime(new BigDecimal(progressValue)); } else { subjectUtils.setCoursewareName(null); subjectUtils.setSubjectId(openSubjectV.getSubjectId()); subjectUtils.setPercent(new BigDecimal(percentAvg)); subjectUtils.setStudyTime(new BigDecimal(progressValue)); } mySubjectV.setSubjectName(openSubjectV.getSubjectName()); mySubjectV.setCoverPageUrl(openSubjectV.getCoverPageUrl()); mySubjectV.getId().setSubjectId(openSubjectV.getSubjectId()); result.add(mySubjectV); lecurelist.add(subjectUtils); } for (MySubjectV mySubjectV: result) { System.out.println(mySubjectV); } return new Result(true, "success", CollectionUtils.newObjectMap("subjectList", QBeanUtils.listBean2ListMap(result, CollectionUtils.newStringMap("id.subjectId", "subjectId", "id.classId", "classId", "subjectName", "subjectName", "percent", "percent", "progressValue", "studyTime", "coverPageUrl", "coverPageUrl")), "lecurelist", lecurelist)); } /** * 进入课程 * * @param subjectId 课程id */ @ApiOperation(value = "课程详情") @ApiImplicitParams({ @ApiImplicitParam(name = "subjectId", value = "课程id", required = false, paramType = "query", dataType = "String") }) @GetMapping(value = "getSubjectDetail") public Result getSubjectDetail(String subjectId) { MySubjectV subject = subjectService.getMy1stSubjectVById(subjectId); Subject subject1 = subjectService.read(subjectId); List> progressLst = subjectService.listChapterStudyProgress(subjectId); List myLectureVList = lectureService.listLectureVBySubjectId(ClientUtils.getUserId(), subjectId, "", 1000, 1, null); Double percent = 0.0; Double progressValue = 0.0; String coursewareName = null; List myOpenLectureVList = lectureService.listOpenLectureVBySubjectId(ClientUtils.getUserId(), subjectId, "", 100, 1, null); List subjectLectureList = lectureService.listLectureBySubjectId(subjectId); if (myLectureVList.size() > 0) { for (MyLectureV myLectureV : myLectureVList) { if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) { percent += myLectureV.getPercent(); progressValue += myLectureV.getProgressValue().intValue(); } } Double percentAvg = percent / myLectureVList.size(); if (percentAvg.isNaN()) { percentAvg = 0.0; } subject.setCoverPageUrl(subject1.getCoverPageUrl()); subject.setPercent(percentAvg); subject.setProgressValue(new BigDecimal(progressValue)); progressLst.get(0).put("percent", subject.getPercent()); progressLst.get(0).put("studyTime", subject.getProgressValue()); coursewareName = myLectureVList.get(0).getLectureName(); } else if (subjectLectureList.size() > 0) { if (myOpenLectureVList.size() > 0) { for (MyOpenLectureV myLectureV : myOpenLectureVList) { if (myLectureV.getPercent() != null && myLectureV.getProgressValue() != null) { percent += myLectureV.getPercent(); progressValue += myLectureV.getProgressValue().intValue(); } } coursewareName = myOpenLectureVList.get(0).getLectureName(); } if (subject == null) { subject = new MySubjectV(new MySubjectVId()); } Double percentAvg = percent / subjectLectureList.size(); if (percentAvg.isNaN()) { percentAvg = 0.0; } subject.setCoverPageUrl(subject1.getCoverPageUrl()); subject.setPercent(percentAvg); subject.setProgressValue(new BigDecimal(progressValue)); subject.setSubjectName(subject1.getName()); subject.getId().setSubjectId(subjectLectureList.get(0).getSubjectId()); Map map = new HashMap<>(); map.put("percent", subject.getPercent()); map.put("studyTime", subject.getProgressValue()); map.put("chapterId", subjectLectureList.get(0).getSubjectId()); map.put("chapterName", subject1.getName()); progressLst.add(map); } return new Result(true, "success", CollectionUtils.newObjectMap("subject", QBeanUtils.bean2Map(subject, CollectionUtils.newStringMap("subjectName", "subjectName", "id.subjectId", "subjectId", "progressValue", "studyTime", "percent", "percent", "coverPageUrl", "coverPageUrl")), "chapterLst", progressLst, "coursewareName", coursewareName)); } }