Browse Source

Merge branch 'pre'

dzx 1 năm trước cách đây
mục cha
commit
8e41bb228b
20 tập tin đã thay đổi với 497 bổ sung287 xóa
  1. 9 2
      src/main/java/com/xjrsoft/module/classtime/controller/ClassTimeStatisticsController.java
  2. 34 0
      src/main/java/com/xjrsoft/module/classtime/vo/RecordDetailListVo.java
  3. 37 0
      src/main/java/com/xjrsoft/module/classtime/vo/RecordDetailVo.java
  4. 1 1
      src/main/java/com/xjrsoft/module/evaluate/controller/EvaluateManageController.java
  5. 9 7
      src/main/java/com/xjrsoft/module/evaluate/controller/EvaluateResultController.java
  6. 7 0
      src/main/java/com/xjrsoft/module/evaluate/dto/EvaluateObjectListDto.java
  7. 4 0
      src/main/java/com/xjrsoft/module/evaluate/mapper/EvaluateObjectMapper.java
  8. 3 0
      src/main/java/com/xjrsoft/module/evaluate/mapper/EvaluateResultMapper.java
  9. 4 2
      src/main/java/com/xjrsoft/module/evaluate/service/IEvaluateResultService.java
  10. 79 6
      src/main/java/com/xjrsoft/module/evaluate/service/impl/EvaluateObjectServiceImpl.java
  11. 190 263
      src/main/java/com/xjrsoft/module/evaluate/service/impl/EvaluateResultServiceImpl.java
  12. 24 0
      src/main/java/com/xjrsoft/module/evaluate/vo/ClassTeachersListVo.java
  13. 3 0
      src/main/java/com/xjrsoft/module/evaluate/vo/EvaluateResultIndexPageVo.java
  14. 42 0
      src/main/java/com/xjrsoft/module/evaluate/vo/ResultViewingListVo.java
  15. 10 3
      src/main/java/com/xjrsoft/module/evaluate/vo/ResultViewingPageVo.java
  16. 1 2
      src/main/java/com/xjrsoft/module/personnel/controller/BasePersonnelLabourCapitalController.java
  17. 1 0
      src/main/resources/mapper/evaluate/EvaluateManageMapper.xml
  18. 22 0
      src/main/resources/mapper/evaluate/EvaluateObjectMapper.xml
  19. 9 1
      src/main/resources/mapper/evaluate/EvaluateResultMapper.xml
  20. 8 0
      src/test/java/com/xjrsoft/module/job/JianyuekbScheduleTaskTest2.java

+ 9 - 2
src/main/java/com/xjrsoft/module/classtime/controller/ClassTimeStatisticsController.java

@@ -3,9 +3,14 @@ package com.xjrsoft.module.classtime.controller;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
 import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.fastjson.JSON;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
 import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
@@ -25,6 +30,7 @@ import com.xjrsoft.module.classtime.service.IClassTimeStatisticsSetService;
 import com.xjrsoft.module.classtime.vo.ClassTimeStatisticsPageVo;
 import com.xjrsoft.module.classtime.vo.ClassTimeStatisticsRecordVo;
 import com.xjrsoft.module.classtime.vo.ClassTimeStatisticsVo;
+import com.xjrsoft.module.classtime.vo.RecordDetailVo;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
@@ -197,9 +203,10 @@ public class ClassTimeStatisticsController {
     @GetMapping(value = "/record-detail-info")
     @ApiOperation(value="课时统计详情明细")
     @SaCheckPermission("classtimestatistics:detail")
-    public RT<String> recordDetailInfo(@Valid RefreshStatisticsDto dto){
+    public RT<RecordDetailVo> recordDetailInfo(@Valid RefreshStatisticsDto dto){
         ClassTimeStatisticsRecord record = recordService.getById(dto.getId());
-        return RT.ok(record.getAllClassTimeData());
+        RecordDetailVo recordDetailVo = JSON.parseObject(record.getAllClassTimeData(), RecordDetailVo.class);
+        return RT.ok(recordDetailVo);
     }
 
     @PostMapping(value = "/record-detail-export-query")

+ 34 - 0
src/main/java/com/xjrsoft/module/classtime/vo/RecordDetailListVo.java

@@ -0,0 +1,34 @@
+package com.xjrsoft.module.classtime.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 节假日调课设置表单出参
+* @Author dzx
+* @Date: 2024-09-26
+* @Version 1.0
+*/
+@Data
+public class RecordDetailListVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("日期")
+    private String scheduleDate;
+    /**
+    * 补班日期
+    */
+    @ApiModelProperty("内容")
+    private String content;
+    /**
+    * 补课日期
+    */
+    @ApiModelProperty("分类")
+    private String type;
+
+    @ApiModelProperty("调整类型")
+    private String adjustType;
+
+}

+ 37 - 0
src/main/java/com/xjrsoft/module/classtime/vo/RecordDetailVo.java

@@ -0,0 +1,37 @@
+package com.xjrsoft.module.classtime.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+* @title: 节假日调课设置表单出参
+* @Author dzx
+* @Date: 2024-09-26
+* @Version 1.0
+*/
+@Data
+public class RecordDetailVo {
+
+    /**
+    * 主键编号
+    */
+    @ApiModelProperty("行")
+    private List<RecordDetailListVo> rowTitle;
+    /**
+    * 补班日期
+    */
+    @ApiModelProperty("列")
+    private List<RecordDetailListVo> columnTitle;
+    /**
+    * 补课日期
+    */
+    @ApiModelProperty("数据")
+    private List<RecordDetailListVo> data;
+
+    @ApiModelProperty("总课时")
+    private Integer allClassTime;
+
+}

+ 1 - 1
src/main/java/com/xjrsoft/module/evaluate/controller/EvaluateManageController.java

@@ -110,7 +110,7 @@ public class EvaluateManageController {
         if(dto.getStatus() == 2){
             return RT.ok(evaluateManageService.updateById(new EvaluateManage(){{
                 setId(dto.getId());
-                setCreateDate(new Date());
+                setEndTime(new Date());
                 setCreateUserId(StpUtil.getLoginIdAsLong());
                 setStatus(1);
             }}));

+ 9 - 7
src/main/java/com/xjrsoft/module/evaluate/controller/EvaluateResultController.java

@@ -1,6 +1,7 @@
 package com.xjrsoft.module.evaluate.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.xjrsoft.common.model.result.RT;
 import com.xjrsoft.common.page.ConventPage;
@@ -26,6 +27,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
 * @title: 评价结果
@@ -71,17 +73,17 @@ public class EvaluateResultController {
     @GetMapping(value = "/result-viewing-page")
     @ApiOperation(value="结果查看(分页)")
     @SaCheckPermission("evaluateresult:detail")
-    public RT<PageOutput<ResultViewingPageVo>> pageResultViewing(@Valid ResultViewingPageDto dto){
-        IPage<ResultViewingPageVo> page = evaluateResultService.pageResultViewing(dto);
-        PageOutput<ResultViewingPageVo> pageOutput = ConventPage.getPageOutput(page, ResultViewingPageVo.class);
-        return RT.ok(pageOutput);
+    public RT<List<ResultViewingPageVo>> pageResultViewing(@Valid ResultViewingPageDto dto){
+        List<ResultViewingPageVo> list = evaluateResultService.pageResultViewing(dto);
+        return RT.ok(list);
     }
 
     @PostMapping("/export-query")
 //    @GetMapping("/expor")
     @ApiOperation(value = "入参导出")
-    public ResponseEntity<byte[]>  exportDataQuery(@Valid @RequestBody ResultViewingExcelDto dto) {
-//    public ResponseEntity<byte[]>  exportDataQuery(@Valid ResultViewingExcelDto dto) {
-        return evaluateResultService.getList(dto);
+    public ResponseEntity<byte[]>  exportDataQuery(@Valid @RequestBody ResultViewingPageDto dto) {
+        String fileName = "recordDetailExportQuery" + ExcelTypeEnum.XLSX.getValue();
+        byte[] bytes = evaluateResultService.getList(dto);
+        return RT.fileStream(bytes, fileName);
     }
 }

+ 7 - 0
src/main/java/com/xjrsoft/module/evaluate/dto/EvaluateObjectListDto.java

@@ -4,6 +4,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
+import java.util.Date;
 
 
 /**
@@ -36,4 +37,10 @@ public class EvaluateObjectListDto implements Serializable {
     @ApiModelProperty("评价类型")
     private String evaluateType;
 
+    @ApiModelProperty("开始时间")
+    private Date startTime;
+
+    @ApiModelProperty("结束时间")
+    private Date endTime;
+
 }

+ 4 - 0
src/main/java/com/xjrsoft/module/evaluate/mapper/EvaluateObjectMapper.java

@@ -4,7 +4,9 @@ import com.github.yulichang.base.MPJBaseMapper;
 import com.xjrsoft.module.evaluate.dto.EvaluateObjectListDto;
 import com.xjrsoft.module.evaluate.dto.ObjectGradeDeleteDto;
 import com.xjrsoft.module.evaluate.dto.SaveEvaluateObjectDto;
+import com.xjrsoft.module.evaluate.entity.EvaluateManage;
 import com.xjrsoft.module.evaluate.entity.EvaluateObject;
+import com.xjrsoft.module.evaluate.vo.ClassTeachersListVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateExecuterVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateObjectListVo;
 import org.apache.ibatis.annotations.Delete;
@@ -36,5 +38,7 @@ public interface EvaluateObjectMapper extends MPJBaseMapper<EvaluateObject> {
 
     Boolean objectGradeDeleteObject(@Param("dto") ObjectGradeDeleteDto dto);
 
+    List<ClassTeachersListVo> getClassTeachers(@Param("dto") EvaluateObjectListDto dto);
+
 
 }

+ 3 - 0
src/main/java/com/xjrsoft/module/evaluate/mapper/EvaluateResultMapper.java

@@ -11,6 +11,7 @@ import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageDetailList;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageDetailVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultIndexPageVo;
+import com.xjrsoft.module.evaluate.vo.ResultViewingListVo;
 import com.xjrsoft.module.evaluate.vo.ResultViewingPageVo;
 import com.xjrsoft.module.evaluate.vo.TeaEvaluateClassListVo;
 import org.apache.ibatis.annotations.Mapper;
@@ -41,4 +42,6 @@ public interface EvaluateResultMapper extends MPJBaseMapper<EvaluateResult> {
     List<ResultViewingPageVo> listSynthesisScore(@Param("evaluateObjectIdList") List<Long> evaluateObjectIdList, @Param("evaluateManageItemIdList") List<Long> evaluateManageItemIdList);
 
     List<TeaEvaluateClassListVo> getTeaEvaluateClassList(@Param("dto") TeaEvaluateClassDto dto);
+
+    List<ResultViewingListVo> getResultViewingList(@Param("evaluateManageId") Long evaluateManageId);
 }

+ 4 - 2
src/main/java/com/xjrsoft/module/evaluate/service/IEvaluateResultService.java

@@ -15,6 +15,8 @@ import com.xjrsoft.module.evaluate.vo.EvaluateResultIndexPageVo;
 import com.xjrsoft.module.evaluate.vo.ResultViewingPageVo;
 import org.springframework.http.ResponseEntity;
 
+import java.util.List;
+
 /**
 * @title: 评价结果
 * @Author szs
@@ -29,9 +31,9 @@ public interface IEvaluateResultService extends MPJBaseService<EvaluateResult> {
 
     EvaluateResultDetailPageDetailVo getDetailPageDetail(EvaluateResultDetailPageDetailDto dto);
 
-    IPage<ResultViewingPageVo> pageResultViewing(ResultViewingPageDto dto);
+    List<ResultViewingPageVo> pageResultViewing(ResultViewingPageDto dto);
 
     String saveBatch(EvaluateResultSaveDto dto);
 
-    ResponseEntity<byte[]> getList(ResultViewingExcelDto dto);
+    byte[] getList(ResultViewingPageDto dto);
 }

+ 79 - 6
src/main/java/com/xjrsoft/module/evaluate/service/impl/EvaluateObjectServiceImpl.java

@@ -29,6 +29,7 @@ import com.xjrsoft.module.evaluate.mapper.EvaluateExecuterMapper;
 import com.xjrsoft.module.evaluate.mapper.EvaluateManageMapper;
 import com.xjrsoft.module.evaluate.mapper.EvaluateObjectMapper;
 import com.xjrsoft.module.evaluate.service.IEvaluateObjectService;
+import com.xjrsoft.module.evaluate.vo.ClassTeachersListVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateExecuterVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateManageVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateObjectGradeListVo;
@@ -46,6 +47,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Random;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -226,21 +228,21 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
 
             for (EvaluateObjectListVo objectListVo : newObjectList) {
                 List<EvaluateExecuterVo> dataList = new ArrayList<>();
-                /*for (EvaluateExecuterVo executerVo : newExecuterList) {
+                for (EvaluateExecuterVo executerVo : newExecuterList) {
                     if(!executerVo.getClassId().equals(objectListVo.getClassId())){
                         continue;
                     }
                     dataList.add(executerVo);
-                }*/
+                }
                 List<EvaluateExecuterVo> executerList = new ArrayList<>();
                 if(evaluateExecuterVoMap.get(objectListVo.getClassId()) != null){
                     dataList.addAll(evaluateExecuterVoMap.get(objectListVo.getClassId()));
-                    if("random15".equals(dto.getExecuterCount()) && dataList.size() > 0){
+                    if("random15".equals(dto.getExecuterCount()) && !dataList.isEmpty()){
                         List<Integer> randomList = new ArrayList<>();
                         Random random = new Random();
                         while(randomList.size() < 15){
                             int nextInt = random.nextInt(dataList.size());
-                            if(!randomList.contains(nextInt) && nextInt >= 0){
+                            if(!randomList.contains(nextInt)){
                                 randomList.add(nextInt);
                             }
                         }
@@ -254,7 +256,8 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
                 objectListVo.setExecuterCount(executerList.size());
                 objectListVo.setExecuterList(executerList);
             }
-        }else if(dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.DRILLMASTER_EVALUATE_CLASS.getCode())) {//入参评价类型是教官评价班级
+        }
+        else if(dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.DRILLMASTER_EVALUATE_CLASS.getCode())) {//入参评价类型是教官评价班级
             newObjectList = evaluateObjectMapper.getNewObjectList(dto);
             List<EvaluateExecuterVo> newExecuterList = evaluateObjectMapper.getNewExecuterList(dto);
 
@@ -262,7 +265,8 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
                 objectListVo.setExecuterCount(newExecuterList.size());
                 objectListVo.setExecuterList(newExecuterList);
             }
-        }else if(dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.TEACHER_EVALUATE_CLASS.getCode())) {//任课教师对班级评价
+        }
+        else if(dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.TEACHER_EVALUATE_CLASS.getCode())) {//任课教师对班级评价
             EvaluateManage manage = evaluateManageMapper.selectById(dto.getEvaluateManageId());
             newObjectList = evaluateObjectMapper.getNewObjectList(dto);
 
@@ -302,6 +306,75 @@ public class EvaluateObjectServiceImpl extends MPJBaseServiceImpl<EvaluateObject
                 objectListVo.setExecuterList(currentExecuterList);
             }
         }
+        else if(dto.getEvaluateType() != null && dto.getEvaluateType().equals(EvaluateTypeEnum.STUDENT_EVALUATE_COURSE_TEACHER.getCode())) {//入参评价类型是学生评价教师
+            EvaluateManage manage = evaluateManageMapper.selectById(dto.getEvaluateManageId());
+            //查询这个年级的所有学生
+            List<EvaluateExecuterVo> newExecuterList = evaluateObjectMapper.getNewExecuterList(dto);
+            Map<String, List<EvaluateExecuterVo>> classExcuterMap = newExecuterList.stream().collect(Collectors.groupingBy(EvaluateExecuterVo::getClassId));
+
+            //查询每个班级的任课教师
+            dto.setStartTime(manage.getStartTime());
+            dto.setEndTime(manage.getEndTime());
+            List<ClassTeachersListVo> classTeachers = evaluateObjectMapper.getClassTeachers(dto);
+            List<ClassTeachersListVo> collect = classTeachers.stream().filter(p -> StrUtil.isNotEmpty(p.getTeacherId())).collect(Collectors.collectingAndThen(
+                    Collectors.toMap(
+                            ClassTeachersListVo::getUniqueKey,
+                            p -> p,
+                            (existing, replacement) -> existing
+                    ),
+                    map -> new ArrayList<>(map.values())
+            ));
+            Map<String, List<ClassTeachersListVo>> classTeacherMap = collect.stream().collect(Collectors.groupingBy(ClassTeachersListVo::getTeacherId));
+
+            List<User> userList = userService.list(
+                    new MPJLambdaWrapper<User>()
+                            .select(User::getId)
+                            .select(User.class, x -> VoToColumnUtil.fieldsToColumns(User.class).contains(x.getProperty()))
+                            .innerJoin(BaseTeacher.class, BaseTeacher::getUserId, User::getId)
+            );
+            Map<Long, String> userMap = userList.stream().collect(Collectors.toMap(User::getId, User::getName));
+
+            for (String teacherId : classTeacherMap.keySet()) {
+                if(!userMap.containsKey(Long.parseLong(teacherId.trim()))){
+                    continue;
+                }
+                if("15331003902918".equals(teacherId)){
+                    System.out.println(teacherId);
+                }
+                EvaluateObjectListVo objectListVo = new EvaluateObjectListVo();
+
+                Set<Long> classIds = classTeacherMap.get(teacherId).stream().map(ClassTeachersListVo::getClassId).collect(Collectors.toSet());
+
+                List<EvaluateExecuterVo> currentExecuterList = new ArrayList<>();
+                for (Long classId : classIds) {
+                    List<EvaluateExecuterVo> studentList = classExcuterMap.get(classId.toString());
+                    if(studentList == null){
+                        continue;
+                    }
+                    if("random15".equals(dto.getExecuterCount()) && !studentList.isEmpty()){
+                        List<Integer> randomList = new ArrayList<>();
+                        Random random = new Random();
+                        while(randomList.size() < 15){
+                            int nextInt = random.nextInt(studentList.size());
+                            if(!randomList.contains(nextInt)){
+                                randomList.add(nextInt);
+                            }
+                        }
+                        for (Integer i : randomList) {
+                            currentExecuterList.add(studentList.get(i));
+                        }
+                    }else{
+                        currentExecuterList.addAll(studentList);
+                    }
+                }
+
+                objectListVo.setObjectId(teacherId.trim());
+                objectListVo.setObjectName(userMap.get(Long.parseLong(teacherId.trim())));
+                objectListVo.setExecuterCount(currentExecuterList.size());
+                objectListVo.setExecuterList(currentExecuterList);
+                newObjectList.add(objectListVo);
+            }
+        }
 
         return newObjectList;
     }

+ 190 - 263
src/main/java/com/xjrsoft/module/evaluate/service/impl/EvaluateResultServiceImpl.java

@@ -1,25 +1,21 @@
 package com.xjrsoft.module.evaluate.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
-import com.alibaba.excel.EasyExcel;
-import com.alibaba.excel.support.ExcelTypeEnum;
-import com.alibaba.excel.write.merge.LoopMergeStrategy;
-import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.enums.DeleteMark;
 import com.xjrsoft.common.enums.EnabledMark;
-import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.exception.MyException;
 import com.xjrsoft.common.mybatis.SqlRunnerAdapter;
 import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.utils.VoToColumnUtil;
 import com.xjrsoft.module.base.entity.BaseClass;
 import com.xjrsoft.module.evaluate.dto.AddEvaluateResultDto;
 import com.xjrsoft.module.evaluate.dto.EvaluateResultDetailPageDetailDto;
 import com.xjrsoft.module.evaluate.dto.EvaluateResultDetailPageDto;
 import com.xjrsoft.module.evaluate.dto.EvaluateResultIndexPageDto;
 import com.xjrsoft.module.evaluate.dto.EvaluateResultSaveDto;
-import com.xjrsoft.module.evaluate.dto.ResultViewingExcelDto;
 import com.xjrsoft.module.evaluate.dto.ResultViewingPageDto;
 import com.xjrsoft.module.evaluate.entity.EvaluateExecuter;
 import com.xjrsoft.module.evaluate.entity.EvaluateManage;
@@ -29,7 +25,6 @@ import com.xjrsoft.module.evaluate.entity.EvaluateResult;
 import com.xjrsoft.module.evaluate.entity.EvaluateSubmitRecord;
 import com.xjrsoft.module.evaluate.mapper.EvaluateExecuterMapper;
 import com.xjrsoft.module.evaluate.mapper.EvaluateManageItemMapper;
-import com.xjrsoft.module.evaluate.mapper.EvaluateManageMapper;
 import com.xjrsoft.module.evaluate.mapper.EvaluateObjectMapper;
 import com.xjrsoft.module.evaluate.mapper.EvaluateResultMapper;
 import com.xjrsoft.module.evaluate.mapper.EvaluateSubmitRecordMapper;
@@ -38,20 +33,32 @@ import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageDetailVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageVo;
 import com.xjrsoft.module.evaluate.vo.EvaluateResultIndexPageVo;
 import com.xjrsoft.module.evaluate.vo.MobileResultPageVo;
-import com.xjrsoft.module.evaluate.vo.ResultViewingExcelVo;
+import com.xjrsoft.module.evaluate.vo.ResultViewingListVo;
 import com.xjrsoft.module.evaluate.vo.ResultViewingPageVo;
 import com.xjrsoft.module.teacher.entity.XjrUser;
 import lombok.AllArgsConstructor;
-import org.springframework.http.ResponseEntity;
+import me.zhyd.oauth.log.Log;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
+import org.apache.poi.ss.usermodel.Font;
+import org.apache.poi.ss.usermodel.Row;
+import org.apache.poi.ss.usermodel.Sheet;
+import org.apache.poi.ss.usermodel.Workbook;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.io.ByteArrayOutputStream;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -68,8 +75,6 @@ public class EvaluateResultServiceImpl extends MPJBaseServiceImpl<EvaluateResult
 
     private EvaluateResultMapper evaluateResultMapper;
 
-    private EvaluateManageMapper evaluateManageMapper;
-
     private EvaluateManageItemMapper evaluateManageItemMapper;
 
     private EvaluateSubmitRecordMapper evaluateSubmitRecordMapper;
@@ -104,7 +109,7 @@ public class EvaluateResultServiceImpl extends MPJBaseServiceImpl<EvaluateResult
     }
 
     @Override
-    public IPage<ResultViewingPageVo> pageResultViewing(ResultViewingPageDto dto) {
+    public List<ResultViewingPageVo> pageResultViewing(ResultViewingPageDto dto) {
         List<ResultViewingPageVo> resultData = new ArrayList<>();
         //获取该评价管理下的被评对象-分页
         MPJLambdaWrapper<EvaluateObject> evaluateObjectMPJLambdaWrapper = new MPJLambdaWrapper<>();
@@ -119,10 +124,10 @@ public class EvaluateResultServiceImpl extends MPJBaseServiceImpl<EvaluateResult
                 .eq((dto.getClassId() != null && dto.getClassId() > 0), BaseClass::getId, dto.getClassId())
                 .like((dto.getName() != null && !("").equals(dto.getName())), XjrUser::getName, dto.getName())
                 .disableSubLogicDel();
-        IPage<ResultViewingPageVo> resultViewingPageVoIPage = evaluateObjectMapper.selectJoinPage(ConventPage.getPage(dto), ResultViewingPageVo.class, evaluateObjectMPJLambdaWrapper);
+        List<ResultViewingPageVo> list = evaluateObjectMapper.selectJoinList(ResultViewingPageVo.class, evaluateObjectMPJLambdaWrapper);
         //被评对象的id集合
         List<Long> evaluateObjectIdList = new ArrayList<>();
-        for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoIPage.getRecords()) {
+        for (ResultViewingPageVo resultViewingPageVo : list) {
             evaluateObjectIdList.add(resultViewingPageVo.getObjectId());
         }
 
@@ -143,146 +148,72 @@ public class EvaluateResultServiceImpl extends MPJBaseServiceImpl<EvaluateResult
         //获取该评价管理下的被评对象的应打分人数,实际打分人数
         MPJLambdaWrapper<EvaluateExecuter> evaluateExecuterMPJLambdaWrapper = new MPJLambdaWrapper<>();
         evaluateExecuterMPJLambdaWrapper
-                .select("count(t.id) as planExecuterNum")
+                .select(EvaluateExecuter::getId)
                 .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
-                .selectSum(EvaluateExecuter::getStatus, ResultViewingPageVo::getActualExecuterNum)//这里值得推敲
+                .select(EvaluateExecuter::getStatus)//这里值得推敲
                 .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateExecuter::getEvaluateObjectId)
                 .eq(EvaluateExecuter::getEvaluateManageId, dto.getEvaluateManageId())
                 .in(!evaluateObjectIdList.isEmpty(), EvaluateObject::getObjectId, evaluateObjectIdList)
-                .groupBy(EvaluateObject::getObjectId)
                 .disableSubLogicDel();
         List<ResultViewingPageVo> planAndActualExecuterNum = evaluateExecuterMapper.selectJoinList(ResultViewingPageVo.class, evaluateExecuterMPJLambdaWrapper);
         //将应打分人数,实际打分人数处理成Map
-        Map<Long, ResultViewingPageVo> planAndActualExecuterNumMap = new HashMap<>();
-        for (ResultViewingPageVo resultViewingPageVo : planAndActualExecuterNum) {
-            planAndActualExecuterNumMap.put(resultViewingPageVo.getObjectId(), resultViewingPageVo);
-        }
+        Map<Long, List<ResultViewingPageVo>> planAndActualExecuterNumMap = planAndActualExecuterNum.stream().filter(x -> x.getStatus() == 2).collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));
+        Map<Long, List<ResultViewingPageVo>> planAndShouldExecuterNumMap = planAndActualExecuterNum.stream().collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));
 
         Map<Long, List<ResultViewingPageVo>> groupedByObjectIdList = new HashMap<>();
         //获取该评价管理下的所有被评对象的所有题的总得分
-        if (evaluateManageItemIdList.size() > 0 && evaluateObjectIdList.size() > 0) {
+        if (!evaluateManageItemIdList.isEmpty()) {
             List<ResultViewingPageVo> listByObjectIdAndEvaluateItemId =  evaluateResultMapper.listByObjectIdAndEvaluateItemId(evaluateObjectIdList, evaluateManageItemIdList);
             //将所有被评对象的所有题的总得分处理成Map
             groupedByObjectIdList = listByObjectIdAndEvaluateItemId.stream()
                     .collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));
 
-            /*MPJLambdaWrapper<EvaluateResult> evaluateResultMPJLambdaWrapper = new MPJLambdaWrapper<>();
-            evaluateResultMPJLambdaWrapper
-                    .selectSum(EvaluateResult::getScore, ResultViewingPageVo::getSumScore)
-                    .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
-                    .selectAs(EvaluateResult::getEvaluateItemId, ResultViewingPageVo::getEvaluateManageItemId)
-                    .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateResult::getEvaluatedObjectId)
-                    .in(EvaluateObject::getObjectId, evaluateObjectIdList)
-                    .in(EvaluateResult::getEvaluateItemId, evaluateManageItemIdList)
-                    .groupBy(EvaluateResult::getEvaluateItemId, EvaluateObject::getEvaluateManageId)
-                    .disableSubLogicDel();
-            ResultViewingPageVo sumScore = evaluateResultMapper.selectJoinOne(ResultViewingPageVo.class, evaluateResultMPJLambdaWrapper);*/
         }
+        List<ResultViewingListVo> resultViewingList = evaluateResultMapper.getResultViewingList(dto.getEvaluateManageId());
         //遍历分页记录
-        for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoIPage.getRecords()) {
+        for (ResultViewingPageVo resultViewingPageVo : list) {
             List<ResultViewingPageVo> resultViewingPageVoList = groupedByObjectIdList.get(resultViewingPageVo.getObjectId());
-            if(resultViewingPageVoList != null && resultViewingPageVoList.size() > 0){
+            Map<Long, List<ResultViewingListVo>> itemMaps = resultViewingList.stream().filter(x -> x.getObjectId().equals(resultViewingPageVo.getObjectId()))
+                    .collect(Collectors.groupingBy(ResultViewingListVo::getEvaluateManageItemId));
+
+            if(resultViewingPageVoList != null && !resultViewingPageVoList.isEmpty()){
                 for (ResultViewingPageVo r : resultViewingPageVoList) {
+                    double v = itemMaps.get(r.getEvaluateManageItemId()).stream().mapToDouble(ResultViewingListVo::getScore).average().orElse(0.0);
                     resultData.add(new ResultViewingPageVo(){{
                         setObjectId(resultViewingPageVo.getObjectId());
                         setObjectIdCN(resultViewingPageVo.getObjectIdCN());
                         setEvaluateManageItemId(r.getEvaluateManageItemId());
                         setProblem(evaluateManageItemMap.get(r.getEvaluateManageItemId()).getProblem());
                         setTopic(evaluateManageItemMap.get(r.getEvaluateManageItemId()).getTopic());
-                        setPlanExecuterNum(planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).getPlanExecuterNum());
-                        int actualExecuterNum = planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).getActualExecuterNum();
+                        setPlanExecuterNum(planAndShouldExecuterNumMap.get(resultViewingPageVo.getObjectId()).size());
+                        int actualExecuterNum = planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).size();
                         setActualExecuterNum(actualExecuterNum);
-                        setSumScore(r.getSumScore()/actualExecuterNum);
+                        setSumScore(BigDecimal.valueOf(v).setScale(2, RoundingMode.HALF_UP).doubleValue() + "");
                     }});
                 }
             }
         }
-        resultViewingPageVoIPage.setRecords(resultData);
-
-        /*for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoIPage.getRecords()) {
-            //获取该评价管理下的单个被评对象的应打分人数,实际打分人数
-            MPJLambdaWrapper<EvaluateExecuter> evaluateExecuterMPJLambdaWrapper = new MPJLambdaWrapper<>();
-            evaluateExecuterMPJLambdaWrapper
-                    .select("count(t.id) as planExecuterNum")
-                    .selectSum(EvaluateExecuter::getStatus, ResultViewingPageVo::getActualExecuterNum)
-                    .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateExecuter::getEvaluateObjectId)
-                    .eq(EvaluateExecuter::getEvaluateManageId, dto.getEvaluateManageId())
-                    .eq(EvaluateObject::getObjectId, resultViewingPageVo.getObjectId())
-                    .disableSubLogicDel();
-            ResultViewingPageVo planAndActualExecuterNum = evaluateExecuterMapper.selectJoinOne(ResultViewingPageVo.class, evaluateExecuterMPJLambdaWrapper);
-
-            for (EvaluateManageItem evaluateManageItem : evaluateManageItemList) {
-                //获取该评价管理下的单个被评对象的每一道题的总得分
-                MPJLambdaWrapper<EvaluateResult> evaluateResultMPJLambdaWrapper = new MPJLambdaWrapper<>();
-                evaluateResultMPJLambdaWrapper
-                        .selectSum(EvaluateResult::getScore, ResultViewingPageVo::getSumScore)
-                        .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateResult::getEvaluatedObjectId)
-                        .eq(EvaluateResult::getEvaluateItemId, evaluateManageItem.getId())
-                        .eq(EvaluateObject::getObjectId, resultViewingPageVo.getObjectId())
-                        .disableSubLogicDel();
-                ResultViewingPageVo sumScore = evaluateResultMapper.selectJoinOne(ResultViewingPageVo.class, evaluateResultMPJLambdaWrapper);
-
-                resultData.add(new ResultViewingPageVo() {{
-                    setObjectId(resultViewingPageVo.getObjectId());
-                    setObjectIdCN(resultViewingPageVo.getObjectIdCN());
-                    setEvaluateManageItemId(evaluateManageItem.getId());
-                    setProblem(evaluateManageItem.getProblem());
-                    setTopic(evaluateManageItem.getTopic());
-                    if (planAndActualExecuterNum != null) {
-                        setPlanExecuterNum(planAndActualExecuterNum.getPlanExecuterNum());
-                        setActualExecuterNum(planAndActualExecuterNum.getActualExecuterNum());
-                    }
-                    if (sumScore != null) {
-                        setSumScore(sumScore.getSumScore());
-                    }
-                }});
+
+        Map<Long, Double> synthesisScoreMap = resultData.stream().collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId, Collectors.summingDouble(ResultViewingPageVo::getScore)));
+
+        Map<String, Double> itemListMaps = new HashMap<>();
+        Map<Long, List<ResultViewingPageVo>> personListMap = resultData.stream().collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));
+        for (Long objectId : personListMap.keySet()) {
+            List<ResultViewingPageVo> itemList = personListMap.get(objectId);
+            Map<String, Double> itemListMap = itemList.stream().collect(Collectors.groupingBy(ResultViewingPageVo::getTopic, Collectors.summingDouble(ResultViewingPageVo::getScore)));
+            for (String topic : itemListMap.keySet()) {
+                itemListMaps.put(objectId + "" + topic, itemListMap.get(topic));
             }
-        }*/
-
-        /*for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoIPage.getRecords()) {
-            //添加应打分人数,实际打分人数,综合评分
-            MPJLambdaWrapper<EvaluateExecuter> evaluateExecuterPlanExecuterNum = new MPJLambdaWrapper<>();
-            evaluateExecuterPlanExecuterNum
-                    .selectSum(EvaluateExecuter::getStatus, ResultViewingPageVo::getActualExecuterNum)
-                    .selectSum(EvaluateResult::getScore, ResultViewingPageVo::getActualExecuterNum)
-                    .leftJoin(EvaluateResult.class, EvaluateResult::getEvaluatedObjectId, EvaluateExecuter::getEvaluateObjectId)
-                    .eq(EvaluateExecuter::getEvaluateManageId, dto.getEvaluateManageId())
-                    .eq(EvaluateExecuter::getEvaluateObjectId, resultViewingPageVo.getEvaluateObjectId());
-
-            List<ResultViewingPageVo> resultViewingPageVoList = evaluateExecuterMapper.selectJoinList(ResultViewingPageVo.class, evaluateExecuterPlanExecuterNum);
-            resultViewingPageVo.setPlanExecuterNum(resultViewingPageVoList.size());
-
-            //查出所有的题目项目
-            MPJLambdaWrapper<EvaluateManageItem> evaluateManageItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
-            evaluateManageItemMPJLambdaWrapper
-                    .selectSum(EvaluateResult::getScore, AllEvaluateManageItemVo::getAllActualScore)
-                    .selectAs(EvaluateManageItem::getProblem, AllEvaluateManageItemVo::getProblem)
-                    .selectAs(EvaluateManageItem::getTopic, AllEvaluateManageItemVo::getTopic)
-                    .leftJoin(EvaluateResult.class, EvaluateResult::getEvaluateItemId, EvaluateManageItem::getId)
-                    .eq(EvaluateManageItem::getEvaluateManageId, dto.getEvaluateManageId())
-                    .eq(EvaluateResult::getEvaluatedObjectId, resultViewingPageVo.getEvaluateObjectId())
-                    .groupBy(EvaluateManageItem::getProblem, EvaluateManageItem::getTopic);
-
-            List<AllEvaluateManageItemVo> allEvaluateManageItemVoList = evaluateManageItemMapper.selectJoinList(AllEvaluateManageItemVo.class, evaluateManageItemMPJLambdaWrapper);
-
-            Map<String, List<AllEvaluateManageItemVo>> groupedAllEvaluateManageItemVo = allEvaluateManageItemVoList.stream()
-                    .collect(Collectors.groupingBy(AllEvaluateManageItemVo::getTopic));
-
-            List<AllEvaluateManageItemByTopicVo> allEvaluateManageItemByTopicVoList = new ArrayList<>();
-            groupedAllEvaluateManageItemVo.forEach((topic, group) -> {
-                allEvaluateManageItemByTopicVoList.add(new AllEvaluateManageItemByTopicVo(){{
-                    setTopic(topic);
-                    setAllEvaluateManageItemVoList(group);
-                    int allTopicScore = 0;
-                    for (AllEvaluateManageItemVo allEvaluateManageItemVo : group) {
-                        allTopicScore += allEvaluateManageItemVo.getAllActualScore();
-                    }
-                    setAllTopicScore(allTopicScore);
-                }});
-            });
-            resultViewingPageVo.setAllEvaluateManageItemByTopicVoList(allEvaluateManageItemByTopicVoList);
-        }*/
-        return resultViewingPageVoIPage;
+        }
+
+        for (ResultViewingPageVo pageVo : resultData) {
+            pageVo.setSynthesisScore(synthesisScoreMap.get(pageVo.getObjectId()) + "");
+
+            Double itemScore = itemListMaps.get(pageVo.getObjectId() + "" + pageVo.getTopic());
+            pageVo.setTopicScore(itemScore + "");
+        }
+
+        return resultData;
     }
 
     @Override
@@ -356,154 +287,150 @@ public class EvaluateResultServiceImpl extends MPJBaseServiceImpl<EvaluateResult
     }
 
     @Override
-    public ResponseEntity<byte[]> getList(ResultViewingExcelDto dto) {
-        List<ResultViewingExcelVo> customerList = new ArrayList<>();
-        //获取该评价管理下的被评对象-分页
-        MPJLambdaWrapper<EvaluateObject> evaluateObjectMPJLambdaWrapper = new MPJLambdaWrapper<>();
-        evaluateObjectMPJLambdaWrapper
-                .distinct()
-                .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
-                .select("ifnull(t1.name, t2.name) as objectIdCN")
-                .leftJoin(XjrUser.class, XjrUser::getId, EvaluateObject::getObjectId)
-                .leftJoin(BaseClass.class, BaseClass::getId, EvaluateObject::getObjectId)
-                .eq(EvaluateObject::getEvaluateManageId, dto.getEvaluateManageId())
-                .disableSubLogicDel();
-        List<ResultViewingPageVo> resultViewingPageVoList = evaluateObjectMapper.selectJoinList(ResultViewingPageVo.class, evaluateObjectMPJLambdaWrapper);
-        //被评对象的id集合
-        List<Long> evaluateObjectIdList = new ArrayList<>();
-        for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoList) {
-            evaluateObjectIdList.add(resultViewingPageVo.getObjectId());
-        }
-
-        //获取该评价管理下的所有题目-多个
-        MPJLambdaWrapper<EvaluateManageItem> evaluateManageItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
-        evaluateManageItemMPJLambdaWrapper
-                .eq(EvaluateManageItem::getEvaluateManageId, dto.getEvaluateManageId());
-        List<EvaluateManageItem> evaluateManageItemList = evaluateManageItemMapper.selectList(evaluateManageItemMPJLambdaWrapper);
-        //题目的id集合
-        //将题目处理成Map
-        List<Long> evaluateManageItemIdList = new ArrayList<>();
-        Map<Long, EvaluateManageItem> evaluateManageItemMap = new HashMap<>();
-        for (EvaluateManageItem evaluateManageItem : evaluateManageItemList) {
-            evaluateManageItemIdList.add(evaluateManageItem.getId());
-            evaluateManageItemMap.put(evaluateManageItem.getId(), evaluateManageItem);
-        }
-        //题目的总数
-        int evaluateManageItemNum = evaluateManageItemList.size();
+    public byte[] getList(ResultViewingPageDto dto) {
+        try {
+            List<ResultViewingPageVo> list = this.pageResultViewing(dto);
+            //查询有多少个题目
+            MPJLambdaWrapper<EvaluateManageItem> evaluateManageItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
+            evaluateManageItemMPJLambdaWrapper
+                    .select(EvaluateManageItem::getId)
+                    .select(EvaluateManageItem.class, x -> VoToColumnUtil.fieldsToColumns(EvaluateManageItem.class).contains(x.getProperty()))
+                    .eq(EvaluateManageItem::getEvaluateManageId, dto.getEvaluateManageId());
+            List<EvaluateManageItem> itemList = evaluateManageItemMapper.selectList(evaluateManageItemMPJLambdaWrapper);
+            //大题个数
+            Map<String, List<EvaluateManageItem>> topicMap = itemList.stream().collect(Collectors.groupingBy(EvaluateManageItem::getTopic));
+
+//        int startRow = 1;
+//        List<Map<Integer, Integer>> mergeList = new ArrayList<>();
+            Set<Long> objectList = list.stream().map(ResultViewingPageVo::getObjectId).collect(Collectors.toSet());
+            Map<Long, Integer> sortCodeMap = new HashMap<>();
+
+            int sortCode = 1;
+            for (Long objectId : objectList) {
+                sortCodeMap.put(objectId, sortCode);
+                sortCode ++;
+            }
 
-        //获取该评价管理下的被评对象的应打分人数,实际打分人数
-        MPJLambdaWrapper<EvaluateExecuter> evaluateExecuterMPJLambdaWrapper = new MPJLambdaWrapper<>();
-        evaluateExecuterMPJLambdaWrapper
-                .select("count(t.id) as planExecuterNum")
-                .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
-                .selectSum(EvaluateExecuter::getStatus, ResultViewingPageVo::getActualExecuterNum)//这里值得推敲
-                .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateExecuter::getEvaluateObjectId)
-                .eq(EvaluateExecuter::getEvaluateManageId, dto.getEvaluateManageId())
-                .in(EvaluateObject::getObjectId, evaluateObjectIdList)
-                .groupBy(EvaluateObject::getObjectId)
-                .disableSubLogicDel();
-        List<ResultViewingPageVo> planAndActualExecuterNum = evaluateExecuterMapper.selectJoinList(ResultViewingPageVo.class, evaluateExecuterMPJLambdaWrapper);
-        //将应打分人数,实际打分人数处理成Map
-        Map<Long, ResultViewingPageVo> planAndActualExecuterNumMap = new HashMap<>();
-        for (ResultViewingPageVo resultViewingPageVo : planAndActualExecuterNum) {
-            planAndActualExecuterNumMap.put(resultViewingPageVo.getObjectId(), resultViewingPageVo);
-        }
+            Workbook workbook = new XSSFWorkbook();
+            Sheet sheet = workbook.createSheet("数据");
+
+            Font font = workbook.createFont();
+            font.setFontName("宋体");
+            font.setFontHeightInPoints((short)12);
+
+            CellStyle contentCellStyle = workbook.createCellStyle();
+            contentCellStyle.setFont(font);
+            contentCellStyle.setWrapText(true);
+            contentCellStyle.setBorderTop(BorderStyle.THIN);
+            contentCellStyle.setBorderBottom(BorderStyle.THIN);
+            contentCellStyle.setBorderLeft(BorderStyle.THIN);
+            contentCellStyle.setBorderRight(BorderStyle.THIN);
+
+            Row headerRow = sheet.createRow(0);
+            String[] headers = {"序号", "被评人", "应打分人数", "实际打分人数", "题目", "得分", "标题", "得分", "综合得分"};
+            for (int i = 0; i < headers.length; i++) {
+                Cell cell = headerRow.createCell(i);
+                cell.setCellValue(headers[i]);
+                cell.setCellStyle(contentCellStyle);
+            }
+            // 填充数据并记录合并的行
+            int rowCount = 1;
+            Map<Long, Integer> classStartRows = new HashMap<>();
+            Map<Long, Integer> classEndRows = new HashMap<>();
+
+            Map<String, Integer> itemStartRows = new HashMap<>();
+            Map<String, Integer> itemEndRows = new HashMap<>();
+
+            for (ResultViewingPageVo el : list) {
+                Row row = sheet.createRow(rowCount ++);
+                Cell cell = row.createCell(0);
+                cell.setCellValue(sortCodeMap.get(el.getObjectId()));
+                cell.setCellStyle(contentCellStyle);
+
+                cell = row.createCell(1);
+                cell.setCellValue(el.getObjectIdCN());
+                cell.setCellStyle(contentCellStyle);
+
+                cell = row.createCell(2);
+                cell.setCellValue(el.getPlanExecuterNum());
+                cell.setCellStyle(contentCellStyle);
+
+                cell = row.createCell(3);
+                cell.setCellValue(el.getActualExecuterNum());
+                cell.setCellStyle(contentCellStyle);
+
+                cell = row.createCell(4);
+                cell.setCellValue(el.getProblem());
+                cell.setCellStyle(contentCellStyle);
+
+                cell = row.createCell(5);
+                cell.setCellValue(el.getSumScore());
+                cell.setCellStyle(contentCellStyle);
+
+                cell = row.createCell(6);
+                cell.setCellValue(el.getTopic());
+                cell.setCellStyle(contentCellStyle);
+
+                cell = row.createCell(7);
+                cell.setCellValue(el.getTopicScore());
+                cell.setCellStyle(contentCellStyle);
+
+                cell = row.createCell(8);
+                cell.setCellValue(el.getSynthesisScore());
+                cell.setCellStyle(contentCellStyle);
+
+                Long objectId = el.getObjectId();
+                if (!classStartRows.containsKey(objectId)) {
+                    classStartRows.put(objectId, rowCount - 1);
+                }
+                classEndRows.put(objectId, rowCount - 1);
 
-        Map<Long, List<ResultViewingPageVo>> sumScoreMap = new HashMap<>();
-        Map<Long, List<ResultViewingPageVo>> topicScoreMap = new HashMap<>();
-        Map<Long, Integer> synthesisScoreMap = new HashMap<>();
-        if (evaluateManageItemIdList.size() > 0 && evaluateObjectIdList.size() > 0) {
-            //获取该评价管理下的所有被评对象的所有题的总得分
-            List<ResultViewingPageVo> listByObjectIdAndEvaluateItemId = evaluateResultMapper.listByObjectIdAndEvaluateItemId(evaluateObjectIdList, evaluateManageItemIdList);
-            //将所有被评对象的所有题的总得分处理成Map
-            sumScoreMap = listByObjectIdAndEvaluateItemId.stream()
-                    .collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));
+                String itemInfo = el.getObjectId() + el.getTopic();
+                if (!itemStartRows.containsKey(itemInfo)) {
+                    itemStartRows.put(itemInfo, rowCount - 1);
+                }
+                itemEndRows.put(itemInfo, rowCount - 1);
+            }
 
-            /*//获取该评价管理下的所有被评对象的标题的总得分
-            List<ResultViewingPageVo> listTopicScoreByObjectIdAndTopic = evaluateResultMapper.listTopicScoreByObjectIdAndTopic(evaluateObjectIdList, evaluateManageItemIdList);
-            //将所有被评对象的标题的总得分处理成Map
-            topicScoreMap = listTopicScoreByObjectIdAndTopic.stream()
-                    .collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));*/
-
-            //获取该评价管理下的所有被评对象的总得分
-            List<ResultViewingPageVo> listSynthesisScore = evaluateResultMapper.listSynthesisScore(evaluateObjectIdList, evaluateManageItemIdList);
-            //将所有被评对象的总得分处理成Map
-            for (ResultViewingPageVo r : listSynthesisScore) {
-                synthesisScoreMap.put(r.getObjectId(), r.getSynthesisScore());
+            // 合并相同的人
+            for (Map.Entry<Long, Integer> entry : classStartRows.entrySet()) {
+                Long className = entry.getKey();
+                int startRow = entry.getValue();
+                int endRow = classEndRows.get(className);
+                if (startRow != endRow) {
+                    sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 0, 0));
+                    sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 1, 1));
+                    sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 2, 2));
+                    sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 3, 3));
+                    sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 8, 8));
+                }
             }
 
-            /*MPJLambdaWrapper<EvaluateResult> evaluateResultMPJLambdaWrapper = new MPJLambdaWrapper<>();
-            evaluateResultMPJLambdaWrapper
-                    .selectSum(EvaluateResult::getScore, ResultViewingPageVo::getSumScore)
-                    .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
-                    .selectAs(EvaluateResult::getEvaluateItemId, ResultViewingPageVo::getEvaluateManageItemId)
-                    .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateResult::getEvaluatedObjectId)
-                    .in(EvaluateObject::getObjectId, evaluateObjectIdList)
-                    .in(EvaluateResult::getEvaluateItemId, evaluateManageItemIdList)
-                    .groupBy(EvaluateResult::getEvaluateItemId, EvaluateObject::getEvaluateManageId)
-                    .disableSubLogicDel();
-            ResultViewingPageVo sumScore = evaluateResultMapper.selectJoinOne(ResultViewingPageVo.class, evaluateResultMPJLambdaWrapper);*/
-        }
-        //遍历分页记录
-        for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoList) {
-            List<ResultViewingPageVo> sumScoreList = sumScoreMap.get(resultViewingPageVo.getObjectId());
-            if(sumScoreList != null && sumScoreList.size() > 0){
-                for (ResultViewingPageVo r : sumScoreList) {
-                    customerList.add(new ResultViewingExcelVo(){{
-                        setObjectId(resultViewingPageVo.getObjectId());
-                        setObjectIdCN(resultViewingPageVo.getObjectIdCN());
-                        setEvaluateManageItemId(r.getEvaluateManageItemId());
-                        setProblem(evaluateManageItemMap.get(r.getEvaluateManageItemId()).getProblem());
-                        setTopic(evaluateManageItemMap.get(r.getEvaluateManageItemId()).getTopic());
-                        setPlanExecuterNum(planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).getPlanExecuterNum());
-                        int actualExecuterNum = planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).getActualExecuterNum();
-                        setActualExecuterNum(actualExecuterNum);
-                        setSumScore(r.getSumScore()/actualExecuterNum);
-                        setSynthesisScore(synthesisScoreMap.get(resultViewingPageVo.getObjectId())/actualExecuterNum);
-                    }});
+            // 合并相同的题目
+            for (Map.Entry<String, Integer> entry : itemStartRows.entrySet()) {
+                String itemInfo = entry.getKey();
+                int startRow = entry.getValue();
+                int endRow = itemEndRows.get(itemInfo);
+                if (startRow != endRow) {
+                    sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 6, 6));
+                    sheet.addMergedRegion(new CellRangeAddress(startRow, endRow, 7, 7));
                 }
             }
-        }
-//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
-//        for (TextbookIssueRecordPageVo textbookIssueRecordPageVo : customerList) {
-//            if(textbookIssueRecordPageVo.getCreateDate() == null){
-//                continue;
-//            }
-//            textbookIssueRecordPageVo.setCreateDateStr(sdf.format(textbookIssueRecordPageVo.getCreateDate()));
-//            dataList.add(BeanUtil.toBean(textbookIssueRecordPageVo, TextbookIssueRecordExcelVo.class));
-//        }
 
+            // 自动调整列宽
+            for (int i = 0; i < headers.length; i++) {
+                sheet.autoSizeColumn(i);
+            }
+
+            ByteArrayOutputStream bot = new ByteArrayOutputStream();
+            workbook.write(bot);
+            // 关闭工作簿
+            workbook.close();
 
-        //返回流
-        ByteArrayOutputStream bot = new ByteArrayOutputStream();
-
-        // 设置排除的属性 也可以在数据模型的字段上加@ExcelIgnore注解排除
-        /*Set<String> excludeField = new HashSet<>();
-        excludeField.add("hireDate");
-        excludeField.add("salary");
-        // 写Excel
-        EasyExcel.write(filename, User.class)
-            .excludeColumnFiledNames(excludeField)
-            .sheet("用户信息")
-            .doWrite(getUserData());*/
-
-        // 方法2 自定义合并单元格策略
-        String fileName = "ResultViewing" + ExcelTypeEnum.XLSX.getValue();
-        // 每隔2行会合并 把eachColumn 设置成 3 也就是我们数据的长度,所以就第一列会合并。当然其他合并策略也可以自己写
-        LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(evaluateManageItemNum, 0);
-        LoopMergeStrategy loopMergeStrategy1 = new LoopMergeStrategy(evaluateManageItemNum, 1);
-        LoopMergeStrategy loopMergeStrategy2 = new LoopMergeStrategy(evaluateManageItemNum, 2);
-        LoopMergeStrategy loopMergeStrategy3 = new LoopMergeStrategy(evaluateManageItemNum, 5);
-
-        EasyExcel.write(bot, ResultViewingExcelVo.class)
-                .automaticMergeHead(false)
-                .excelType(ExcelTypeEnum.XLSX)
-                .registerWriteHandler(loopMergeStrategy)
-                .registerWriteHandler(loopMergeStrategy1)
-                .registerWriteHandler(loopMergeStrategy2)
-                .registerWriteHandler(loopMergeStrategy3)
-                .sheet()
-                .doWrite(customerList);
-        return RT.fileStream(bot.toByteArray(), fileName);
+            return bot.toByteArray();
+        }catch (Exception e){
+            Log.error(e.getMessage(), e);
+            throw new MyException("导出报错,请联系管理员");
+        }
     }
 }

+ 24 - 0
src/main/java/com/xjrsoft/module/evaluate/vo/ClassTeachersListVo.java

@@ -0,0 +1,24 @@
+package com.xjrsoft.module.evaluate.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 被评价对象表单出参
+* @Author dzx
+* @Date: 2024-01-16
+* @Version 1.0
+*/
+@Data
+public class ClassTeachersListVo {
+
+    @ApiModelProperty("班级id")
+    private Long classId;
+
+    @ApiModelProperty("教师userid")
+    private String teacherId;
+
+    public String getUniqueKey() {
+        return classId + "-" + teacherId;
+    }
+}

+ 3 - 0
src/main/java/com/xjrsoft/module/evaluate/vo/EvaluateResultIndexPageVo.java

@@ -51,4 +51,7 @@ public class EvaluateResultIndexPageVo {
     @ApiModelProperty("结束时间")
     private Date endTime;
 
+    @ApiModelProperty("状态(-1:未发布,1:进行中,0,暂停)")
+    private Integer status;
+
 }

+ 42 - 0
src/main/java/com/xjrsoft/module/evaluate/vo/ResultViewingListVo.java

@@ -0,0 +1,42 @@
+package com.xjrsoft.module.evaluate.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+* @title: 评价项表单出参
+* @Author dzx
+* @Date: 2024年11月6日
+* @Version 1.0
+*/
+@Data
+public class ResultViewingListVo {
+
+    /**
+    * 具体被评的那个对象的id
+    */
+    @ApiModelProperty("答题结果id")
+    private Long id;
+    /**
+     * 具体被评的那个对象的id
+     */
+    @ApiModelProperty("具体被评的那个对象的id")
+    private Long objectId;
+
+    /**
+     * 题目项的id
+     */
+    @ApiModelProperty("题目项的id")
+    private Long evaluateManageItemId;
+    /**
+     * 题目名称
+     */
+    @ApiModelProperty("答题人")
+    private Long userId;
+    /**
+     * 单个被评对象的每一道题的平均得分
+     */
+    @ApiModelProperty("分数")
+    private Integer score;
+
+}

+ 10 - 3
src/main/java/com/xjrsoft/module/evaluate/vo/ResultViewingPageVo.java

@@ -46,7 +46,7 @@ public class ResultViewingPageVo {
      * 单个被评对象的每一道题的平均得分
      */
     @ApiModelProperty("单个被评对象的每一道题的平均得分")
-    private Integer sumScore;
+    private String sumScore;
     /**
      * 标题名称
      */
@@ -56,11 +56,18 @@ public class ResultViewingPageVo {
      * 单个被评对象的每一道题的平均得分
      */
     @ApiModelProperty("单个被评对象的每个标题的平均得分")
-    private Integer topicScore;
+    private String topicScore;
     /**
      * 单个被评对象的每一道题的平均得分
      */
     @ApiModelProperty("单个被评对象的综合平均得分")
-    private Integer synthesisScore;
+    private String synthesisScore;
+
+    @ApiModelProperty("状态(2:已评分,0:未评分)")
+    private Integer status;
+
+    public double getScore() {
+        return Double.parseDouble(sumScore);
+    }
 
 }

+ 1 - 2
src/main/java/com/xjrsoft/module/personnel/controller/BasePersonnelLabourCapitalController.java

@@ -114,7 +114,7 @@ public class BasePersonnelLabourCapitalController {
     public RT<Boolean> add(@Valid @RequestBody AddBasePersonnelLabourCapitalDto dto){
         BasePersonnelLabourCapital basePersonnelLabourCapital = BeanUtil.toBean(dto, BasePersonnelLabourCapital.class);
         boolean isSuccess = basePersonnelLabourCapitalService.add(basePersonnelLabourCapital);
-    return RT.ok(isSuccess);
+        return RT.ok(isSuccess);
     }
 
     @PutMapping
@@ -132,7 +132,6 @@ public class BasePersonnelLabourCapitalController {
     @SaCheckPermission("basepersonnellabourcapital:delete")
     public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
         return RT.ok(basePersonnelLabourCapitalService.delete(ids));
-
     }
     @PostMapping("/import")
     @ApiOperation(value = "导入")

+ 1 - 0
src/main/resources/mapper/evaluate/EvaluateManageMapper.xml

@@ -96,6 +96,7 @@
             left join xjr_dictionary_detail t8 on t8.code = t7.evaluate_type
         where t2.user_id = #{dto.loginUserId}
             and t.evaluate_manage_id = #{dto.evaluateManageId}
+            AND t3.object_id IS NOT NULL
             <if test="dto.status != null">
                 and t.status = #{dto.status}
             </if>

+ 22 - 0
src/main/resources/mapper/evaluate/EvaluateObjectMapper.xml

@@ -68,6 +68,7 @@
             SELECT t2.id as executer_id,t2.name as executer_name,t1.class_id,t1.grade_id FROM base_student_school_roll t1
             LEFT JOIN xjr_user t2 ON t1.user_id = t2.id
             WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
+            and t1.archives_status = 'FB2901'
             <if test="dto.gradeId != null">
                 and t1.grade_id = #{dto.gradeId}
             </if>
@@ -107,6 +108,15 @@
             AND t2.schedule_date BETWEEN #{dto.startDate} AND #{dto.endDate}
             AND (t2.adjust_type = 'course_exchange' OR t2.adjust_type = 'course_replace' OR t2.adjust_type IS NULL)
         </if>
+        <if test="dto.evaluateType != null and dto.evaluateType.equals('stu_evaluate_tea')">
+            SELECT t2.id as executer_id,t2.name as executer_name,t1.class_id,t1.grade_id FROM base_student_school_roll t1
+            LEFT JOIN xjr_user t2 ON t1.user_id = t2.id
+            WHERE t1.delete_mark = 0 AND t2.delete_mark = 0
+            and t1.archives_status = 'FB2901'
+            <if test="dto.gradeId != null">
+                and t1.grade_id = #{dto.gradeId}
+            </if>
+        </if>
     </select>
 
     <delete id="objectGradeDeleteExecuter" parameterType="com.xjrsoft.module.evaluate.dto.ObjectGradeDeleteDto">
@@ -119,4 +129,16 @@
         delete from evaluate_object t
         where t.base_grade_id = #{dto.gradeId} and t.evaluate_manage_id = #{dto.evaluateManageId};
     </delete>
+
+    <select id="getClassTeachers" parameterType="com.xjrsoft.module.evaluate.dto.EvaluateObjectListDto" resultType="com.xjrsoft.module.evaluate.vo.ClassTeachersListVo">
+        SELECT DISTINCT t1.class_id, SUBSTRING_INDEX(t1.teacher_id,',',1) AS teacher_id FROM course_table t1
+        inner join base_class t2 on t1.class_id = t2.id
+        WHERE t1.schedule_date BETWEEN DATE_FORMAT(#{dto.startTime}, '%Y-%m-%d') AND DATE_FORMAT(#{dto.endTime}, '%Y-%m-%d')
+        AND t1.teacher_id != '0' and t2.grade_id = #{dto.gradeId}
+        UNION ALL
+        SELECT DISTINCT t1.class_id, SUBSTRING_INDEX(t1.teacher_id,',',-1) AS teacher_id FROM course_table t1
+        inner join base_class t2 on t1.class_id = t2.id
+        WHERE t1.schedule_date BETWEEN DATE_FORMAT(#{dto.startTime}, '%Y-%m-%d') AND DATE_FORMAT(#{dto.endTime}, '%Y-%m-%d')
+        AND t1.teacher_id != '0' and t2.grade_id = #{dto.gradeId}
+    </select>
 </mapper>

+ 9 - 1
src/main/resources/mapper/evaluate/EvaluateResultMapper.xml

@@ -11,7 +11,8 @@
         t4.name AS evaluateTypeCN,
         t.name,
         t.start_time,
-        t.end_time
+        t.end_time,
+        t.status
         FROM evaluate_manage t
         LEFT JOIN base_semester t1 ON (t1.id = t.base_semester_id)
         LEFT JOIN xjr_department t2 ON (t2.id = t.org_id)
@@ -201,4 +202,11 @@
         AND t3.month = #{dto.month}
         AND t4.evaluate_type = #{dto.evaluateType}
     </select>
+
+    <select id="getResultViewingList" resultType="com.xjrsoft.module.evaluate.vo.ResultViewingListVo">
+        SELECT t1.id,t2.object_id,t3.id as evaluate_manage_item_id,t1.score,t1.user_id FROM evaluate_result t1
+        INNER JOIN evaluate_object t2 ON t1.evaluated_object_id = t2.id
+        INNER JOIN evaluate_manage_item t3 ON t3.id = t1.evaluate_item_id
+        WHERE t3.evaluate_manage_id = #{evaluateManageId}
+    </select>
 </mapper>

+ 8 - 0
src/test/java/com/xjrsoft/module/job/JianyuekbScheduleTaskTest2.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.job;
 
+import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.StrUtil;
@@ -60,6 +61,7 @@ import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -124,6 +126,12 @@ class JianyuekbScheduleTaskTest2 {
     @Autowired
     private IWorkflowExtraService workflowExtraService;
 
+    @Test
+    void test2(){
+        WfCourseAdjust courseAdjust = adjustService.getById(1851529228440875008L);
+        courseTableService.adjustCourse(courseAdjust);
+    }
+
     @Test
     public void execute(){
         doExecute();