QuestionServiceImpl.java 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package com.example.onlinejudge.service.impl;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.example.onlinejudge.mapper.QuestionSubmitMapper;
  5. import com.example.onlinejudge.model.entity.QuestionSubmit;
  6. import com.example.onlinejudge.model.entity.result.Result;
  7. import com.example.onlinejudge.model.entity.result.ResultCode;
  8. import com.example.onlinejudge.model.enums.JudgeInfoMessageEnum;
  9. import com.example.onlinejudge.model.enums.QuestionSubmitLanguageEnum;
  10. import com.example.onlinejudge.service.QuestionService;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import java.util.Date;
  14. @Service
  15. public class QuestionServiceImpl implements QuestionService {
  16. @Autowired
  17. private QuestionSubmitMapper questionSubmitMapper;
  18. @Override
  19. public Result receiveCode(Long questionID, String code, String language, String userCases, Integer judgeMode) {
  20. Long userID = StpUtil.getLoginIdAsLong();
  21. if (questionID == null)
  22. return Result.error(ResultCode.PARAM_IS_INVALID);
  23. String chooseLanguage;
  24. if (QuestionSubmitLanguageEnum.JAVA.getValue().equals(language)) {
  25. chooseLanguage = QuestionSubmitLanguageEnum.JAVA.getValue();
  26. } else if (QuestionSubmitLanguageEnum.C.getValue().equals(language)) {
  27. chooseLanguage = QuestionSubmitLanguageEnum.C.getValue();
  28. } else if (QuestionSubmitLanguageEnum.CPP.getValue().equals(language)) {
  29. chooseLanguage = QuestionSubmitLanguageEnum.CPP.getValue();
  30. } else {
  31. return Result.error(ResultCode.PARAM_IS_INVALID.getCode(), "空或未知的编程语言");
  32. }
  33. if (!checkIsSubmitValid(userID, questionID))
  34. return Result.error(ResultCode.SYSTEM_ERROR.getCode(), "频繁提交,请稍后再试");
  35. QuestionSubmit questionSubmit;
  36. if (judgeMode == 0) {
  37. questionSubmit = new QuestionSubmit(
  38. null,
  39. chooseLanguage,
  40. code,
  41. JudgeInfoMessageEnum.WAITING.getValue(),
  42. 0, questionID, userID,
  43. new Date(),
  44. new Date(),
  45. null,
  46. null,
  47. 0,
  48. 0);
  49. } else {
  50. questionSubmit = new QuestionSubmit(
  51. null,
  52. chooseLanguage,
  53. code,
  54. JudgeInfoMessageEnum.WAITING.getValue(),
  55. 0, questionID, userID,
  56. new Date(),
  57. new Date(),
  58. userCases,
  59. null,
  60. 1,
  61. 0);
  62. }
  63. questionSubmitMapper.insert(questionSubmit);
  64. System.out.println(questionSubmit);
  65. // TODO: 1.提交代码到判题系统 2.更改数据库刷新状态 3.返回判题信息
  66. return Result.success();
  67. }
  68. @Override
  69. public boolean checkIsSubmitValid(Long userId, Long questionID) {
  70. QueryWrapper<QuestionSubmit> queryWrapper = new QueryWrapper<>();
  71. queryWrapper.eq("user_id", userId).eq("question_id", questionID).orderByDesc("create_time").last("limit 1");
  72. QuestionSubmit record = questionSubmitMapper.selectOne(queryWrapper);
  73. System.out.println(record);
  74. if (record == null) {
  75. return true;
  76. } else if (record.getStatus() == 0 || record.getStatus() == 1) {
  77. return false;
  78. } else return System.currentTimeMillis() - record.getCreateTime().getTime() >= 2000;
  79. }
  80. }