| | |
| | | */ |
| | | package org.springblade.modules.exam.controller; |
| | | |
| | | import com.alibaba.excel.EasyExcel; |
| | | import com.alibaba.excel.ExcelWriter; |
| | | import com.alibaba.excel.write.metadata.WriteSheet; |
| | | import com.alibaba.excel.write.metadata.fill.FillConfig; |
| | | import com.alibaba.excel.write.metadata.fill.FillWrapper; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import io.swagger.annotations.ApiParam; |
| | | import lombok.AllArgsConstructor; |
| | | import org.apache.commons.codec.Charsets; |
| | | import org.springblade.core.boot.ctrl.BladeController; |
| | | import org.springblade.core.excel.util.ExcelUtil; |
| | | import org.springblade.core.mp.support.Condition; |
| | | import org.springblade.core.mp.support.Query; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.utils.DateUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.modules.FTP.FtpUtil; |
| | | import org.springblade.modules.apply.entity.Apply; |
| | | import org.springblade.modules.exam.entity.ExamPaper; |
| | | import org.springblade.modules.exam.entity.ExamSubjectChoices; |
| | | import org.springblade.modules.exam.excel.ExportExamScoreExcel; |
| | | import org.springblade.modules.exam.service.ExamPaperService; |
| | | import org.springblade.modules.exam.vo.ExamPaperSubjectVO; |
| | | import org.springblade.modules.exam.vo.ExamPaperVO; |
| | | import org.springblade.modules.exam.vo.ExamStatisticsVO; |
| | | import org.springblade.modules.exam.vo.ExamSubjectChoicesVO; |
| | | import org.springblade.modules.exam.vo.*; |
| | | import org.springblade.modules.exam.wrapper.ExamPaperWrapper; |
| | | import org.springblade.modules.system.entity.User; |
| | | import org.springblade.modules.system.service.IUserService; |
| | | import org.springblade.modules.training.entity.TrainExam; |
| | | import org.springblade.modules.training.entity.TrainingRegistration; |
| | | import org.springblade.modules.training.service.TrainingRegistrationService; |
| | | import org.springframework.core.io.ClassPathResource; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import springfox.documentation.annotations.ApiIgnore; |
| | | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.File; |
| | | import java.io.IOException; |
| | | import java.io.InputStream; |
| | | import java.net.URLEncoder; |
| | | import java.text.DecimalFormat; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * 控制器 |
| | |
| | | return R.data(pages); |
| | | } |
| | | |
| | | /** |
| | | * 导出考试统计情况信息 |
| | | * @param examScoreVO 需要传三个参数 1:培训学校名称,2:培训学校id 3:日期 4:考试类型,培训考试 |
| | | */ |
| | | @GetMapping("export-examStatistics") |
| | | public void exportExamStatistics(HttpServletResponse response, ExamScoreVO examScoreVO) throws Exception { |
| | | try{ |
| | | //获取考试情况统计数据 |
| | | List<ExamStatisticsVO> list1 = examPaperService.getExamInfoByExamIdList(examScoreVO); |
| | | |
| | | //获取考试成绩明细 |
| | | List<ExamScoreVO> list2 = examPaperService.getExamScoreList(examScoreVO); |
| | | |
| | | //模板路径 |
| | | String templateFileName = "xls" + File.separator + "examStatistics.xlsx"; |
| | | //读取模板输入流 |
| | | InputStream resourceAsStream = this.getClass().getClassLoader().getResourceAsStream(templateFileName); |
| | | |
| | | //设置文件名称 |
| | | String fileName = URLEncoder.encode(examScoreVO.getCompanyName()+examScoreVO.getExamDate()+"考试情况数据"+ DateUtil.time(), Charsets.UTF_8.name()); |
| | | //设置文件类型 |
| | | response.setContentType("application/vnd.ms-excel"); |
| | | //设置编码格式 |
| | | response.setCharacterEncoding("utf-8"); |
| | | response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); |
| | | |
| | | //创建excel |
| | | ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(resourceAsStream).build(); |
| | | //创建sheet |
| | | WriteSheet writeSheet = EasyExcel.writerSheet().build(); |
| | | FillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); |
| | | |
| | | // 如果有多个list 模板上必须有{前缀.} 这里的前缀就是 a,然后多个list必须用 FillWrapper包裹 |
| | | excelWriter.fill(new FillWrapper("a", list1), fillConfig, writeSheet); |
| | | excelWriter.fill(new FillWrapper("b", list2), fillConfig, writeSheet); |
| | | |
| | | //其他数据写入 map |
| | | Map map = new HashMap<>(); |
| | | //计算总的报名人数,异常人数,缺考人数,合格人数, |
| | | int znum = list1.stream().mapToInt(ExamStatisticsVO::getZnum).sum(); |
| | | int ycnum = list1.stream().mapToInt(ExamStatisticsVO::getYcnum).sum(); |
| | | int qknum = list1.stream().mapToInt(ExamStatisticsVO::getQknum).sum(); |
| | | int yknum = list1.stream().mapToInt(ExamStatisticsVO::getYknum).sum(); |
| | | map.put("znumTotal",znum); |
| | | map.put("ycnumTotal",ycnum); |
| | | map.put("qknumTotal",qknum); |
| | | map.put("yknumTotal",yknum); |
| | | |
| | | //计算占比,格式化小数 |
| | | DecimalFormat df = new DecimalFormat("0.00"); |
| | | //返回的是String类型,缺考人数占比 |
| | | map.put("absentProportionTotal",df.format((float)qknum/znum*100)); |
| | | |
| | | //合格人数占比 |
| | | DecimalFormat df1 = new DecimalFormat("0.00"); |
| | | map.put("qualifiedProportionTotal",df1.format((float)yknum/znum*100)); |
| | | |
| | | excelWriter.fill(map, writeSheet); |
| | | |
| | | //关闭流 |
| | | excelWriter.finish(); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | } |