TeacherAwardController.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  1. package com.xjrsoft.module.teacher.controller;
  2. import cn.dev33.satoken.annotation.SaCheckPermission;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import com.alibaba.excel.EasyExcel;
  5. import com.alibaba.excel.support.ExcelTypeEnum;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  10. import com.xjrsoft.common.enums.DeleteMark;
  11. import com.xjrsoft.common.exception.MyException;
  12. import com.xjrsoft.common.model.result.RT;
  13. import com.xjrsoft.common.page.ConventPage;
  14. import com.xjrsoft.common.page.PageOutput;
  15. import com.xjrsoft.common.utils.FileZipUtil;
  16. import com.xjrsoft.common.utils.VoToColumnUtil;
  17. import com.xjrsoft.module.system.entity.File;
  18. import com.xjrsoft.module.system.service.IFileService;
  19. import com.xjrsoft.module.teacher.dto.TeacherAwardDetailPageDto;
  20. import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto;
  21. import com.xjrsoft.module.teacher.entity.TeacherAward;
  22. import com.xjrsoft.module.teacher.entity.TeacherAwardItem;
  23. import com.xjrsoft.module.teacher.entity.XjrUser;
  24. import com.xjrsoft.module.teacher.service.ITeacherAwardItemService;
  25. import com.xjrsoft.module.teacher.service.ITeacherAwardService;
  26. import com.xjrsoft.module.teacher.vo.TeacherAwardDetailExcelVo;
  27. import com.xjrsoft.module.teacher.vo.TeacherAwardDetailPageVo;
  28. import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsExcelVo;
  29. import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo;
  30. import com.xjrsoft.module.workflow.entity.WorkflowFormRelation;
  31. import io.swagger.annotations.Api;
  32. import io.swagger.annotations.ApiOperation;
  33. import lombok.AllArgsConstructor;
  34. import me.zhyd.oauth.log.Log;
  35. import org.camunda.bpm.engine.history.HistoricProcessInstance;
  36. import org.springframework.http.ResponseEntity;
  37. import org.springframework.web.bind.annotation.GetMapping;
  38. import org.springframework.web.bind.annotation.PostMapping;
  39. import org.springframework.web.bind.annotation.RequestBody;
  40. import org.springframework.web.bind.annotation.RequestMapping;
  41. import org.springframework.web.bind.annotation.RestController;
  42. import javax.validation.Valid;
  43. import java.io.ByteArrayOutputStream;
  44. import java.io.IOException;
  45. import java.io.InputStream;
  46. import java.net.URL;
  47. import java.net.URLConnection;
  48. import java.text.SimpleDateFormat;
  49. import java.util.ArrayList;
  50. import java.util.HashMap;
  51. import java.util.List;
  52. import java.util.Map;
  53. /**
  54. * @title: 教师奖项
  55. * @Author dzx
  56. * @Date: 2024-06-04
  57. * @Version 1.0
  58. */
  59. @RestController
  60. @RequestMapping("/teacher" + "/teacherAward")
  61. @Api(value = "/teacher" + "/teacherAward",tags = "教师获奖代码")
  62. @AllArgsConstructor
  63. public class TeacherAwardController {
  64. private final ITeacherAwardItemService teacherAwardItemService;
  65. private final ITeacherAwardService teacherAwardService;
  66. private final IFileService fileService;
  67. @GetMapping(value = "/statistics-page")
  68. @ApiOperation(value="教师获奖统计")
  69. @SaCheckPermission("teacheraward:detail")
  70. public RT<PageOutput<TeacherAwardStatisticsPageVo>> page(@Valid TeacherAwardStatisticsPageDto dto){
  71. Page<TeacherAwardStatisticsPageVo> voPage = teacherAwardItemService.getStatisticsPage(new Page<>(dto.getLimit(), dto.getSize()), dto);
  72. PageOutput<TeacherAwardStatisticsPageVo> pageOutput = ConventPage.getPageOutput(voPage, TeacherAwardStatisticsPageVo.class);
  73. return RT.ok(pageOutput);
  74. }
  75. @GetMapping(value = "/detail-page")
  76. @ApiOperation(value="教师获奖详情页")
  77. @SaCheckPermission("teacheraward:detail")
  78. public RT<PageOutput<TeacherAwardDetailPageVo>> detailPage(@Valid TeacherAwardDetailPageDto dto){
  79. MPJLambdaWrapper<TeacherAward> teacherAwardMPJLambdaWrapper = new MPJLambdaWrapper<>();
  80. teacherAwardMPJLambdaWrapper
  81. .disableSubLogicDel()
  82. .selectAs(TeacherAwardItem::getIsThesis, TeacherAwardDetailPageVo::getIsThesis)
  83. .selectAs(XjrUser::getName, TeacherAwardDetailPageVo::getApplicantUserIdCn)
  84. .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty()))
  85. .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId)
  86. .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId)
  87. .leftJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, TeacherAward::getId)
  88. .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId())
  89. .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis())
  90. .like(dto.getApplicantUserIdCn() != null && !dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn())
  91. .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName())
  92. .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
  93. .orderByDesc(TeacherAward::getCreateDate)
  94. ;
  95. IPage<TeacherAwardDetailPageVo> page = teacherAwardService.selectJoinListPage(ConventPage.getPage(dto), TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper);
  96. PageOutput<TeacherAwardDetailPageVo> pageOutput = ConventPage.getPageOutput(page, TeacherAwardDetailPageVo.class);
  97. return RT.ok(pageOutput);
  98. }
  99. @PostMapping(value = "/export-query")
  100. @ApiOperation(value="导出")
  101. @SaCheckPermission("teacheraward:detail")
  102. public ResponseEntity<byte[]> exportQuery(@Valid @RequestBody TeacherAwardStatisticsPageDto dto){
  103. List<TeacherAwardStatisticsPageVo> list = teacherAwardItemService.getStatisticsList(dto);
  104. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  105. EasyExcel.write(bot, TeacherAwardStatisticsExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list);
  106. return RT.fileStream(bot.toByteArray(), "教师获奖登记" + ExcelTypeEnum.XLSX.getValue());
  107. }
  108. @PostMapping(value = "/detail-export-query")
  109. @ApiOperation(value="教师获奖详情页")
  110. @SaCheckPermission("teacheraward:detail")
  111. public ResponseEntity<byte[]> detailExportQuery(@Valid @RequestBody TeacherAwardDetailPageDto dto){
  112. try {
  113. MPJLambdaWrapper<TeacherAward> teacherAwardMPJLambdaWrapper = new MPJLambdaWrapper<>();
  114. teacherAwardMPJLambdaWrapper
  115. .disableSubLogicDel()
  116. .selectAs(TeacherAwardItem::getIsThesis, TeacherAwardDetailPageVo::getIsThesis)
  117. .selectAs(TeacherAwardItem::getScore, TeacherAwardDetailPageVo::getTeacherAwardItemScore)
  118. .selectAs(XjrUser::getName, TeacherAwardDetailPageVo::getApplicantUserIdCn)
  119. .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty()))
  120. .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId)
  121. .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId)
  122. .leftJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, TeacherAward::getId)
  123. .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId())
  124. .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis())
  125. .like(dto.getApplicantUserIdCn() != null && !dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn())
  126. .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName())
  127. .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED)
  128. .orderByDesc(TeacherAward::getCreateDate)
  129. ;
  130. List<TeacherAwardDetailPageVo> list = teacherAwardService.selectJoinList(TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper);
  131. List<TeacherAwardDetailExcelVo> excelList = new ArrayList<>();
  132. int index = 1;
  133. Map<String, byte[]> byteAryMap = new HashMap<>();
  134. String folderName = "附件材料";
  135. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  136. for (TeacherAwardDetailPageVo el : list) {
  137. TeacherAwardDetailExcelVo rowData = BeanUtil.toBean(el, TeacherAwardDetailExcelVo.class);
  138. if(el.getIssueDate() == null){
  139. rowData.setIssueDate("");
  140. }else{
  141. rowData.setIssueDate(sdf.format(el.getIssueDate()));
  142. }
  143. if(rowData.getRemark() == null){
  144. rowData.setRemark("");
  145. }
  146. if(rowData.getJournalLevel() == null){
  147. rowData.setJournalLevel("");
  148. }
  149. if(rowData.getJournalNumber() == null){
  150. rowData.setJournalNumber("");
  151. }
  152. if(rowData.getApplicantUserIdCn() == null){
  153. rowData.setApplicantUserIdCn("");
  154. }
  155. if(rowData.getIsThesis() == null){
  156. rowData.setIsThesis("");
  157. }
  158. if(rowData.getCompetitionName() == null){
  159. rowData.setCompetitionName("");
  160. }
  161. if(rowData.getMediaType() == null){
  162. rowData.setMediaType("");
  163. }
  164. if(rowData.getTeacherAwardItemScore() == null){
  165. rowData.setTeacherAwardItemScore("");
  166. }
  167. if(el.getIsThesis() == 1){
  168. rowData.setIsThesis("是");
  169. }else if(el.getIsThesis() == 0){
  170. rowData.setIsThesis("否");
  171. }
  172. List<File> fileList = fileService.list(
  173. new QueryWrapper<File>().lambda()
  174. .eq(File::getFolderId, el.getFileId())
  175. .eq(File::getDeleteMark, DeleteMark.NODELETE.getCode())
  176. );
  177. if(fileList.isEmpty()){
  178. excelList.add(rowData);
  179. continue;
  180. }
  181. String fileName = "佐证材料" + index;
  182. if(fileList.size() == 1){
  183. try {
  184. File file = fileList.get(0);
  185. URL url = new URL(file.getFileUrl());
  186. URLConnection conn = url.openConnection();
  187. InputStream in = conn.getInputStream();
  188. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  189. byte[] buffer = new byte[1024];
  190. int bytesRead;
  191. while ((bytesRead = in.read(buffer)) != -1) {
  192. outputStream.write(buffer, 0, bytesRead);
  193. }
  194. byte[] byteArray = outputStream.toByteArray();
  195. byteAryMap.put(folderName + "\\" + fileName + file.getFileType(), byteArray);
  196. in.close();
  197. outputStream.close();
  198. } catch (IOException e) {
  199. throw new RuntimeException(e);
  200. }
  201. }else{
  202. for (int i = 0; i < fileList.size(); i++) {
  203. try {
  204. URL url = new URL(fileList.get(i).getFileUrl());
  205. URLConnection conn = url.openConnection();
  206. InputStream in = conn.getInputStream();
  207. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  208. byte[] buffer = new byte[1024];
  209. int bytesRead;
  210. while ((bytesRead = in.read(buffer)) != -1) {
  211. outputStream.write(buffer, 0, bytesRead);
  212. }
  213. byte[] byteArray = outputStream.toByteArray();
  214. byteAryMap.put(folderName + "\\" + fileName + "\\佐证材料" + (i + 1) + fileList.get(i).getFileType(), byteArray);
  215. in.close();
  216. outputStream.close();
  217. } catch (IOException e) {
  218. throw new RuntimeException(e);
  219. }
  220. }
  221. }
  222. rowData.setFileName(fileName);
  223. excelList.add(rowData);
  224. index ++;
  225. }
  226. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  227. EasyExcel.write(bot, TeacherAwardDetailExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(excelList);
  228. byteAryMap.put("教师获奖登记" + ExcelTypeEnum.XLSX.getValue(), bot.toByteArray());
  229. byte[] bytes = FileZipUtil.byteAryMap2Zip(byteAryMap);
  230. return RT.fileStream(bytes, "detailExportQuery.zip");
  231. }catch (Exception e){
  232. Log.error(e.getMessage(), e);
  233. throw new MyException("导出出错,请联系管理员");
  234. }
  235. }
  236. }