|
@@ -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("导出报错,请联系管理员");
|
|
|
+ }
|
|
|
}
|
|
|
}
|