EvaluateManageServiceImpl.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package com.xjrsoft.module.evaluate.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.github.yulichang.base.MPJBaseServiceImpl;
  8. import com.xjrsoft.common.enums.EvaluateTypeEnum;
  9. import com.xjrsoft.common.exception.MyException;
  10. import com.xjrsoft.module.evaluate.dto.*;
  11. import com.xjrsoft.module.evaluate.entity.*;
  12. import com.xjrsoft.module.evaluate.mapper.*;
  13. import com.xjrsoft.module.evaluate.service.IEvaluateManageService;
  14. import com.xjrsoft.module.evaluate.vo.*;
  15. import lombok.AllArgsConstructor;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import javax.script.ScriptEngine;
  19. import javax.script.ScriptEngineManager;
  20. import javax.script.ScriptException;
  21. import java.text.DecimalFormat;
  22. import java.time.LocalDate;
  23. import java.util.ArrayList;
  24. import java.util.Date;
  25. import java.util.List;
  26. import java.util.Map;
  27. import java.util.function.Function;
  28. import java.util.stream.Collectors;
  29. /**
  30. * @title: 评价管理
  31. * @Author dzx
  32. * @Date: 2024-01-16
  33. * @Version 1.0
  34. */
  35. @Service
  36. @AllArgsConstructor
  37. public class EvaluateManageServiceImpl extends MPJBaseServiceImpl<EvaluateManageMapper, EvaluateManage> implements IEvaluateManageService {
  38. private final EvaluateManageMapper evaluateManageMapper;
  39. private final EvaluateObjectMapper evaluateObjectMapper;
  40. private final EvaluateExecuterMapper evaluateExecuterMapper;
  41. private final EvaluateItemMapper evaluateItemMapper;
  42. private final EvaluateManageItemMapper evaluateManageItemMapper;
  43. @Override
  44. @Transactional(rollbackFor = Exception.class)
  45. public Boolean add(EvaluateManage evaluateManage) {
  46. evaluateManage.setStatus(-1);
  47. evaluateManageMapper.insert(evaluateManage);
  48. return true;
  49. }
  50. @Override
  51. @Transactional(rollbackFor = Exception.class)
  52. public Boolean update(EvaluateManage evaluateManage) {
  53. //TODO 修改分两种情况,一种是还没有发布的修改,一种是已经发布的修改,已发布的修改只能修改结束时间。
  54. evaluateManageMapper.updateById(evaluateManage);
  55. return true;
  56. }
  57. @Override
  58. @Transactional(rollbackFor = Exception.class)
  59. public Boolean delete(List<Long> ids) {
  60. evaluateManageMapper.deleteBatchIds(ids);
  61. evaluateObjectMapper.delete(Wrappers.lambdaQuery(EvaluateObject.class).in(EvaluateObject::getEvaluateManageId, ids));
  62. evaluateExecuterMapper.delete(Wrappers.lambdaQuery(EvaluateExecuter.class).in(EvaluateExecuter::getEvaluateManageId, ids));
  63. return true;
  64. }
  65. @Override
  66. public Page<EvaluateManagePageVo> getPage(Page<EvaluateManagePageDto> page, EvaluateManagePageDto dto) {
  67. return evaluateManageMapper.getPage(page, dto);
  68. }
  69. @Override
  70. @Transactional
  71. public Boolean release(Long id) {
  72. EvaluateManage evaluateManage = evaluateManageMapper.selectById(id);
  73. if(evaluateManage == null){
  74. throw new MyException("未查询到数据,请检查传入的id是否正确");
  75. }
  76. // evaluateManageItemMapper.cloneItems(evaluateManage.getEvaluateTemplateId(), evaluateManage.getId(), StpUtil.getLoginIdAsLong());
  77. Long count = evaluateManageItemMapper.selectCount(
  78. new QueryWrapper<EvaluateManageItem>().lambda()
  79. .eq(EvaluateManageItem::getEvaluateManageId, id)
  80. );
  81. if(count <= 0){
  82. //查询模板中的评价项
  83. List<EvaluateItem> evaluateItemList = evaluateItemMapper.selectList(
  84. new QueryWrapper<EvaluateItem>().lambda()
  85. .eq(EvaluateItem::getEvaluateTemplateId, evaluateManage.getEvaluateTemplateId())
  86. );
  87. //克隆一份,存到评价管理下面,可以采用sql语句
  88. for (EvaluateItem evaluateItem : evaluateItemList) {
  89. EvaluateManageItem manageItem = BeanUtil.toBean(evaluateItem, EvaluateManageItem.class);
  90. manageItem.setId(null);
  91. manageItem.setEvaluateManageId(evaluateManage.getId());
  92. manageItem.setEvaluateItemId(evaluateItem.getId());
  93. manageItem.setCreateDate(new Date());
  94. manageItem.setCreateUserId(StpUtil.getLoginIdAsLong());
  95. evaluateManageItemMapper.insert(manageItem);
  96. }
  97. }
  98. //添加评价提交记录
  99. evaluateManageMapper.insertEvaluateSubmitRecord(id);
  100. //将评价管理状态改为进行中
  101. evaluateManage.setStatus(1);
  102. evaluateManage.setModifyDate(new Date());
  103. evaluateManage.setModifyUserId(StpUtil.getLoginIdAsLong());
  104. evaluateManageMapper.updateById(evaluateManage);
  105. return true;
  106. }
  107. public Page<MobileIndexPageVo> getMobileIndexPage(Page<EvaluateWritePageDto> page, MobileIndexPageDto dto) {
  108. Page<MobileIndexPageVo> mobileIndexPage = evaluateManageMapper.getMobileIndexPage(page, dto);
  109. return mobileIndexPage;
  110. }
  111. @Override
  112. public Page<MobileResultPageVo> getMobileResultPage(Page<EvaluateWritePageDto> page, MobileResultPageDto dto){
  113. Page<MobileResultPageVo> mobileResultPage = evaluateManageMapper.getMobileResultPage(page, dto);
  114. if(mobileResultPage.getRecords() != null){
  115. //获取已经评价记录的评价总分
  116. //评价提交记录的id集合
  117. List<String> submitRecordIdList = new ArrayList<>();
  118. for (MobileResultPageVo mobileResultPageVo : mobileResultPage.getRecords()) {
  119. if(mobileResultPageVo.getEvaluateStatus() == 1){
  120. submitRecordIdList.add(mobileResultPageVo.getEvaluateSubmitRecordId());
  121. }
  122. }
  123. if(submitRecordIdList.size() > 0){
  124. //获取当前用户,当前评价管理下的所有已评对象的总分(学生评价班主任)或者是综合指数(教官评价班级)
  125. List<EvaluateManageScoreVo> evaluateManageScoreVoList = evaluateManageMapper.getScoreList(new EvaluateManageScoreDto(){{
  126. setSubmitRecordIdList(submitRecordIdList);
  127. }});
  128. if(evaluateManageScoreVoList.size() > 0){
  129. Map<String, EvaluateManageScoreVo> scoreBySubmitRecordId = evaluateManageScoreVoList.stream()
  130. .collect(Collectors.toMap(EvaluateManageScoreVo::getSubmitRecordId, Function.identity()));
  131. //将对应的分数给到对应的记录
  132. for (MobileResultPageVo mobileResultPageVo : mobileResultPage.getRecords()) {
  133. //评价类型是学生评价班主任
  134. if(mobileResultPageVo.getEvaluateType().equals(EvaluateTypeEnum.STUDENT_EVALUATE_HEAD_TEACHER.getCode()) && scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()) != null){
  135. mobileResultPageVo.setTotalScore((double)scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateObjectId()).getTotalScore());
  136. mobileResultPageVo.setItemCount(scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateObjectId()).getItemCount());
  137. }
  138. //评价类型是教官评级班级
  139. if(mobileResultPageVo.getEvaluateType().equals(EvaluateTypeEnum.DRILLMASTER_EVALUATE_CLASS.getCode()) && scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()) != null){
  140. ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
  141. String zonghezhishu = "totalScore/itemCount";
  142. int totalScore = scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()).getTotalScore();
  143. int itemCount = scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()).getItemCount();
  144. double res = 0;
  145. String newStr1 = zonghezhishu.replace("totalScore", ""+totalScore);
  146. String newStr2 = newStr1.replace("itemCount", ""+itemCount);
  147. try{
  148. res = (double)engine.eval(newStr2);
  149. }catch (ScriptException s){
  150. }
  151. // 创建一个DecimalFormat对象,指定小数位数为两位
  152. DecimalFormat decimalFormat = new DecimalFormat("#.00");
  153. // 格式化double值为字符串
  154. String formattedNumber = decimalFormat.format(res);
  155. mobileResultPageVo.setTotalScore(Double.valueOf(formattedNumber));
  156. mobileResultPageVo.setItemCount(scoreBySubmitRecordId.get(mobileResultPageVo.getEvaluateSubmitRecordId()).getItemCount());
  157. }
  158. }
  159. }
  160. }
  161. }
  162. return mobileResultPage;
  163. }
  164. @Override
  165. public List<DrillEvaluateClassListVo> getDrillEvaluateClassList(DrillEvaluateClassListDto dto) {
  166. dto.setLoginUserId(StpUtil.getLoginIdAsLong());
  167. dto.setTodayDate(LocalDate.now().toString());
  168. return evaluateManageMapper.getDrillEvaluateClassList(dto);
  169. }
  170. @Override
  171. public EvaluateWriteVo getWriteInfo(Long id) {
  172. return evaluateManageMapper.getWriteInfo(id);
  173. }
  174. @Override
  175. public List<EvaluateManageItemVo> getItemList(Long id) {
  176. return evaluateManageMapper.getItemList(id);
  177. }
  178. @Override
  179. public List<EvaluateManageItemVo> getResultList(ResultListDto dto) {
  180. return evaluateManageMapper.getResultList(dto);
  181. }
  182. }