CourseController.java 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853
  1. package com.qxgmat.controller.admin;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.github.pagehelper.Page;
  4. import com.nuliji.tools.*;
  5. import com.nuliji.tools.exception.ParameterException;
  6. import com.qxgmat.data.constants.enums.ExperienceDayRange;
  7. import com.qxgmat.data.constants.enums.ExperienceScoreRange;
  8. import com.qxgmat.data.constants.enums.module.CourseModule;
  9. import com.qxgmat.data.constants.enums.module.ProductType;
  10. import com.qxgmat.data.constants.enums.status.AnswerStatus;
  11. import com.qxgmat.data.constants.enums.status.DirectionStatus;
  12. import com.qxgmat.data.constants.enums.trade.RecordSource;
  13. import com.qxgmat.data.constants.enums.user.DataType;
  14. import com.qxgmat.data.constants.enums.user.MoneyRange;
  15. import com.qxgmat.data.dao.entity.*;
  16. import com.qxgmat.data.relation.entity.CourseNoStatRelation;
  17. import com.qxgmat.data.relation.entity.CourseStudentNumberRelation;
  18. import com.qxgmat.dto.admin.extend.*;
  19. import com.qxgmat.dto.admin.request.*;
  20. import com.qxgmat.dto.admin.response.*;
  21. import com.qxgmat.help.ShiroHelp;
  22. import com.qxgmat.service.ManagerService;
  23. import com.qxgmat.service.UsersService;
  24. import com.qxgmat.service.extend.CourseExtendService;
  25. import com.qxgmat.service.extend.MessageExtendService;
  26. import com.qxgmat.service.extend.OrderFlowService;
  27. import com.qxgmat.service.extend.ToolsService;
  28. import com.qxgmat.service.inline.*;
  29. import com.qxgmat.task.AsyncTask;
  30. import io.swagger.annotations.ApiOperation;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.validation.annotation.Validated;
  33. import org.springframework.web.bind.annotation.*;
  34. import javax.servlet.http.HttpServletRequest;
  35. import javax.servlet.http.HttpSession;
  36. import java.math.BigDecimal;
  37. import java.util.Collection;
  38. import java.util.Date;
  39. import java.util.List;
  40. import java.util.Map;
  41. @RestController("AdminClassController")
  42. @RequestMapping("/admin/course")
  43. public class CourseController {
  44. @Autowired
  45. private ShiroHelp shiroHelp;
  46. @Autowired
  47. private CourseService courseService;
  48. @Autowired
  49. private CourseNoService courseNoService;
  50. @Autowired
  51. private CoursePackageService coursePackageService;
  52. @Autowired
  53. private CourseDataService courseDataService;
  54. @Autowired
  55. private CourseDataHistoryService courseDataHistoryService;
  56. @Autowired
  57. private CourseExperienceService courseExperienceService;
  58. @Autowired
  59. private CourseTeacherService courseTeacherService;
  60. @Autowired
  61. private CourseTimeService courseTimeService;
  62. @Autowired
  63. private PreviewPaperService previewPaperService;
  64. @Autowired
  65. private PreviewAssignService previewAssignService;
  66. @Autowired
  67. private UserAskCourseService userAskCourseService;
  68. @Autowired
  69. private ManagerLogService managerLogService;
  70. @Autowired
  71. private ManagerService managerService;
  72. @Autowired
  73. private UsersService usersService;
  74. @Autowired
  75. private UserOrderRecordService userOrderRecordService;
  76. @Autowired
  77. private UserCourseRecordService userCourseRecordService;
  78. @Autowired
  79. private CourseExtendService courseExtendService;
  80. @Autowired
  81. private OrderFlowService orderFlowService;
  82. @Autowired
  83. private ToolsService toolsService;
  84. @Autowired
  85. private MessageExtendService messageExtendService;
  86. @Autowired
  87. private AsyncTask asyncTask;
  88. @RequestMapping(value = "/add", method = RequestMethod.POST)
  89. @ApiOperation(value = "添加课程", httpMethod = "POST")
  90. public Response<Course> add(@RequestBody @Validated Course dto, HttpServletRequest request) {
  91. Course entity = Transform.convert(dto, Course.class);
  92. entity = courseService.add(entity);
  93. managerLogService.log(request);
  94. return ResponseHelp.success(Transform.convert(entity, Course.class));
  95. }
  96. @RequestMapping(value = "/edit", method = RequestMethod.PUT)
  97. @ApiOperation(value = "编辑课程", httpMethod = "PUT")
  98. public Response<Boolean> edit(@RequestBody @Validated Course dto, HttpServletRequest request) {
  99. Course entity = Transform.convert(dto, Course.class);
  100. entity = courseService.edit(entity);
  101. managerLogService.log(request);
  102. return ResponseHelp.success(true);
  103. }
  104. @RequestMapping(value = "/delete", method = RequestMethod.DELETE)
  105. @ApiOperation(value = "删除课程", httpMethod = "DELETE")
  106. public Response<Boolean> delete(@RequestParam int id, HttpServletRequest request) {
  107. Course entity = courseService.get(id);
  108. courseService.delete(id);
  109. managerLogService.log(request);
  110. return ResponseHelp.success(true);
  111. }
  112. @RequestMapping(value = "/detail", method = RequestMethod.GET)
  113. @ApiOperation(value = "获取课程", httpMethod = "GET")
  114. public Response<Course> detail(@RequestParam int id,HttpSession session) {
  115. Course entity = courseService.get(id);
  116. return ResponseHelp.success(Transform.convert(entity, Course.class));
  117. }
  118. @RequestMapping(value = "/list", method = RequestMethod.GET)
  119. @ApiOperation(value = "课程列表", httpMethod = "GET")
  120. public Response<PageMessage<CourseListDto>> list(
  121. @RequestParam(required = false, defaultValue = "1") int page,
  122. @RequestParam(required = false, defaultValue = "100") int size,
  123. @RequestParam(required = false) Integer[] ids,
  124. @RequestParam(required = false) String keyword,
  125. @RequestParam(required = false) String courseModule,
  126. @RequestParam(required = false) Integer structId,
  127. @RequestParam(required = false) Boolean excludeVs,
  128. @RequestParam(required = false) Boolean excludeOnline,
  129. @RequestParam(required = false, defaultValue = "id") String order,
  130. @RequestParam(required = false, defaultValue = "desc") String direction,
  131. HttpSession session) {
  132. Page<Course> p;
  133. if (ids != null && ids.length > 0){
  134. p = courseService.select(ids);
  135. }else{
  136. p = courseService.listAdmin(page, size, keyword, CourseModule.ValueOf(courseModule), structId, excludeVs, excludeOnline, order, DirectionStatus.ValueOf(direction));
  137. }
  138. List<CourseListDto> pr = Transform.convert(p, CourseListDto.class);
  139. return ResponseHelp.success(pr, page, size, p.getTotal());
  140. }
  141. @RequestMapping(value = "/package/add", method = RequestMethod.POST)
  142. @ApiOperation(value = "添加套餐", httpMethod = "POST")
  143. public Response<CoursePackage> addPackage(@RequestBody @Validated CoursePackageDto dto, HttpServletRequest request) {
  144. CoursePackage entity = Transform.dtoToEntity(dto);
  145. entity = coursePackageService.add(entity);
  146. managerLogService.log(request);
  147. return ResponseHelp.success(Transform.convert(entity, CoursePackage.class));
  148. }
  149. @RequestMapping(value = "/package/edit", method = RequestMethod.PUT)
  150. @ApiOperation(value = "编辑套餐", httpMethod = "PUT")
  151. public Response<Boolean> editPackage(@RequestBody @Validated CoursePackageDto dto, HttpServletRequest request) {
  152. CoursePackage entity = Transform.dtoToEntity(dto);
  153. entity = coursePackageService.edit(entity);
  154. managerLogService.log(request);
  155. return ResponseHelp.success(true);
  156. }
  157. @RequestMapping(value = "/package/delete", method = RequestMethod.DELETE)
  158. @ApiOperation(value = "删除套餐", httpMethod = "DELETE")
  159. public Response<Boolean> deletePackage(@RequestParam int id, HttpServletRequest request) {
  160. coursePackageService.delete(id);
  161. managerLogService.log(request);
  162. return ResponseHelp.success(true);
  163. }
  164. @RequestMapping(value = "/package/detail", method = RequestMethod.GET)
  165. @ApiOperation(value = "获取套餐", httpMethod = "GET")
  166. public Response<CoursePackage> detailPackage(@RequestParam int id,HttpSession session) {
  167. CoursePackage entity = coursePackageService.get(id);
  168. return ResponseHelp.success(Transform.convert(entity, CoursePackage.class));
  169. }
  170. @RequestMapping(value = "/package/list", method = RequestMethod.GET)
  171. @ApiOperation(value = "套餐列表", httpMethod = "GET")
  172. public Response<PageMessage<CoursePackage>> listPackage(
  173. @RequestParam(required = false, defaultValue = "1") int page,
  174. @RequestParam(required = false, defaultValue = "100") int size,
  175. @RequestParam(required = false) String keyword,
  176. @RequestParam(required = false, defaultValue = "id") String order,
  177. @RequestParam(required = false, defaultValue = "desc") String direction,
  178. HttpSession session) {
  179. Page<CoursePackage> p = coursePackageService.listAdmin(page, size, keyword, order, DirectionStatus.ValueOf(direction));
  180. List<CoursePackage> pr = Transform.convert(p, CoursePackage.class);
  181. return ResponseHelp.success(pr, page, size, p.getTotal());
  182. }
  183. @RequestMapping(value = "/data/add", method = RequestMethod.POST)
  184. @ApiOperation(value = "添加资料", httpMethod = "POST")
  185. public Response<CourseData> addData(@RequestBody @Validated CourseDataDto dto, HttpServletRequest request) {
  186. CourseData entity = Transform.dtoToEntity(dto);
  187. entity = courseDataService.add(entity);
  188. managerLogService.log(request);
  189. return ResponseHelp.success(Transform.convert(entity, CourseData.class));
  190. }
  191. @RequestMapping(value = "/data/edit", method = RequestMethod.PUT)
  192. @ApiOperation(value = "编辑资料", httpMethod = "PUT")
  193. public Response<Boolean> editData(@RequestBody @Validated CourseDataDto dto, HttpServletRequest request) {
  194. CourseData entity = Transform.dtoToEntity(dto);
  195. entity = courseDataService.edit(entity);
  196. managerLogService.log(request);
  197. return ResponseHelp.success(true);
  198. }
  199. @RequestMapping(value = "/data/delete", method = RequestMethod.DELETE)
  200. @ApiOperation(value = "删除资料", httpMethod = "DELETE")
  201. public Response<Boolean> deleteData(@RequestParam int id, HttpServletRequest request) {
  202. courseDataService.delete(id);
  203. managerLogService.log(request);
  204. return ResponseHelp.success(true);
  205. }
  206. @RequestMapping(value = "/data/detail", method = RequestMethod.GET)
  207. @ApiOperation(value = "获取资料", httpMethod = "GET")
  208. public Response<CourseData> detailData(@RequestParam int id,HttpSession session) {
  209. CourseData entity = courseDataService.get(id);
  210. return ResponseHelp.success(Transform.convert(entity, CourseData.class));
  211. }
  212. @RequestMapping(value = "/data/list", method = RequestMethod.GET)
  213. @ApiOperation(value = "资料列表", httpMethod = "GET")
  214. public Response<PageMessage<CourseData>> listData(
  215. @RequestParam(required = false, defaultValue = "1") int page,
  216. @RequestParam(required = false, defaultValue = "100") int size,
  217. @RequestParam(required = false) String keyword,
  218. @RequestParam(required = false) Integer structId,
  219. @RequestParam(required = false) String dataType,
  220. @RequestParam(required = false, defaultValue = "id") String order,
  221. @RequestParam(required = false, defaultValue = "desc") String direction,
  222. HttpSession session) {
  223. Page<CourseData> p = courseDataService.listAdmin(page, size, keyword, structId, DataType.ValueOf(dataType), order, DirectionStatus.ValueOf(direction));
  224. List<CourseData> pr = Transform.convert(p, CourseData.class);
  225. return ResponseHelp.success(pr, page, size, p.getTotal());
  226. }
  227. @RequestMapping(value = "/data/history/add", method = RequestMethod.POST)
  228. @ApiOperation(value = "添加资料历史", httpMethod = "POST")
  229. public Response<CourseDataHistory> addDataHistory(@RequestBody @Validated CourseDataHistoryDto dto, HttpServletRequest request) {
  230. CourseDataHistory entity = Transform.dtoToEntity(dto);
  231. entity = courseDataHistoryService.add(entity);
  232. CourseData in = courseDataService.get(entity.getDataId());
  233. CourseData tmp = CourseData.builder()
  234. .id(entity.getDataId())
  235. .build();
  236. if(in.getLatestTime() == null){
  237. tmp.setLatestTime(entity.getTime());
  238. courseDataService.edit(tmp);
  239. }else if(entity.getTime().after(in.getLatestTime())){
  240. tmp.setLatestTime(entity.getTime());
  241. courseDataService.edit(tmp);
  242. }
  243. asyncTask.postDataUpdate(entity.getId());
  244. managerLogService.log(request);
  245. return ResponseHelp.success(Transform.convert(entity, CourseDataHistory.class));
  246. }
  247. @RequestMapping(value = "/data/history/edit", method = RequestMethod.PUT)
  248. @ApiOperation(value = "编辑资料历史", httpMethod = "PUT")
  249. public Response<Boolean> editDataHistory(@RequestBody @Validated CourseDataHistoryDto dto, HttpServletRequest request) {
  250. CourseDataHistory entity = Transform.dtoToEntity(dto);
  251. entity = courseDataHistoryService.edit(entity);
  252. CourseData in = courseDataService.get(entity.getDataId());
  253. CourseData tmp = CourseData.builder()
  254. .id(entity.getDataId())
  255. .build();
  256. if(in.getLatestTime() == null){
  257. tmp.setLatestTime(entity.getTime());
  258. courseDataService.edit(tmp);
  259. }else if(entity.getTime().after(in.getLatestTime())){
  260. tmp.setLatestTime(entity.getTime());
  261. courseDataService.edit(tmp);
  262. }
  263. managerLogService.log(request);
  264. return ResponseHelp.success(true);
  265. }
  266. @RequestMapping(value = "/data/history/delete", method = RequestMethod.DELETE)
  267. @ApiOperation(value = "删除资料历史", httpMethod = "DELETE")
  268. public Response<Boolean> deleteDataHistory(@RequestParam int id, HttpServletRequest request) {
  269. courseDataHistoryService.delete(id);
  270. managerLogService.log(request);
  271. return ResponseHelp.success(true);
  272. }
  273. @RequestMapping(value = "/data/history/list", method = RequestMethod.GET)
  274. @ApiOperation(value = "资料历史列表", httpMethod = "GET")
  275. public Response<PageMessage<CourseDataHistory>> listDataHistory(
  276. @RequestParam(required = false, defaultValue = "1") int page,
  277. @RequestParam(required = false, defaultValue = "100") int size,
  278. @RequestParam(required = true) Integer dataId,
  279. @RequestParam(required = false, defaultValue = "id") String order,
  280. @RequestParam(required = false, defaultValue = "desc") String direction,
  281. HttpSession session) {
  282. Page<CourseDataHistory> p = courseDataHistoryService.listByData(page, size, dataId);
  283. List<CourseDataHistory> pr = Transform.convert(p, CourseDataHistory.class);
  284. return ResponseHelp.success(pr, page, size, p.getTotal());
  285. }
  286. @RequestMapping(value = "/experience/add", method = RequestMethod.POST)
  287. @ApiOperation(value = "添加心经", httpMethod = "POST")
  288. public Response<CourseExperience> addExperience(@RequestBody @Validated CourseExperienceDto dto, HttpServletRequest request) {
  289. CourseExperience entity = Transform.dtoToEntity(dto);
  290. entity = courseExperienceService.add(entity);
  291. managerLogService.log(request);
  292. return ResponseHelp.success(Transform.convert(entity, CourseExperience.class));
  293. }
  294. @RequestMapping(value = "/experience/edit", method = RequestMethod.PUT)
  295. @ApiOperation(value = "编辑心经", httpMethod = "PUT")
  296. public Response<Boolean> editExperience(@RequestBody @Validated CourseExperienceDto dto, HttpServletRequest request) {
  297. CourseExperience entity = Transform.dtoToEntity(dto);
  298. entity = courseExperienceService.edit(entity);
  299. managerLogService.log(request);
  300. return ResponseHelp.success(true);
  301. }
  302. @RequestMapping(value = "/experience/delete", method = RequestMethod.DELETE)
  303. @ApiOperation(value = "删除心经", httpMethod = "DELETE")
  304. public Response<Boolean> deleteExperience(@RequestParam int id, HttpServletRequest request) {
  305. courseExperienceService.delete(id);
  306. managerLogService.log(request);
  307. return ResponseHelp.success(true);
  308. }
  309. @RequestMapping(value = "/experience/detail", method = RequestMethod.GET)
  310. @ApiOperation(value = "获取心经", httpMethod = "GET")
  311. public Response<CourseExperience> detailExperience(@RequestParam int id,HttpSession session) {
  312. CourseExperience entity = courseExperienceService.get(id);
  313. return ResponseHelp.success(Transform.convert(entity, CourseExperience.class));
  314. }
  315. @RequestMapping(value = "/experience/list", method = RequestMethod.GET)
  316. @ApiOperation(value = "心经列表", httpMethod = "GET")
  317. public Response<PageMessage<CourseExperienceListDto>> listExperience(
  318. @RequestParam(required = false, defaultValue = "1") int page,
  319. @RequestParam(required = false, defaultValue = "100") int size,
  320. @RequestParam(required = false) Integer userId,
  321. @RequestParam(required = false) String keyword,
  322. @RequestParam(required = false) String prepareStatus,
  323. @RequestParam(required = false) String experienceScore,
  324. @RequestParam(required = false) String experienceDay,
  325. @RequestParam(required = false) String experiencePercent,
  326. @RequestParam(required = false, defaultValue = "id") String order,
  327. @RequestParam(required = false, defaultValue = "desc") String direction,
  328. HttpSession session) {
  329. Page<CourseExperience> p = courseExperienceService.listAdmin(page, size, userId, keyword, prepareStatus, ExperienceScoreRange.ValueOf(experienceScore), ExperienceDayRange.ValueOf(experienceDay), experiencePercent, order, DirectionStatus.ValueOf(direction));
  330. List<CourseExperienceListDto> pr = Transform.convert(p, CourseExperienceListDto.class);
  331. // 绑定用户
  332. Collection userIds = Transform.getIds(p, CourseExperience.class, "userId");
  333. List<User> userList = usersService.select(userIds);
  334. Transform.combine(pr, userList, CourseExperienceListDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  335. return ResponseHelp.success(pr, page, size, p.getTotal());
  336. }
  337. @RequestMapping(value = "/teacher/add", method = RequestMethod.POST)
  338. @ApiOperation(value = "添加老师", httpMethod = "POST")
  339. public Response<CourseTeacher> addTeacher(@RequestBody @Validated CourseTeacherDto dto, HttpServletRequest request) {
  340. CourseTeacher entity = Transform.dtoToEntity(dto);
  341. entity = courseTeacherService.add(entity);
  342. managerLogService.log(request);
  343. return ResponseHelp.success(Transform.convert(entity, CourseTeacher.class));
  344. }
  345. @RequestMapping(value = "/teacher/edit", method = RequestMethod.PUT)
  346. @ApiOperation(value = "编辑教师", httpMethod = "PUT")
  347. public Response<Boolean> editTeacher(@RequestBody @Validated CourseTeacherDto dto, HttpServletRequest request) {
  348. CourseTeacher entity = Transform.dtoToEntity(dto);
  349. entity = courseTeacherService.edit(entity);
  350. managerLogService.log(request);
  351. return ResponseHelp.success(true);
  352. }
  353. @RequestMapping(value = "/teacher/delete", method = RequestMethod.DELETE)
  354. @ApiOperation(value = "删除教师", httpMethod = "DELETE")
  355. public Response<Boolean> deleteTeacher(@RequestParam int id, HttpServletRequest request) {
  356. courseTeacherService.delete(id);
  357. managerLogService.log(request);
  358. return ResponseHelp.success(true);
  359. }
  360. @RequestMapping(value = "/teacher/detail", method = RequestMethod.GET)
  361. @ApiOperation(value = "获取教师", httpMethod = "GET")
  362. public Response<CourseTeacher> detailTeacher(@RequestParam int id,HttpSession session) {
  363. CourseTeacher entity = courseTeacherService.get(id);
  364. return ResponseHelp.success(Transform.convert(entity, CourseTeacher.class));
  365. }
  366. @RequestMapping(value = "/teacher/list", method = RequestMethod.GET)
  367. @ApiOperation(value = "教师列表", httpMethod = "GET")
  368. public Response<PageMessage<CourseTeacher>> listTeacher(
  369. @RequestParam(required = false, defaultValue = "1") int page,
  370. @RequestParam(required = false, defaultValue = "100") int size,
  371. @RequestParam(required = false) Integer courseId,
  372. @RequestParam(required = false, defaultValue = "id") String order,
  373. @RequestParam(required = false, defaultValue = "desc") String direction,
  374. HttpSession session) {
  375. Page<CourseTeacher> p = courseTeacherService.listAdmin(page, size, courseId);
  376. return ResponseHelp.success(p, page, size, p.getTotal());
  377. }
  378. @RequestMapping(value = "/no/add", method = RequestMethod.POST)
  379. @ApiOperation(value = "添加课时", httpMethod = "POST")
  380. public Response<CourseNo> addNo(@RequestBody @Validated CourseNoDto dto, HttpServletRequest request) {
  381. // 查询课时
  382. CourseNo entity = Transform.dtoToEntity(dto);
  383. entity = courseNoService.addNo(entity);
  384. // 统计课时数
  385. CourseNoStatRelation relation = courseNoService.statCourse(dto.getCourseId());
  386. courseService.edit(Course.builder().id(dto.getCourseId()).noNumber(relation.getNumber()).time(relation.getNumber()).build());
  387. managerLogService.log(request);
  388. return ResponseHelp.success(Transform.convert(entity, CourseNo.class));
  389. }
  390. @RequestMapping(value = "/no/edit", method = RequestMethod.PUT)
  391. @ApiOperation(value = "编辑课时", httpMethod = "PUT")
  392. public Response<Boolean> editNo(@RequestBody @Validated CourseNoDto dto, HttpServletRequest request) {
  393. // 调整课时顺序
  394. CourseNo entity = Transform.dtoToEntity(dto);
  395. entity = courseNoService.editNo(entity);// 统计课时数
  396. CourseNoStatRelation relation = courseNoService.statCourse(dto.getCourseId());
  397. courseService.edit(Course.builder().id(dto.getCourseId()).noNumber(relation.getNumber()).time(relation.getNumber()).build());
  398. managerLogService.log(request);
  399. return ResponseHelp.success(true);
  400. }
  401. @RequestMapping(value = "/no/delete", method = RequestMethod.DELETE)
  402. @ApiOperation(value = "删除课时", httpMethod = "DELETE")
  403. public Response<Boolean> deleteNo(@RequestParam int id, HttpServletRequest request) {
  404. CourseNo in = courseNoService.get(id);
  405. courseNoService.deleteNo(id);
  406. // 统计课时数
  407. CourseNoStatRelation relation = courseNoService.statCourse(in.getCourseId());
  408. courseService.edit(Course.builder().id(in.getCourseId()).noNumber(relation.getNumber()).time(relation.getNumber()).build());
  409. // 删除对应预习作业关系
  410. previewPaperService.removeCourseNo(in.getCourseId(), in.getId());
  411. previewAssignService.removeCourseNo(in.getCourseId(), in.getId());
  412. managerLogService.log(request);
  413. return ResponseHelp.success(true);
  414. }
  415. @RequestMapping(value = "/no/detail", method = RequestMethod.GET)
  416. @ApiOperation(value = "获取课时", httpMethod = "GET")
  417. public Response<CourseNo> detailNo(@RequestParam int id,HttpSession session) {
  418. CourseNo entity = courseNoService.get(id);
  419. return ResponseHelp.success(Transform.convert(entity, CourseNo.class));
  420. }
  421. @RequestMapping(value = "/no/all", method = RequestMethod.GET)
  422. @ApiOperation(value = "课时列表", httpMethod = "GET")
  423. public Response<List<CourseNo>> listNo(
  424. @RequestParam(required = false) Integer courseId,
  425. HttpSession session) {
  426. List<CourseNo> p = courseNoService.allCourse(courseId);
  427. return ResponseHelp.success(p);
  428. }
  429. @RequestMapping(value = "/time/add", method = RequestMethod.POST)
  430. @ApiOperation(value = "添加课时", httpMethod = "POST")
  431. public Response<CourseTime> addTime(@RequestBody @Validated CourseTimeDto dto, HttpServletRequest request) {
  432. CourseTime entity = Transform.dtoToEntity(dto);
  433. entity = courseTimeService.add(entity);
  434. managerLogService.log(request);
  435. return ResponseHelp.success(Transform.convert(entity, CourseTime.class));
  436. }
  437. @RequestMapping(value = "/time/edit", method = RequestMethod.PUT)
  438. @ApiOperation(value = "编辑课时", httpMethod = "PUT")
  439. public Response<Boolean> editTime(@RequestBody @Validated CourseTimeDto dto, HttpServletRequest request) {
  440. CourseTime entity = Transform.dtoToEntity(dto);
  441. entity = courseTimeService.edit(entity);
  442. // 修改所有学员记录
  443. userOrderRecordService.changeStudentTime(entity.getCourseId(), dto.getId(), entity.getStartTime(), entity.getEndTime());
  444. managerLogService.log(request);
  445. return ResponseHelp.success(true);
  446. }
  447. @RequestMapping(value = "/time/delete", method = RequestMethod.DELETE)
  448. @ApiOperation(value = "删除课时", httpMethod = "DELETE")
  449. public Response<Boolean> deleteTime(@RequestParam int id, HttpServletRequest request) {
  450. CourseTime in = courseTimeService.get(id);
  451. courseTimeService.delete(id);
  452. // 删除对应预习作业关系
  453. previewAssignService.removeCourseTime(in.getCourseId(), in.getId());
  454. // todo 删除对应学生关系
  455. managerLogService.log(request);
  456. return ResponseHelp.success(true);
  457. }
  458. @RequestMapping(value = "/time/detail", method = RequestMethod.GET)
  459. @ApiOperation(value = "获取课时", httpMethod = "GET")
  460. public Response<CourseTime> detailTime(@RequestParam int id,HttpSession session) {
  461. CourseTime entity = courseTimeService.get(id);
  462. return ResponseHelp.success(Transform.convert(entity, CourseTime.class));
  463. }
  464. @RequestMapping(value = "/time/list", method = RequestMethod.GET)
  465. @ApiOperation(value = "课时列表", httpMethod = "GET")
  466. public Response<PageMessage<CourseTimeInfoDto>> listTime(
  467. @RequestParam(required = false, defaultValue = "1") int page,
  468. @RequestParam(required = false, defaultValue = "100") int size,
  469. @RequestParam(required = false) Integer[] ids,
  470. @RequestParam(required = false) Integer courseId,
  471. @RequestParam(required = false) String keyword,
  472. @RequestParam(required = false, defaultValue = "id") String order,
  473. @RequestParam(required = false, defaultValue = "desc") String direction,
  474. HttpSession session) {
  475. Page<CourseTime> p;
  476. if (ids != null && ids.length > 0){
  477. p = courseTimeService.select(ids);
  478. }else{
  479. p = courseTimeService.listAdmin(page, size, courseId, keyword);
  480. }
  481. List<CourseTimeInfoDto> pr = Transform.convert(p, CourseTimeInfoDto.class);
  482. // 绑定学生数量
  483. Collection timeIds = Transform.getIds(p, CourseTime.class, "id");
  484. List<CourseStudentNumberRelation> relations = userOrderRecordService.groupByCourse(timeIds);
  485. Map map = Transform.getMap(relations, CourseStudentNumberRelation.class, "id", "number");
  486. Transform.combine(pr, map, CourseTimeInfoDto.class, "id", "studentNumber");
  487. return ResponseHelp.success(pr, page, size, p.getTotal());
  488. }
  489. @RequestMapping(value = "/student/online/add", method = RequestMethod.POST)
  490. @ApiOperation(value = "添加学员", httpMethod = "POST")
  491. public Response<UserOrderRecord> addStudentOnline(@RequestBody @Validated CourseStudentOnlineDto dto, HttpServletRequest request) {
  492. UserOrderRecord entity = Transform.dtoToEntity(dto);
  493. CourseTime courseTime = courseTimeService.get(dto.getTimeId());
  494. if (courseTime == null){
  495. throw new ParameterException("时间段错误");
  496. }
  497. entity.setSource(RecordSource.BACKEND.key);
  498. entity.setProductType(ProductType.COURSE.key);
  499. entity.setTimeId(dto.getTimeId());
  500. entity.setProductId(dto.getCourseId());
  501. entity.setUseStartTime(courseTime.getStartTime());
  502. entity.setUseEndTime(courseTime.getEndTime());
  503. // 计算有效期
  504. entity.setUseExpireDays((int)(courseTime.getEndTime().getTime() - courseTime.getStartTime().getTime())/86400000);
  505. // 默认回答时间
  506. JSONObject askInfo = toolsService.getAskTime(BigDecimal.valueOf(0));
  507. if (askInfo != null )entity.setAskTime(askInfo.getIntValue("hour") * 3600);
  508. entity = userOrderRecordService.addStudent(entity);
  509. managerLogService.log(request);
  510. return ResponseHelp.success(Transform.convert(entity, UserOrderRecord.class));
  511. }
  512. @RequestMapping(value = "/student/online/edit", method = RequestMethod.PUT)
  513. @ApiOperation(value = "编辑学员", httpMethod = "PUT")
  514. public Response<Boolean> editStudentOnline(@RequestBody @Validated CourseStudentOnlineDto dto, HttpServletRequest request) {
  515. UserOrderRecord entity = Transform.dtoToEntity(dto);
  516. entity = userOrderRecordService.edit(entity);
  517. managerLogService.log(request);
  518. return ResponseHelp.success(true);
  519. }
  520. @RequestMapping(value = "/student/online/delete", method = RequestMethod.DELETE)
  521. @ApiOperation(value = "删除学员", httpMethod = "DELETE")
  522. public Response<Boolean> deleteStudentOnline(@RequestParam int id, HttpServletRequest request) {
  523. userOrderRecordService.delete(id);
  524. managerLogService.log(request);
  525. return ResponseHelp.success(true);
  526. }
  527. @RequestMapping(value = "/student/online/detail", method = RequestMethod.GET)
  528. @ApiOperation(value = "获取学员", httpMethod = "GET")
  529. public Response<UserOrderRecord> detailStudentOnline(@RequestParam int id,HttpSession session) {
  530. UserOrderRecord entity = userOrderRecordService.get(id);
  531. return ResponseHelp.success(Transform.convert(entity, UserOrderRecord.class));
  532. }
  533. @RequestMapping(value = "/student/online/list", method = RequestMethod.GET)
  534. @ApiOperation(value = "课时学员", httpMethod = "GET")
  535. public Response<PageMessage<CourseStudentOnlineListDto>> listStudentOnline(
  536. @RequestParam(required = false, defaultValue = "1") int page,
  537. @RequestParam(required = false, defaultValue = "100") int size,
  538. @RequestParam(required = false) Integer courseId,
  539. @RequestParam(required = false) Integer timeId,
  540. @RequestParam(required = false, defaultValue = "id") String order,
  541. @RequestParam(required = false, defaultValue = "desc") String direction,
  542. HttpSession session) {
  543. Page<UserOrderRecord> p = userOrderRecordService.listAdminByOnline(page, size, courseId, timeId);
  544. List<CourseStudentOnlineListDto> pr = Transform.convert(p, CourseStudentOnlineListDto.class);
  545. // 绑定用户
  546. Collection userIds = Transform.getIds(p, UserOrderRecord.class, "userId");
  547. List<User> userList = usersService.select(userIds);
  548. Transform.combine(pr, userList, CourseStudentOnlineListDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  549. // 绑定时间段
  550. Collection timeIds = Transform.getIds(p, UserOrderRecord.class, "no");
  551. List<CourseTime> timeList = courseTimeService.select(timeIds);
  552. Transform.combine(pr, timeList, CourseStudentOnlineListDto.class, "no", "time", CourseTime.class, "id", CourseTimeExtendDto.class);
  553. return ResponseHelp.success(pr, page, size, p.getTotal());
  554. }
  555. @RequestMapping(value = "/student/vs/add", method = RequestMethod.POST)
  556. @ApiOperation(value = "添加vs学员", httpMethod = "POST")
  557. private Response<Boolean> addStudentVs(@RequestBody @Validated UserCourseRecordDto dto){
  558. UserOrderRecord entity = Transform.dtoToEntity(dto);
  559. Course course = courseService.get(dto.getCourseId());
  560. entity.setProductType(ProductType.COURSE.key);
  561. entity.setOrderId(0);
  562. entity.setProductId(dto.getCourseId());
  563. entity.setTeacherId(dto.getTeacherId());
  564. entity.setSource(RecordSource.BACKEND.key);
  565. entity.setNumber(dto.getNumber());
  566. entity.setExpireDays(course.getExpireDays());
  567. entity.setUseExpireDays(courseExtendService.computeExpire(dto.getNumber(), course));
  568. // 预约后开通: 有效期开通后计算
  569. orderFlowService.addRecord(entity);
  570. return ResponseHelp.success(true);
  571. }
  572. @RequestMapping(value = "/student/vs/edit", method = RequestMethod.PUT)
  573. @ApiOperation(value = "修改vs学员", httpMethod = "PUT")
  574. private Response<Boolean> editStudentVs(@RequestBody @Validated UserCourseRecordDto dto){
  575. UserOrderRecord entity = Transform.dtoToEntity(dto);
  576. UserOrderRecord in = userOrderRecordService.get(entity.getId());
  577. if (in.getIsUsed() > 0 && !in.getNumber().equals(dto.getNumber())){
  578. // 已开通,重新计算有效期
  579. Course course = courseService.get(dto.getCourseId());
  580. Integer expireDay = courseExtendService.computeExpire(dto.getNumber(), course);
  581. entity.setEndTime(Tools.addDate(in.getStartTime(), expireDay));
  582. entity.setNumber(dto.getNumber());
  583. entity.setUseExpireDays(expireDay);
  584. }
  585. userOrderRecordService.edit(entity);
  586. return ResponseHelp.success(true);
  587. }
  588. @RequestMapping(value = "/student/vs/delete", method = RequestMethod.DELETE)
  589. @ApiOperation(value = "删除vs学员", httpMethod = "DELETE")
  590. private Response<Boolean> deleteStudentVs(@RequestParam int id){
  591. userOrderRecordService.delete(id);
  592. return ResponseHelp.success(true);
  593. }
  594. @RequestMapping(value = "/student/vs/list", method = RequestMethod.GET)
  595. @ApiOperation(value = "获取vs学员", httpMethod = "GET")
  596. private Response<PageMessage<UserCourseStudentRecordInfoDto>> listStudentVs(
  597. @RequestParam(required = false, defaultValue = "1") int page,
  598. @RequestParam(required = false, defaultValue = "100") int size,
  599. @RequestParam(required = false) Integer courseId,
  600. @RequestParam(required = false) Integer userId,
  601. @RequestParam(required = false, defaultValue = "id") String order,
  602. @RequestParam(required = false, defaultValue = "desc") String direction
  603. ){
  604. Page<UserOrderRecord> p = userOrderRecordService.listWithStudentAdmin(page, size, courseId, userId);
  605. List<UserCourseStudentRecordInfoDto> pr = Transform.convert(p, UserCourseStudentRecordInfoDto.class);
  606. // 绑定用户
  607. Collection userIds = Transform.getIds(p, UserOrderRecord.class, "userId");
  608. List<User> userList = usersService.select(userIds);
  609. Transform.combine(pr, userList, UserCourseStudentRecordInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  610. // 绑定教师
  611. Collection teacherIds = Transform.getIds(p, UserOrderRecord.class, "teacherId");
  612. List<CourseTeacher> teacherList = courseTeacherService.select(teacherIds);
  613. Transform.combine(pr, teacherList, UserCourseStudentRecordInfoDto.class, "teacherId", "teacher", CourseTeacher.class, "id", CourseTeacherExtendDto.class);
  614. return ResponseHelp.success(pr, page, size, p.getTotal());
  615. }
  616. @RequestMapping(value = "/study/list", method = RequestMethod.GET)
  617. @ApiOperation(value = "获取学习记录", httpMethod = "GET")
  618. private Response<PageMessage<UserCourseStudyRecordInfoDto>> listStudy(
  619. @RequestParam(required = false, defaultValue = "1") int page,
  620. @RequestParam(required = false, defaultValue = "100") int size,
  621. @RequestParam(required = false) Integer[] ids,
  622. @RequestParam(required = false) String courseModule,
  623. @RequestParam(required = false) Integer structId,
  624. @RequestParam(required = false) Integer courseId,
  625. @RequestParam(required = false) Integer userId,
  626. @RequestParam(required = false) String teacher,
  627. @RequestParam(required = false, defaultValue = "id") String order,
  628. @RequestParam(required = false, defaultValue = "desc") String direction
  629. ){
  630. Page<UserOrderRecord> p;
  631. if (ids != null && ids.length > 0){
  632. p = userOrderRecordService.select(ids);
  633. }else{
  634. p = userOrderRecordService.listWithStudyAdmin(page, size, courseModule != null ? new String[]{courseModule} : null, structId, courseId, userId, teacher, order, DirectionStatus.ValueOf(direction));
  635. }
  636. List<UserCourseStudyRecordInfoDto> pr = Transform.convert(p, UserCourseStudyRecordInfoDto.class);
  637. // 绑定用户
  638. Collection userIds = Transform.getIds(p, UserOrderRecord.class, "userId");
  639. List<User> userList = usersService.select(userIds);
  640. Transform.combine(pr, userList, UserCourseStudyRecordInfoDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  641. // 绑定课程
  642. Map courseMap = Transform.getMap(p, UserOrderRecord.class, "id", "productId");
  643. Transform.combine(pr, courseMap, UserCourseStudyRecordInfoDto.class, "id", "courseId");
  644. Collection courseIds = Transform.getIds(p, UserOrderRecord.class, "productId");
  645. List<Course> courseList = courseService.select(courseIds);
  646. Transform.combine(pr, courseList, UserCourseStudyRecordInfoDto.class, "courseId", "course", Course.class, "id", CourseExtendDto.class);
  647. // 绑定老师
  648. Collection teacherIds = Transform.getIds(p, UserOrderRecord.class, "teacherId");
  649. List<CourseTeacher> teacherList = courseTeacherService.select(teacherIds);
  650. Map teacherMap = Transform.getMap(teacherList, CourseTeacher.class,"id", "realname");
  651. Transform.combine(pr, teacherMap, UserCourseStudyRecordInfoDto.class, "teacherId", "teacher");
  652. // 学习记录
  653. Collection recordIds = Transform.getIds(p, UserOrderRecord.class, "id");
  654. List<UserCourseRecord> userCourseRecordList = userCourseRecordService.listWithLast(recordIds);
  655. Map recordMap = Transform.getMap(userCourseRecordList, UserCourseRecord.class,"recordId", "createTime");
  656. Transform.combine(pr, recordMap, UserCourseStudyRecordInfoDto.class, "id", "lastTime");
  657. return ResponseHelp.success(pr, page, size, p.getTotal());
  658. }
  659. @RequestMapping(value = "/ask/edit", method = RequestMethod.PUT)
  660. @ApiOperation(value = "修改提问信息", httpMethod = "PUT")
  661. public Response<Boolean> edit(@RequestBody @Validated UserAskCourseDto dto, HttpServletRequest request) {
  662. UserAskCourse entity = Transform.dtoToEntity(dto);
  663. UserAskCourse in = userAskCourseService.get(entity.getId());
  664. // 调整回答
  665. if(entity.getAnswer() != null && (!entity.getAnswer().isEmpty() || !in.getAnswer().equals(entity.getAnswer()))){
  666. entity.setAnswerTime(new Date());
  667. entity.setAnswerStatus(AnswerStatus.ANSWER.index);
  668. Manager manager = shiroHelp.getLoginManager();
  669. entity.setManagerId(manager.getId());
  670. User user = usersService.get(in.getUserId());
  671. messageExtendService.sendAskCourse(user, entity);
  672. }
  673. if (dto.getIgnoreStatus() != null && dto.getIgnoreStatus() > 0){
  674. entity.setAnswerStatus(AnswerStatus.IGNORE.index);
  675. }
  676. entity = userAskCourseService.edit(entity);
  677. if (dto.getOther() !=null && dto.getOther().length > 0){
  678. // 更新回答排序
  679. userAskCourseService.updateOrder(dto.getOther());
  680. }
  681. managerLogService.log(request);
  682. return ResponseHelp.success(true);
  683. }
  684. @RequestMapping(value = "/ask/detail", method = RequestMethod.GET)
  685. @ApiOperation(value = "提问详情", httpMethod = "GET")
  686. public Response<UserAskCourseDetailDto> detail(@RequestParam int id, HttpServletRequest request) {
  687. UserAskCourse entity = userAskCourseService.get(id);
  688. UserAskCourseDetailDto dto = Transform.convert(entity, UserAskCourseDetailDto.class);
  689. if (entity.getManagerId() != null && entity.getManagerId() > 0){
  690. Manager manager = managerService.get(entity.getManagerId());
  691. if (manager != null)
  692. dto.setManager(Transform.convert(manager, ManagerExtendDto.class));
  693. }
  694. User user = usersService.get(entity.getUserId());
  695. dto.setUser(Transform.convert(user, UserExtendDto.class));
  696. Course course = courseService.get(entity.getCourseId());
  697. dto.setCourse(Transform.convert(course, CourseExtendDto.class));
  698. CourseNo courseNo = courseNoService.get(entity.getCourseNoId());
  699. dto.setCourseNo(Transform.convert(courseNo, CourseNoExtendDto.class));
  700. // 所有回答
  701. List<UserAskCourse> userAskList = userAskCourseService.listByCoursePosition(entity.getCourseNoId(), entity.getPosition(), true);
  702. dto.setOthers(Transform.convert(userAskList, UserAskCourseExtendDto.class));
  703. return ResponseHelp.success(dto);
  704. }
  705. @RequestMapping(value = "/ask/list", method = RequestMethod.GET)
  706. @ApiOperation(value = "提问列表", httpMethod = "GET")
  707. public Response<PageMessage<UserAskCourseListDto>> list(
  708. @RequestParam(required = false, defaultValue = "1") int page,
  709. @RequestParam(required = false, defaultValue = "100") int size,
  710. @RequestParam(required = false) Integer structId,
  711. @RequestParam(required = false) Integer courseId,
  712. @RequestParam(required = false) Integer answerStatus,
  713. @RequestParam(required = false) Integer showStatus,
  714. @RequestParam(required = false) Integer userId,
  715. @RequestParam(required = false) Integer moneyRang,
  716. @RequestParam(required = false) String startTime,
  717. @RequestParam(required = false) String endTime,
  718. @RequestParam(required = false, defaultValue = "id") String order,
  719. @RequestParam(required = false, defaultValue = "desc") String direction,
  720. HttpSession session) {
  721. Page<UserAskCourse> p = userAskCourseService.listAdmin(page, size, structId, courseId, AnswerStatus.ValueOf(answerStatus), showStatus, userId, MoneyRange.ValueOf(moneyRang), startTime, endTime, order, DirectionStatus.ValueOf(direction));
  722. List<UserAskCourseListDto> pr = Transform.convert(p, UserAskCourseListDto.class);
  723. // 绑定用户
  724. Collection userIds = Transform.getIds(p, UserAskQuestion.class, "userId");
  725. List<User> userList = usersService.select(userIds);
  726. Transform.combine(pr, userList, UserAskQuestionListDto.class, "userId", "user", User.class, "id", UserExtendDto.class);
  727. // 绑定管理员
  728. Collection managerIds = Transform.getIds(p, UserAskQuestion.class, "managerId");
  729. List<Manager> managerList = managerService.select(managerIds);
  730. Transform.combine(pr, managerList, UserAskQuestionListDto.class, "managerId", "manager", Manager.class, "id", ManagerExtendDto.class);
  731. // 绑定课程
  732. Collection courseIds = Transform.getIds(p, UserAskCourse.class, "courseId");
  733. List<Course> courseList = courseService.select(courseIds);
  734. Transform.combine(pr, courseList, UserAskCourseListDto.class, "courseId", "course", Course.class, "id", CourseExtendDto.class);
  735. // 绑定课时
  736. Collection courseNoIds = Transform.getIds(p, UserAskCourse.class, "courseNoId");
  737. List<CourseNo> courseNoList = courseNoService.select(courseNoIds);
  738. Transform.combine(pr, courseNoList, UserAskCourseListDto.class, "courseNoId", "courseNo", CourseNo.class, "id", CourseNoExtendDto.class);
  739. return ResponseHelp.success(pr, page, size, p.getTotal());
  740. }
  741. }