浏览代码

优化班级考核导出接口

phoenix 1 年之前
父节点
当前提交
ac0b2e4211

+ 6 - 0
src/main/java/com/xjrsoft/module/student/dto/QuantitativeAssessmentExcelDto.java

@@ -22,4 +22,10 @@ public class QuantitativeAssessmentExcelDto implements Serializable {
     */
     @ApiModelProperty("年月(2023-12)")
     private String yearAndMonth;
+
+    /**
+     * 子表的类型
+     */
+    @ApiModelProperty("子表的类型")
+    private Long baseStudentAssessmentCategoryId;
 }

+ 1 - 1
src/main/java/com/xjrsoft/module/student/mapper/BaseStudentAssessmentInspectionMapper.java

@@ -48,5 +48,5 @@ public interface BaseStudentAssessmentInspectionMapper extends MPJBaseMapper<Bas
      */
     BaseStudentAssessmentInspectionMobileVo getMobileInfo(Long id);
 
-    List<StudentIndividualBehaviorExcelVo> getStudentIndividualBehaviorExcelVoList(@Param("dto") QuantitativeAssessmentExcelDto dto);
+    List<QuantitativeAssessmentSubTableExcelVo> getQuantitativeAssessmentSubTableExcelVoList(@Param("dto") QuantitativeAssessmentExcelDto dto);
 }

+ 60 - 16
src/main/java/com/xjrsoft/module/student/service/impl/BaseStudentAssessmentInspectionServiceImpl.java

@@ -2,7 +2,10 @@ package com.xjrsoft.module.student.service.impl;
 
 import cn.dev33.satoken.stp.StpUtil;
 import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseServiceImpl;
@@ -10,15 +13,17 @@ import com.github.yulichang.toolkit.MPJWrappers;
 import com.xjrsoft.common.enums.ScoreTypeEnum;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.base.mapper.BaseClassMapper;
-import com.xjrsoft.module.evaluate.vo.ResultViewingExcelVo;
 import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionMobilePageDto;
 import com.xjrsoft.module.student.dto.BaseStudentAssessmentInspectionPageDto;
 import com.xjrsoft.module.student.dto.QuantitativeAssessmentExcelDto;
+import com.xjrsoft.module.student.entity.BaseStudentAssessmentCategory;
 import com.xjrsoft.module.student.entity.BaseStudentAssessmentClassRelation;
 import com.xjrsoft.module.student.entity.BaseStudentAssessmentInspection;
 import com.xjrsoft.module.student.entity.BaseStudentAssessmentStudentRelation;
+import com.xjrsoft.module.student.mapper.BaseStudentAssessmentCategoryMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentAssessmentClassRelationMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentAssessmentInspectionMapper;
 import com.xjrsoft.module.student.mapper.BaseStudentAssessmentStudentRelationMapper;
@@ -32,8 +37,8 @@ import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 
 import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -48,6 +53,8 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
 
     private final BaseStudentAssessmentInspectionMapper assessmentInspectionMapper;
 
+    private final BaseStudentAssessmentCategoryMapper baseStudentAssessmentCategoryMapper;
+
     private final BaseStudentAssessmentStudentRelationMapper assessmentStudentRelationMapper;
 
     private final BaseStudentAssessmentClassRelationMapper assessmentClassRelationMapper;
@@ -154,26 +161,63 @@ public class BaseStudentAssessmentInspectionServiceImpl extends MPJBaseServiceIm
 
     @Override
     public ResponseEntity<byte[]> getQuantitativeAssessmentExcelByte(QuantitativeAssessmentExcelDto dto) {
+        //导出的文件名,字节流
         String fileName = "StudentAssessmentInspection" + ExcelTypeEnum.XLSX.getValue();
         ByteArrayOutputStream bot = new ByteArrayOutputStream();
-        //TODO 学生个人行为原始数据
-        //求所有的个人行为集合
-        List<StudentIndividualBehaviorExcelVo> studentIndividualBehaviorExcelVoList = assessmentInspectionMapper.getStudentIndividualBehaviorExcelVoList(dto);
-        Map<Long, List<StudentIndividualBehaviorExcelVo>> studentIndividualBehaviorExcelVoListMap =  studentIndividualBehaviorExcelVoList.stream()
-                .collect(Collectors.groupingBy(StudentIndividualBehaviorExcelVo::getStudentUserId));
 
-        //未合并
-        EasyExcel.write(bot, ResultViewingExcelVo.class)
-                .automaticMergeHead(false)
-                .excelType(ExcelTypeEnum.XLSX)
-                .sheet("学生个人行为")
-                .doWrite(studentIndividualBehaviorExcelVoList);
+        //获取需要导出的子表
+        List<Long> baseStudentAssessmentCategoryIdList = new ArrayList<>();
+        baseStudentAssessmentCategoryIdList.add(1727155216239882240L);
+        baseStudentAssessmentCategoryIdList.add(1727154864019009536L);
+
+        LambdaQueryWrapper<BaseStudentAssessmentCategory> baseStudentAssessmentCategoryLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        baseStudentAssessmentCategoryLambdaQueryWrapper
+                .in(BaseStudentAssessmentCategory::getId, baseStudentAssessmentCategoryIdList);
+        List<BaseStudentAssessmentCategory> baseStudentAssessmentCategorieList = baseStudentAssessmentCategoryMapper.selectList(baseStudentAssessmentCategoryLambdaQueryWrapper);
+
+        //导出子表
+        if(baseStudentAssessmentCategorieList.size() > 0){
+            //需要合并的列
+            int[] mergeColumeIndex = {0, 1, 2, 3, 4};
+            ExcelMergeUtil excelFillCellMergeStrategy = new ExcelMergeUtil(1, mergeColumeIndex);
+
+            //开始处理写入
+            try (ExcelWriter excelWriter = EasyExcel.write(bot, QuantitativeAssessmentSubTableExcelVo.class).registerWriteHandler(excelFillCellMergeStrategy).build()) {
+                int no = 0;
+                for (BaseStudentAssessmentCategory bsac : baseStudentAssessmentCategorieList) {
+                    dto.setBaseStudentAssessmentCategoryId(bsac.getId());
+                    //sheet名
+                    String sheetName = bsac.getName();
 
-        //TODO 班级常规管理原始数据
+                    WriteSheet writeSheet = EasyExcel.writerSheet(no++, sheetName ).build();
 
-        //TODO 获奖原始数据
+                    //求所有的个人行为集合
+                    List<QuantitativeAssessmentSubTableExcelVo> quantitativeAssessmentSubTableExcelVoList = assessmentInspectionMapper.getQuantitativeAssessmentSubTableExcelVoList(dto);
 
-        //TODO 班级量化考核统计表总
+                    excelWriter.write(quantitativeAssessmentSubTableExcelVoList, writeSheet);
+                }
+                //TODO 班级量化考核统计表总
+
+            }
+            /*for (BaseStudentAssessmentCategory bsac : baseStudentAssessmentCategorieList) {
+                dto.setBaseStudentAssessmentCategoryId(bsac.getId());
+                //sheet名
+                String sheetName = bsac.getName();
+
+                //求所有的个人行为集合
+                List<QuantitativeAssessmentSubTableExcelVo> quantitativeAssessmentSubTableExcelVoList = assessmentInspectionMapper.getQuantitativeAssessmentSubTableExcelVoList(dto);
+
+                //需要合并的列
+                int[] mergeColumeIndex = {0, 1, 2, 3, 4};
+
+                //写字节流
+                ExcelMergeUtil excelFillCellMergeStrategy = new ExcelMergeUtil(1, mergeColumeIndex);
+                EasyExcel.write(bot, QuantitativeAssessmentSubTableExcelVo.class)
+                        .registerWriteHandler(excelFillCellMergeStrategy)
+                        .sheet(sheetName)
+                        .doWrite(quantitativeAssessmentSubTableExcelVoList);
+            }*/
+        }
 
         return RT.fileStream(bot.toByteArray(), fileName);
     }

+ 25 - 18
src/main/java/com/xjrsoft/module/student/vo/StudentIndividualBehaviorExcelVo.java → src/main/java/com/xjrsoft/module/student/vo/QuantitativeAssessmentSubTableExcelVo.java

@@ -26,7 +26,7 @@ import java.time.LocalDateTime;
 // 例如: 第2-3行,2-3列进行合并
 //@OnceAbsoluteMerge(firstRowIndex = 1, lastRowIndex = 2, firstColumnIndex = 1, lastColumnIndex = 2)
 @Data
-public class StudentIndividualBehaviorExcelVo {
+public class QuantitativeAssessmentSubTableExcelVo {
 
     /**
     * 班主任user_id
@@ -36,11 +36,18 @@ public class StudentIndividualBehaviorExcelVo {
     @ExcelIgnore
     @ApiModelProperty("班主任user_id")
     private Long headTeacherUserId;
+    /**
+     * 班主任OA
+     */
+    @ExcelProperty(index = 0, value = "班主任OA")
+    @ColumnWidth(10)
+    @ApiModelProperty("班主任OA")
+    private String headTeacherUserName;
     /**
      * 班主任姓名
      */
-    @ExcelProperty(index = 0, value = "班主任姓名")
-    @ColumnWidth(30)
+    @ExcelProperty(index = 1, value = "班主任姓名")
+    @ColumnWidth(10)
     @ApiModelProperty("班主任姓名")
     private String headTeacherName;
     /**
@@ -52,8 +59,8 @@ public class StudentIndividualBehaviorExcelVo {
     /**
      * 班级名
      */
-    @ExcelProperty(index = 1, value = "班级名")
-    @ColumnWidth(30)
+    @ExcelProperty(index = 2, value = "班级名")
+    @ColumnWidth(10)
     @ApiModelProperty("班级名")
     private String className;
     /**
@@ -65,21 +72,21 @@ public class StudentIndividualBehaviorExcelVo {
     /**
      * 学号
      */
-    @ExcelProperty(index = 2, value = "学号")
-    @ColumnWidth(30)
+    @ExcelProperty(index = 3, value = "学号")
+    @ColumnWidth(20)
     @ApiModelProperty("学号")
     private String studentId;
     /**
      * 学生名
      */
-    @ExcelProperty(index = 3, value = "学生名")
-    @ColumnWidth(30)
+    @ExcelProperty(index = 4, value = "学生名")
+    @ColumnWidth(10)
     @ApiModelProperty("学生名")
     private String studentName;
     /**
      * 学生基础分数
      */
-    @ExcelProperty(index = 4, value = "学生基础分数")
+    @ExcelProperty(index = 5, value = "学生基础分数")
     @ColumnWidth(10)
     @ApiModelProperty("学生基础分数")
     private Integer baseScore;
@@ -92,30 +99,30 @@ public class StudentIndividualBehaviorExcelVo {
     /**
      * 考核项目
      */
-    @ExcelProperty(index = 5, value = "考核项目")
-    @ColumnWidth(60)
+    @ExcelProperty(index = 6, value = "考核项目")
+    @ColumnWidth(30)
     @ApiModelProperty("考核项目")
     private String baseStudentAssessmentProjectIdCN;
     /**
      * 考核项目
      */
     @DateTimeFormat("yyyy年MM月dd日HH时mm分ss秒")
-    @ExcelProperty(index = 6, value = "考核时间")
-    @ColumnWidth(60)
+    @ExcelProperty(index = 7, value = "考核时间")
+    @ColumnWidth(30)
     @ApiModelProperty("考核时间")
     private LocalDateTime assessmentDate;
     /**
      * 项目分数
      */
-    @ExcelProperty(index = 7, value = "项目分数")
-    @ColumnWidth(10)
+    @ExcelProperty(index = 8, value = "项目分数")
+    @ColumnWidth(6)
     @ApiModelProperty("项目分数")
     private Integer projectScore;
     /**
      * 最终得分
      */
-    @ExcelProperty(index = 8, value = "最终得分")
-    @ColumnWidth(10)
+    @ExcelProperty(index = 9, value = "最终得分")
+    @ColumnWidth(6)
     @ApiModelProperty("最终得分")
     private Integer finalScore;
 }

+ 44 - 1
src/main/resources/mapper/student/BaseStudentAssessmentInspectionMapper.xml

@@ -103,7 +103,7 @@
         where t.id=#{id};
     </select>
 
-    <select id="getStudentIndividualBehaviorExcelVoList" parameterType="com.xjrsoft.module.student.dto.QuantitativeAssessmentExcelDto" resultType="com.xjrsoft.module.student.vo.StudentIndividualBehaviorExcelVo">
+    <select id="getStudentIndividualBehaviorExcelVoList" parameterType="com.xjrsoft.module.student.dto.QuantitativeAssessmentExcelDto" resultType="com.xjrsoft.module.student.vo.QuantitativeAssessmentSubTableExcelVo">
         with total_score as (
         select
         t.user_id as studentUserId,
@@ -118,6 +118,7 @@
         )
         select
         t4.id as headTeacherUserId,
+        t4.user_name as headTeacherUserName,
         t4.name as headTeacherName,
         t.class_id as classId,
         t.class_name as className,
@@ -141,5 +142,47 @@
         <if test="dto.yearAndMonth != null and dto.yearAndMonth != ''">
             and date_format(t1.assessment_date, '%Y-%m') = #{dto.yearAndMonth}
         </if>
+        order by t.class_id, t.user_id
+    </select>
+
+    <select id="getQuantitativeAssessmentSubTableExcelVoList" parameterType="com.xjrsoft.module.student.dto.QuantitativeAssessmentExcelDto" resultType="com.xjrsoft.module.student.vo.QuantitativeAssessmentSubTableExcelVo">
+        with total_score as (select t.user_id                                                     as studentUserId,
+        sum(if(t1.score_type = 'score_add', t1.score, -1 * t1.score)) as finalScore
+        from base_student_assessment_student_relation t
+        left join base_student_assessment_inspection t1
+        on t1.id = t.base_student_assessment_inspection_id
+        where t1.delete_mark = 0
+        and t1.base_student_assessment_category_id = #{dto.baseStudentAssessmentCategoryId}
+        <if test="dto.yearAndMonth != null and dto.yearAndMonth != ''">
+            and date_format(t1.assessment_date, '%Y-%m') = #{dto.yearAndMonth}
+        </if>
+        group by t.user_id)
+        select t4.id                                                    as headTeacherUserId,
+        t4.user_name                                             as headTeacherUserName,
+        t4.name                                                  as headTeacherName,
+        t.class_id                                               as classId,
+        t.class_name                                             as className,
+        t.user_id                                                as studentUserId,
+        t.student_id                                             as studentId,
+        t.name                                                   as studentName,
+        t5.base_score                                            as baseScore,
+        t2.id                                                    as baseStudentAssessmentProjectId,
+        t2.name                                                  as baseStudentAssessmentProjectIdCN,
+        t1.assessment_date                                       as assessmentDate,
+        if(t1.score_type = 'score_add', t1.score, -1 * t1.score) as projectScore,
+        t5.base_score + t6.finalScore                            as finalScore
+        from base_student_assessment_student_relation t
+        left join base_student_assessment_inspection t1 on t1.id = t.base_student_assessment_inspection_id
+        left join base_student_assessment_project t2 on t2.id = t1.base_student_assessment_project_id
+        left join base_class t3 on t3.id = t.class_id
+        left join xjr_user t4 on t4.id = t3.teacher_id
+        left join base_student_assessment_base_score t5 on t5.base_semester_id = t1.base_semester_id
+        left join total_score t6 on t6.studentUserId = t.user_id
+        where t1.delete_mark = 0
+        and t1.base_student_assessment_category_id = #{dto.baseStudentAssessmentCategoryId}
+        <if test="dto.yearAndMonth != null and dto.yearAndMonth != ''">
+            and date_format(t1.assessment_date, '%Y-%m') = #{dto.yearAndMonth}
+        </if>
+        order by t.class_id, t.user_id
     </select>
 </mapper>