|
@@ -1,4 +1,86 @@
|
|
|
package com.example.onlinejudge.service.impl;
|
|
|
|
|
|
-public class QuestionServiceImpl {
|
|
|
+import cn.dev33.satoken.stp.StpUtil;
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
+import com.example.onlinejudge.mapper.QuestionSubmitMapper;
|
|
|
+import com.example.onlinejudge.model.entity.QuestionSubmit;
|
|
|
+import com.example.onlinejudge.model.entity.result.Result;
|
|
|
+import com.example.onlinejudge.model.entity.result.ResultCode;
|
|
|
+import com.example.onlinejudge.model.enums.JudgeInfoMessageEnum;
|
|
|
+import com.example.onlinejudge.model.enums.QuestionSubmitLanguageEnum;
|
|
|
+import com.example.onlinejudge.service.QuestionService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.util.Date;
|
|
|
+
|
|
|
+
|
|
|
+@Service
|
|
|
+public class QuestionServiceImpl implements QuestionService {
|
|
|
+ @Autowired
|
|
|
+ private QuestionSubmitMapper questionSubmitMapper;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Result receiveCode(Long questionID, String code, String language, String userCases, Integer judgeMode) {
|
|
|
+ Long userID = StpUtil.getLoginIdAsLong();
|
|
|
+ if (questionID == null)
|
|
|
+ return Result.error(ResultCode.PARAM_IS_INVALID);
|
|
|
+ String chooseLanguage;
|
|
|
+ if (QuestionSubmitLanguageEnum.JAVA.getValue().equals(language)) {
|
|
|
+ chooseLanguage = QuestionSubmitLanguageEnum.JAVA.getValue();
|
|
|
+ } else if (QuestionSubmitLanguageEnum.C.getValue().equals(language)) {
|
|
|
+ chooseLanguage = QuestionSubmitLanguageEnum.C.getValue();
|
|
|
+ } else if (QuestionSubmitLanguageEnum.CPP.getValue().equals(language)) {
|
|
|
+ chooseLanguage = QuestionSubmitLanguageEnum.CPP.getValue();
|
|
|
+ } else {
|
|
|
+ return Result.error(ResultCode.PARAM_IS_INVALID.getCode(), "空或未知的编程语言");
|
|
|
+ }
|
|
|
+ if (!checkIsSubmitValid(userID, questionID))
|
|
|
+ return Result.error(ResultCode.SYSTEM_ERROR.getCode(), "频繁提交,请稍后再试");
|
|
|
+ QuestionSubmit questionSubmit;
|
|
|
+ if (judgeMode == 0) {
|
|
|
+ questionSubmit = new QuestionSubmit(
|
|
|
+ null,
|
|
|
+ chooseLanguage,
|
|
|
+ code,
|
|
|
+ JudgeInfoMessageEnum.WAITING.getValue(),
|
|
|
+ 0, questionID, userID,
|
|
|
+ new Date(),
|
|
|
+ new Date(),
|
|
|
+ null,
|
|
|
+ null,
|
|
|
+ 0,
|
|
|
+ 0);
|
|
|
+ } else {
|
|
|
+ questionSubmit = new QuestionSubmit(
|
|
|
+ null,
|
|
|
+ chooseLanguage,
|
|
|
+ code,
|
|
|
+ JudgeInfoMessageEnum.WAITING.getValue(),
|
|
|
+ 0, questionID, userID,
|
|
|
+ new Date(),
|
|
|
+ new Date(),
|
|
|
+ userCases,
|
|
|
+ null,
|
|
|
+ 1,
|
|
|
+ 0);
|
|
|
+ }
|
|
|
+ questionSubmitMapper.insert(questionSubmit);
|
|
|
+ System.out.println(questionSubmit);
|
|
|
+
|
|
|
+ return Result.success();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public boolean checkIsSubmitValid(Long userId, Long questionID) {
|
|
|
+ QueryWrapper<QuestionSubmit> queryWrapper = new QueryWrapper<>();
|
|
|
+ queryWrapper.eq("user_id", userId).eq("question_id", questionID).orderByDesc("create_time").last("limit 1");
|
|
|
+ QuestionSubmit record = questionSubmitMapper.selectOne(queryWrapper);
|
|
|
+ System.out.println(record);
|
|
|
+ if (record == null) {
|
|
|
+ return true;
|
|
|
+ } else if (record.getStatus() == 0 || record.getStatus() == 1) {
|
|
|
+ return false;
|
|
|
+ } else return System.currentTimeMillis() - record.getCreateTime().getTime() >= 2000;
|
|
|
+ }
|
|
|
}
|