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
15f58cdf
Commit
15f58cdf
authored
Jul 25, 2023
by
Wangmin
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'origin/master'
parents
647d521e
657eaf33
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
175 additions
and
39 deletions
+175
-39
school-paper/src/main/java/com/ruoyi/school/paper/controller/DbTestPaperController.java
+13
-15
school-paper/src/main/java/com/ruoyi/school/paper/domain/DbQuestionBankTestPaper.java
+10
-2
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbQuestionBankServiceImpl.java
+1
-1
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbTestPaperServiceImpl.java
+151
-21
No files found.
school-paper/src/main/java/com/ruoyi/school/paper/controller/DbTestPaperController.java
View file @
15f58cdf
package
com
.
ruoyi
.
school
.
paper
.
controller
;
package
com
.
ruoyi
.
school
.
paper
.
controller
;
import
java.util.List
;
import
java.util.Arrays
;
import
java.util.concurrent.TimeUnit
;
import
cn.dev33.satoken.annotation.SaIgnore
;
import
cn.dev33.satoken.annotation.SaIgnore
;
import
lombok.RequiredArgsConstructor
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.constraints.*
;
import
cn.dev33.satoken.annotation.SaCheckPermission
;
import
org.springframework.web.bind.annotation.*
;
import
org.springframework.validation.annotation.Validated
;
import
com.ruoyi.common.annotation.RepeatSubmit
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.annotation.Log
;
import
com.ruoyi.common.annotation.RepeatSubmit
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.core.controller.BaseController
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.domain.R
;
import
com.ruoyi.common.core.domain.R
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.common.core.validate.AddGroup
;
import
com.ruoyi.common.core.validate.AddGroup
;
import
com.ruoyi.common.core.validate.EditGroup
;
import
com.ruoyi.common.core.validate.EditGroup
;
import
com.ruoyi.common.core.validate.QueryGroup
;
import
com.ruoyi.common.enums.BusinessType
;
import
com.ruoyi.common.enums.BusinessType
;
import
com.ruoyi.common.utils.poi.ExcelUtil
;
import
com.ruoyi.common.utils.poi.ExcelUtil
;
import
com.ruoyi.school.paper.domain.vo.DbTestPaperVo
;
import
com.ruoyi.school.paper.domain.bo.DbTestPaperBo
;
import
com.ruoyi.school.paper.domain.bo.DbTestPaperBo
;
import
com.ruoyi.school.paper.domain.vo.DbTestPaperVo
;
import
com.ruoyi.school.paper.service.IDbTestPaperService
;
import
com.ruoyi.school.paper.service.IDbTestPaperService
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.*
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.validation.constraints.NotEmpty
;
import
javax.validation.constraints.NotNull
;
import
java.util.Arrays
;
import
java.util.List
;
/**
/**
* 试卷
* 试卷
...
@@ -81,7 +79,7 @@ public class DbTestPaperController extends BaseController {
...
@@ -81,7 +79,7 @@ public class DbTestPaperController extends BaseController {
}
}
/**
/**
* 随机生成试卷
*
【PC】
随机生成试卷
*/
*/
@Log
(
title
=
"试卷"
,
businessType
=
BusinessType
.
INSERT
)
@Log
(
title
=
"试卷"
,
businessType
=
BusinessType
.
INSERT
)
@RepeatSubmit
()
@RepeatSubmit
()
...
...
school-paper/src/main/java/com/ruoyi/school/paper/domain/DbQuestionBankTestPaper.java
View file @
15f58cdf
...
@@ -18,14 +18,18 @@ import lombok.EqualsAndHashCode;
...
@@ -18,14 +18,18 @@ import lombok.EqualsAndHashCode;
@TableName
(
"db_question_bank_test_paper"
)
@TableName
(
"db_question_bank_test_paper"
)
public
class
DbQuestionBankTestPaper
extends
BaseEntity
{
public
class
DbQuestionBankTestPaper
extends
BaseEntity
{
private
static
final
long
serialVersionUID
=
1L
;
private
static
final
long
serialVersionUID
=
1L
;
/**
/**
* 主键id
* 主键id
*/
*/
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
private
Long
id
;
/**
/**
* 题库id
*/
private
Long
questionBankId
;
/**
* 试卷id
* 试卷id
*/
*/
private
Long
testPaperId
;
private
Long
testPaperId
;
...
@@ -70,6 +74,10 @@ public class DbQuestionBankTestPaper extends BaseEntity {
...
@@ -70,6 +74,10 @@ public class DbQuestionBankTestPaper extends BaseEntity {
*/
*/
private
String
resolveVideo
;
private
String
resolveVideo
;
/**
/**
* 分数
*/
private
Integer
score
;
/**
* 备注
* 备注
*/
*/
private
String
remark
;
private
String
remark
;
...
...
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbQuestionBankServiceImpl.java
View file @
15f58cdf
...
@@ -210,7 +210,7 @@ public class DbQuestionBankServiceImpl implements IDbQuestionBankService {
...
@@ -210,7 +210,7 @@ public class DbQuestionBankServiceImpl implements IDbQuestionBankService {
*/
*/
@Override
@Override
public
void
init
()
{
public
void
init
()
{
List
<
DbQuestionBank
>
dbQuestionBanks
=
baseMapper
.
selectList
();
List
<
DbQuestionBank
>
dbQuestionBanks
=
baseMapper
.
selectList
(
Wrappers
.<
DbQuestionBank
>
lambdaQuery
().
eq
(
DbQuestionBank:
:
getStatus
,
0
)
);
RedisUtils
.
setCacheObject
(
"question_bank:default_question_bank"
,
JsonUtils
.
toJsonString
(
dbQuestionBanks
));
RedisUtils
.
setCacheObject
(
"question_bank:default_question_bank"
,
JsonUtils
.
toJsonString
(
dbQuestionBanks
));
}
}
}
}
school-paper/src/main/java/com/ruoyi/school/paper/service/impl/DbTestPaperServiceImpl.java
View file @
15f58cdf
package
com
.
ruoyi
.
school
.
paper
.
service
.
impl
;
package
com
.
ruoyi
.
school
.
paper
.
service
.
impl
;
import
cn.hutool.core.bean.BeanUtil
;
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.conditions.query.LambdaQueryWrapper
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
com.baomidou.mybatisplus.core.toolkit.Wrappers
;
import
lombok.RequiredArgsConstructor
;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page
;
import
org.springframework.stereotype.Service
;
import
com.ruoyi.common.core.domain.PageQuery
;
import
com.ruoyi.common.core.page.TableDataInfo
;
import
com.ruoyi.common.utils.JsonUtils
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.common.utils.redis.RedisUtils
;
import
com.ruoyi.school.paper.domain.*
;
import
com.ruoyi.school.paper.domain.bo.DbTestPaperBo
;
import
com.ruoyi.school.paper.domain.bo.DbTestPaperBo
;
import
com.ruoyi.school.paper.domain.vo.DbTestPaperVo
;
import
com.ruoyi.school.paper.domain.vo.DbTestPaperVo
;
import
com.ruoyi.school.paper.domain.DbTestPaper
;
import
com.ruoyi.school.paper.mapper.DbQuestionBankAnswerMapper
;
import
com.ruoyi.school.paper.mapper.DbQuestionBankAnswerTestPaperMapper
;
import
com.ruoyi.school.paper.mapper.DbQuestionBankTestPaperMapper
;
import
com.ruoyi.school.paper.mapper.DbTestPaperMapper
;
import
com.ruoyi.school.paper.mapper.DbTestPaperMapper
;
import
com.ruoyi.school.paper.service.IDbTestPaperService
;
import
com.ruoyi.school.paper.service.IDbTestPaperService
;
import
lombok.RequiredArgsConstructor
;
import
org.springframework.stereotype.Service
;
import
org.springframework.transaction.annotation.Transactional
;
import
java.util.List
;
import
java.util.*
;
import
java.util.Map
;
import
java.util.stream.Collectors
;
import
java.util.Collection
;
/**
/**
* 试卷Service业务层处理
* 试卷Service业务层处理
...
@@ -30,14 +35,10 @@ import java.util.Collection;
...
@@ -30,14 +35,10 @@ import java.util.Collection;
public
class
DbTestPaperServiceImpl
implements
IDbTestPaperService
{
public
class
DbTestPaperServiceImpl
implements
IDbTestPaperService
{
private
final
DbTestPaperMapper
baseMapper
;
private
final
DbTestPaperMapper
baseMapper
;
private
final
DbQuestionBankTestPaperMapper
questionBankTestPaperMapper
;
/**
private
final
DbQuestionBankAnswerMapper
questionBankAnswerMapper
;
* 查询试卷
private
final
DbQuestionBankAnswerTestPaperMapper
questionBankAnswerTestPaperMapper
;
*/
private
String
DEFAULT_QUESTIOBN_BANK_KEY
=
"question_bank:default_question_bank"
;
@Override
public
DbTestPaperVo
queryById
(
Long
id
){
return
baseMapper
.
selectVoById
(
id
);
}
/**
/**
* 查询试卷列表
* 查询试卷列表
...
@@ -95,9 +96,17 @@ public class DbTestPaperServiceImpl implements IDbTestPaperService {
...
@@ -95,9 +96,17 @@ public class DbTestPaperServiceImpl implements IDbTestPaperService {
}
}
/**
/**
* 查询试卷
*/
@Override
public
DbTestPaperVo
queryById
(
Long
id
)
{
return
baseMapper
.
selectVoById
(
id
);
}
/**
* 保存前的数据校验
* 保存前的数据校验
*/
*/
private
void
validEntityBeforeSave
(
DbTestPaper
entity
){
private
void
validEntityBeforeSave
(
DbTestPaper
entity
)
{
//TODO 做一些数据校验,如唯一约束
//TODO 做一些数据校验,如唯一约束
}
}
...
@@ -106,17 +115,138 @@ public class DbTestPaperServiceImpl implements IDbTestPaperService {
...
@@ -106,17 +115,138 @@ public class DbTestPaperServiceImpl implements IDbTestPaperService {
*/
*/
@Override
@Override
public
Boolean
deleteWithValidByIds
(
Collection
<
Long
>
ids
,
Boolean
isValid
)
{
public
Boolean
deleteWithValidByIds
(
Collection
<
Long
>
ids
,
Boolean
isValid
)
{
if
(
isValid
)
{
if
(
isValid
)
{
//TODO 做一些业务上的校验,判断是否需要校验
//TODO 做一些业务上的校验,判断是否需要校验
}
}
return
baseMapper
.
deleteBatchIds
(
ids
)
>
0
;
return
baseMapper
.
deleteBatchIds
(
ids
)
>
0
;
}
}
/**
/**
* 随机生成试卷
* 随机生成试卷
*/
*/
@Override
@Override
@Transactional
(
rollbackFor
=
Exception
.
class
)
public
Boolean
randomGeneration
(
DbTestPaperBo
bo
)
{
public
Boolean
randomGeneration
(
DbTestPaperBo
bo
)
{
DbTestPaper
add
=
BeanUtil
.
toBean
(
bo
,
DbTestPaper
.
class
);
baseMapper
.
insert
(
add
);
// 从redis中获取所有题目
List
<
DbQuestionBank
>
dbQuestionBanks
=
JsonUtils
.
parseArray
(
RedisUtils
.
getCacheObject
(
DEFAULT_QUESTIOBN_BANK_KEY
),
DbQuestionBank
.
class
);
// 筛选符合条件的题目
Map
<
Integer
,
List
<
DbQuestionBank
>>
collect
=
dbQuestionBanks
.
stream
()
.
filter
(
bank
->
bank
.
getCategoryId
().
equals
(
bo
.
getCategoryId
())
&&
bank
.
getPhaseId
().
equals
(
bo
.
getPhaseId
())
).
collect
(
Collectors
.
groupingBy
(
DbQuestionBank:
:
getSpecies
));
// 根据习题种类分组
// 选择题
List
<
DbQuestionBank
>
select
=
collect
.
get
(
"2"
);
// 填空题
List
<
DbQuestionBank
>
gapFilling
=
collect
.
get
(
"1"
);
// 解答题
List
<
DbQuestionBank
>
resolve
=
collect
.
get
(
"3"
);
// 随机筛选题目
List
<
DbQuestionBankTestPaper
>
papers
=
new
ArrayList
<>();
List
<
DbQuestionBankTestPaper
>
selectList
=
null
;
if
(
bo
.
getTotalPoints
().
equals
(
100
))
{
selectList
=
generatePaper
(
select
,
4
,
bo
.
getTotalPoints
(),
add
.
getId
());
List
<
DbQuestionBankTestPaper
>
gapFillingList
=
generatePaper
(
gapFilling
,
5
,
bo
.
getTotalPoints
(),
add
.
getId
());
List
<
DbQuestionBankTestPaper
>
resolveList
=
generatePaper
(
resolve
,
2
,
bo
.
getTotalPoints
(),
add
.
getId
());
papers
.
addAll
(
selectList
);
papers
.
addAll
(
gapFillingList
);
papers
.
addAll
(
resolveList
);
}
else
{
selectList
=
generatePaper
(
select
,
4
,
bo
.
getTotalPoints
(),
add
.
getId
());
List
<
DbQuestionBankTestPaper
>
gapFillingList
=
generatePaper
(
gapFilling
,
12
,
bo
.
getTotalPoints
(),
add
.
getId
());
List
<
DbQuestionBankTestPaper
>
resolveList
=
generatePaper
(
resolve
,
5
,
bo
.
getTotalPoints
(),
add
.
getId
());
papers
.
addAll
(
selectList
);
papers
.
addAll
(
gapFillingList
);
papers
.
addAll
(
resolveList
);
}
questionBankTestPaperMapper
.
insertBatch
(
papers
);
this
.
saveSelectListOptions
(
add
.
getId
());
return
null
;
return
null
;
}
}
/**
* 保存选择题的选项
*
* @param paperId 试卷id
*/
private
void
saveSelectListOptions
(
Long
paperId
)
{
List
<
DbQuestionBankTestPaper
>
papers
=
questionBankTestPaperMapper
.
selectList
(
Wrappers
.<
DbQuestionBankTestPaper
>
lambdaQuery
()
.
eq
(
DbQuestionBankTestPaper:
:
getTestPaperId
,
paperId
)
.
eq
(
DbQuestionBankTestPaper:
:
getSpecies
,
2
));
papers
.
forEach
(
questionBank
->
{
List
<
DbQuestionBankAnswer
>
dbQuestionBankAnswers
=
questionBankAnswerMapper
.
selectList
(
Wrappers
.<
DbQuestionBankAnswer
>
lambdaQuery
()
.
select
(
DbQuestionBankAnswer:
:
getOptionContent
,
DbQuestionBankAnswer:
:
getOptionTag
)
.
eq
(
DbQuestionBankAnswer:
:
getQuestionBankId
,
questionBank
.
getQuestionBankId
())
.
eq
(
DbQuestionBankAnswer:
:
getStatus
,
0
)
);
dbQuestionBankAnswers
.
forEach
(
questionBankAnswer
->
{
questionBankAnswer
.
setQuestionBankId
(
questionBank
.
getId
());
});
List
<
DbQuestionBankAnswerTestPaper
>
answerTestPapers
=
BeanUtil
.
copyToList
(
dbQuestionBankAnswers
,
DbQuestionBankAnswerTestPaper
.
class
);
questionBankAnswerTestPaperMapper
.
insertBatch
(
answerTestPapers
);
});
}
/**
* 随机筛选题目
*
* @param list 习题列表
* @param num 习题数量
* @param totalPoints 总分
* @return
*/
private
List
<
DbQuestionBankTestPaper
>
generatePaper
(
List
<
DbQuestionBank
>
list
,
int
num
,
Integer
totalPoints
,
Long
paperId
)
{
System
.
out
.
println
(
"系统正在随机抽取题目生成试卷,这可能需要一段时间,请耐心等候···"
);
HashSet
<
DbQuestionBankTestPaper
>
paper
=
new
HashSet
<>();
//用来存储题目,set集合去重复
//这个while循环用来生成不重复的一套题目
while
(
paper
.
size
()
!=
num
)
{
DbQuestionBank
question
=
list
.
get
(
new
Random
().
nextInt
(
list
.
size
()));
DbQuestionBankTestPaper
questionBankTestPaper
=
BeanUtil
.
copyProperties
(
question
,
DbQuestionBankTestPaper
.
class
);
if
(
totalPoints
.
equals
(
100
))
{
switch
(
questionBankTestPaper
.
getSpecies
())
{
case
1
:
questionBankTestPaper
.
setScore
(
10
);
break
;
case
2
:
questionBankTestPaper
.
setScore
(
4
);
break
;
case
3
:
questionBankTestPaper
.
setScore
(
15
);
break
;
}
}
else
{
switch
(
questionBankTestPaper
.
getSpecies
())
{
case
1
:
if
(
paper
.
size
()
<=
6
)
{
questionBankTestPaper
.
setScore
(
4
);
}
else
{
questionBankTestPaper
.
setScore
(
5
);
}
break
;
case
2
:
if
(
paper
.
size
()
<=
2
)
{
questionBankTestPaper
.
setScore
(
4
);
}
else
{
questionBankTestPaper
.
setScore
(
5
);
}
break
;
case
3
:
if
(
paper
.
size
()
<=
3
)
{
questionBankTestPaper
.
setScore
(
14
);
}
else
{
questionBankTestPaper
.
setScore
(
18
);
}
break
;
}
}
questionBankTestPaper
.
setId
(
null
);
questionBankTestPaper
.
setTestPaperId
(
paperId
);
questionBankTestPaper
.
setQuestionBankId
(
question
.
getId
());
paper
.
add
(
questionBankTestPaper
);
}
List
<
DbQuestionBankTestPaper
>
newPaper
=
new
ArrayList
<>(
paper
);
return
newPaper
;
}
}
}
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