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.SubjectUtils; 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.model.view.LectureAudioV; import com.qxueyou.scc.teach.subject.model.view.MyLectureV; import com.qxueyou.scc.teach.subject.model.view.MySubjectV; 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) { // 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); // idΪС½Úid //·µ»ØµÄÊý¾Ý°´ÕÕtreeµÄС½ÚÅÅÐò return new Result(true, "success", QBeanUtils.listBean2ListMap(lectureLst, 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); 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<>(); int i = 0; 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); } 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); 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; if(!myLectureVList.isEmpty()) { 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.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 { } 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)); } }