Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
school-paper-admin
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
school-paper
school-paper-admin
Commits
c8c6c966
Commit
c8c6c966
authored
Jul 26, 2023
by
Wangmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改开始答题返回数据、试卷试题返回逻辑,交卷计算逻辑
parent
d2840902
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
206 additions
and
96 deletions
+206
-96
school-paper/src/main/java/com/ruoyi/school/paper/controller/TestPaperController.java
+9
-0
school-paper/src/main/java/com/ruoyi/school/paper/domain/bo/DbQuestionBankBo.java
+2
-1
school-paper/src/main/java/com/ruoyi/school/paper/domain/bo/TestPaperAnswerBo.java
+1
-1
school-paper/src/main/java/com/ruoyi/school/paper/domain/bo/TestPaperAnswerItemBo.java
+2
-1
school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/OptionsVo.java
+2
-2
school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/TestPaperVo.java
+0
-7
school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/TestQuestionItemVo.java
+5
-0
school-paper/src/main/java/com/ruoyi/school/paper/mapper/DbQuestionBankTestPaperMapper.java
+5
-4
school-paper/src/main/java/com/ruoyi/school/paper/mapper/DbTestPaperRecordMapper.java
+2
-0
school-paper/src/main/java/com/ruoyi/school/paper/service/IDbQuestionBankTestPaperService.java
+3
-2
school-paper/src/main/java/com/ruoyi/school/paper/service/IDbTestPaperRecordService.java
+10
-0
school-paper/src/main/java/com/ruoyi/school/paper/service/ITestPaperService.java
+12
-0
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbErrorListServiceImpl.java
+14
-14
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbQuestionBankServiceImpl.java
+6
-6
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbQuestionBankTestPaperServiceImpl.java
+13
-11
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbTestPaperRecordServiceImpl.java
+16
-4
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/TestPaperServiceImpl.java
+88
-23
school-paper/src/main/resources/mapper/school-paper/DbQuestionBankTestPaperMapper.xml
+16
-20
No files found.
school-paper/src/main/java/com/ruoyi/school/paper/controller/TestPaperController.java
View file @
c8c6c966
...
...
@@ -2,10 +2,13 @@ package com.ruoyi.school.paper.controller;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.domain.R
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.common.enums.BusinessType
;
import
com.ruoyi.school.paper.domain.bo.TestPaperAnswerBo
;
import
com.ruoyi.school.paper.domain.vo.TestPaperVo
;
import
com.ruoyi.school.paper.domain.vo.TestQuestionItemVo
;
import
com.ruoyi.school.paper.service.ITestPaperService
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.validation.annotation.Validated
;
...
...
@@ -42,6 +45,12 @@ public class TestPaperController extends BaseController {
return
R
.
ok
(
testPaperService
.
generateTestPaper
(
userId
,
paperId
));
}
@Log
(
title
=
"下一题"
,
businessType
=
BusinessType
.
OTHER
)
@PostMapping
(
"/next"
)
public
TableDataInfo
<
TestQuestionItemVo
>
nextQuestion
(
@RequestBody
TestPaperAnswerBo
request
,
@RequestBody
PageQuery
pageQuery
)
{
return
testPaperService
.
nextQuestion
(
request
,
pageQuery
);
}
/**
* [小程序端]交卷
*
...
...
school-paper/src/main/java/com/ruoyi/school/paper/domain/bo/DbQuestionBankBo.java
View file @
c8c6c966
...
...
@@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode;
import
javax.validation.constraints.NotBlank
;
import
javax.validation.constraints.NotNull
;
/**
* 题库主业务对象 db_question_bank
*
...
...
@@ -48,7 +49,7 @@ public class DbQuestionBankBo extends BaseEntity {
* 类型:1典例精讲
*/
// @NotNull(message = "类型:1典例精讲不能为空", groups = { AddGroup.class, EditGroup.class })
private
int
type
;
private
Integer
type
;
/**
* 强度:1基础,2中等,3提高
...
...
school-paper/src/main/java/com/ruoyi/school/paper/domain/bo/TestPaperAnswerBo.java
View file @
c8c6c966
...
...
@@ -23,7 +23,7 @@ public class TestPaperAnswerBo {
private
Long
recordId
;
/**
*
试卷考题答案
*
考生作答内容
*/
private
List
<
TestPaperAnswerItemBo
>
answers
;
}
school-paper/src/main/java/com/ruoyi/school/paper/domain/bo/TestPaperAnswerItemBo.java
View file @
c8c6c966
...
...
@@ -5,6 +5,7 @@ import com.ruoyi.common.core.validate.EditGroup;
import
lombok.Data
;
import
javax.validation.constraints.NotNull
;
import
java.io.Serializable
;
/**
* 答题卷结果单项
...
...
@@ -14,7 +15,7 @@ import javax.validation.constraints.NotNull;
* @version 1.0
*/
@Data
public
class
TestPaperAnswerItemBo
{
public
class
TestPaperAnswerItemBo
implements
Serializable
{
/**
* 问题ID
...
...
school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/OptionsVo.java
View file @
c8c6c966
...
...
@@ -14,10 +14,10 @@ public class OptionsVo {
/**
* 标签名
*/
private
String
t
ag
;
private
String
optionT
ag
;
/**
* 内容
*/
private
String
c
ontent
;
private
String
optionC
ontent
;
}
school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/TestPaperVo.java
View file @
c8c6c966
...
...
@@ -2,8 +2,6 @@ package com.ruoyi.school.paper.domain.vo;
import
lombok.Data
;
import
java.util.List
;
/**
* 学生考试 试题实体
* <p>created in 2023/7/21 16:29
...
...
@@ -24,9 +22,4 @@ public class TestPaperVo {
*/
private
Long
recordId
;
/**
* 试题
*/
private
List
<
TestQuestionsVo
>
questions
;
}
school-paper/src/main/java/com/ruoyi/school/paper/domain/vo/TestQuestionItemVo.java
View file @
c8c6c966
...
...
@@ -24,6 +24,11 @@ public class TestQuestionItemVo {
private
String
topic
;
/**
* 我的答案
*/
private
String
answer
;
/**
* 选择题选项
*/
@JsonInclude
(
JsonInclude
.
Include
.
NON_EMPTY
)
...
...
school-paper/src/main/java/com/ruoyi/school/paper/mapper/DbQuestionBankTestPaperMapper.java
View file @
c8c6c966
package
com
.
ruoyi
.
school
.
paper
.
mapper
;
import
com.baomidou.mybatisplus.core.metadata.IPage
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.ruoyi.common.core.mapper.BaseMapperPlus
;
import
com.ruoyi.school.paper.domain.DbQuestionBankTestPaper
;
import
com.ruoyi.school.paper.domain.bo.TestPaperAnswerBo
;
import
com.ruoyi.school.paper.domain.vo.DbQuestionBankTestPaperVo
;
import
com.ruoyi.school.paper.domain.vo.TestQuestion
s
Vo
;
import
com.ruoyi.school.paper.domain.vo.TestQuestion
Item
Vo
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
import
java.util.List
;
/**
* 试卷题库主Mapper接口
*
...
...
@@ -24,6 +25,6 @@ public interface DbQuestionBankTestPaperMapper extends BaseMapperPlus<DbQuestion
*
* @return 试卷
*/
List
<
TestQuestionsVo
>
selectTestPaperQuestion
(
@Param
(
"paperId"
)
Long
paperId
);
Page
<
TestQuestionItemVo
>
selectTestPaperQuestion
(
IPage
<
Object
>
iPage
,
@Param
(
"condition"
)
TestPaperAnswerBo
request
);
}
school-paper/src/main/java/com/ruoyi/school/paper/mapper/DbTestPaperRecordMapper.java
View file @
c8c6c966
...
...
@@ -5,6 +5,7 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
import
com.ruoyi.school.paper.domain.DbTestPaperRecord
;
import
com.ruoyi.school.paper.domain.bo.DbTestPaperRecordBo
;
import
com.ruoyi.school.paper.domain.vo.DbTestPaperRecordVo
;
import
org.apache.ibatis.annotations.Mapper
;
import
org.apache.ibatis.annotations.Param
;
/**
...
...
@@ -13,6 +14,7 @@ import org.apache.ibatis.annotations.Param;
* @author zyf
* @date 2023-07-20
*/
@Mapper
public
interface
DbTestPaperRecordMapper
extends
BaseMapperPlus
<
DbTestPaperRecordMapper
,
DbTestPaperRecord
,
DbTestPaperRecordVo
>
{
Page
<
DbTestPaperRecordVo
>
getTestPaperlist
(
Page
<
Object
>
build
,
@Param
(
"bo"
)
DbTestPaperRecordBo
bo
);
...
...
school-paper/src/main/java/com/ruoyi/school/paper/service/IDbQuestionBankTestPaperService.java
View file @
c8c6c966
...
...
@@ -3,8 +3,9 @@ package com.ruoyi.school.paper.service;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.school.paper.domain.bo.DbQuestionBankTestPaperBo
;
import
com.ruoyi.school.paper.domain.bo.TestPaperAnswerBo
;
import
com.ruoyi.school.paper.domain.vo.DbQuestionBankTestPaperVo
;
import
com.ruoyi.school.paper.domain.vo.TestQuestion
s
Vo
;
import
com.ruoyi.school.paper.domain.vo.TestQuestion
Item
Vo
;
import
java.util.Collection
;
import
java.util.List
;
...
...
@@ -53,5 +54,5 @@ public interface IDbQuestionBankTestPaperService {
*
* @return 试卷
*/
List
<
TestQuestionsVo
>
getTestPaperQuestion
(
Long
paperId
);
TableDataInfo
<
TestQuestionItemVo
>
getTestPaperQuestion
(
TestPaperAnswerBo
request
,
PageQuery
pageQuery
);
}
school-paper/src/main/java/com/ruoyi/school/paper/service/IDbTestPaperRecordService.java
View file @
c8c6c966
package
com
.
ruoyi
.
school
.
paper
.
service
;
import
com.baomidou.mybatisplus.core.conditions.Wrapper
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.school.paper.domain.DbTestPaperRecord
;
import
com.ruoyi.school.paper.domain.bo.DbTestPaperRecordBo
;
import
com.ruoyi.school.paper.domain.vo.DbTestPaperRecordVo
;
...
...
@@ -47,4 +49,12 @@ public interface IDbTestPaperRecordService {
Boolean
deleteWithValidByIds
(
Collection
<
Long
>
ids
,
Boolean
isValid
);
TableDataInfo
<
DbTestPaperRecordVo
>
testPaperlist
(
DbTestPaperRecordBo
bo
,
PageQuery
pageQuery
);
/**
* 查询某条考试记录
*
* @param wrapper 查询条件
* @return 结果
*/
DbTestPaperRecord
getOne
(
Wrapper
<
DbTestPaperRecord
>
wrapper
);
}
school-paper/src/main/java/com/ruoyi/school/paper/service/ITestPaperService.java
View file @
c8c6c966
package
com
.
ruoyi
.
school
.
paper
.
service
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.school.paper.domain.bo.TestPaperAnswerBo
;
import
com.ruoyi.school.paper.domain.vo.TestPaperVo
;
import
com.ruoyi.school.paper.domain.vo.TestQuestionItemVo
;
/**
* 考试接口
...
...
@@ -30,4 +33,13 @@ public interface ITestPaperService {
* @return 操作结果
*/
boolean
paperTestEnd
(
TestPaperAnswerBo
bo
);
/**
* 下一题
*
* @param request 请求参数 【注】考试记录ID必传
* @param pageQuery 分页
* @return 考试题目
*/
TableDataInfo
<
TestQuestionItemVo
>
nextQuestion
(
TestPaperAnswerBo
request
,
PageQuery
pageQuery
);
}
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbErrorListServiceImpl.java
View file @
c8c6c966
package
com
.
ruoyi
.
school
.
paper
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.baomidou.mybatisplus.core.toolkit.CollectionUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.CollectionUtils
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.school.paper.domain.DbErrorList
;
import
com.ruoyi.school.paper.domain.DbQuestionBankAnswerTestPaper
;
import
com.ruoyi.school.paper.domain.bo.DbErrorListBo
;
import
com.ruoyi.school.paper.domain.request.ErrorTopicRequest
;
import
com.ruoyi.school.paper.domain.vo.*
;
import
com.ruoyi.school.paper.mapper.DbErrorListMapper
;
import
com.ruoyi.school.paper.mapper.DbQuestionBankAnswerTestPaperMapper
;
import
com.ruoyi.school.paper.service.IDbErrorListService
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Service
;
import
com.ruoyi.school.paper.domain.bo.DbErrorListBo
;
import
com.ruoyi.school.paper.domain.DbErrorList
;
import
com.ruoyi.school.paper.mapper.DbErrorListMapper
;
import
com.ruoyi.school.paper.service.IDbErrorListService
;
import
java.util.*
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Optional
;
import
java.util.stream.Collectors
;
/**
...
...
@@ -149,11 +151,9 @@ public class DbErrorListServiceImpl implements IDbErrorListService {
if
(
CollectionUtils
.
isNotEmpty
(
records
))
{
records
.
forEach
(
myErrorTopicListVo
->
{
//根据每到题目查询对应的选项
Optional
.
ofNullable
(
dbQuestionBankAnswerTestPaperMapper
.
selectList
(
Wrappers
.<
DbQuestionBankAnswerTestPaper
>
lambdaQuery
().
eq
(
DbQuestionBankAnswerTestPaper:
:
getQuestionBankId
,
myErrorTopicListVo
.
getQuestionBankId
())))
.
ifPresent
(
dbQuestionBankAnswerTestPapers
->
{
//拿到对应选项填充至每道错题当中
myErrorTopicListVo
.
setOptions
(
dbQuestionBankAnswerTestPapers
);
}
);
Optional
.
ofNullable
(
dbQuestionBankAnswerTestPaperMapper
.
selectList
(
Wrappers
.<
DbQuestionBankAnswerTestPaper
>
lambdaQuery
().
eq
(
DbQuestionBankAnswerTestPaper:
:
getQuestionBankId
,
myErrorTopicListVo
.
getQuestionBankId
())))
.
ifPresent
(
myErrorTopicListVo:
:
setOptions
);
});
}
return
TableDataInfo
.
build
(
myErrorTopicListVoPage
);
...
...
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbQuestionBankServiceImpl.java
View file @
c8c6c966
...
...
@@ -40,7 +40,7 @@ public class DbQuestionBankServiceImpl implements IDbQuestionBankService {
private
final
DbQuestionBankAnswerMapper
questionBankAnswerMapper
;
private
String
DEFAULT_QUESTIOBN_BANK_KEY
=
"question_bank:default_question_bank"
;
private
final
String
DEFAULT_QUESTIOBN_BANK_KEY
=
"question_bank:default_question_bank"
;
/**
* 查询题库主
...
...
@@ -80,7 +80,7 @@ public class DbQuestionBankServiceImpl implements IDbQuestionBankService {
lqw
.
eq
(
bo
.
getCategoryId
()
!=
null
,
DbQuestionBank:
:
getCategoryId
,
bo
.
getCategoryId
());
lqw
.
eq
(
bo
.
getSpecies
()
!=
null
,
DbQuestionBank:
:
getSpecies
,
bo
.
getSpecies
());
lqw
.
eq
(
bo
.
getPhaseId
()
!=
null
,
DbQuestionBank:
:
getPhaseId
,
bo
.
getPhaseId
());
lqw
.
eq
(
bo
.
getType
()
>
-
1
,
DbQuestionBank:
:
getType
,
bo
.
getType
());
lqw
.
eq
(
bo
.
getType
()
!=
null
,
DbQuestionBank:
:
getType
,
bo
.
getType
());
lqw
.
eq
(
bo
.
getIntensity
()
!=
null
,
DbQuestionBank:
:
getIntensity
,
bo
.
getIntensity
());
lqw
.
eq
(
StringUtils
.
isNotBlank
(
bo
.
getTopic
()),
DbQuestionBank:
:
getTopic
,
bo
.
getTopic
());
lqw
.
eq
(
StringUtils
.
isNotBlank
(
bo
.
getRightAnswers
()),
DbQuestionBank:
:
getRightAnswers
,
bo
.
getRightAnswers
());
...
...
@@ -127,7 +127,7 @@ public class DbQuestionBankServiceImpl implements IDbQuestionBankService {
RedisUtils
.
setCacheObject
(
DEFAULT_QUESTIOBN_BANK_KEY
,
JsonUtils
.
toJsonString
(
questionBanks
));
// 判断是否选择题,是则添加选择题选项
if
(
insertRecord
.
getSpecies
()
==
2
&&
CollUtil
.
isNotEmpty
(
bo
.
getOptions
()))
{
if
(
insertRecord
.
getSpecies
()
==
2
&&
CollUtil
.
isNotEmpty
(
bo
.
getOptions
()))
{
List
<
DbQuestionBankAnswer
>
options
=
new
ArrayList
<>(
bo
.
getOptions
().
size
());
for
(
DbQuestionBankAnswerBo
option
:
bo
.
getOptions
())
{
DbQuestionBankAnswer
bankAnswer
=
BeanUtil
.
toBean
(
option
,
DbQuestionBankAnswer
.
class
);
...
...
@@ -160,7 +160,7 @@ public class DbQuestionBankServiceImpl implements IDbQuestionBankService {
validEntityBeforeSave
(
updateRecord
);
boolean
questionUpdateFlag
=
baseMapper
.
updateById
(
updateRecord
)
>
0
;
// 若为选择题则同步插入至选项答案中
boolean
answerUpdateFlag
=
fals
e
;
boolean
answerUpdateFlag
=
tru
e
;
if
(
questionUpdateFlag
)
{
// 将新增的题目添加到redis题库缓存中
List
<
DbQuestionBank
>
questionBanks
=
JsonUtils
.
parseArray
(
RedisUtils
.
getCacheObject
(
DEFAULT_QUESTIOBN_BANK_KEY
),
DbQuestionBank
.
class
);
...
...
@@ -191,7 +191,7 @@ public class DbQuestionBankServiceImpl implements IDbQuestionBankService {
* 保存前的数据校验
*/
private
void
validEntityBeforeSave
(
DbQuestionBank
entity
)
{
//TODO 做一些数据校验,如唯一约束
//
TODO 做一些数据校验,如唯一约束
}
/**
...
...
@@ -200,7 +200,7 @@ public class DbQuestionBankServiceImpl implements IDbQuestionBankService {
@Override
public
Boolean
deleteWithValidByIds
(
Collection
<
Long
>
ids
,
Boolean
isValid
)
{
if
(
isValid
)
{
//TODO 做一些业务上的校验,判断是否需要校验
//
TODO 做一些业务上的校验,判断是否需要校验
}
return
baseMapper
.
deleteBatchIds
(
ids
)
>
0
;
}
...
...
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbQuestionBankTestPaperServiceImpl.java
View file @
c8c6c966
package
com
.
ruoyi
.
school
.
paper
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.ruoyi.school.paper.domain.vo.TestQuestionsVo
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Service
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.school.paper.domain.DbQuestionBankTestPaper
;
import
com.ruoyi.school.paper.domain.bo.DbQuestionBankTestPaperBo
;
import
com.ruoyi.school.paper.domain.bo.TestPaperAnswerBo
;
import
com.ruoyi.school.paper.domain.vo.DbQuestionBankTestPaperVo
;
import
com.ruoyi.school.paper.domain.
DbQuestionBankTestPaper
;
import
com.ruoyi.school.paper.domain.
vo.TestQuestionItemVo
;
import
com.ruoyi.school.paper.mapper.DbQuestionBankTestPaperMapper
;
import
com.ruoyi.school.paper.service.IDbQuestionBankTestPaperService
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Service
;
import
java.util.Collection
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.Collection
;
/**
* 试卷题库主Service业务层处理
...
...
@@ -120,7 +121,8 @@ public class DbQuestionBankTestPaperServiceImpl implements IDbQuestionBankTestPa
}
@Override
public
List
<
TestQuestionsVo
>
getTestPaperQuestion
(
Long
paperId
)
{
return
baseMapper
.
selectTestPaperQuestion
(
paperId
);
public
TableDataInfo
<
TestQuestionItemVo
>
getTestPaperQuestion
(
TestPaperAnswerBo
request
,
PageQuery
pageQuery
)
{
Page
<
TestQuestionItemVo
>
result
=
baseMapper
.
selectTestPaperQuestion
(
pageQuery
.
build
(),
request
);
return
TableDataInfo
.
build
(
result
);
}
}
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbTestPaperRecordServiceImpl.java
View file @
c8c6c966
package
com
.
ruoyi
.
school
.
paper
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
com.baomidou.mybatisplus.core.conditions.Wrapper
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
...
...
@@ -34,7 +35,7 @@ public class DbTestPaperRecordServiceImpl implements IDbTestPaperRecordService {
* 查询答题记录
*/
@Override
public
DbTestPaperRecordVo
queryById
(
Long
id
){
public
DbTestPaperRecordVo
queryById
(
Long
id
)
{
return
baseMapper
.
selectVoById
(
id
);
}
...
...
@@ -94,8 +95,8 @@ public class DbTestPaperRecordServiceImpl implements IDbTestPaperRecordService {
/**
* 保存前的数据校验
*/
private
void
validEntityBeforeSave
(
DbTestPaperRecord
entity
){
//TODO 做一些数据校验,如唯一约束
private
void
validEntityBeforeSave
(
DbTestPaperRecord
entity
)
{
//
TODO 做一些数据校验,如唯一约束
}
/**
...
...
@@ -104,7 +105,7 @@ public class DbTestPaperRecordServiceImpl implements IDbTestPaperRecordService {
@Override
public
Boolean
deleteWithValidByIds
(
Collection
<
Long
>
ids
,
Boolean
isValid
)
{
if
(
isValid
)
{
//TODO 做一些业务上的校验,判断是否需要校验
//
TODO 做一些业务上的校验,判断是否需要校验
}
return
baseMapper
.
deleteBatchIds
(
ids
)
>
0
;
}
...
...
@@ -121,4 +122,15 @@ public class DbTestPaperRecordServiceImpl implements IDbTestPaperRecordService {
Page
<
DbTestPaperRecordVo
>
result
=
baseMapper
.
getTestPaperlist
(
pageQuery
.
build
(),
bo
);
return
TableDataInfo
.
build
(
result
);
}
/**
* 查询某条考试记录
*
* @param wrapper 擦汗寻条件
* @return 结果
*/
@Override
public
DbTestPaperRecord
getOne
(
Wrapper
<
DbTestPaperRecord
>
wrapper
)
{
return
baseMapper
.
selectOne
(
wrapper
);
}
}
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/TestPaperServiceImpl.java
View file @
c8c6c966
package
com
.
ruoyi
.
school
.
paper
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.common.exception.ServiceException
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.redis.RedisUtils
;
import
com.ruoyi.school.paper.domain.DbTestPaperRecord
;
import
com.ruoyi.school.paper.domain.DbTestPaperRecordDetail
;
import
com.ruoyi.school.paper.domain.bo.DbQuestionBankTestPaperBo
;
import
com.ruoyi.school.paper.domain.bo.DbTestPaperRecordBo
;
import
com.ruoyi.school.paper.domain.bo.TestPaperAnswerBo
;
import
com.ruoyi.school.paper.domain.bo.TestPaperAnswerItemBo
;
import
com.ruoyi.school.paper.domain.vo.DbQuestionBankTestPaperVo
;
import
com.ruoyi.school.paper.domain.vo.DbTestPaperVo
;
import
com.ruoyi.school.paper.domain.vo.TestPaperVo
;
import
com.ruoyi.school.paper.domain.vo.TestQuestion
s
Vo
;
import
com.ruoyi.school.paper.domain.vo.TestQuestion
Item
Vo
;
import
com.ruoyi.school.paper.service.*
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Service
;
...
...
@@ -20,6 +28,7 @@ import java.math.BigDecimal;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.Objects
;
import
java.util.Optional
;
/**
* <p>created in 2023/7/21 17:03
...
...
@@ -39,6 +48,9 @@ public class TestPaperServiceImpl implements ITestPaperService {
private
final
IDbTestPaperRecordDetailService
paperRecordDetailService
;
private
final
String
TEST_PAPER_ANSWER_KEY
=
"test_paper_record_detail"
;
private
final
String
TEST_PAPER_ANSWER_KEY_FORMAT
=
"%s:record:%d:question:%d"
;
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
TestPaperVo
generateTestPaper
(
Long
userId
,
Long
paperId
)
{
...
...
@@ -47,45 +59,98 @@ public class TestPaperServiceImpl implements ITestPaperService {
DbTestPaperVo
dbTestPaperVo
=
testPaperService
.
queryById
(
paperId
);
Objects
.
requireNonNull
(
dbTestPaperVo
,
"未检查到目标试卷"
);
result
.
setTestName
(
dbTestPaperVo
.
getTestName
());
// 判断是否有该生的未交卷答题记录
LambdaQueryWrapper
<
DbTestPaperRecord
>
paperRecordWrapper
=
new
LambdaQueryWrapper
<>();
paperRecordWrapper
.
eq
(
DbTestPaperRecord:
:
getTestPaperId
,
paperId
)
.
eq
(
DbTestPaperRecord:
:
getUserId
,
userId
)
.
eq
(
DbTestPaperRecord:
:
getStatus
,
0
);
DbTestPaperRecord
dbTestPaperRecord
;
if
((
dbTestPaperRecord
=
paperRecordService
.
getOne
(
paperRecordWrapper
))
==
null
)
{
// 插入学生-试卷考试记录信息
DbTestPaperRecordBo
dbTestPaperRecord
=
new
DbTestPaperRecordBo
();
dbTestPaperRecord
.
setTestPaperId
(
paperId
);
dbTestPaperRecord
.
setUserId
(
userId
);
dbTestPaperRecord
.
setStatus
(
0
);
boolean
recordInsertFlag
=
paperRecordService
.
insertByBo
(
dbTestPaperRecord
);
DbTestPaperRecordBo
insertTestPaperRecord
=
new
DbTestPaperRecordBo
();
insertTestPaperRecord
.
setTestPaperId
(
paperId
);
insertTestPaperRecord
.
setUserId
(
userId
);
// 状态设置为考试中
insertTestPaperRecord
.
setStatus
(
0
);
boolean
recordInsertFlag
=
paperRecordService
.
insertByBo
(
insertTestPaperRecord
);
if
(!
recordInsertFlag
)
{
throw
new
ServiceException
(
"考试记录生成失败"
);
}
dbTestPaperRecord
=
BeanUtil
.
copyProperties
(
insertTestPaperRecord
,
DbTestPaperRecord
.
class
);
}
result
.
setRecordId
(
dbTestPaperRecord
.
getId
());
// 查询试卷试题
List
<
TestQuestionsVo
>
testPaperQuestion
=
bankTestPaperService
.
getTestPaperQuestion
(
paperId
);
result
.
setQuestions
(
testPaperQuestion
);
return
result
;
}
/**
* 下一题
*
* @param request 请求参数 【注】考试记录ID必传
* @param pageQuery 分页
* @return 考试题目
*/
@Override
public
boolean
paperTestEnd
(
TestPaperAnswerBo
bo
)
{
List
<
TestPaperAnswerItemBo
>
answers
=
bo
.
getAnswers
();
if
(
CollUtil
.
isEmpty
(
answers
))
{
return
true
;
public
TableDataInfo
<
TestQuestionItemVo
>
nextQuestion
(
TestPaperAnswerBo
request
,
PageQuery
pageQuery
)
{
// 若传入了本题的结果,则先将结果存入Redis中
if
(
CollUtil
.
isNotEmpty
(
request
.
getAnswers
()))
{
request
.
getAnswers
().
forEach
(
answer
->
{
String
key
=
String
.
format
(
TEST_PAPER_ANSWER_KEY_FORMAT
,
TEST_PAPER_ANSWER_KEY
,
request
.
getRecordId
(),
answer
.
getId
());
RedisUtils
.
setCacheObject
(
key
,
answer
);
});
}
// 返回下一题
TableDataInfo
<
TestQuestionItemVo
>
result
=
bankTestPaperService
.
getTestPaperQuestion
(
request
,
pageQuery
);
List
<
TestQuestionItemVo
>
rows
=
result
.
getRows
();
// 查询Redis缓存中是否存在该生已作答过的答案
rows
.
forEach
(
question
->
{
String
key
=
String
.
format
(
TEST_PAPER_ANSWER_KEY_FORMAT
,
TEST_PAPER_ANSWER_KEY
,
request
.
getRecordId
(),
question
.
getId
());
TestPaperAnswerItemBo
cacheObject
=
RedisUtils
.
getCacheObject
(
key
);
Optional
.
ofNullable
(
cacheObject
).
ifPresent
(
cache
->
{
question
.
setAnswer
(
cache
.
getAnswer
());
});
});
return
result
;
}
List
<
DbTestPaperRecordDetail
>
insertPaperRecords
=
new
ArrayList
<>(
answers
.
size
());
for
(
TestPaperAnswerItemBo
answer
:
answers
)
{
/**
* 交卷
*
* @param bo 试题类容
* @return 操作结果
*/
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
boolean
paperTestEnd
(
TestPaperAnswerBo
bo
)
{
// 查询试卷对应所有的题目
DbTestPaperRecord
testPaperRecord
=
paperRecordService
.
getOne
(
Wrappers
.<
DbTestPaperRecord
>
lambdaQuery
().
eq
(
DbTestPaperRecord:
:
getId
,
bo
.
getRecordId
()));
Objects
.
requireNonNull
(
testPaperRecord
,
"未检查到合法考试记录"
);
DbQuestionBankTestPaperBo
queryCondition
=
new
DbQuestionBankTestPaperBo
();
queryCondition
.
setTestPaperId
(
testPaperRecord
.
getTestPaperId
());
List
<
DbQuestionBankTestPaperVo
>
questionList
=
bankTestPaperService
.
queryList
(
queryCondition
);
List
<
DbTestPaperRecordDetail
>
insertPaperRecords
=
new
ArrayList
<>(
questionList
.
size
());
// 装载学生考试答题卡
questionList
.
forEach
(
question
->
{
DbTestPaperRecordDetail
buffer
=
new
DbTestPaperRecordDetail
();
buffer
.
setRecordId
(
bo
.
getRecordId
());
buffer
.
setQuestionBankId
(
answer
.
getId
());
buffer
.
setAnswer
(
answer
.
getAnswer
());
DbQuestionBankTestPaperVo
bankTestPaperVo
=
bankTestPaperService
.
queryById
(
answer
.
getId
());
buffer
.
setQuestionBankId
(
question
.
getId
());
// 查询Redis中是否有该题的提交记录
String
key
=
String
.
format
(
TEST_PAPER_ANSWER_KEY_FORMAT
,
TEST_PAPER_ANSWER_KEY
,
bo
.
getRecordId
(),
question
.
getId
());
TestPaperAnswerItemBo
cacheObject
=
RedisUtils
.
getCacheObject
(
key
);
Optional
.
ofNullable
(
cacheObject
).
ifPresent
(
cache
->
{
buffer
.
setAnswer
(
cache
.
getAnswer
());
});
// 计算选择题分数
DbQuestionBankTestPaperVo
bankTestPaperVo
=
bankTestPaperService
.
queryById
(
question
.
getId
());
buffer
.
setCorrectAnswer
(
StringUtils
.
isNotEmpty
(
bankTestPaperVo
.
getRightAnswers
())
?
bankTestPaperVo
.
getRightAnswers
()
:
bankTestPaperVo
.
getRightAnswersPic
());
if
(
bankTestPaperVo
.
getSpecies
().
equals
(
2
))
{
buffer
.
setScore
(
answer
.
getAnswer
().
equals
(
bankTestPaperVo
.
getRightAnswers
())
?
BigDecimal
.
valueOf
(
bankTestPaperVo
.
getScore
())
:
BigDecimal
.
ZERO
);
buffer
.
setScore
(
bankTestPaperVo
.
getRightAnswers
().
equals
(
buffer
.
getAnswer
())
?
BigDecimal
.
valueOf
(
bankTestPaperVo
.
getScore
())
:
BigDecimal
.
ZERO
);
}
insertPaperRecords
.
add
(
buffer
);
}
RedisUtils
.
deleteKeys
(
key
);
});
if
(
CollUtil
.
isNotEmpty
(
insertPaperRecords
))
{
paperRecordDetailService
.
saveBatch
(
insertPaperRecords
);
return
true
;
return
paperRecordDetailService
.
saveBatch
(
insertPaperRecords
);
}
return
fals
e
;
return
tru
e
;
}
}
school-paper/src/main/resources/mapper/school-paper/DbQuestionBankTestPaperMapper.xml
View file @
c8c6c966
...
...
@@ -25,32 +25,28 @@
<result
property=
"updateBy"
column=
"update_by"
/>
</resultMap>
<resultMap
id=
"TestPaper"
type=
"com.ruoyi.school.paper.domain.vo.TestQuestionsVo"
>
<result
property=
"questionsCategory"
column=
"category"
/>
<collection
property=
"item"
ofType=
"com.ruoyi.school.paper.domain.vo.TestQuestionItemVo"
>
<resultMap
id=
"TestPaper"
type=
"com.ruoyi.school.paper.domain.vo.TestQuestionItemVo"
>
<id
property=
"id"
column=
"id"
/>
<result
property=
"topic"
column=
"topic"
/>
<collection
property=
"options"
ofType=
"com.ruoyi.school.paper.domain.vo.OptionsVo"
>
<result
property=
"tag"
column=
"option_tag"
/>
<result
property=
"content"
column=
"option_content"
/>
</collection>
<collection
property=
"options"
column=
"id"
ofType=
"com.ruoyi.school.paper.domain.vo.OptionsVo"
select=
"selectOptions"
>
<result
property=
"optionTag"
column=
"option_tag"
/>
<result
property=
"optionContent"
column=
"option_content"
/>
</collection>
</resultMap>
<select
id=
"selectOptions"
resultType=
"com.ruoyi.school.paper.domain.vo.OptionsVo"
>
select options.option_tag, options.option_content
from db_question_bank_answer_test_paper as options
where options.question_bank_id = #{id}
</select>
<select
id=
"selectTestPaperQuestion"
resultMap=
"TestPaper"
>
select test_repository.id,
case test_repository.species
when 1 then '填空题'
when 2 then '选择题'
when 3 then '解答题'
else '未知'
end as category,
test_repository.topic,
optons.option_tag,
optons.option_content
from db_question_bank_test_paper as test_repository
left join db_question_bank_answer_test_paper as optons on optons.question_bank_id = test_repository.id
where test_repository.test_paper_id = #{paperId}
select question_bank.id,
question_bank.topic
from db_test_paper_record as answer_sheet
join db_question_bank_test_paper as question_bank
on answer_sheet.test_paper_id = question_bank.test_paper_id
where answer_sheet.id = #{condition.recordId}
</select>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment