EvaluateResultServiceImpl.java 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504
  1. package com.xjrsoft.module.evaluate.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.alibaba.excel.EasyExcel;
  4. import com.alibaba.excel.support.ExcelTypeEnum;
  5. import com.alibaba.excel.write.merge.LoopMergeStrategy;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.github.yulichang.base.MPJBaseServiceImpl;
  8. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  9. import com.xjrsoft.common.enums.DeleteMark;
  10. import com.xjrsoft.common.enums.EnabledMark;
  11. import com.xjrsoft.common.model.result.RT;
  12. import com.xjrsoft.common.page.ConventPage;
  13. import com.xjrsoft.module.base.entity.BaseClass;
  14. import com.xjrsoft.module.evaluate.dto.AddEvaluateResultDto;
  15. import com.xjrsoft.module.evaluate.dto.EvaluateResultDetailPageDetailDto;
  16. import com.xjrsoft.module.evaluate.dto.EvaluateResultDetailPageDto;
  17. import com.xjrsoft.module.evaluate.dto.EvaluateResultIndexPageDto;
  18. import com.xjrsoft.module.evaluate.dto.EvaluateResultSaveDto;
  19. import com.xjrsoft.module.evaluate.dto.ResultViewingExcelDto;
  20. import com.xjrsoft.module.evaluate.dto.ResultViewingPageDto;
  21. import com.xjrsoft.module.evaluate.entity.EvaluateExecuter;
  22. import com.xjrsoft.module.evaluate.entity.EvaluateManage;
  23. import com.xjrsoft.module.evaluate.entity.EvaluateManageItem;
  24. import com.xjrsoft.module.evaluate.entity.EvaluateObject;
  25. import com.xjrsoft.module.evaluate.entity.EvaluateResult;
  26. import com.xjrsoft.module.evaluate.entity.EvaluateSubmitRecord;
  27. import com.xjrsoft.module.evaluate.mapper.EvaluateExecuterMapper;
  28. import com.xjrsoft.module.evaluate.mapper.EvaluateManageItemMapper;
  29. import com.xjrsoft.module.evaluate.mapper.EvaluateManageMapper;
  30. import com.xjrsoft.module.evaluate.mapper.EvaluateObjectMapper;
  31. import com.xjrsoft.module.evaluate.mapper.EvaluateResultMapper;
  32. import com.xjrsoft.module.evaluate.mapper.EvaluateSubmitRecordMapper;
  33. import com.xjrsoft.module.evaluate.service.IEvaluateResultService;
  34. import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageDetailVo;
  35. import com.xjrsoft.module.evaluate.vo.EvaluateResultDetailPageVo;
  36. import com.xjrsoft.module.evaluate.vo.EvaluateResultIndexPageVo;
  37. import com.xjrsoft.module.evaluate.vo.MobileResultPageVo;
  38. import com.xjrsoft.module.evaluate.vo.ResultViewingExcelVo;
  39. import com.xjrsoft.module.evaluate.vo.ResultViewingPageVo;
  40. import com.xjrsoft.module.teacher.entity.XjrUser;
  41. import lombok.AllArgsConstructor;
  42. import org.springframework.http.ResponseEntity;
  43. import org.springframework.stereotype.Service;
  44. import org.springframework.transaction.annotation.Transactional;
  45. import java.io.ByteArrayOutputStream;
  46. import java.util.ArrayList;
  47. import java.util.Date;
  48. import java.util.HashMap;
  49. import java.util.List;
  50. import java.util.Map;
  51. import java.util.stream.Collectors;
  52. /**
  53. * @title: 评价结果
  54. * @Author szs
  55. * @Date: 2024-01-16
  56. * @Version 1.0
  57. */
  58. @Service
  59. @AllArgsConstructor
  60. public class EvaluateResultServiceImpl extends MPJBaseServiceImpl<EvaluateResultMapper, EvaluateResult> implements IEvaluateResultService {
  61. private EvaluateObjectMapper evaluateObjectMapper;
  62. private EvaluateResultMapper evaluateResultMapper;
  63. private EvaluateManageMapper evaluateManageMapper;
  64. private EvaluateManageItemMapper evaluateManageItemMapper;
  65. private EvaluateSubmitRecordMapper evaluateSubmitRecordMapper;
  66. private EvaluateExecuterMapper evaluateExecuterMapper;
  67. @Override
  68. public IPage<EvaluateResultIndexPageVo> getIndexPage(EvaluateResultIndexPageDto dto) {
  69. IPage<EvaluateResultIndexPageVo> page = evaluateResultMapper.getIndexPage(ConventPage.getPage(dto), dto);
  70. return page;
  71. }
  72. @Override
  73. public IPage<EvaluateResultDetailPageVo> getDetailPage(EvaluateResultDetailPageDto dto) {
  74. //获取当前评价管理下的所有记录的page
  75. IPage<EvaluateResultDetailPageVo> page = evaluateResultMapper.getDetailPage(ConventPage.getPage(dto), dto);
  76. return page;
  77. }
  78. @Override
  79. public EvaluateResultDetailPageDetailVo getDetailPageDetail(EvaluateResultDetailPageDetailDto dto) {
  80. //根据评价管理主键编号,被评对象id,执行人id获取总得分,被评对象名字,执行人名字,评价管理名字,题目满分
  81. EvaluateResultDetailPageDetailVo evaluateResultDetailPageDetailVo = evaluateResultMapper.getDetailPageDetail(dto);
  82. if (evaluateResultDetailPageDetailVo == null) {
  83. return evaluateResultDetailPageDetailVo;
  84. }
  85. //获取list
  86. evaluateResultDetailPageDetailVo.setEvaluateResultDetailPageDetailList(evaluateResultMapper.getDetailPageDetailList(dto));
  87. return evaluateResultDetailPageDetailVo;
  88. }
  89. @Override
  90. public IPage<ResultViewingPageVo> pageResultViewing(ResultViewingPageDto dto) {
  91. List<ResultViewingPageVo> resultData = new ArrayList<>();
  92. //获取该评价管理下的被评对象-分页
  93. MPJLambdaWrapper<EvaluateObject> evaluateObjectMPJLambdaWrapper = new MPJLambdaWrapper<>();
  94. evaluateObjectMPJLambdaWrapper
  95. .distinct()
  96. .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
  97. .select("ifnull(t1.name, t2.name) as objectIdCN")
  98. .leftJoin(XjrUser.class, XjrUser::getId, EvaluateObject::getObjectId)
  99. .leftJoin(BaseClass.class, BaseClass::getId, EvaluateObject::getObjectId)
  100. .eq(EvaluateObject::getEvaluateManageId, dto.getEvaluateManageId())
  101. .eq((dto.getBaseGradeId() != null && dto.getBaseGradeId() > 0), BaseClass::getGradeId, dto.getBaseGradeId())
  102. .eq((dto.getClassId() != null && dto.getClassId() > 0), BaseClass::getId, dto.getClassId())
  103. .like((dto.getName() != null && !("").equals(dto.getName())), XjrUser::getName, dto.getName())
  104. .disableSubLogicDel();
  105. IPage<ResultViewingPageVo> resultViewingPageVoIPage = evaluateObjectMapper.selectJoinPage(ConventPage.getPage(dto), ResultViewingPageVo.class, evaluateObjectMPJLambdaWrapper);
  106. //被评对象的id集合
  107. List<Long> evaluateObjectIdList = new ArrayList<>();
  108. for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoIPage.getRecords()) {
  109. evaluateObjectIdList.add(resultViewingPageVo.getObjectId());
  110. }
  111. //获取该评价管理下的所有题目-多个
  112. MPJLambdaWrapper<EvaluateManageItem> evaluateManageItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
  113. evaluateManageItemMPJLambdaWrapper
  114. .eq(EvaluateManageItem::getEvaluateManageId, dto.getEvaluateManageId());
  115. List<EvaluateManageItem> evaluateManageItemList = evaluateManageItemMapper.selectList(evaluateManageItemMPJLambdaWrapper);
  116. //题目的id集合
  117. //将题目处理成Map
  118. List<Long> evaluateManageItemIdList = new ArrayList<>();
  119. Map<Long, EvaluateManageItem> evaluateManageItemMap = new HashMap<>();
  120. for (EvaluateManageItem evaluateManageItem : evaluateManageItemList) {
  121. evaluateManageItemIdList.add(evaluateManageItem.getId());
  122. evaluateManageItemMap.put(evaluateManageItem.getId(), evaluateManageItem);
  123. }
  124. //获取该评价管理下的被评对象的应打分人数,实际打分人数
  125. MPJLambdaWrapper<EvaluateExecuter> evaluateExecuterMPJLambdaWrapper = new MPJLambdaWrapper<>();
  126. evaluateExecuterMPJLambdaWrapper
  127. .select("count(t.id) as planExecuterNum")
  128. .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
  129. .selectSum(EvaluateExecuter::getStatus, ResultViewingPageVo::getActualExecuterNum)//这里值得推敲
  130. .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateExecuter::getEvaluateObjectId)
  131. .eq(EvaluateExecuter::getEvaluateManageId, dto.getEvaluateManageId())
  132. .in(!evaluateObjectIdList.isEmpty(), EvaluateObject::getObjectId, evaluateObjectIdList)
  133. .groupBy(EvaluateObject::getObjectId)
  134. .disableSubLogicDel();
  135. List<ResultViewingPageVo> planAndActualExecuterNum = evaluateExecuterMapper.selectJoinList(ResultViewingPageVo.class, evaluateExecuterMPJLambdaWrapper);
  136. //将应打分人数,实际打分人数处理成Map
  137. Map<Long, ResultViewingPageVo> planAndActualExecuterNumMap = new HashMap<>();
  138. for (ResultViewingPageVo resultViewingPageVo : planAndActualExecuterNum) {
  139. planAndActualExecuterNumMap.put(resultViewingPageVo.getObjectId(), resultViewingPageVo);
  140. }
  141. Map<Long, List<ResultViewingPageVo>> groupedByObjectIdList = new HashMap<>();
  142. //获取该评价管理下的所有被评对象的所有题的总得分
  143. if (evaluateManageItemIdList.size() > 0 && evaluateObjectIdList.size() > 0) {
  144. List<ResultViewingPageVo> listByObjectIdAndEvaluateItemId = evaluateResultMapper.listByObjectIdAndEvaluateItemId(evaluateObjectIdList, evaluateManageItemIdList);
  145. //将所有被评对象的所有题的总得分处理成Map
  146. groupedByObjectIdList = listByObjectIdAndEvaluateItemId.stream()
  147. .collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));
  148. /*MPJLambdaWrapper<EvaluateResult> evaluateResultMPJLambdaWrapper = new MPJLambdaWrapper<>();
  149. evaluateResultMPJLambdaWrapper
  150. .selectSum(EvaluateResult::getScore, ResultViewingPageVo::getSumScore)
  151. .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
  152. .selectAs(EvaluateResult::getEvaluateItemId, ResultViewingPageVo::getEvaluateManageItemId)
  153. .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateResult::getEvaluatedObjectId)
  154. .in(EvaluateObject::getObjectId, evaluateObjectIdList)
  155. .in(EvaluateResult::getEvaluateItemId, evaluateManageItemIdList)
  156. .groupBy(EvaluateResult::getEvaluateItemId, EvaluateObject::getEvaluateManageId)
  157. .disableSubLogicDel();
  158. ResultViewingPageVo sumScore = evaluateResultMapper.selectJoinOne(ResultViewingPageVo.class, evaluateResultMPJLambdaWrapper);*/
  159. }
  160. //遍历分页记录
  161. for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoIPage.getRecords()) {
  162. List<ResultViewingPageVo> resultViewingPageVoList = groupedByObjectIdList.get(resultViewingPageVo.getObjectId());
  163. if(resultViewingPageVoList != null && resultViewingPageVoList.size() > 0){
  164. for (ResultViewingPageVo r : resultViewingPageVoList) {
  165. resultData.add(new ResultViewingPageVo(){{
  166. setObjectId(resultViewingPageVo.getObjectId());
  167. setObjectIdCN(resultViewingPageVo.getObjectIdCN());
  168. setEvaluateManageItemId(r.getEvaluateManageItemId());
  169. setProblem(evaluateManageItemMap.get(r.getEvaluateManageItemId()).getProblem());
  170. setTopic(evaluateManageItemMap.get(r.getEvaluateManageItemId()).getTopic());
  171. setPlanExecuterNum(planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).getPlanExecuterNum());
  172. int actualExecuterNum = planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).getActualExecuterNum();
  173. setActualExecuterNum(actualExecuterNum);
  174. setSumScore(r.getSumScore()/actualExecuterNum);
  175. }});
  176. }
  177. }
  178. }
  179. resultViewingPageVoIPage.setRecords(resultData);
  180. /*for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoIPage.getRecords()) {
  181. //获取该评价管理下的单个被评对象的应打分人数,实际打分人数
  182. MPJLambdaWrapper<EvaluateExecuter> evaluateExecuterMPJLambdaWrapper = new MPJLambdaWrapper<>();
  183. evaluateExecuterMPJLambdaWrapper
  184. .select("count(t.id) as planExecuterNum")
  185. .selectSum(EvaluateExecuter::getStatus, ResultViewingPageVo::getActualExecuterNum)
  186. .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateExecuter::getEvaluateObjectId)
  187. .eq(EvaluateExecuter::getEvaluateManageId, dto.getEvaluateManageId())
  188. .eq(EvaluateObject::getObjectId, resultViewingPageVo.getObjectId())
  189. .disableSubLogicDel();
  190. ResultViewingPageVo planAndActualExecuterNum = evaluateExecuterMapper.selectJoinOne(ResultViewingPageVo.class, evaluateExecuterMPJLambdaWrapper);
  191. for (EvaluateManageItem evaluateManageItem : evaluateManageItemList) {
  192. //获取该评价管理下的单个被评对象的每一道题的总得分
  193. MPJLambdaWrapper<EvaluateResult> evaluateResultMPJLambdaWrapper = new MPJLambdaWrapper<>();
  194. evaluateResultMPJLambdaWrapper
  195. .selectSum(EvaluateResult::getScore, ResultViewingPageVo::getSumScore)
  196. .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateResult::getEvaluatedObjectId)
  197. .eq(EvaluateResult::getEvaluateItemId, evaluateManageItem.getId())
  198. .eq(EvaluateObject::getObjectId, resultViewingPageVo.getObjectId())
  199. .disableSubLogicDel();
  200. ResultViewingPageVo sumScore = evaluateResultMapper.selectJoinOne(ResultViewingPageVo.class, evaluateResultMPJLambdaWrapper);
  201. resultData.add(new ResultViewingPageVo() {{
  202. setObjectId(resultViewingPageVo.getObjectId());
  203. setObjectIdCN(resultViewingPageVo.getObjectIdCN());
  204. setEvaluateManageItemId(evaluateManageItem.getId());
  205. setProblem(evaluateManageItem.getProblem());
  206. setTopic(evaluateManageItem.getTopic());
  207. if (planAndActualExecuterNum != null) {
  208. setPlanExecuterNum(planAndActualExecuterNum.getPlanExecuterNum());
  209. setActualExecuterNum(planAndActualExecuterNum.getActualExecuterNum());
  210. }
  211. if (sumScore != null) {
  212. setSumScore(sumScore.getSumScore());
  213. }
  214. }});
  215. }
  216. }*/
  217. /*for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoIPage.getRecords()) {
  218. //添加应打分人数,实际打分人数,综合评分
  219. MPJLambdaWrapper<EvaluateExecuter> evaluateExecuterPlanExecuterNum = new MPJLambdaWrapper<>();
  220. evaluateExecuterPlanExecuterNum
  221. .selectSum(EvaluateExecuter::getStatus, ResultViewingPageVo::getActualExecuterNum)
  222. .selectSum(EvaluateResult::getScore, ResultViewingPageVo::getActualExecuterNum)
  223. .leftJoin(EvaluateResult.class, EvaluateResult::getEvaluatedObjectId, EvaluateExecuter::getEvaluateObjectId)
  224. .eq(EvaluateExecuter::getEvaluateManageId, dto.getEvaluateManageId())
  225. .eq(EvaluateExecuter::getEvaluateObjectId, resultViewingPageVo.getEvaluateObjectId());
  226. List<ResultViewingPageVo> resultViewingPageVoList = evaluateExecuterMapper.selectJoinList(ResultViewingPageVo.class, evaluateExecuterPlanExecuterNum);
  227. resultViewingPageVo.setPlanExecuterNum(resultViewingPageVoList.size());
  228. //查出所有的题目项目
  229. MPJLambdaWrapper<EvaluateManageItem> evaluateManageItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
  230. evaluateManageItemMPJLambdaWrapper
  231. .selectSum(EvaluateResult::getScore, AllEvaluateManageItemVo::getAllActualScore)
  232. .selectAs(EvaluateManageItem::getProblem, AllEvaluateManageItemVo::getProblem)
  233. .selectAs(EvaluateManageItem::getTopic, AllEvaluateManageItemVo::getTopic)
  234. .leftJoin(EvaluateResult.class, EvaluateResult::getEvaluateItemId, EvaluateManageItem::getId)
  235. .eq(EvaluateManageItem::getEvaluateManageId, dto.getEvaluateManageId())
  236. .eq(EvaluateResult::getEvaluatedObjectId, resultViewingPageVo.getEvaluateObjectId())
  237. .groupBy(EvaluateManageItem::getProblem, EvaluateManageItem::getTopic);
  238. List<AllEvaluateManageItemVo> allEvaluateManageItemVoList = evaluateManageItemMapper.selectJoinList(AllEvaluateManageItemVo.class, evaluateManageItemMPJLambdaWrapper);
  239. Map<String, List<AllEvaluateManageItemVo>> groupedAllEvaluateManageItemVo = allEvaluateManageItemVoList.stream()
  240. .collect(Collectors.groupingBy(AllEvaluateManageItemVo::getTopic));
  241. List<AllEvaluateManageItemByTopicVo> allEvaluateManageItemByTopicVoList = new ArrayList<>();
  242. groupedAllEvaluateManageItemVo.forEach((topic, group) -> {
  243. allEvaluateManageItemByTopicVoList.add(new AllEvaluateManageItemByTopicVo(){{
  244. setTopic(topic);
  245. setAllEvaluateManageItemVoList(group);
  246. int allTopicScore = 0;
  247. for (AllEvaluateManageItemVo allEvaluateManageItemVo : group) {
  248. allTopicScore += allEvaluateManageItemVo.getAllActualScore();
  249. }
  250. setAllTopicScore(allTopicScore);
  251. }});
  252. });
  253. resultViewingPageVo.setAllEvaluateManageItemByTopicVoList(allEvaluateManageItemByTopicVoList);
  254. }*/
  255. return resultViewingPageVoIPage;
  256. }
  257. @Override
  258. @Transactional
  259. public String saveBatch(EvaluateResultSaveDto dto) {
  260. Date createDate = new Date();
  261. //获取当前评价管理的相关信息
  262. MPJLambdaWrapper<EvaluateSubmitRecord> evaluateSubmitRecordMPJLambdaWrapper = new MPJLambdaWrapper<>();
  263. evaluateSubmitRecordMPJLambdaWrapper
  264. .selectAs(EvaluateSubmitRecord::getId, MobileResultPageVo::getEvaluateSubmitRecordId)
  265. .selectAs(EvaluateSubmitRecord::getEvaluateManageId, MobileResultPageVo::getEvaluateManageId)
  266. .selectAs(EvaluateSubmitRecord::getEvaluatedObjectId, MobileResultPageVo::getEvaluateObjectId)
  267. .selectAs(EvaluateSubmitRecord::getEvaluateExecuterId, MobileResultPageVo::getEvaluateUserId)
  268. .selectAs(EvaluateSubmitRecord::getStatus, MobileResultPageVo::getEvaluateStatus)
  269. .selectAs(EvaluateSubmitRecord::getEvaluatedObject, MobileResultPageVo::getEvaluateType)
  270. .selectAs(EvaluateManage::getIsAutoCreate, MobileResultPageVo::getIsAutoCreate)
  271. .leftJoin(EvaluateManage.class, EvaluateManage::getId, EvaluateSubmitRecord::getEvaluateManageId)
  272. .eq(EvaluateSubmitRecord::getId, dto.getEvaluateSubmitRecordId());
  273. MobileResultPageVo mobileResultPageVo = evaluateSubmitRecordMapper.selectJoinOne(MobileResultPageVo.class, evaluateSubmitRecordMPJLambdaWrapper);
  274. if(mobileResultPageVo == null){
  275. return "该评价已失效!";
  276. }
  277. if(mobileResultPageVo.getEvaluateStatus() == 2){
  278. return "已经评价,请勿重复评价";
  279. }
  280. if(dto.getSubmitType() != null && dto.getSubmitType() == 1){
  281. //评价结果保存
  282. List<AddEvaluateResultDto> resultList = dto.getResultList();
  283. for (AddEvaluateResultDto addEvaluateResultDto : resultList) {
  284. EvaluateResult evaluateResult = BeanUtil.toBean(addEvaluateResultDto, EvaluateResult.class);
  285. evaluateResult.setEvaluatedObject(mobileResultPageVo.getEvaluateType());
  286. evaluateResult.setUserId(Long.parseLong(mobileResultPageVo.getEvaluateUserId()));
  287. evaluateResult.setEvaluatedObjectId(Long.parseLong(mobileResultPageVo.getEvaluateObjectId()));
  288. evaluateResult.setDeleteMark(DeleteMark.NODELETE.getCode());
  289. evaluateResult.setEnabledMark(EnabledMark.ENABLED.getCode());
  290. evaluateResult.setCreateDate(createDate);
  291. evaluateResult.setSubmitRecordId(mobileResultPageVo.getEvaluateSubmitRecordId());
  292. evaluateResultMapper.insert(evaluateResult);
  293. }
  294. }
  295. //修改答题人状态
  296. evaluateExecuterMapper.updateById(new EvaluateExecuter(){{
  297. setId(Long.parseLong(mobileResultPageVo.getEvaluateUserId()));
  298. if(dto.getSubmitType() != null && dto.getSubmitType() == 1){
  299. setStatus(1);
  300. } else {
  301. setStatus(2);
  302. }
  303. }});
  304. //修改提交记录状态
  305. evaluateSubmitRecordMapper.updateById(new EvaluateSubmitRecord(){{
  306. setId(mobileResultPageVo.getEvaluateSubmitRecordId());
  307. if(dto.getSubmitType() != null && dto.getSubmitType() == 1){
  308. setStatus(1);
  309. } else {
  310. setStatus(2);
  311. }
  312. }});
  313. return "ok";
  314. }
  315. @Override
  316. public ResponseEntity<byte[]> getList(ResultViewingExcelDto dto) {
  317. List<ResultViewingExcelVo> customerList = new ArrayList<>();
  318. //获取该评价管理下的被评对象-分页
  319. MPJLambdaWrapper<EvaluateObject> evaluateObjectMPJLambdaWrapper = new MPJLambdaWrapper<>();
  320. evaluateObjectMPJLambdaWrapper
  321. .distinct()
  322. .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
  323. .select("ifnull(t1.name, t2.name) as objectIdCN")
  324. .leftJoin(XjrUser.class, XjrUser::getId, EvaluateObject::getObjectId)
  325. .leftJoin(BaseClass.class, BaseClass::getId, EvaluateObject::getObjectId)
  326. .eq(EvaluateObject::getEvaluateManageId, dto.getEvaluateManageId())
  327. .disableSubLogicDel();
  328. List<ResultViewingPageVo> resultViewingPageVoList = evaluateObjectMapper.selectJoinList(ResultViewingPageVo.class, evaluateObjectMPJLambdaWrapper);
  329. //被评对象的id集合
  330. List<Long> evaluateObjectIdList = new ArrayList<>();
  331. for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoList) {
  332. evaluateObjectIdList.add(resultViewingPageVo.getObjectId());
  333. }
  334. //获取该评价管理下的所有题目-多个
  335. MPJLambdaWrapper<EvaluateManageItem> evaluateManageItemMPJLambdaWrapper = new MPJLambdaWrapper<>();
  336. evaluateManageItemMPJLambdaWrapper
  337. .eq(EvaluateManageItem::getEvaluateManageId, dto.getEvaluateManageId());
  338. List<EvaluateManageItem> evaluateManageItemList = evaluateManageItemMapper.selectList(evaluateManageItemMPJLambdaWrapper);
  339. //题目的id集合
  340. //将题目处理成Map
  341. List<Long> evaluateManageItemIdList = new ArrayList<>();
  342. Map<Long, EvaluateManageItem> evaluateManageItemMap = new HashMap<>();
  343. for (EvaluateManageItem evaluateManageItem : evaluateManageItemList) {
  344. evaluateManageItemIdList.add(evaluateManageItem.getId());
  345. evaluateManageItemMap.put(evaluateManageItem.getId(), evaluateManageItem);
  346. }
  347. //题目的总数
  348. int evaluateManageItemNum = evaluateManageItemList.size();
  349. //获取该评价管理下的被评对象的应打分人数,实际打分人数
  350. MPJLambdaWrapper<EvaluateExecuter> evaluateExecuterMPJLambdaWrapper = new MPJLambdaWrapper<>();
  351. evaluateExecuterMPJLambdaWrapper
  352. .select("count(t.id) as planExecuterNum")
  353. .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
  354. .selectSum(EvaluateExecuter::getStatus, ResultViewingPageVo::getActualExecuterNum)//这里值得推敲
  355. .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateExecuter::getEvaluateObjectId)
  356. .eq(EvaluateExecuter::getEvaluateManageId, dto.getEvaluateManageId())
  357. .in(EvaluateObject::getObjectId, evaluateObjectIdList)
  358. .groupBy(EvaluateObject::getObjectId)
  359. .disableSubLogicDel();
  360. List<ResultViewingPageVo> planAndActualExecuterNum = evaluateExecuterMapper.selectJoinList(ResultViewingPageVo.class, evaluateExecuterMPJLambdaWrapper);
  361. //将应打分人数,实际打分人数处理成Map
  362. Map<Long, ResultViewingPageVo> planAndActualExecuterNumMap = new HashMap<>();
  363. for (ResultViewingPageVo resultViewingPageVo : planAndActualExecuterNum) {
  364. planAndActualExecuterNumMap.put(resultViewingPageVo.getObjectId(), resultViewingPageVo);
  365. }
  366. Map<Long, List<ResultViewingPageVo>> sumScoreMap = new HashMap<>();
  367. Map<Long, List<ResultViewingPageVo>> topicScoreMap = new HashMap<>();
  368. Map<Long, Integer> synthesisScoreMap = new HashMap<>();
  369. if (evaluateManageItemIdList.size() > 0 && evaluateObjectIdList.size() > 0) {
  370. //获取该评价管理下的所有被评对象的所有题的总得分
  371. List<ResultViewingPageVo> listByObjectIdAndEvaluateItemId = evaluateResultMapper.listByObjectIdAndEvaluateItemId(evaluateObjectIdList, evaluateManageItemIdList);
  372. //将所有被评对象的所有题的总得分处理成Map
  373. sumScoreMap = listByObjectIdAndEvaluateItemId.stream()
  374. .collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));
  375. /*//获取该评价管理下的所有被评对象的标题的总得分
  376. List<ResultViewingPageVo> listTopicScoreByObjectIdAndTopic = evaluateResultMapper.listTopicScoreByObjectIdAndTopic(evaluateObjectIdList, evaluateManageItemIdList);
  377. //将所有被评对象的标题的总得分处理成Map
  378. topicScoreMap = listTopicScoreByObjectIdAndTopic.stream()
  379. .collect(Collectors.groupingBy(ResultViewingPageVo::getObjectId));*/
  380. //获取该评价管理下的所有被评对象的总得分
  381. List<ResultViewingPageVo> listSynthesisScore = evaluateResultMapper.listSynthesisScore(evaluateObjectIdList, evaluateManageItemIdList);
  382. //将所有被评对象的总得分处理成Map
  383. for (ResultViewingPageVo r : listSynthesisScore) {
  384. synthesisScoreMap.put(r.getObjectId(), r.getSynthesisScore());
  385. }
  386. /*MPJLambdaWrapper<EvaluateResult> evaluateResultMPJLambdaWrapper = new MPJLambdaWrapper<>();
  387. evaluateResultMPJLambdaWrapper
  388. .selectSum(EvaluateResult::getScore, ResultViewingPageVo::getSumScore)
  389. .selectAs(EvaluateObject::getObjectId, ResultViewingPageVo::getObjectId)
  390. .selectAs(EvaluateResult::getEvaluateItemId, ResultViewingPageVo::getEvaluateManageItemId)
  391. .leftJoin(EvaluateObject.class, EvaluateObject::getId, EvaluateResult::getEvaluatedObjectId)
  392. .in(EvaluateObject::getObjectId, evaluateObjectIdList)
  393. .in(EvaluateResult::getEvaluateItemId, evaluateManageItemIdList)
  394. .groupBy(EvaluateResult::getEvaluateItemId, EvaluateObject::getEvaluateManageId)
  395. .disableSubLogicDel();
  396. ResultViewingPageVo sumScore = evaluateResultMapper.selectJoinOne(ResultViewingPageVo.class, evaluateResultMPJLambdaWrapper);*/
  397. }
  398. //遍历分页记录
  399. for (ResultViewingPageVo resultViewingPageVo : resultViewingPageVoList) {
  400. List<ResultViewingPageVo> sumScoreList = sumScoreMap.get(resultViewingPageVo.getObjectId());
  401. if(sumScoreList != null && sumScoreList.size() > 0){
  402. for (ResultViewingPageVo r : sumScoreList) {
  403. customerList.add(new ResultViewingExcelVo(){{
  404. setObjectId(resultViewingPageVo.getObjectId());
  405. setObjectIdCN(resultViewingPageVo.getObjectIdCN());
  406. setEvaluateManageItemId(r.getEvaluateManageItemId());
  407. setProblem(evaluateManageItemMap.get(r.getEvaluateManageItemId()).getProblem());
  408. setTopic(evaluateManageItemMap.get(r.getEvaluateManageItemId()).getTopic());
  409. setPlanExecuterNum(planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).getPlanExecuterNum());
  410. int actualExecuterNum = planAndActualExecuterNumMap.get(resultViewingPageVo.getObjectId()).getActualExecuterNum();
  411. setActualExecuterNum(actualExecuterNum);
  412. setSumScore(r.getSumScore()/actualExecuterNum);
  413. setSynthesisScore(synthesisScoreMap.get(resultViewingPageVo.getObjectId())/actualExecuterNum);
  414. }});
  415. }
  416. }
  417. }
  418. // SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
  419. // for (TextbookIssueRecordPageVo textbookIssueRecordPageVo : customerList) {
  420. // if(textbookIssueRecordPageVo.getCreateDate() == null){
  421. // continue;
  422. // }
  423. // textbookIssueRecordPageVo.setCreateDateStr(sdf.format(textbookIssueRecordPageVo.getCreateDate()));
  424. // dataList.add(BeanUtil.toBean(textbookIssueRecordPageVo, TextbookIssueRecordExcelVo.class));
  425. // }
  426. //返回流
  427. ByteArrayOutputStream bot = new ByteArrayOutputStream();
  428. // 设置排除的属性 也可以在数据模型的字段上加@ExcelIgnore注解排除
  429. /*Set<String> excludeField = new HashSet<>();
  430. excludeField.add("hireDate");
  431. excludeField.add("salary");
  432. // 写Excel
  433. EasyExcel.write(filename, User.class)
  434. .excludeColumnFiledNames(excludeField)
  435. .sheet("用户信息")
  436. .doWrite(getUserData());*/
  437. // 方法2 自定义合并单元格策略
  438. String fileName = "ResultViewing" + ExcelTypeEnum.XLSX.getValue();
  439. // 每隔2行会合并 把eachColumn 设置成 3 也就是我们数据的长度,所以就第一列会合并。当然其他合并策略也可以自己写
  440. LoopMergeStrategy loopMergeStrategy = new LoopMergeStrategy(evaluateManageItemNum, 0);
  441. LoopMergeStrategy loopMergeStrategy1 = new LoopMergeStrategy(evaluateManageItemNum, 1);
  442. LoopMergeStrategy loopMergeStrategy2 = new LoopMergeStrategy(evaluateManageItemNum, 2);
  443. LoopMergeStrategy loopMergeStrategy3 = new LoopMergeStrategy(evaluateManageItemNum, 5);
  444. EasyExcel.write(bot, ResultViewingExcelVo.class)
  445. .automaticMergeHead(false)
  446. .excelType(ExcelTypeEnum.XLSX)
  447. .registerWriteHandler(loopMergeStrategy)
  448. .registerWriteHandler(loopMergeStrategy1)
  449. .registerWriteHandler(loopMergeStrategy2)
  450. .registerWriteHandler(loopMergeStrategy3)
  451. .sheet()
  452. .doWrite(customerList);
  453. return RT.fileStream(bot.toByteArray(), fileName);
  454. }
  455. }