1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- package com.example.onlinejudge.service.impl;
- 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);
- // TODO: 1.提交代码到判题系统 2.更改数据库刷新状态 3.返回判题信息
- 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;
- }
- }
|