RealExamCollectionService.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376
  1. package com.ruoyi.sim.service.impl;
  2. import java.util.Collections;
  3. import java.util.List;
  4. import cn.ele6.catalyzer.ruoyi.vue.custom.Ele6RYBaseService;
  5. import cn.ele6.catalyzer.ruoyi.vue.enhance.TableDataInfo;
  6. import com.ruoyi.common.core.domain.AjaxResult;
  7. import com.ruoyi.common.utils.DateUtils;
  8. import com.ruoyi.sim.domain.vo.RealExamCollectionVo;
  9. import org.apache.commons.lang3.StringUtils;
  10. import org.springframework.beans.BeanUtils;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.context.annotation.Lazy;
  13. import org.springframework.stereotype.Service;
  14. import com.ruoyi.sim.mapper.RealExamCollectionMapper;
  15. import com.ruoyi.sim.domain.RealExamCollection;
  16. import org.springframework.transaction.annotation.Transactional;
  17. import org.springframework.web.bind.annotation.RequestBody;
  18. /**
  19. * 考试集合Service业务层处理
  20. *
  21. * @author tom
  22. * @date 2024-12-17
  23. */
  24. @Service
  25. public class RealExamCollectionService extends Ele6RYBaseService {
  26. @Autowired
  27. private RealExamCollectionMapper realExamCollectionMapper;
  28. /**
  29. * todo:依赖循环的问题。
  30. */
  31. @Autowired
  32. @Lazy
  33. private CommSendService commSendService;
  34. /**
  35. * 查询考试集合
  36. *
  37. * @param examCollectionId 考试集合主键
  38. * @return 考试集合
  39. */
  40. public RealExamCollection selectRealExamCollectionByExamCollectionId(Long examCollectionId) {
  41. return realExamCollectionMapper.selectRealExamCollectionByExamCollectionId(examCollectionId);
  42. }
  43. /**
  44. * 查询考试集合列表
  45. *
  46. * @param realExamCollection 考试集合
  47. * @return 考试集合
  48. */
  49. public List<RealExamCollection> selectRealExamCollectionList(RealExamCollection realExamCollection) {
  50. return realExamCollectionMapper.selectRealExamCollectionList(realExamCollection);
  51. }
  52. /**
  53. * 新增考试集合
  54. *
  55. * @param realExamCollection 考试集合
  56. * @return 结果
  57. */
  58. public int insertRealExamCollection(RealExamCollection realExamCollection) {
  59. realExamCollection.setCreateTime(DateUtils.getNowDate());
  60. return realExamCollectionMapper.insertRealExamCollection(realExamCollection);
  61. }
  62. /**
  63. * 修改考试集合
  64. *
  65. * @param realExamCollection 考试集合
  66. * @return 结果
  67. */
  68. public int updateRealExamCollection(RealExamCollection realExamCollection) {
  69. realExamCollection.setUpdateTime(DateUtils.getNowDate());
  70. return realExamCollectionMapper.updateRealExamCollection(realExamCollection);
  71. }
  72. /**
  73. * 批量删除考试集合
  74. *
  75. * @param examCollectionIds 需要删除的考试集合主键
  76. * @return 结果
  77. */
  78. public int deleteRealExamCollectionByExamCollectionIds(Long[] examCollectionIds) {
  79. return realExamCollectionMapper.deleteRealExamCollectionByExamCollectionIds(examCollectionIds);
  80. }
  81. /**
  82. * 删除考试集合信息
  83. *
  84. * @param examCollectionId 考试集合主键
  85. * @return 结果
  86. */
  87. public int deleteRealExamCollectionByExamCollectionId(Long examCollectionId) {
  88. return realExamCollectionMapper.deleteRealExamCollectionByExamCollectionId(examCollectionId);
  89. }
  90. // -------------------------------- tom add --------------------------------
  91. /**
  92. * [教师][分页]查询考试集合列表
  93. *
  94. * @param q
  95. * @return
  96. */
  97. public TableDataInfo listExamByTeacher(RealExamCollection q) {
  98. startPage();
  99. q.setExamCollectionType(RealExamCollection.Type.EXAM);
  100. List<RealExamCollectionVo> list = Collections.emptyList();
  101. realExamCollectionMapper.selectRealExamCollectionList(q)
  102. .forEach((RealExamCollection s) -> {
  103. RealExamCollectionVo t = new RealExamCollectionVo();
  104. BeanUtils.copyProperties(s, t);
  105. list.add(t);
  106. });
  107. return getDataTable(list);
  108. }
  109. /**
  110. * [教师][分页]查询练习集合列表
  111. *
  112. * @param p
  113. * @return
  114. */
  115. public TableDataInfo listExerciseByTeacher(RealExamCollection p) {
  116. startPage();
  117. p.setExamCollectionType(RealExamCollection.Type.EXERCISE);
  118. List<RealExamCollectionVo> list = Collections.emptyList();
  119. realExamCollectionMapper.selectRealExamCollectionList(p).forEach((RealExamCollection s) -> {
  120. RealExamCollectionVo t = new RealExamCollectionVo();
  121. BeanUtils.copyProperties(s, t);
  122. list.add(t);
  123. });
  124. return getDataTable(list);
  125. }
  126. /**
  127. * [教师]获取考试集合详细信息
  128. */
  129. public AjaxResult getExamInfoByTeacher(Long id) {
  130. RealExamCollection f = realExamCollectionMapper.
  131. selectRealExamCollectionByExamCollectionId(id);
  132. return AjaxResult.success(f);
  133. }
  134. /**
  135. * [教师]获取练习集合详细信息
  136. */
  137. public AjaxResult getExerciseInfoByTeacher(Long id) {
  138. RealExamCollection f = realExamCollectionMapper.
  139. selectRealExamCollectionByExamCollectionId(id);
  140. return AjaxResult.success(f);
  141. }
  142. /**
  143. * [教师]新增考试集合
  144. *
  145. * @param vo
  146. * @return
  147. */
  148. public AjaxResult addExam(@RequestBody RealExamCollectionVo vo) {
  149. // check
  150. // 日期检查
  151. if (StringUtils.isBlank(vo.getExamCollectionName())) {
  152. }
  153. //
  154. RealExamCollection p = new RealExamCollection();
  155. BeanUtils.copyProperties(vo, p);
  156. p.setExamCollectionType(RealExamCollection.Type.EXAM);
  157. insertRealExamCollection(p);
  158. return AjaxResult.success();
  159. }
  160. /**
  161. * [教师]新增练习集合
  162. *
  163. * @param vo
  164. * @return
  165. */
  166. public AjaxResult addExercise(@RequestBody RealExamCollectionVo vo) {
  167. // check
  168. //
  169. RealExamCollection p = new RealExamCollection();
  170. BeanUtils.copyProperties(vo, p);
  171. p.setExamCollectionType(RealExamCollection.Type.EXERCISE);
  172. insertRealExamCollection(p);
  173. return AjaxResult.success();
  174. }
  175. /**
  176. * [学院]新增自主练习集合
  177. * todo:界面入口
  178. *
  179. * @param vo
  180. * @return
  181. */
  182. public AjaxResult addSelfExercise(@RequestBody RealExamCollectionVo vo) {
  183. // check
  184. // do.
  185. RealExamCollection p = new RealExamCollection();
  186. BeanUtils.copyProperties(vo, p);
  187. p.setExamCollectionType(RealExamCollection.Type.SELF_EXERCISE);
  188. insertRealExamCollection(p);
  189. return AjaxResult.success();
  190. }
  191. /**
  192. * [教师]修改考试集合
  193. *
  194. * @param vo
  195. * @return
  196. */
  197. public AjaxResult editExam(@RequestBody RealExamCollectionVo vo) {
  198. // check
  199. //
  200. RealExamCollection p = new RealExamCollection();
  201. BeanUtils.copyProperties(vo, p);
  202. p.setExamCollectionType(RealExamCollection.Type.EXAM);
  203. updateRealExamCollection(p);
  204. // todo:更新关联
  205. return AjaxResult.success();
  206. }
  207. /**
  208. * [教师]修改练习集合
  209. *
  210. * @param vo
  211. * @return
  212. */
  213. public AjaxResult editExercise(@RequestBody RealExamCollectionVo vo) {
  214. // check
  215. // do.
  216. RealExamCollection p = new RealExamCollection();
  217. BeanUtils.copyProperties(vo, p);
  218. p.setExamCollectionType(RealExamCollection.Type.EXERCISE);
  219. updateRealExamCollection(p);
  220. // todo:更新关联
  221. return AjaxResult.success();
  222. }
  223. /**
  224. * [教师]删除多个考试集合
  225. *
  226. * @param ids
  227. * @return
  228. */
  229. public AjaxResult deleteExams(Long[] ids) {
  230. // check
  231. // do.
  232. deleteRealExamCollectionByExamCollectionIds(ids);
  233. // todo:更新关联
  234. return AjaxResult.success();
  235. }
  236. /**
  237. * [教师]删除多个练习集合
  238. *
  239. * @param ids
  240. * @return
  241. */
  242. public AjaxResult deleteExercises(Long[] ids) {
  243. // check
  244. // do.
  245. deleteRealExamCollectionByExamCollectionIds(ids);
  246. // todo:更新关联
  247. return AjaxResult.success();
  248. }
  249. /**
  250. * [教师]打开考试/练习集合
  251. *
  252. * @param examCollectionId
  253. * @return
  254. */
  255. @Transactional
  256. public AjaxResult open(final Long examCollectionId) {
  257. // check
  258. if (existOpened()) {
  259. return AjaxResult.error("已经有打开的考试或者练习!");
  260. }
  261. // check datetime todo:时间到了
  262. // do.
  263. // todo:强制停掉所有的自主练习
  264. RealExamCollection f = selectRealExamCollectionByExamCollectionId(examCollectionId);
  265. if (f == null) {
  266. return AjaxResult.error("考试集合不存在!");
  267. }
  268. // 修改考试集合状态。
  269. {
  270. f.setExamCollectionState(RealExamCollection.State.OPENED);
  271. updateRealExamCollection(f);
  272. }
  273. // 打开socket
  274. return commSendService.openSocket();
  275. }
  276. /**
  277. * 是否有一个open的考试集合。
  278. *
  279. * @return
  280. */
  281. public boolean existOpened() {
  282. return (selectRealExamCollectionOpened() != null);
  283. }
  284. public RealExamCollection selectRealExamCollectionOpened() {
  285. RealExamCollection q = new RealExamCollection();
  286. q.setExamCollectionState(RealExamCollection.State.OPENED);
  287. List<RealExamCollection> list = selectRealExamCollectionList(q);
  288. if (list != null && !list.isEmpty()) {
  289. return list.get(0);
  290. }
  291. return null;
  292. }
  293. /**
  294. * [教师]关闭考试/练习集合
  295. *
  296. * @param examCollectionId
  297. * @return
  298. */
  299. public AjaxResult close(final Long examCollectionId) {
  300. // check
  301. // todo:是否还有正在进行的考试
  302. RealExamCollection f = selectRealExamCollectionByExamCollectionId(examCollectionId);
  303. // 修改考试集合状态。
  304. {
  305. f.setExamCollectionState(RealExamCollection.State.CLOSED);
  306. updateRealExamCollection(f);
  307. }
  308. // 关闭socket
  309. return commSendService.closeSocket();
  310. }
  311. public void closeAllType(String type) {
  312. RealExamCollection q = new RealExamCollection();
  313. q.setExamCollectionType(type);
  314. selectRealExamCollectionList(q)
  315. .forEach((RealExamCollection c) -> {
  316. c.setExamCollectionState(RealExamCollection.State.CLOSED);
  317. });
  318. }
  319. public void closeAllTpye2and3() {
  320. closeAllType(RealExamCollection.Type.EXAM);
  321. closeAllType(RealExamCollection.Type.SELF_EXERCISE);
  322. }
  323. /**
  324. * @return 可以为null。
  325. */
  326. public RealExamCollection getCurrentExamCollection() {
  327. RealExamCollection q = new RealExamCollection();
  328. q.setExamCollectionState(RealExamCollection.State.OPENED);
  329. List<RealExamCollection> list = selectRealExamCollectionList(q);
  330. if (list == null || list.isEmpty()) {
  331. return null;
  332. }
  333. return list.get(0);
  334. }
  335. }