SmartEvaluateTeacherController.java 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382
  1. package com.template.controller;
  2. import com.alibaba.fastjson.JSON;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  6. import com.template.annotation.DESRespondSecret;
  7. import com.template.annotation.PassToken;
  8. import com.template.api.SmartEvaluateTeacherControllerAPI;
  9. import com.template.common.utils.ExcelUtils;
  10. import com.template.common.utils.UUIDUtil;
  11. import com.template.model.evaluate.teacher.*;
  12. import com.template.model.pojo.SmartSemester;
  13. import com.template.model.result.CommonResult;
  14. import com.template.model.result.PageUtils;
  15. import com.template.model.vo.EvaluateTeacherVo;
  16. import com.template.model.vo.RankingVo;
  17. import com.template.services.SmartEvaluateTdetailService;
  18. import com.template.services.SmartEvaluateTeacherService;
  19. import com.template.services.SmartScoreManageService;
  20. import com.template.services.SmartSemesterService;
  21. import org.apache.poi.ss.usermodel.Row;
  22. import org.apache.poi.ss.usermodel.Sheet;
  23. import org.apache.poi.ss.usermodel.Workbook;
  24. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  25. import org.springframework.beans.factory.annotation.Autowired;
  26. import org.springframework.web.bind.annotation.RestController;
  27. import javax.servlet.http.HttpServletResponse;
  28. import java.time.LocalDateTime;
  29. import java.util.*;
  30. import java.util.stream.Collectors;
  31. @RestController
  32. //返回参数加密注解
  33. @DESRespondSecret
  34. public class SmartEvaluateTeacherController implements SmartEvaluateTeacherControllerAPI {
  35. @Autowired
  36. public SmartEvaluateTdetailService smartEvaluateTdetailService;
  37. @Autowired
  38. public SmartEvaluateTeacherService smartEvaluateTeacherService;
  39. @Autowired
  40. public SmartScoreManageService smartScoreManageService;
  41. @Autowired
  42. SmartSemesterService smartSemesterService;
  43. @PassToken
  44. public CommonResult operateSmartScoreManage(JSONObject jsonObject) {
  45. SimpleScore simpleScoreLists = null;
  46. try {
  47. simpleScoreLists = JSONObject.parseObject(jsonObject.toString(), SimpleScore.class);
  48. } catch (Exception e) {
  49. return CommonResult.errorMsg("参数格式错误");
  50. }
  51. List<SmartScoreManageList> allList = simpleScoreLists.getSimpleScoreList();
  52. List<String> mainScoreItems = allList.stream().filter(e -> e.getDeleted() == 0).map(m -> m.getTerm() + m.getScoreItem()).collect(Collectors.toList());
  53. Set<String> mainScoreSet = new HashSet<>(mainScoreItems);
  54. if (mainScoreItems.size() != mainScoreSet.size()) {
  55. return CommonResult.fail("存在重复主项");
  56. }
  57. String term = allList.get(0).getTerm();
  58. QueryWrapper<SmartEvaluateTdetail> queryWrapper1 = new QueryWrapper<>();
  59. queryWrapper1.eq("deleted", 0);
  60. queryWrapper1.eq("term", term);
  61. List<SmartEvaluateTdetail> smartEvaluateTdetails = smartEvaluateTdetailService.getEvaluateTdetailByKey(queryWrapper1);
  62. if (smartEvaluateTdetails.size() > 0) {
  63. return CommonResult.fail("该学期已评分,不可再操作");
  64. }
  65. List<SmartScoreManage> smList = new ArrayList<>();
  66. for (int i = 0; i < allList.size(); i++) {
  67. SmartScoreManage mainScoreManage = new SmartScoreManage();
  68. double mainScoreNum = 0;
  69. if (allList.get(i).getId() == null) {
  70. allList.get(i).setId((int) UUIDUtil.generateID());
  71. }
  72. mainScoreManage.setId(allList.get(i).getId());
  73. mainScoreManage.setTerm(term);
  74. mainScoreManage.setScoreItem(allList.get(i).getScoreItem());
  75. mainScoreManage.setParentId(allList.get(i).getParentId());
  76. mainScoreManage.setDeleted(allList.get(i).getDeleted());
  77. List<SmartScoreManageList> childList = allList.get(i).getSmartScoreManageList();
  78. List<String> scoreItems = childList.stream().filter(e -> e.getDeleted() == 0).map(m -> term + m.getScoreItem()).collect(Collectors.toList());
  79. Set<String> ScoreSet = new HashSet<>(scoreItems);
  80. if (scoreItems.size() != ScoreSet.size()) {
  81. return CommonResult.fail("存在重复子项");
  82. }
  83. for (int j = 0; j < childList.size(); j++) {
  84. SmartScoreManage childScoreManage = new SmartScoreManage();
  85. if (childList.get(j).getId() == null) {
  86. childList.get(j).setId((int) UUIDUtil.generateID());
  87. }
  88. childScoreManage.setId(childList.get(j).getId());
  89. childScoreManage.setTerm(term);
  90. childScoreManage.setScoreItem(childList.get(j).getScoreItem());
  91. childScoreManage.setParentId(allList.get(i).getId());
  92. childScoreManage.setScoreNum(childList.get(j).getScoreNum());
  93. childScoreManage.setDeleted(childList.get(j).getDeleted());
  94. smList.add(childScoreManage);
  95. if (childList.get(j).getDeleted() == 0) {
  96. mainScoreNum += childList.get(j).getScoreNum();
  97. }
  98. }
  99. mainScoreManage.setScoreNum(mainScoreNum);
  100. smList.add(mainScoreManage);
  101. }
  102. for (int i = 0; i < smList.size(); i++) {
  103. // 相关判断
  104. SmartScoreManage scoreManage = smList.get(i);
  105. SmartScoreManage sc = smartScoreManageService.getSmartScoreManageById(scoreManage.getId());
  106. if (sc == null) {
  107. smartScoreManageService.insertSmartScoreManage(scoreManage);
  108. } else {
  109. smartScoreManageService.updateSmartScoreManage(scoreManage);
  110. }
  111. }
  112. return CommonResult.ok("操作成功");
  113. }
  114. @PassToken
  115. public CommonResult getScoreManage(String term) {
  116. if (term == null) {
  117. term = smartScoreManageService.getMaxTerm();
  118. }
  119. SimpleScore simpleScore = smartScoreManageService.queryScoreDetail(term);
  120. return CommonResult.ok(simpleScore);
  121. }
  122. @PassToken
  123. public CommonResult getTeacherScoreList(SmartEvaluateTeacher smartEvaluateTeacher, Integer currentPage, Integer pageCount) {
  124. QueryWrapper<SmartEvaluateTeacher> queryWrapper = new QueryWrapper<>();
  125. queryWrapper.eq("deleted", 0);
  126. if (smartEvaluateTeacher.getName() != null && !smartEvaluateTeacher.getName().trim().equals("")) {
  127. queryWrapper.and(qw -> qw.like("name", smartEvaluateTeacher.getName()).or().like("card_no", smartEvaluateTeacher.getName()));
  128. }
  129. if (smartEvaluateTeacher.getTerm() != null && !smartEvaluateTeacher.getTerm().trim().equals("")) {
  130. queryWrapper.like("term", smartEvaluateTeacher.getTerm());
  131. }
  132. if (smartEvaluateTeacher.getSubject() != null && !smartEvaluateTeacher.getSubject().trim().equals("")) {
  133. queryWrapper.eq("subject", smartEvaluateTeacher.getSubject());
  134. }
  135. if (smartEvaluateTeacher.getClassName() != null && !smartEvaluateTeacher.getClassName().trim().equals("")) {
  136. queryWrapper.eq("class_name", smartEvaluateTeacher.getClassName());
  137. }
  138. queryWrapper.orderByDesc("id");
  139. PageUtils<SmartEvaluateTeacher> list = smartEvaluateTeacherService.queryPageSmartEvaluateTeacher(currentPage, pageCount, queryWrapper);
  140. return CommonResult.ok(list);
  141. }
  142. @PassToken
  143. public void getTeacherScoreExcel(SmartEvaluateTeacher smartEvaluateTeacher, HttpServletResponse response) {
  144. String term = smartScoreManageService.getMaxTerm();
  145. QueryWrapper<SmartEvaluateTeacher> queryWrapper = new QueryWrapper<>();
  146. if (smartEvaluateTeacher.getName() != null && !smartEvaluateTeacher.getName().trim().equals("")) {
  147. queryWrapper.and(qw -> qw.like("name", smartEvaluateTeacher.getName()).or().like("card_no", smartEvaluateTeacher.getName()));
  148. }
  149. if (smartEvaluateTeacher.getTerm() != null && !smartEvaluateTeacher.getTerm().trim().equals("")) {
  150. queryWrapper.like("term", smartEvaluateTeacher.getTerm());
  151. } else {
  152. queryWrapper.like("term", term);
  153. }
  154. if (smartEvaluateTeacher.getSubject() != null && !smartEvaluateTeacher.getSubject().trim().equals("")) {
  155. queryWrapper.eq("subject", smartEvaluateTeacher.getSubject());
  156. }
  157. if (smartEvaluateTeacher.getClassName() != null && !smartEvaluateTeacher.getClassName().trim().equals("")) {
  158. queryWrapper.eq("class_name", smartEvaluateTeacher.getClassName());
  159. }
  160. List<SmartEvaluateTeacher> outlist = smartEvaluateTeacherService.getEvaluateTeacherByKey(queryWrapper);
  161. //导出
  162. Workbook workbook = new XSSFWorkbook();
  163. Sheet sheet = workbook.createSheet("教师评分明细");
  164. Row headerRow = sheet.createRow(0);
  165. headerRow.createCell(0).setCellValue("序号");
  166. headerRow.createCell(1).setCellValue("工号");
  167. headerRow.createCell(2).setCellValue("姓名");
  168. headerRow.createCell(3).setCellValue("学期");
  169. headerRow.createCell(4).setCellValue("学科");
  170. headerRow.createCell(5).setCellValue("班级");
  171. QueryWrapper<SmartScoreManage> queryWrapper1 = new QueryWrapper<>();
  172. queryWrapper1.eq("deleted", 0);
  173. queryWrapper1.eq("parent_id", 0);
  174. queryWrapper1.eq("term", term);
  175. List<SmartScoreManage> scoreManageList = smartScoreManageService.getScoreManageByKey(queryWrapper1);
  176. for (int i = 0; i < scoreManageList.size(); i++) {
  177. headerRow.createCell(i + 6).setCellValue(scoreManageList.get(i).getScoreItem());
  178. }
  179. headerRow.createCell(scoreManageList.size() + 6).setCellValue("总分");
  180. for (int i = 0; i < outlist.size(); i++) {
  181. SmartEvaluateTeacher teacherScore = outlist.get(i);
  182. Row dataRow = sheet.createRow(i + 1);
  183. dataRow.createCell(0).setCellValue(i + 1);
  184. dataRow.createCell(1).setCellValue(teacherScore.getCardNo());
  185. dataRow.createCell(2).setCellValue(teacherScore.getName());
  186. dataRow.createCell(3).setCellValue(teacherScore.getTerm());
  187. dataRow.createCell(4).setCellValue(teacherScore.getSubject());
  188. dataRow.createCell(5).setCellValue(teacherScore.getClassName());
  189. // 分数详情
  190. JSONObject scoreDetail = JSON.parseObject(teacherScore.getEvaluateDetail());
  191. for (int j = 0; j < scoreManageList.size(); j++) {
  192. for (Map.Entry entry : scoreDetail.entrySet()) {
  193. if (scoreManageList.get(j).getScoreItem().equals(entry.getKey())) {
  194. dataRow.createCell(j + 6).setCellValue(entry.getValue().toString());
  195. }
  196. }
  197. }
  198. }
  199. // 将工作簿写入文件
  200. ExcelUtils.excelDownload(workbook, "教师评测信息.xlsx", response);
  201. }
  202. @PassToken
  203. public CommonResult evaluateScore(JSONObject jsonObject) {
  204. SimpleEvaluateScore simpleEvaluateScore = null;
  205. try {
  206. simpleEvaluateScore = JSONObject.parseObject(jsonObject.toString(), SimpleEvaluateScore.class);
  207. } catch (Exception e) {
  208. return CommonResult.errorMsg("参数格式错误");
  209. }
  210. SmartEvaluateTeacher teacher = smartEvaluateTeacherService.getSmartEvaluateTeacherById(simpleEvaluateScore.getId());
  211. teacher.setLowingScore(simpleEvaluateScore.getLowingScore());
  212. teacher.setTotalScore(simpleEvaluateScore.getTotalScore());
  213. JSONObject desScore = new JSONObject();
  214. List<SmartEvaluateTdetailList> mainList = simpleEvaluateScore.getSimpleScoreList();
  215. List<SmartEvaluateTdetail> lse = new ArrayList<>();
  216. for (int i = 0; i < mainList.size(); i++) {
  217. if (mainList.get(i).getDeleted() == 0) {
  218. desScore.put(mainList.get(i).getScoreItem(), mainList.get(i).getOwnNum());
  219. }
  220. SmartEvaluateTdetail mainLse = new SmartEvaluateTdetail();
  221. mainLse.setId(mainList.get(i).getId() == null ? (int) UUIDUtil.generateID() : mainList.get(i).getId());
  222. mainLse.setCardNo(teacher.getCardNo());
  223. mainLse.setTerm(teacher.getTerm());
  224. mainLse.setScoreItem(mainList.get(i).getScoreItem());
  225. mainLse.setParentId(mainList.get(i).getParentId());
  226. mainLse.setScoreNum(mainList.get(i).getScoreNum());
  227. mainLse.setOwnNum(mainList.get(i).getOwnNum());
  228. mainLse.setDeleted(mainList.get(i).getDeleted());
  229. lse.add(mainLse);
  230. List<SmartEvaluateTdetailList> childScoreList = mainList.get(i).getEvaluateList();
  231. for (int j = 0; j < childScoreList.size(); j++) {
  232. SmartEvaluateTdetailList childScore = childScoreList.get(j);
  233. SmartEvaluateTdetail childLse = new SmartEvaluateTdetail();
  234. childLse.setId(childScore.getId() == null ? (int) UUIDUtil.generateID() : childScore.getId());
  235. childLse.setCardNo(teacher.getCardNo());
  236. childLse.setTerm(teacher.getTerm());
  237. childLse.setScoreItem(childScore.getScoreItem());
  238. childLse.setParentId(mainLse.getId());
  239. childLse.setScoreNum(childScore.getScoreNum());
  240. childLse.setOwnNum(childScore.getOwnNum());
  241. childLse.setDeleted(childScore.getDeleted());
  242. lse.add(childLse);
  243. }
  244. }
  245. for (int i = 0; i < lse.size(); i++) {
  246. SmartEvaluateTdetail scoreDetail = lse.get(i);
  247. SmartEvaluateTdetail listc = smartEvaluateTdetailService.getSmartEvaluateTdetailById(scoreDetail.getId());
  248. if (listc == null) {
  249. smartEvaluateTdetailService.insertSmartEvaluateTdetail(scoreDetail);
  250. } else {
  251. smartEvaluateTdetailService.updateSmartEvaluateTdetail(scoreDetail);
  252. }
  253. }
  254. teacher.setTotalScore(simpleEvaluateScore.getTotalScore());
  255. teacher.setLowingScore(simpleEvaluateScore.getLowingScore());
  256. teacher.setEvaluateDetail(desScore.toString());
  257. smartEvaluateTeacherService.updateSmartEvaluateTeacher(teacher);
  258. return CommonResult.ok();
  259. }
  260. @PassToken
  261. public CommonResult getTeacherScoreDetail(Integer id) {
  262. SmartEvaluateTeacher teacher = smartEvaluateTeacherService.getSmartEvaluateTeacherById(id);
  263. if (teacher == null) {
  264. return CommonResult.fail("该条记录已删除");
  265. }
  266. if (teacher.getEvaluateDetail() == null) {
  267. SimpleScoreDetailList simpleScoreDetailList = smartScoreManageService.queryNoTeacherScoreDetail(teacher.getTerm());
  268. JSONObject resultJson = new JSONObject();
  269. resultJson.put("id", teacher.getId());
  270. resultJson.put("totalScore", 0);
  271. resultJson.put("lowingScore", 0);
  272. resultJson.put("simpleScoreList", simpleScoreDetailList);
  273. return CommonResult.ok(resultJson);
  274. }
  275. QueryWrapper<SmartScoreManage> queryWrapper1 = new QueryWrapper<>();
  276. queryWrapper1.eq("deleted", 0);
  277. queryWrapper1.eq("parent_id", 0);
  278. queryWrapper1.eq("term", teacher.getTerm());
  279. List<SmartScoreManage> scoreManageList = smartScoreManageService.getScoreManageByKey(queryWrapper1);
  280. int totalScore = 0;
  281. for (int i = 0; i < scoreManageList.size(); i++) {
  282. totalScore += scoreManageList.get(i).getScoreNum();
  283. }
  284. QueryWrapper<SmartEvaluateTdetail> queryWrapper2 = new QueryWrapper<>();
  285. queryWrapper2.eq("deleted", 0);
  286. queryWrapper2.eq("parent_id", 0);
  287. queryWrapper2.eq("term", teacher.getTerm());
  288. List<SmartEvaluateTdetail> scoreDetailList = smartEvaluateTdetailService.getEvaluateTdetailByKey(queryWrapper2);
  289. int ownTotalScore = 0;
  290. int lowingScore = 0;
  291. for (int i = 0; i < scoreDetailList.size(); i++) {
  292. ownTotalScore += scoreDetailList.get(i).getOwnNum();
  293. }
  294. lowingScore = totalScore - ownTotalScore;
  295. SimpleScoreDetailList simpleScoreDetailList = smartScoreManageService.queryTeacherScoreDetail(teacher.getTerm(), teacher.getCardNo());
  296. JSONObject resultJson = new JSONObject();
  297. resultJson.put("id", teacher.getId());
  298. resultJson.put("totalScore", ownTotalScore);
  299. resultJson.put("lowingScore", lowingScore);
  300. resultJson.put("simpleScoreList", simpleScoreDetailList);
  301. return CommonResult.ok(resultJson);
  302. }
  303. @PassToken
  304. public CommonResult getScoreComparison(Integer id) {
  305. SmartEvaluateTeacher teacher = smartEvaluateTeacherService.getSmartEvaluateTeacherById(id);
  306. QueryWrapper<SmartEvaluateTdetail> queryWrapper1 = new QueryWrapper<>();
  307. queryWrapper1.eq("deleted", 0);
  308. queryWrapper1.eq("parent_id", 0);
  309. queryWrapper1.eq("term", teacher.getTerm());
  310. queryWrapper1.eq("card_no", teacher.getCardNo());
  311. List<SmartEvaluateTdetail> detailList = smartEvaluateTdetailService.getEvaluateTdetailByKey(queryWrapper1);
  312. List<JSONObject> resultJson = new ArrayList<>();
  313. for (int i = 0; i < detailList.size(); i++) {
  314. JSONObject jsonObject = new JSONObject();
  315. SmartEvaluateTdetail smartEvaluateTdetail = detailList.get(i);
  316. double avgScore = smartEvaluateTdetailService.getAvgEvaluateScore(teacher.getTerm(), smartEvaluateTdetail.getScoreItem());
  317. jsonObject.put("name", smartEvaluateTdetail.getScoreItem());
  318. jsonObject.put("ownScore", smartEvaluateTdetail.getOwnNum());
  319. jsonObject.put("avgScore", avgScore);
  320. resultJson.add(jsonObject);
  321. }
  322. JSONObject jsonObject = new JSONObject();
  323. jsonObject.put("name", "扣");
  324. jsonObject.put("ownScore", teacher.getLowingScore());
  325. jsonObject.put("avgScore", smartEvaluateTeacherService.getAvgLowingScore(teacher.getTerm()));
  326. resultJson.add(jsonObject);
  327. return CommonResult.ok(resultJson);
  328. }
  329. @PassToken
  330. public CommonResult getScoreRank(int currentPage, int pageCount, String subject) {
  331. QueryWrapper<SmartEvaluateTeacher> queryWrapper1 = new QueryWrapper<>();
  332. queryWrapper1.eq("term", smartScoreManageService.getMaxTerm());
  333. queryWrapper1.eq("deleted", 0);
  334. if (subject != null) {
  335. queryWrapper1.eq("subject", subject);
  336. }
  337. queryWrapper1.orderByDesc("total_score");
  338. PageUtils<SmartEvaluateTeacher> list = smartEvaluateTeacherService.queryPageSmartEvaluateTeacher(currentPage, pageCount, queryWrapper1);
  339. return CommonResult.ok(list);
  340. }
  341. @PassToken
  342. public CommonResult queryTopSixTeacher() {
  343. List<EvaluateTeacherVo> teachers = smartEvaluateTeacherService.smartTopTeacherList();
  344. return CommonResult.ok(teachers);
  345. }
  346. @Override
  347. @DESRespondSecret(validated = true)
  348. public CommonResult rankingList(String cardNo) {
  349. LocalDateTime now = LocalDateTime.now();
  350. SmartSemester smartSemester = smartSemesterService.getSemester(now);
  351. if (ObjectUtils.isEmpty(smartSemester)) {
  352. return CommonResult.ok("当前时间不属于任何学期");
  353. }
  354. String term = smartSemester.getName();
  355. List<RankingVo> rankingList=smartEvaluateTeacherService.getRankingList(term);
  356. RankingVo vo=smartEvaluateTeacherService.getRanking(term,cardNo);
  357. HashMap<String,Object> map = new HashMap<>();
  358. map.put("list",rankingList);
  359. map.put("single",vo);
  360. return CommonResult.ok(map);
  361. }
  362. }