package com.xjrsoft.module.teacher.controller; import cn.dev33.satoken.annotation.SaCheckPermission; import cn.hutool.core.bean.BeanUtil; import com.alibaba.excel.EasyExcel; import com.alibaba.excel.support.ExcelTypeEnum; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.enums.DeleteMark; import com.xjrsoft.common.exception.MyException; import com.xjrsoft.common.model.result.RT; import com.xjrsoft.common.page.ConventPage; import com.xjrsoft.common.page.PageOutput; import com.xjrsoft.common.utils.FileZipUtil; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.system.entity.File; import com.xjrsoft.module.system.service.IFileService; import com.xjrsoft.module.teacher.dto.TeacherAwardDetailPageDto; import com.xjrsoft.module.teacher.dto.TeacherAwardStatisticsPageDto; import com.xjrsoft.module.teacher.entity.TeacherAward; import com.xjrsoft.module.teacher.entity.TeacherAwardItem; import com.xjrsoft.module.teacher.entity.XjrUser; import com.xjrsoft.module.teacher.service.ITeacherAwardItemService; import com.xjrsoft.module.teacher.service.ITeacherAwardService; import com.xjrsoft.module.teacher.vo.TeacherAwardDetailExcelVo; import com.xjrsoft.module.teacher.vo.TeacherAwardDetailPageVo; import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsExcelVo; import com.xjrsoft.module.teacher.vo.TeacherAwardStatisticsPageVo; import com.xjrsoft.module.workflow.entity.WorkflowFormRelation; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import me.zhyd.oauth.log.Log; import org.camunda.bpm.engine.history.HistoricProcessInstance; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.net.URLConnection; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @title: 教师奖项 * @Author dzx * @Date: 2024-06-04 * @Version 1.0 */ @RestController @RequestMapping("/teacher" + "/teacherAward") @Api(value = "/teacher" + "/teacherAward",tags = "教师获奖代码") @AllArgsConstructor public class TeacherAwardController { private final ITeacherAwardItemService teacherAwardItemService; private final ITeacherAwardService teacherAwardService; private final IFileService fileService; @GetMapping(value = "/statistics-page") @ApiOperation(value="教师获奖统计") @SaCheckPermission("teacheraward:detail") public RT> page(@Valid TeacherAwardStatisticsPageDto dto){ Page voPage = teacherAwardItemService.getStatisticsPage(new Page<>(dto.getLimit(), dto.getSize()), dto); PageOutput pageOutput = ConventPage.getPageOutput(voPage, TeacherAwardStatisticsPageVo.class); return RT.ok(pageOutput); } @GetMapping(value = "/detail-page") @ApiOperation(value="教师获奖详情页") @SaCheckPermission("teacheraward:detail") public RT> detailPage(@Valid TeacherAwardDetailPageDto dto){ MPJLambdaWrapper teacherAwardMPJLambdaWrapper = new MPJLambdaWrapper<>(); teacherAwardMPJLambdaWrapper .disableSubLogicDel() .selectAs(TeacherAwardItem::getIsThesis, TeacherAwardDetailPageVo::getIsThesis) .selectAs(XjrUser::getName, TeacherAwardDetailPageVo::getApplicantUserIdCn) .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty())) .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId) .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId) .leftJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, TeacherAward::getId) .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId()) .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis()) .like(dto.getApplicantUserIdCn() != null && !dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn()) .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName()) .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED) .orderByDesc(TeacherAward::getCreateDate) ; IPage page = teacherAwardService.selectJoinListPage(ConventPage.getPage(dto), TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper); PageOutput pageOutput = ConventPage.getPageOutput(page, TeacherAwardDetailPageVo.class); return RT.ok(pageOutput); } @PostMapping(value = "/export-query") @ApiOperation(value="导出") @SaCheckPermission("teacheraward:detail") public ResponseEntity exportQuery(@Valid @RequestBody TeacherAwardStatisticsPageDto dto){ List list = teacherAwardItemService.getStatisticsList(dto); ByteArrayOutputStream bot = new ByteArrayOutputStream(); EasyExcel.write(bot, TeacherAwardStatisticsExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(list); return RT.fileStream(bot.toByteArray(), "教师获奖登记" + ExcelTypeEnum.XLSX.getValue()); } @PostMapping(value = "/detail-export-query") @ApiOperation(value="教师获奖详情页") @SaCheckPermission("teacheraward:detail") public ResponseEntity detailExportQuery(@Valid @RequestBody TeacherAwardDetailPageDto dto){ try { MPJLambdaWrapper teacherAwardMPJLambdaWrapper = new MPJLambdaWrapper<>(); teacherAwardMPJLambdaWrapper .disableSubLogicDel() .selectAs(TeacherAwardItem::getIsThesis, TeacherAwardDetailPageVo::getIsThesis) .selectAs(TeacherAwardItem::getScore, TeacherAwardDetailPageVo::getTeacherAwardItemScore) .selectAs(XjrUser::getName, TeacherAwardDetailPageVo::getApplicantUserIdCn) .select(TeacherAward.class,x -> VoToColumnUtil.fieldsToColumns(TeacherAwardDetailPageVo.class).contains(x.getProperty())) .leftJoin(TeacherAwardItem.class, TeacherAwardItem::getId, TeacherAward::getTeacherAwardItemId) .leftJoin(XjrUser.class, XjrUser::getId, TeacherAward::getApplicantUserId) .leftJoin(WorkflowFormRelation.class, WorkflowFormRelation::getFormKeyValue, TeacherAward::getId) .eq(dto.getApplicantUserId() != null && dto.getApplicantUserId() > 0,TeacherAward::getApplicantUserId, dto.getApplicantUserId()) .eq(dto.getIsThesis() != null,TeacherAwardItem::getIsThesis, dto.getIsThesis()) .like(dto.getApplicantUserIdCn() != null && !dto.getApplicantUserIdCn().equals(""), XjrUser::getName, dto.getApplicantUserIdCn()) .like(dto.getWholeCompetitionName() != null && !dto.getWholeCompetitionName().equals(""),TeacherAward::getWholeCompetitionName, dto.getWholeCompetitionName()) .eq(WorkflowFormRelation::getCurrentState, HistoricProcessInstance.STATE_COMPLETED) .orderByDesc(TeacherAward::getCreateDate) ; List list = teacherAwardService.selectJoinList(TeacherAwardDetailPageVo.class, teacherAwardMPJLambdaWrapper); List excelList = new ArrayList<>(); int index = 1; Map byteAryMap = new HashMap<>(); String folderName = "附件材料"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); for (TeacherAwardDetailPageVo el : list) { TeacherAwardDetailExcelVo rowData = BeanUtil.toBean(el, TeacherAwardDetailExcelVo.class); if(el.getIssueDate() == null){ rowData.setIssueDate(""); }else{ rowData.setIssueDate(sdf.format(el.getIssueDate())); } if(rowData.getRemark() == null){ rowData.setRemark(""); } if(rowData.getJournalLevel() == null){ rowData.setJournalLevel(""); } if(rowData.getJournalNumber() == null){ rowData.setJournalNumber(""); } if(rowData.getApplicantUserIdCn() == null){ rowData.setApplicantUserIdCn(""); } if(rowData.getIsThesis() == null){ rowData.setIsThesis(""); } if(rowData.getCompetitionName() == null){ rowData.setCompetitionName(""); } if(rowData.getMediaType() == null){ rowData.setMediaType(""); } if(rowData.getTeacherAwardItemScore() == null){ rowData.setTeacherAwardItemScore(""); } if(el.getIsThesis() == 1){ rowData.setIsThesis("是"); }else if(el.getIsThesis() == 0){ rowData.setIsThesis("否"); } List fileList = fileService.list( new QueryWrapper().lambda() .eq(File::getFolderId, el.getFileId()) .eq(File::getDeleteMark, DeleteMark.NODELETE.getCode()) ); if(fileList.isEmpty()){ excelList.add(rowData); continue; } String fileName = "佐证材料" + index; if(fileList.size() == 1){ try { File file = fileList.get(0); URL url = new URL(file.getFileUrl()); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } byte[] byteArray = outputStream.toByteArray(); byteAryMap.put(folderName + "\\" + fileName + file.getFileType(), byteArray); in.close(); outputStream.close(); } catch (IOException e) { throw new RuntimeException(e); } }else{ for (int i = 0; i < fileList.size(); i++) { try { URL url = new URL(fileList.get(i).getFileUrl()); URLConnection conn = url.openConnection(); InputStream in = conn.getInputStream(); ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { outputStream.write(buffer, 0, bytesRead); } byte[] byteArray = outputStream.toByteArray(); byteAryMap.put(folderName + "\\" + fileName + "\\佐证材料" + (i + 1) + fileList.get(i).getFileType(), byteArray); in.close(); outputStream.close(); } catch (IOException e) { throw new RuntimeException(e); } } } rowData.setFileName(fileName); excelList.add(rowData); index ++; } ByteArrayOutputStream bot = new ByteArrayOutputStream(); EasyExcel.write(bot, TeacherAwardDetailExcelVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(excelList); byteAryMap.put("教师获奖登记" + ExcelTypeEnum.XLSX.getValue(), bot.toByteArray()); byte[] bytes = FileZipUtil.byteAryMap2Zip(byteAryMap); return RT.fileStream(bytes, "detailExportQuery.zip"); }catch (Exception e){ Log.error(e.getMessage(), e); throw new MyException("导出出错,请联系管理员"); } } }