EvaluateResultServiceImpl.java 31 KB

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