PreviewService.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. package com.qxgmat.service.extend;
  2. import com.nuliji.tools.AbstractService;
  3. import com.nuliji.tools.Tools;
  4. import com.nuliji.tools.Transform;
  5. import com.nuliji.tools.exception.ParameterException;
  6. import com.qxgmat.data.constants.enums.module.*;
  7. import com.qxgmat.data.dao.entity.*;
  8. import com.qxgmat.data.relation.entity.UserPreviewPaperRelation;
  9. import com.qxgmat.service.UserPaperService;
  10. import com.qxgmat.service.inline.*;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.stereotype.Service;
  14. import javax.annotation.Resource;
  15. import java.util.*;
  16. import java.util.stream.Collectors;
  17. @Service
  18. public class PreviewService extends AbstractService {
  19. private static final Logger logger = LoggerFactory.getLogger(PreviewService.class);
  20. @Resource
  21. private PreviewPaperService previewPaperService;
  22. @Resource
  23. private UserReportService userReportService;
  24. @Resource
  25. private UserPaperService userPaperService;
  26. @Resource
  27. private UserOrderRecordService userOrderRecordService;
  28. @Resource
  29. private CourseService courseService;
  30. @Resource
  31. private CourseNoService courseNoService;
  32. @Resource
  33. private PreviewAssignService previewAssignService;
  34. @Resource
  35. private UserCourseAppointmentService userCourseAppointmentService;
  36. @Resource
  37. private UserCourseProgressService userCourseProgressService;
  38. @Resource
  39. private UserCourseService userCourseService;
  40. @Resource
  41. private CourseExtendService courseExtendService;
  42. /**
  43. * 获取用户分组作业列表
  44. * @param userId
  45. * @param top
  46. * @return
  47. */
  48. public Map<Object, Collection<UserPreviewPaperRelation>> groupByRecordId(Integer userId, Collection recordIds, Integer top){
  49. Map<Object, Collection<UserPreviewPaperRelation>> relationMap = new HashMap<>();
  50. if(recordIds == null || recordIds.size() == 0) return relationMap;
  51. for(Object id : recordIds){
  52. Integer recordId = (Integer)id;
  53. relationMap.put(recordId, list(1, top, recordId, userId, null, 0));
  54. }
  55. return relationMap;
  56. }
  57. public List<UserPreviewPaperRelation> getByRecordId(Integer userId, Integer recordId, Integer top){
  58. return list(1, top, recordId, userId, null, 0);
  59. }
  60. /**
  61. * 获取用户分组作业列表
  62. * @param userId
  63. * @param top
  64. * @return
  65. */
  66. public List<UserPreviewPaperRelation> listByRecordId(Integer userId, Collection recordIds, Integer top){
  67. List<UserPreviewPaperRelation> relationList = new ArrayList<>();
  68. if(recordIds == null || recordIds.size() == 0) return relationList;
  69. for(Object id : recordIds){
  70. Integer recordId = (Integer)id;
  71. List<UserPreviewPaperRelation> tmp = list(1, top, recordId, userId, null, 0);
  72. relationList.addAll(tmp);
  73. }
  74. return relationList;
  75. }
  76. /**
  77. * 返回用户的预习作业列表
  78. * @param recordId
  79. * @param userId
  80. * @param endTime
  81. * @param times
  82. * @return
  83. */
  84. public List<UserPreviewPaperRelation> list(int page, int size, Integer recordId, Integer userId, String endTime, Integer times){
  85. // 根据不同的课程,执行不同的查询方案
  86. UserOrderRecord record = userOrderRecordService.get(recordId);
  87. if (record == null){
  88. throw new ParameterException("记录不存在");
  89. }
  90. if (!record.getUserId().equals(userId)){
  91. throw new ParameterException("记录不存在");
  92. }
  93. if (!record.getProductType().equals(ProductType.COURSE.key)){
  94. throw new ParameterException("记录不存在");
  95. }
  96. Course course = courseService.get(record.getProductId());
  97. CourseModule courseModule = CourseModule.ValueOf(course.getCourseModule());
  98. List<PreviewAssign> previewAssignList = new ArrayList<>(0);
  99. switch(courseModule){
  100. case VS:
  101. // 查询记录对应预约情况
  102. List<UserCourseAppointment> appointmentList = userCourseAppointmentService.listByRecord(recordId);
  103. Collection appointmentIds = Transform.getIds(appointmentList, UserCourseAppointment.class, "id");
  104. previewAssignList = previewAssignService.listByAppointment(page, size, course.getId(), appointmentIds, userId, endTime, times);
  105. break;
  106. case ONLINE:
  107. // 查询记录对应时间段内
  108. previewAssignList = previewAssignService.listByTime(page, size, course.getId(), record.getTimeId(), userId, endTime, times);
  109. replaceTitle(previewAssignList);
  110. break;
  111. case VIDEO:
  112. // 获取课时,并关联当前记录的paper
  113. if (endTime != null || size == 2){
  114. // 无论列表还是卡片,都只显示2条
  115. size = 2;
  116. page = 1;
  117. List<CourseNo> courseNoList = courseNoService.allCourse(course.getId());
  118. List<UserCourseProgress> progressList = userCourseProgressService.listCourse(record.getId(), course.getId());
  119. // 查询课时进度
  120. // 如果进度不过半,按当前课时+下一课时
  121. // 如果进度过半,下2次课时
  122. int min = courseExtendService.computeCourseNoFinish(courseNoList, progressList);
  123. int max = min+size;
  124. List<CourseNo> select = courseNoList.stream().filter(row->row.getNo() > min && row.getNo()<= max).collect(Collectors.toList());
  125. previewAssignList = previewAssignService.listByCourseNos(course.getId(), getIds(select, CourseNo.class, "id"));
  126. }else{
  127. previewAssignList = previewAssignService.listByCourse(page, size, course.getId(), userId, times);
  128. }
  129. replaceTitle(previewAssignList);
  130. break;
  131. }
  132. List<UserPreviewPaperRelation> pr = Transform.convert(previewAssignList, UserPreviewPaperRelation.class);
  133. Collection assignIds = Transform.getIds(previewAssignList, PreviewAssign.class, "id");
  134. // 获取详细数据
  135. List<UserPaper> userPaperList = userPaperService.listWithOrigin(userId, PaperOrigin.PREVIEW, assignIds, recordId);
  136. Transform.combine(pr, userPaperList, UserPreviewPaperRelation.class, "id", "paper", UserPaper.class, "originId");
  137. Collection ids = Transform.getIds(userPaperList, UserPaper.class, "id");
  138. // 获取最后一次作业结果
  139. List<UserReport> reportList = userReportService.listWithLast(ids);
  140. Transform.combine(pr, reportList, UserPreviewPaperRelation.class, "id", "report", UserReport.class, "originId");
  141. return pr;
  142. }
  143. /**
  144. * 根据试卷,获取当前关联的学习记录
  145. * @param assignId
  146. * @return
  147. */
  148. public Integer getRecord(Integer userId, Integer assignId){
  149. PreviewAssign assign = previewAssignService.get(assignId);
  150. if (assign == null){
  151. throw new ParameterException("记录不存在");
  152. }
  153. Course course = courseService.get(assign.getCourseId());
  154. CourseModule courseModule = CourseModule.ValueOf(course.getCourseModule());
  155. switch(courseModule){
  156. case VS:
  157. UserCourseAppointment appointment = userCourseAppointmentService.get(assign.getCourseAppointment());
  158. return appointment.getRecordId();
  159. case ONLINE:
  160. UserOrderRecord timeRecord = userOrderRecordService.getByUserAndTime(userId, assign.getCourseId(), assign.getCourseTime());
  161. return timeRecord.getId();
  162. case VIDEO:
  163. // 获取当前该课程记录
  164. UserCourse record = userCourseService.getCourseBase(userId, assign.getCourseId());
  165. return record != null ? record.getRecordId() : 0;
  166. default:
  167. return 0;
  168. }
  169. }
  170. /**
  171. * 获取预习作业关联的提问权限记录
  172. * @param assignId
  173. * @return
  174. */
  175. public Integer questionCourse(Integer userId, Integer assignId){
  176. PreviewAssign assign = previewAssignService.get(assignId);
  177. if (assign == null){
  178. throw new ParameterException("记录不存在");
  179. }
  180. Course course = courseService.get(assign.getCourseId());
  181. CourseModule courseModule = CourseModule.ValueOf(course.getCourseModule());
  182. switch(courseModule){
  183. case VS:
  184. // 默认没有?
  185. return 0;
  186. // UserCourseAppointment appointment = userCourseAppointmentService.get(assign.getCourseAppointment());
  187. // return appointment.getRecordId();
  188. case ONLINE:
  189. UserOrderRecord timeRecord = userOrderRecordService.getByUserAndTime(userId, assign.getCourseId(), assign.getCourseTime());
  190. // 有效期延长到n天
  191. if (Tools.addDate(timeRecord.getUseEndTime(), course.getAskExtendDays()).before(new Date())){
  192. return 0;
  193. }
  194. return timeRecord.getId();
  195. case VIDEO:
  196. // 只有系统授课允许
  197. VideoCourseType videoCourseType = VideoCourseType.ValueOf(course.getVideoType());
  198. if (videoCourseType != VideoCourseType.SYSTEM) return 0;
  199. // 获取当前该课程记录
  200. UserCourse record = userCourseService.getCourseBase(userId, assign.getCourseId());
  201. return record != null ? record.getRecordId() : 0;
  202. default:
  203. return 0;
  204. }
  205. }
  206. public void replaceTitle(List<PreviewAssign> previewAssignList){
  207. Collection previewIds = Transform.getIds(previewAssignList, PreviewAssign.class, "paperId");
  208. List<PreviewPaper> paperList = previewPaperService.select(previewIds);
  209. Map paperTitle = Transform.getMap(paperList, PreviewPaper.class, "id", "title");
  210. Transform.combine(previewAssignList, paperTitle, PreviewAssign.class, "paperId", "title");
  211. }
  212. public void replaceTitle(PreviewAssign previewAssign){
  213. PreviewPaper paper = previewPaperService.get(previewAssign.getPaperId());
  214. previewAssign.setTitle(paper.getTitle());
  215. }
  216. }