xiangpei
2024-07-15 065f6d3555d4125b6045ca2bb66d38030ba125a9
统计导出(待测试)
4个文件已修改
74 ■■■■ 已修改文件
src/main/java/com/mindskip/xzs/controller/admin/ExamPaperAnswerController.java 51 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/vo/ExamPaperDataExportVO.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/domain/vo/PaperExcelVO.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/mindskip/xzs/controller/admin/ExamPaperAnswerController.java
@@ -1,9 +1,13 @@
package com.mindskip.xzs.controller.admin;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.PageInfo;
import com.mindskip.xzs.base.BaseApiController;
import com.mindskip.xzs.base.RestResponse;
import com.mindskip.xzs.domain.Department;
import com.mindskip.xzs.domain.ExamPaperAnswer;
import com.mindskip.xzs.domain.ExamPaperSubject;
import com.mindskip.xzs.domain.Subject;
@@ -11,16 +15,16 @@
import com.mindskip.xzs.domain.vo.ExamPaperDataExportVO;
import com.mindskip.xzs.domain.vo.ExamPaperDataVO;
import com.mindskip.xzs.domain.vo.ExamPaperStatisticVO;
import com.mindskip.xzs.service.ExamPaperAnswerService;
import com.mindskip.xzs.service.ExamPaperSubjectService;
import com.mindskip.xzs.service.SubjectService;
import com.mindskip.xzs.service.UserService;
import com.mindskip.xzs.domain.vo.PaperExcelVO;
import com.mindskip.xzs.service.*;
import com.mindskip.xzs.utility.DateTimeUtil;
import com.mindskip.xzs.utility.ExamUtil;
import com.mindskip.xzs.utility.PageInfoHelper;
import com.mindskip.xzs.utility.excel.ExcelUtils;
import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM;
import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageResponseVM;
import lombok.RequiredArgsConstructor;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
@@ -30,12 +34,14 @@
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@RequiredArgsConstructor
@RestController("AdminExamPaperAnswerController")
@RequestMapping(value = "/api/admin/examPaperAnswer")
public class ExamPaperAnswerController extends BaseApiController {
@@ -44,14 +50,8 @@
    private final SubjectService subjectService;
    private final UserService userService;
    private final ExamPaperSubjectService examPaperSubjectService;
    @Autowired
    public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, SubjectService subjectService, UserService userService, ExamPaperSubjectService examPaperSubjectService) {
        this.examPaperAnswerService = examPaperAnswerService;
        this.subjectService = subjectService;
        this.userService = userService;
        this.examPaperSubjectService = examPaperSubjectService;
    }
    private final ExamPaperService examPaperService;
    private final DepartmentService departmentService;
    @RequestMapping(value = "/page", method = RequestMethod.POST)
@@ -140,8 +140,31 @@
    @RequestMapping(value = "/export", method = RequestMethod.GET)
    public void export(Integer id, Integer type, HttpServletResponse response) {
        List<ExamPaperDataExportVO> list =  examPaperAnswerService.dataExport(new ExamPaperDataVO().setId(id).setType(type));
        ExcelUtils.export(response, "分数统计", list, ExamPaperDataExportVO.class);
        try (ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).build()) {
            // 部门考试统计sheet
            List<ExamPaperDataExportVO> list =  examPaperAnswerService.dataExport(new ExamPaperDataVO().setId(id).setType(type));
            WriteSheet writeSheet = EasyExcel.writerSheet("部门数据统计").head(ExamPaperDataExportVO.class).build();
            excelWriter.write(list, writeSheet);
            // 考试详情sheet,一个单位一个sheet
            List<PaperExcelVO> paperDetailList = examPaperService.getPaperExcelById(id);
            List<Integer> deptIds = paperDetailList.stream().map(PaperExcelVO::getDeptId).collect(Collectors.toList());
            Map<Integer, List<Department>> deptMap = departmentService.gets(deptIds).stream().collect(Collectors.groupingBy(Department::getId));
            Map<Integer, List<PaperExcelVO>> deptDataMap = paperDetailList.stream().collect(Collectors.groupingBy(PaperExcelVO::getDeptId));
            deptDataMap.forEach((deptId, paperList) -> {
                List<Department> departments = deptMap.get(deptId);
                String name = "";
                if (CollectionUtils.isNotEmpty(departments)) {
                    name = departments.get(0).getName();
                }
                WriteSheet writeSheetNext = EasyExcel.writerSheet(name).head(PaperExcelVO.class).build();
                excelWriter.write(paperList, writeSheetNext);
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
src/main/java/com/mindskip/xzs/domain/vo/ExamPaperDataExportVO.java
@@ -1,5 +1,7 @@
package com.mindskip.xzs.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ContentRowHeight;
import com.mindskip.xzs.utility.excel.ExcelExport;
import lombok.Data;
@@ -16,20 +18,26 @@
@Accessors(chain = true)
public class ExamPaperDataExportVO {
    @ExcelIgnore
    private Integer id;
    @ExcelProperty("部门名称")
    @ExcelExport("部门名称")
    private String name;
    @ExcelProperty("参考人数")
    @ExcelExport("参考人数")
    private Integer factPeopleTotal;
    @ExcelProperty("参考人数百分比")
    @ExcelExport("参考人数百分比")
    private BigDecimal referencePercentage;
    @ExcelProperty("平均分")
    @ExcelExport("平均分")
    private BigDecimal averageScore;
    @ExcelProperty("总考试次数")
    @ExcelExport("总考试次数")
    private Integer examTotal;
src/main/java/com/mindskip/xzs/domain/vo/PaperExcelVO.java
@@ -1,5 +1,7 @@
package com.mindskip.xzs.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.mindskip.xzs.utility.excel.ExcelExport;
import lombok.Data;
@@ -8,13 +10,25 @@
@Data
public class PaperExcelVO implements Serializable {
    @ExcelProperty("姓名")
    @ExcelExport("姓名")
    private String name;
    @ExcelIgnore
    private Integer deptId;
    @ExcelProperty("部门")
    @ExcelExport("部门")
    private String departmentName;
    @ExcelIgnore
    private String userId;
    @ExcelProperty("得分")
    @ExcelExport("得分")
    private String userScore;
    @ExcelProperty("总分")
    @ExcelExport("总分")
    private String paperScore;
}
src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
@@ -271,6 +271,7 @@
            if(userDepartments.size() != 0){
                Department byId = departmentService.getById(userDepartments.get(0).getDepartmentId());
                e.setDepartmentName(byId.getName());
                e.setDeptId(byId.getId());
            }
            return e;
        }).collect(Collectors.toList());