SmartEvaluateStudentController2.java 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.template.annotation.DESRespondSecret;
  5. import com.template.annotation.PassToken;
  6. import com.template.api.SmartEvaluateStudentControlle2API;
  7. import com.template.common.utils.UUIDUtil;
  8. import com.template.model.evaluate.student.*;
  9. import com.template.model.pojo.SmartExamtype;
  10. import com.template.model.pojo.SmartGrade;
  11. import com.template.model.pojo.SmartScore;
  12. import com.template.model.result.CommonResult;
  13. import com.template.model.result.PageUtils;
  14. import com.template.services.*;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.web.bind.annotation.RestController;
  18. import java.math.BigDecimal;
  19. import java.util.*;
  20. import java.util.stream.Collectors;
  21. @RestController
  22. //返回参数加密注解
  23. @DESRespondSecret
  24. public class SmartEvaluateStudentController2 implements SmartEvaluateStudentControlle2API {
  25. @Autowired
  26. public SmartSubjectManageService smartSubjectManageService;
  27. @Autowired
  28. public SmartSubjectRuleService smartSubjectRuleService;
  29. @Autowired
  30. public SmartEvaluateStudentService smartEvaluateStudentService;
  31. @Autowired
  32. public SmartEvaluateSdetailService smartEvaluateSdetailService;
  33. @Autowired
  34. public SmartSubjectTemplateService smartSubjectTemplateService;
  35. @Autowired
  36. public SmartTemplateRuleService smartTemplateRuleService;
  37. @Autowired
  38. public SmartExamtypeService smartExamtypeService;
  39. @Autowired
  40. public SmartScoreService smartScoreService;
  41. @Autowired
  42. public SmartGradeService smartGradeService;
  43. /**
  44. * ==============================第二版============================
  45. **/
  46. @PassToken
  47. public CommonResult addSmartSubjectTemplate(JSONObject jsonObject) {
  48. SmartTemplateRuleList smartTemplateRuleList = null;
  49. try {
  50. smartTemplateRuleList = JSONObject.parseObject(jsonObject.toString(), SmartTemplateRuleList.class);
  51. } catch (Exception e) {
  52. return CommonResult.errorMsg("参数格式错误");
  53. }
  54. SmartSubjectTemplate smartSubjectTemplate = smartTemplateRuleList.getSmartSubjectTemplate();
  55. QueryWrapper<SmartSubjectTemplate> queryWrapper1 = new QueryWrapper<>();
  56. queryWrapper1.eq("grade_id", smartSubjectTemplate.getGradeId());
  57. queryWrapper1.eq("term_id", smartSubjectTemplate.getTermId());
  58. // queryWrapper1.eq("exam_type", smartSubjectTemplate.getExamType());
  59. List<SmartSubjectTemplate> listc = smartSubjectTemplateService.list(queryWrapper1);
  60. if (!listc.isEmpty()) {
  61. return CommonResult.fail("该评分项已存在");
  62. }
  63. List<SmartTemplateRule> ruleList = smartTemplateRuleList.getRuleList();
  64. List<String> levels = ruleList.stream().map(SmartTemplateRule::getLevel).collect(Collectors.toList());
  65. Set<String> levelSet = new HashSet<>(levels);
  66. if (levels.size() != levelSet.size()) {
  67. return CommonResult.fail("存在重复等级");
  68. }
  69. int insertTemplate = smartSubjectTemplateService.insertSmartSubjectTemplate(smartSubjectTemplate);
  70. if (insertTemplate <= 0) {
  71. return CommonResult.fail("操作失败");
  72. }
  73. List<SmartTemplateRule> rules = new ArrayList<>();
  74. for (int i = 0; i < ruleList.size(); i++) {
  75. SmartTemplateRule rule = ruleList.get(i);
  76. rule.setTemplateId(insertTemplate);
  77. rules.add(rule);
  78. }
  79. boolean insertRuleBatch = smartTemplateRuleService.saveBatch(rules);
  80. if (!insertRuleBatch) {
  81. return CommonResult.fail("操作失败");
  82. }
  83. List<Integer> examTypes = new ArrayList<>();
  84. for (SmartTermTemplate stt : smartSubjectTemplate.getExamTypes()) {
  85. examTypes.add(stt.getId());
  86. }
  87. List<SmartScore> scores = smartScoreService.querySmartScoresByex(smartSubjectTemplate.getTermId(), smartSubjectTemplate.getGradeId(), examTypes);
  88. List<Integer> userIds = scores.stream().map(SmartScore::getUserId).distinct().collect(Collectors.toList());
  89. List<SmartEvaluateStudent> insertStudents = new ArrayList<>();
  90. for (Integer userId : userIds) {
  91. SmartEvaluateStudent ses = new SmartEvaluateStudent();
  92. ses.setTermId(smartSubjectTemplate.getTermId());
  93. ses.setTerm(smartSubjectTemplate.getTerm());
  94. ses.setUserId(userId);
  95. List<SmartScore> userScores = scores.stream().filter(e -> e.getUserId().equals(userId)).collect(Collectors.toList());
  96. if (userScores != null && userScores.size() > 0) {
  97. ses.setGradeName(userScores.get(0).getGrade());
  98. ses.setGradeId(userScores.get(0).getGradeId());
  99. ses.setClassId(userScores.get(0).getSchoolClassId());
  100. ses.setClassName(userScores.get(0).getSchoolClass());
  101. ses.setCardNo(userScores.get(0).getCardNo());
  102. ses.setName(userScores.get(0).getName());
  103. BigDecimal totalScoreNum = new BigDecimal(0.0);
  104. Integer scoreNum = 0;
  105. for (SmartScore us : userScores) {
  106. totalScoreNum = totalScoreNum.add(new BigDecimal(us.getScore()));
  107. scoreNum++;
  108. }
  109. ses.setScoreNum(totalScoreNum.doubleValue());
  110. ses.setSubjectNum(scoreNum);
  111. }
  112. insertStudents.add(ses);
  113. }
  114. if(insertStudents != null && insertStudents.size() > 0){
  115. boolean insertBatch = smartEvaluateStudentService.saveBatch(insertStudents);
  116. if(!insertBatch){
  117. return CommonResult.fail("操作失败");
  118. }
  119. }
  120. return CommonResult.ok("操作成功");
  121. }
  122. @PassToken
  123. public CommonResult updateSmartSubjectTemplate(JSONObject jsonObject) {
  124. SmartTemplateRuleList smartTemplateRuleList = null;
  125. try {
  126. smartTemplateRuleList = JSONObject.parseObject(jsonObject.toString(), SmartTemplateRuleList.class);
  127. } catch (Exception e) {
  128. return CommonResult.errorMsg("参数格式错误");
  129. }
  130. SmartSubjectTemplate smartSubjectTemplate = smartTemplateRuleList.getSmartSubjectTemplate();
  131. QueryWrapper<SmartSubjectTemplate> queryWrapper1 = new QueryWrapper<>();
  132. queryWrapper1.eq("grade_id", smartSubjectTemplate.getGrade());
  133. queryWrapper1.eq("term_id", smartSubjectTemplate.getTerm());
  134. // queryWrapper1.eq("exam_type", smartSubjectTemplate.getExamType());
  135. List<SmartSubjectTemplate> listc = smartSubjectTemplateService.list(queryWrapper1);
  136. if (!listc.isEmpty() && !Objects.equals(listc.get(0).getId(), smartSubjectTemplate.getId())) {
  137. return CommonResult.fail("该评分项已存在");
  138. }
  139. SmartSubjectTemplate st = smartSubjectTemplateService.getSmartSubjectTemplateById(smartSubjectTemplate.getId());
  140. if (st == null) {
  141. return CommonResult.fail("未找到该评分项");
  142. }
  143. QueryWrapper<SmartEvaluateStudent> queryWrapper2 = new QueryWrapper<>();
  144. queryWrapper2.eq("grade_id", smartSubjectTemplate.getGradeId());
  145. queryWrapper2.eq("term_id", smartSubjectTemplate.getTermId());
  146. // queryWrapper2.eq("exam_type", smartSubjectTemplate.getExamType());
  147. queryWrapper2.isNotNull("score_level");
  148. List<SmartEvaluateStudent> evaluateData = smartEvaluateStudentService.getSmartEvaluateStudentByKey(queryWrapper2);
  149. if (!evaluateData.isEmpty()) {
  150. return CommonResult.fail("该评分项已评测,不可修改");
  151. }
  152. List<SmartTemplateRule> ruleList = smartTemplateRuleList.getRuleList();
  153. List<String> levels = ruleList.stream().map(SmartTemplateRule::getLevel).collect(Collectors.toList());
  154. Set<String> levelSet = new HashSet<>(levels);
  155. if (levels.size() != levelSet.size()) {
  156. return CommonResult.fail("存在重复等级");
  157. }
  158. smartTemplateRuleService.deleteSmartTemplateRuleBytId(smartSubjectTemplate.getId());
  159. List<SmartTemplateRule> rules = new ArrayList<>();
  160. for (int i = 0; i < ruleList.size(); i++) {
  161. SmartTemplateRule rule = ruleList.get(i);
  162. rule.setTemplateId(smartSubjectTemplate.getId());
  163. rules.add(rule);
  164. }
  165. if(rules != null && rules.size() > 0){
  166. boolean insertBatch = smartTemplateRuleService.saveBatch(rules);
  167. if(!insertBatch){
  168. return CommonResult.fail("修改失败");
  169. }
  170. }
  171. int insert = smartSubjectTemplateService.updateSmartSubjectTemplate(smartSubjectTemplate);
  172. if(insert <= 0){
  173. return CommonResult.fail("修改失败");
  174. }
  175. //region 学生综合评价
  176. List<Integer> examTypes = new ArrayList<>();
  177. for (SmartTermTemplate stt : smartSubjectTemplate.getExamTypes()) {
  178. examTypes.add(stt.getId());
  179. }
  180. List<String> oldExamTypes =Arrays.asList(st.getExamType().split(","));
  181. List<SmartScore> scores = smartScoreService.querySmartScoresByexs(smartSubjectTemplate.getTermId(), smartSubjectTemplate.getGradeId(), oldExamTypes);
  182. List<Integer> userIds = scores.stream().map(SmartScore::getUserId).distinct().collect(Collectors.toList());
  183. List<SmartEvaluateStudent> students = smartEvaluateStudentService.getEvaluateStudents(userIds, smartSubjectTemplate.getTermId());
  184. List<SmartEvaluateStudent> updateStudents = new ArrayList<>();
  185. List<SmartEvaluateStudent> insertStudents = new ArrayList<>();
  186. for (Integer userId : userIds) {
  187. List<SmartScore> userScores = scores.stream().filter(e -> e.getUserId().equals(userId)).collect(Collectors.toList());
  188. BigDecimal totalScoreNum = new BigDecimal(0.0);
  189. Integer scoreNum = 0;
  190. if (userScores != null && userScores.size() > 0) {
  191. Optional<SmartEvaluateStudent> oStudent = students.stream().filter(e -> e.getTermId().equals(smartSubjectTemplate.getTermId()) && e.getUserId().equals(userId)).findFirst();
  192. for (SmartScore us : userScores) {
  193. if(examTypes.contains(us.getExamType())){
  194. totalScoreNum = totalScoreNum.add(new BigDecimal(us.getScore()));
  195. scoreNum++;
  196. }
  197. }
  198. if (oStudent != null && oStudent.isPresent()) {
  199. oStudent.get().setScoreNum(totalScoreNum.doubleValue());
  200. oStudent.get().setSubjectNum(scoreNum);
  201. updateStudents.add(oStudent.get());
  202. } else {
  203. Optional<SmartScore> oSmartScore = scores.stream().filter(e -> e.getSemesterId().equals(smartSubjectTemplate.getTermId()) && e.getUserId().equals(userId)).findFirst();
  204. SmartEvaluateStudent ses = new SmartEvaluateStudent();
  205. ses.setTermId(smartSubjectTemplate.getTermId());
  206. ses.setUserId(userId);
  207. if (oSmartScore != null && oSmartScore.isPresent()) {
  208. ses.setTerm(oSmartScore.get().getSemester());
  209. ses.setGradeName(oSmartScore.get().getGrade());
  210. ses.setGradeId(oSmartScore.get().getGradeId());
  211. ses.setClassId(oSmartScore.get().getSchoolClassId());
  212. ses.setClassName(oSmartScore.get().getSchoolClass());
  213. ses.setCardNo(oSmartScore.get().getCardNo());
  214. ses.setName(oSmartScore.get().getName());
  215. }
  216. ses.setScoreNum(totalScoreNum.doubleValue());
  217. ses.setSubjectNum(scoreNum);
  218. insertStudents.add(ses);
  219. }
  220. }
  221. }
  222. if (insertStudents != null && insertStudents.size() > 0) {
  223. boolean insertBatch = smartEvaluateStudentService.saveBatch(insertStudents);
  224. if (!insertBatch) {
  225. return CommonResult.fail("修改失败");
  226. }
  227. }
  228. if (updateStudents != null && updateStudents.size() > 0) {
  229. boolean updateBatch = smartEvaluateStudentService.updateBatchById(updateStudents);
  230. if (!updateBatch) {
  231. return CommonResult.fail("修改失败");
  232. }
  233. }
  234. //endregion
  235. return CommonResult.ok("修改成功");
  236. }
  237. @PassToken
  238. public CommonResult delSmartSubjectTemplate(Integer id) {
  239. if (id == null) {
  240. return CommonResult.fail("请传入ID");
  241. }
  242. SmartSubjectTemplate smartSubjectTemplate = smartSubjectTemplateService.getSmartSubjectTemplateById(id);
  243. if (smartSubjectTemplate == null) {
  244. return CommonResult.fail("该评分项不存在");
  245. }
  246. QueryWrapper<SmartEvaluateStudent> queryWrapper1 = new QueryWrapper<>();
  247. queryWrapper1.eq("grade_id", smartSubjectTemplate.getGradeId());
  248. queryWrapper1.eq("term_id", smartSubjectTemplate.getTermId());
  249. // queryWrapper1.eq("exam_type", smartSubjectTemplate.getExamType());
  250. queryWrapper1.isNotNull("score_level");
  251. List<SmartEvaluateStudent> evaluateData = smartEvaluateStudentService.getSmartEvaluateStudentByKey(queryWrapper1);
  252. if (!evaluateData.isEmpty()) {
  253. return CommonResult.fail("该评分项已评测,不可删除");
  254. }
  255. int listc = smartTemplateRuleService.deleteSmartTemplateRuleBytId(smartSubjectTemplate.getId());
  256. smartSubjectTemplateService.deleteSmartSubjectTemplateById(id);
  257. return CommonResult.ok("操作成功");
  258. }
  259. @PassToken
  260. @DESRespondSecret(validated = false)
  261. public CommonResult queryTemplatePage(Integer currentPage, Integer pageCount) {
  262. QueryWrapper<SmartSubjectTemplate> queryWrapper1 = new QueryWrapper<>();
  263. queryWrapper1.orderByDesc("id");
  264. PageUtils<SmartSubjectTemplate> list = smartSubjectTemplateService.queryPageSmartSubjectTemplate(currentPage, pageCount, queryWrapper1);
  265. List<SmartExamtype> examtypes = smartExamtypeService.list(null);
  266. if (list.getList() != null && list.getList().size() > 0) {
  267. for (SmartSubjectTemplate data : list.getList()) {
  268. List<SmartTermTemplate> examTypeDatas = new ArrayList<>();
  269. List<String> names = new ArrayList<>();
  270. List<String> examTypes = Arrays.asList(data.getExamType().split(","));
  271. if (examtypes != null && examtypes.size() > 0) {
  272. for (String examType : examTypes) {
  273. Optional<SmartExamtype> oExamtype = examtypes.stream().filter(e -> String.valueOf(e.getId()).equals(examType)).findFirst();
  274. if (oExamtype != null && oExamtype.isPresent()) {
  275. names.add(oExamtype.get().getName());
  276. SmartTermTemplate examTypeData = new SmartTermTemplate();
  277. examTypeData.setId(oExamtype.get().getId());
  278. examTypeData.setName(oExamtype.get().getName());
  279. examTypeDatas.add(examTypeData);
  280. }
  281. }
  282. }
  283. if (names != null && names.size() > 0) {
  284. data.setExamType(StringUtils.join(names, ","));
  285. }
  286. data.setExamTypes(examTypeDatas);
  287. }
  288. }
  289. return CommonResult.ok(list);
  290. }
  291. @PassToken
  292. @DESRespondSecret(validated = false)
  293. public CommonResult queryTemplateRulePage(Integer id) {
  294. QueryWrapper<SmartTemplateRule> queryWrapper1 = new QueryWrapper<>();
  295. queryWrapper1.eq("template_id", id);
  296. queryWrapper1.orderByDesc("id");
  297. List<SmartTemplateRule> list = smartTemplateRuleService.getSmartTemplateRuleByKey(queryWrapper1);
  298. return CommonResult.ok(list);
  299. }
  300. @PassToken
  301. public CommonResult evaluateScore(Integer id, String scoreComment) {
  302. if (id == null) {
  303. return CommonResult.fail("请传入ID");
  304. }
  305. SmartEvaluateStudent evaluateStudent = smartEvaluateStudentService.getSmartEvaluateStudentById(id);
  306. if (evaluateStudent == null) {
  307. return CommonResult.fail("该条记录已删除");
  308. }
  309. evaluateStudent.setScoreComment(scoreComment);
  310. smartEvaluateStudentService.updateSmartEvaluateStudent(evaluateStudent);
  311. return CommonResult.ok("评价成功");
  312. }
  313. @PassToken
  314. public CommonResult queryEvaluateStudent(SmartEvaluateStudent smartEvaluateStudent, Integer currentPage, Integer pageCount) {
  315. QueryWrapper<SmartEvaluateStudent> queryWrapper1 = new QueryWrapper<>();
  316. if (smartEvaluateStudent.getName() != null && !smartEvaluateStudent.getName().trim().equals("")) {
  317. queryWrapper1.and(qw -> qw.like("name", smartEvaluateStudent.getName()).or().like("card_no", smartEvaluateStudent.getName()));
  318. }
  319. if (smartEvaluateStudent.getTerm() != null && !smartEvaluateStudent.getTerm().trim().equals("")) {
  320. queryWrapper1.like("term", smartEvaluateStudent.getTerm());
  321. }
  322. if (smartEvaluateStudent.getGradeName() != null && !smartEvaluateStudent.getGradeName().trim().equals("")) {
  323. queryWrapper1.eq("grade_name", smartEvaluateStudent.getGradeName());
  324. }
  325. if (smartEvaluateStudent.getClassName() != null && !smartEvaluateStudent.getClassName().trim().equals("")) {
  326. queryWrapper1.eq("class_name", smartEvaluateStudent.getClassName());
  327. }
  328. if (smartEvaluateStudent.getScoreLevel() != null && !smartEvaluateStudent.getScoreLevel().trim().equals("")) {
  329. queryWrapper1.eq("score_level", smartEvaluateStudent.getClassName());
  330. }
  331. queryWrapper1.orderByDesc("id");
  332. PageUtils<SmartEvaluateStudent> list = smartEvaluateStudentService.queryPageSmartEvaluateStudent(currentPage, pageCount, queryWrapper1);
  333. return CommonResult.ok(list);
  334. }
  335. }