Commit a9289907 authored by alex yao's avatar alex yao

feat: 智能出题-文件下载

parent 38e6eba9
...@@ -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);
} }
...@@ -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())) {
......
...@@ -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);
} }
...@@ -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());
}
} }
...@@ -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);
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment