Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
poc-api
Project
Project
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
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
poc
poc-api
Commits
a9289907
Commit
a9289907
authored
Aug 15, 2025
by
alex yao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat: 智能出题-文件下载
parent
38e6eba9
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
144 additions
and
8 deletions
+144
-8
ExaminationService.java
...java/cn/com/poc/writing/aggregate/ExaminationService.java
+12
-1
ExaminationServiceImpl.java
...om/poc/writing/aggregate/impl/ExaminationServiceImpl.java
+106
-5
ExaminationRest.java
src/main/java/cn/com/poc/writing/rest/ExaminationRest.java
+7
-0
ExaminationRestImpl.java
...ava/cn/com/poc/writing/rest/impl/ExaminationRestImpl.java
+9
-2
ExaminationTest.java
src/test/java/cn/com/poc/examination/ExaminationTest.java
+10
-0
No files found.
src/main/java/cn/com/poc/writing/aggregate/ExaminationService.java
View file @
a9289907
...
@@ -47,8 +47,19 @@ public interface ExaminationService {
...
@@ -47,8 +47,19 @@ public interface ExaminationService {
/**
/**
* 批量删除
* 批量删除
*
* @param examinationIds 试卷ID
* @param examinationIds 试卷ID
* @param userId 用户ID
* @param userId 用户ID
*/
*/
boolean
batchDelete
(
List
<
String
>
examinationIds
,
Long
userId
);
boolean
batchDelete
(
List
<
String
>
examinationIds
,
Long
userId
);
/**
* 试卷文件下载
*
* @param examinationId 试卷id
* @param userId 用户id
* @return 下载地址
*/
String
downloadExamination
(
String
examinationId
,
Long
userId
);
}
}
src/main/java/cn/com/poc/writing/aggregate/impl/ExaminationServiceImpl.java
View file @
a9289907
...
@@ -3,7 +3,11 @@ package cn.com.poc.writing.aggregate.impl;
...
@@ -3,7 +3,11 @@ package cn.com.poc.writing.aggregate.impl;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.agent_application.entity.BizAgentApplicationGcConfigEntity
;
import
cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService
;
import
cn.com.poc.agent_application.service.BizAgentApplicationGcConfigService
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.common.utils.*
;
import
cn.com.poc.common.service.BosConfigService
;
import
cn.com.poc.common.utils.DocumentLoad
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.common.utils.SSEUtil
;
import
cn.com.poc.common.utils.UUIDTool
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.constants.LLMRoleEnum
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.dialogue.Message
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
import
cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult
;
...
@@ -20,15 +24,16 @@ import cn.com.yict.framemax.frame.service.FmxParamConfigService;
...
@@ -20,15 +24,16 @@ import cn.com.yict.framemax.frame.service.FmxParamConfigService;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.poi.xwpf.usermodel.*
;
import
org.slf4j.Logger
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
import
org.springframework.stereotype.Service
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.io.
BufferedReader
;
import
java.io.
*
;
import
java.
io.File
;
import
java.
util.ArrayList
;
import
java.
io.IOException
;
import
java.
util.Arrays
;
import
java.util.
*
;
import
java.util.
List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
/**
/**
...
@@ -49,6 +54,9 @@ public class ExaminationServiceImpl implements ExaminationService {
...
@@ -49,6 +54,9 @@ public class ExaminationServiceImpl implements ExaminationService {
@Resource
@Resource
private
LLMService
llmService
;
private
LLMService
llmService
;
@Resource
private
BosConfigService
bosConfigService
;
@Resource
@Resource
private
BizAgentApplicationGcConfigService
bizAgentApplicationGcConfigService
;
private
BizAgentApplicationGcConfigService
bizAgentApplicationGcConfigService
;
...
@@ -226,6 +234,99 @@ public class ExaminationServiceImpl implements ExaminationService {
...
@@ -226,6 +234,99 @@ public class ExaminationServiceImpl implements ExaminationService {
return
true
;
return
true
;
}
}
@Override
public
String
downloadExamination
(
String
examinationId
,
Long
userId
)
{
BizExaminationEntity
bizExaminationEntity
=
new
BizExaminationEntity
();
bizExaminationEntity
.
setExaminationId
(
examinationId
);
bizExaminationEntity
.
setMemberId
(
userId
);
bizExaminationEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizExaminationEntity
>
bizExaminationEntities
=
bizExaminationService
.
findByExample
(
bizExaminationEntity
,
null
);
if
(
CollectionUtils
.
isEmpty
(
bizExaminationEntities
)
||
StringUtils
.
isBlank
(
bizExaminationEntities
.
get
(
0
).
getExaminationDetail
()))
{
throw
new
BusinessException
(
"无法获取试卷内容"
);
}
BizExaminationEntity
examinationEntity
=
bizExaminationEntities
.
get
(
0
);
File
file
=
buildExaminationFile
(
examinationEntity
);
try
(
FileInputStream
fileInputStream
=
new
FileInputStream
(
file
))
{
return
bosConfigService
.
upload
(
fileInputStream
,
"docx"
,
""
);
}
catch
(
Exception
e
)
{
logger
.
error
(
"------------ 生成试卷文件失败 ---------------"
,
e
);
throw
new
BusinessException
(
"生成文件失败"
);
}
finally
{
if
(
file
.
exists
())
{
file
.
delete
();
}
}
}
/**
* 生成试卷文件
*
* @param examinationEntity
* @return
*/
private
File
buildExaminationFile
(
BizExaminationEntity
examinationEntity
)
{
try
(
XWPFDocument
document
=
new
XWPFDocument
())
{
// 写入标题
XWPFParagraph
titleParagraph
=
document
.
createParagraph
();
titleParagraph
.
setAlignment
(
ParagraphAlignment
.
CENTER
);
titleParagraph
.
setVerticalAlignment
(
TextAlignment
.
CENTER
);
XWPFRun
titleParagraphRun
=
titleParagraph
.
createRun
();
titleParagraphRun
.
setText
(
examinationEntity
.
getTitle
());
titleParagraphRun
.
setBold
(
true
);
titleParagraphRun
.
setFontSize
(
22
);
titleParagraphRun
.
addBreak
();
// 详情
XWPFParagraph
detailParagraph
=
document
.
createParagraph
();
detailParagraph
.
setAlignment
(
ParagraphAlignment
.
CENTER
);
detailParagraph
.
setVerticalAlignment
(
TextAlignment
.
CENTER
);
XWPFRun
detailParagraphRun
=
detailParagraph
.
createRun
();
detailParagraphRun
.
setText
(
"总分:"
+
examinationEntity
.
getTotalScore
()
+
"分 难度级别:"
+
examinationEntity
.
getLevel
()
+
" 适用岗位:"
+
examinationEntity
.
getPositions
());
// 遍历试卷题目,写入试卷
List
<
ExaminationDetail
>
examinationDetails
=
JsonUtils
.
deSerialize
(
examinationEntity
.
getExaminationDetail
(),
new
TypeReference
<
List
<
ExaminationDetail
>>()
{
}.
getType
());
//问题
for
(
int
i
=
0
;
i
<
examinationDetails
.
size
();
i
++)
{
ExaminationDetail
examinationDetail
=
examinationDetails
.
get
(
i
);
//题目类型/分数
XWPFParagraph
questionTypeParagraph
=
document
.
createParagraph
();
questionTypeParagraph
.
setAlignment
(
ParagraphAlignment
.
LEFT
);
questionTypeParagraph
.
setVerticalAlignment
(
TextAlignment
.
AUTO
);
XWPFRun
questionTypeParagraphRun
=
questionTypeParagraph
.
createRun
();
questionTypeParagraphRun
.
setText
(
i
+
1
+
"."
+
examinationDetail
.
getQuestionType
()
+
"("
+
examinationDetail
.
getScore
()
+
"分)"
);
// 问题
XWPFParagraph
questionParagraph
=
document
.
createParagraph
();
questionParagraph
.
setAlignment
(
ParagraphAlignment
.
LEFT
);
questionParagraph
.
setVerticalAlignment
(
TextAlignment
.
AUTO
);
XWPFRun
questionParagraphRun
=
questionParagraph
.
createRun
();
String
question
=
examinationDetail
.
getQuestion
();
questionParagraphRun
.
setText
(
question
+
"( )"
);
//选项
XWPFParagraph
choiceParagraph
=
document
.
createParagraph
();
choiceParagraph
.
setAlignment
(
ParagraphAlignment
.
LEFT
);
choiceParagraph
.
setVerticalAlignment
(
TextAlignment
.
AUTO
);
XWPFRun
choiceParagraphRun
=
choiceParagraph
.
createRun
();
List
<
String
>
choice
=
examinationDetail
.
getChoice
();
for
(
int
j
=
0
;
j
<
choice
.
size
();
j
++)
{
choiceParagraphRun
.
setText
(
choice
.
get
(
j
),
j
);
choiceParagraphRun
.
addBreak
();
}
}
File
tempFile
=
File
.
createTempFile
(
examinationEntity
.
getTitle
(),
".docx"
);
try
(
FileOutputStream
out
=
new
FileOutputStream
(
tempFile
))
{
document
.
write
(
out
);
}
return
tempFile
;
}
catch
(
IOException
e
)
{
throw
new
BusinessException
(
e
);
}
}
private
Message
[]
buildMessage
(
String
prompt
,
GenerateExaminationEntity
generateExaminationEntity
)
{
private
Message
[]
buildMessage
(
String
prompt
,
GenerateExaminationEntity
generateExaminationEntity
)
{
String
fileContent
=
generateExaminationEntity
.
getPositions
();
String
fileContent
=
generateExaminationEntity
.
getPositions
();
if
(
StringUtils
.
isNoneBlank
(
generateExaminationEntity
.
getFileUrl
()))
{
if
(
StringUtils
.
isNoneBlank
(
generateExaminationEntity
.
getFileUrl
()))
{
...
...
src/main/java/cn/com/poc/writing/rest/ExaminationRest.java
View file @
a9289907
...
@@ -59,4 +59,11 @@ public interface ExaminationRest extends BaseRest {
...
@@ -59,4 +59,11 @@ public interface ExaminationRest extends BaseRest {
*/
*/
void
batchDelete
(
@RequestBody
ExaminationBatchDeleteDto
dto
);
void
batchDelete
(
@RequestBody
ExaminationBatchDeleteDto
dto
);
/**
* 试卷文件下载
*
* @param examinationId 试卷ID
*/
String
downloadExamination
(
@RequestParam
(
value
=
"examinationId"
)
String
examinationId
);
}
}
src/main/java/cn/com/poc/writing/rest/impl/ExaminationRestImpl.java
View file @
a9289907
...
@@ -89,11 +89,18 @@ public class ExaminationRestImpl implements ExaminationRest {
...
@@ -89,11 +89,18 @@ public class ExaminationRestImpl implements ExaminationRest {
@Override
@Override
public
void
batchDelete
(
ExaminationBatchDeleteDto
dto
)
{
public
void
batchDelete
(
ExaminationBatchDeleteDto
dto
)
{
Assert
.
notEmpty
(
dto
.
getExaminationIds
(),
"删除ID不能为空"
);
Assert
.
notEmpty
(
dto
.
getExaminationIds
(),
"删除ID不能为空"
);
UserBaseEntity
currentUser
=
BlContext
.
getCurrentUser
();
UserBaseEntity
currentUser
=
BlContext
.
getCurrentUser
();
boolean
deleted
=
examinationService
.
batchDelete
(
dto
.
getExaminationIds
(),
currentUser
.
getUserId
());
boolean
deleted
=
examinationService
.
batchDelete
(
dto
.
getExaminationIds
(),
currentUser
.
getUserId
());
if
(!
deleted
){
if
(!
deleted
)
{
throw
new
BusinessException
(
"删除异常"
);
throw
new
BusinessException
(
"删除异常"
);
}
}
}
}
@Override
public
String
downloadExamination
(
String
examinationId
)
{
Assert
.
notBlank
(
examinationId
,
"examinationId 不能为空"
);
UserBaseEntity
currentUser
=
BlContext
.
getCurrentUser
();
return
examinationService
.
downloadExamination
(
examinationId
,
currentUser
.
getUserId
());
}
}
}
src/test/java/cn/com/poc/examination/ExaminationTest.java
View file @
a9289907
...
@@ -204,4 +204,14 @@ public class ExaminationTest {
...
@@ -204,4 +204,14 @@ public class ExaminationTest {
String
query
;
String
query
;
Long
userId
;
Long
userId
;
}
}
@Test
public
void
text_genereateExaminationFile
()
{
String
examinationId
=
"EXAMINATION_75ad7043b8064640a3eb222a0c6ab59b"
;
Long
userId
=
198L
;
String
url
=
examinationService
.
downloadExamination
(
examinationId
,
userId
);
System
.
out
.
println
(
url
);
}
}
}
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