SecondCourseController.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. package com.xjrsoft.module.courseTable.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.dev33.satoken.stp.StpUtil;
  4. import cn.hutool.core.bean.BeanUtil;
  5. import cn.hutool.json.JSONUtil;
  6. import com.alibaba.excel.EasyExcel;
  7. import com.alibaba.excel.support.ExcelTypeEnum;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  10. import com.google.gson.JsonArray;
  11. import com.google.gson.JsonElement;
  12. import com.google.gson.JsonParser;
  13. import com.xjrsoft.common.exception.MyException;
  14. import com.xjrsoft.common.model.result.RT;
  15. import com.xjrsoft.common.page.ConventPage;
  16. import com.xjrsoft.common.page.PageOutput;
  17. import com.xjrsoft.common.utils.VoToColumnUtil;
  18. import com.xjrsoft.module.activity.dto.ChangeStatusDto;
  19. import com.xjrsoft.module.courseTable.dto.UserEnrollDto;
  20. import com.xjrsoft.module.base.entity.BaseClass;
  21. import com.xjrsoft.module.base.service.IBaseClassService;
  22. import com.xjrsoft.module.concat.service.IXjrUserService;
  23. import com.xjrsoft.module.courseTable.dto.AddSecondCourseDto;
  24. import com.xjrsoft.module.courseTable.dto.SecondCourseEnrollPageDto;
  25. import com.xjrsoft.module.courseTable.dto.SecondCoursePageDto;
  26. import com.xjrsoft.module.courseTable.dto.UpdateSecondCourseDto;
  27. import com.xjrsoft.module.courseTable.entity.SecondCourse;
  28. import com.xjrsoft.module.courseTable.service.ISecondCourseService;
  29. import com.xjrsoft.module.courseTable.vo.SecondCourseEnrollExcelVo;
  30. import com.xjrsoft.module.courseTable.vo.SecondCourseEnrollRangeVo;
  31. import com.xjrsoft.module.courseTable.vo.SecondCourseEnrollVo;
  32. import com.xjrsoft.module.courseTable.vo.SecondCoursePageVo;
  33. import com.xjrsoft.module.courseTable.vo.SecondCourseVo;
  34. import com.xjrsoft.module.organization.entity.Department;
  35. import com.xjrsoft.module.organization.service.IDepartmentService;
  36. import com.xjrsoft.module.system.entity.File;
  37. import com.xjrsoft.module.system.service.IFileService;
  38. import com.xjrsoft.module.teacher.entity.XjrUser;
  39. import io.swagger.annotations.Api;
  40. import io.swagger.annotations.ApiOperation;
  41. import lombok.AllArgsConstructor;
  42. import org.springframework.http.ResponseEntity;
  43. import org.springframework.web.bind.annotation.DeleteMapping;
  44. import org.springframework.web.bind.annotation.GetMapping;
  45. import org.springframework.web.bind.annotation.PostMapping;
  46. import org.springframework.web.bind.annotation.PutMapping;
  47. import org.springframework.web.bind.annotation.RequestBody;
  48. import org.springframework.web.bind.annotation.RequestMapping;
  49. import org.springframework.web.bind.annotation.RequestParam;
  50. import org.springframework.web.bind.annotation.RestController;
  51. import javax.validation.Valid;
  52. import java.io.ByteArrayOutputStream;
  53. import java.text.SimpleDateFormat;
  54. import java.util.ArrayList;
  55. import java.util.List;
  56. /**
  57. * @title: 第二课堂
  58. * @Author dzx
  59. * @Date: 2024-07-29
  60. * @Version 1.0
  61. */
  62. @RestController
  63. @RequestMapping("/courseTable" + "/secondCourse")
  64. @Api(value = "/courseTable" + "/secondCourse",tags = "第二课堂代码")
  65. @AllArgsConstructor
  66. public class SecondCourseController {
  67. private final ISecondCourseService secondCourseService;
  68. private final IBaseClassService classService;
  69. private final IDepartmentService departmentService;
  70. private final IXjrUserService xjrUserService;
  71. private final IFileService fileService;
  72. @GetMapping(value = "/page")
  73. @ApiOperation(value="第二课堂列表(分页)")
  74. @SaCheckPermission("secondcourse:detail")
  75. public RT<PageOutput<SecondCoursePageVo>> page(@Valid SecondCoursePageDto dto){
  76. if(dto.getUserId() == null){
  77. dto.setUserId(StpUtil.getLoginIdAsLong());
  78. }
  79. Page<SecondCoursePageVo> page = secondCourseService.getPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  80. for (SecondCoursePageVo record : page.getRecords()) {
  81. if(record.getEnrollStatus() > 0){
  82. record.setEnrollStatus(1);
  83. }
  84. if(record.getCoverId() != null){
  85. File file = fileService.getOne(
  86. new QueryWrapper<File>().lambda()
  87. .select(File::getId)
  88. .select(File.class, x -> VoToColumnUtil.fieldsToColumns(File.class).contains(x.getProperty()))
  89. .eq(File::getFolderId, record.getCoverId())
  90. );
  91. record.setCoverUrl(file.getFileUrl());
  92. }
  93. }
  94. PageOutput<SecondCoursePageVo> pageOutput = ConventPage.getPageOutput(page, SecondCoursePageVo.class);
  95. return RT.ok(pageOutput);
  96. }
  97. @GetMapping(value = "/info")
  98. @ApiOperation(value="根据id查询第二课堂信息")
  99. @SaCheckPermission("secondcourse:detail")
  100. public RT<SecondCourseVo> info(@RequestParam Long id){
  101. SecondCourse secondCourse = secondCourseService.getByIdDeep(id);
  102. if (secondCourse == null) {
  103. return RT.error("找不到此数据!");
  104. }
  105. SecondCourseVo courseVo = BeanUtil.toBean(secondCourse, SecondCourseVo.class);
  106. if(secondCourse.getEnrollRange() != null && !"".equals(secondCourse.getEnrollRange())){
  107. JsonParser parser = new JsonParser();
  108. JsonArray asJsonArray = parser.parse(secondCourse.getEnrollRange()).getAsJsonArray();
  109. List<SecondCourseEnrollRangeVo> list = new ArrayList<>();
  110. for (JsonElement jsonElement : asJsonArray) {
  111. SecondCourseEnrollRangeVo relationDto = JSONUtil.toBean(jsonElement.getAsJsonObject().toString(), SecondCourseEnrollRangeVo.class);
  112. if(relationDto.getUserId() != null){
  113. XjrUser xjrUser = xjrUserService.getById(relationDto.getUserId());
  114. if(xjrUser != null){
  115. relationDto.setName(xjrUser.getName());
  116. }
  117. }else if(relationDto.getDeptId() != null){
  118. Department department = departmentService.getById(relationDto.getDeptId());
  119. if(department != null){
  120. relationDto.setName(department.getName());
  121. }
  122. }else if(relationDto.getClassId() != null){
  123. BaseClass aClass = classService.getById(relationDto.getClassId());
  124. if(aClass != null){
  125. relationDto.setName(aClass.getName());
  126. }
  127. }
  128. list.add(relationDto);
  129. }
  130. courseVo.setSecondCourseEnrollRangeList(list);
  131. }
  132. if(secondCourse.getCoverId() != null){
  133. File file = fileService.getOne(
  134. new QueryWrapper<File>().lambda()
  135. .select(File::getId)
  136. .select(File.class, x -> VoToColumnUtil.fieldsToColumns(File.class).contains(x.getProperty()))
  137. .eq(File::getFolderId, secondCourse.getCoverId())
  138. );
  139. courseVo.setCoverUrl(file.getFileUrl());
  140. }
  141. Integer enrollCount = secondCourseService.getEnrollCount(secondCourse.getId());
  142. courseVo.setEnrollCount(enrollCount);
  143. return RT.ok(courseVo);
  144. }
  145. @PostMapping
  146. @ApiOperation(value = "新增第二课堂")
  147. @SaCheckPermission("secondcourse:add")
  148. public RT<Boolean> add(@Valid @RequestBody AddSecondCourseDto dto){
  149. boolean isSuccess = secondCourseService.add(dto);
  150. return RT.ok(isSuccess);
  151. }
  152. @PutMapping
  153. @ApiOperation(value = "修改第二课堂")
  154. @SaCheckPermission("secondcourse:edit")
  155. public RT<Boolean> update(@Valid @RequestBody UpdateSecondCourseDto dto){
  156. return RT.ok(secondCourseService.update(dto));
  157. }
  158. @DeleteMapping
  159. @ApiOperation(value = "删除第二课堂")
  160. @SaCheckPermission("secondcourse:delete")
  161. public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
  162. return RT.ok(secondCourseService.delete(ids));
  163. }
  164. @PostMapping(value = "/change-status")
  165. @ApiOperation(value="修改状态")
  166. @SaCheckPermission("officebuild:detail")
  167. public RT<Boolean> changeStatus(@Valid @RequestBody ChangeStatusDto dto) throws Exception {
  168. SecondCourse secondCourse = secondCourseService.getById(dto.getId());
  169. if(secondCourse == null){
  170. throw new MyException("未能找到数据");
  171. }
  172. secondCourse.setStatus(dto.getStatus());
  173. secondCourseService.updateById(secondCourse);
  174. return RT.ok(true);
  175. }
  176. @GetMapping(value = "/enroll-page")
  177. @ApiOperation(value="报名表")
  178. @SaCheckPermission("secondcourse:detail")
  179. public RT<PageOutput<SecondCourseEnrollVo>> enrollPage(@Valid SecondCourseEnrollPageDto dto){
  180. Page<SecondCourseEnrollVo> enrollPage = secondCourseService.getEnrollPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  181. for (SecondCourseEnrollVo record : enrollPage.getRecords()) {
  182. if(record.getStudentId() != null){
  183. record.setRoleId(3L);
  184. }else if(record.getTeacherId() != null){
  185. record.setRoleId(2L);
  186. }
  187. }
  188. PageOutput<SecondCourseEnrollVo> pageOutput = ConventPage.getPageOutput(enrollPage, SecondCourseEnrollVo.class);
  189. return RT.ok(pageOutput);
  190. }
  191. @PostMapping("/export-query")
  192. @ApiOperation(value = "导出列表")
  193. public ResponseEntity<byte[]> exportData(@Valid @RequestBody SecondCourseEnrollPageDto dto) {
  194. List<SecondCourseEnrollVo> enrollList = secondCourseService.getEnrollList(dto);
  195. List<SecondCourseEnrollExcelVo> list = new ArrayList<>();
  196. SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  197. for (SecondCourseEnrollVo listVo : enrollList) {
  198. list.add(new SecondCourseEnrollExcelVo(){{
  199. setName(listVo.getName());
  200. setMobile(listVo.getMobile());
  201. if(listVo.getTeacherId() != null){
  202. setRoleType("教师");
  203. }
  204. if(listVo.getStudentId() != null){
  205. setRoleType("学生");
  206. }
  207. setUserName(listVo.getUserName());
  208. if(listVo.getCreateDate() != null){
  209. setCreateDate(sdf.format(listVo.getCreateDate()));
  210. }
  211. }});
  212. }
  213. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  214. EasyExcel.write(bot, SecondCourseEnrollExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
  215. return RT.fileStream(bot.toByteArray(), "enroll" + ExcelTypeEnum.XLSX.getValue());
  216. }
  217. @PostMapping(value = "/enroll")
  218. @ApiOperation(value="报名")
  219. @SaCheckPermission("secondcourse:detail")
  220. public RT<Boolean> enroll(@Valid @RequestBody UserEnrollDto dto){
  221. Boolean enroll = secondCourseService.enroll(dto);
  222. return RT.ok(enroll);
  223. }
  224. @GetMapping(value = "/my-enroll-page")
  225. @ApiOperation(value="我的报名记录(分页)")
  226. @SaCheckPermission("secondcourse:detail")
  227. public RT<PageOutput<SecondCoursePageVo>> myEnrollList(@Valid SecondCoursePageDto dto){
  228. if(dto.getUserId() == null){
  229. dto.setUserId(StpUtil.getLoginIdAsLong());
  230. }
  231. Page<SecondCoursePageVo> page = secondCourseService.getMyPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  232. PageOutput<SecondCoursePageVo> pageOutput = ConventPage.getPageOutput(page, SecondCoursePageVo.class);
  233. return RT.ok(pageOutput);
  234. }
  235. }