Commit 12bd1e7b authored by R10's avatar R10

Merge branch 'release_gdghg' of ssh://gitlab.gsstcloud.com:10022/poc/poc-api into release_gdghg

parents 765ee98a 7cd572af
......@@ -128,7 +128,7 @@ public class AiLawServiceImpl implements AiLawService {
List<Tool> tools = AgentApplicationTools.buildFunctionConfig(null, "N", dialoguesId, dialoguesId, unitIds, "N");
CheckPluginUseEntity checkPluginUseEntity = AgentApplicationTools.checkPluginUse(messages, tools, null);
FunctionCallResult functionCallResult = checkPluginUseEntity.getFunctionCallResult();
if (functionCallResult != null) {
if (functionCallResult != null && functionCallResult.isNeed()) {
FunctionCall functionCall = functionCallResult.getFunctionCall();
if ("web_search".equals(functionCall.getName())) {
AbstractFunctionResult<List<WebSearchFunctionResult>> functionResult = webSearchFunction.doFunction(functionCall.getArguments(), dialoguesId, null, null);
......
......@@ -613,7 +613,7 @@ public class LongTextDialoguesServiceImpl implements LongTextDialoguesService {
List<Tool> tools = AgentApplicationTools.buildFunctionConfig(null, "N", dialoguesId, dialoguesId, unitIds, "N");
CheckPluginUseEntity checkPluginUseEntity = AgentApplicationTools.checkPluginUse(messages, tools, null);
FunctionCallResult functionCallResult = checkPluginUseEntity.getFunctionCallResult();
if (functionCallResult != null) {
if (functionCallResult != null && functionCallResult.isNeed()) {
FunctionCall functionCall = functionCallResult.getFunctionCall();
if (functionCallResult.isNeed() && functionCall != null && "web_search".equals(functionCall.getName())) {
AbstractFunctionResult<List<WebSearchFunctionResult>> functionResult = webSearchFunction.doFunction(functionCall.getArguments(), dialoguesId, null, null);
......
......@@ -143,7 +143,7 @@ public class PortalServiceImpl implements PortalService {
List<Tool> tools = AgentApplicationTools.buildFunctionConfig(null, "N", callEntity.getDialoguesId(), callEntity.getDialoguesId(), unitIds, "N");
CheckPluginUseEntity checkPluginUseEntity = AgentApplicationTools.checkPluginUse(messages, tools, null);
FunctionCallResult functionCallResult = checkPluginUseEntity.getFunctionCallResult();
if (functionCallResult != null) {
if (functionCallResult != null && functionCallResult.isNeed()) {
FunctionCall functionCall = functionCallResult.getFunctionCall();
if ("web_search".equals(functionCall.getName())) {
AbstractFunctionResult<List<WebSearchFunctionResult>> functionResult = webSearchFunction.doFunction(functionCall.getArguments(), callEntity.getDialoguesId(), null, null);
......
......@@ -47,8 +47,19 @@ public interface ExaminationService {
/**
* 批量删除
*
* @param examinationIds 试卷ID
* @param userId 用户ID
*/
boolean batchDelete(List<String> examinationIds, Long userId);
/**
* 试卷文件下载
*
* @param examinationId 试卷id
* @param userId 用户id
* @return 下载地址
*/
String downloadExamination(String examinationId, Long userId);
}
......@@ -236,7 +236,7 @@ public class AiWritingServiceImpl implements AiWritingService {
List<Tool> tools = AgentApplicationTools.buildFunctionConfig(null, "N", dialoguesId, dialoguesId, unitIds, "N");
CheckPluginUseEntity checkPluginUseEntity = AgentApplicationTools.checkPluginUse(messages, tools, null);
FunctionCallResult functionCallResult = checkPluginUseEntity.getFunctionCallResult();
if (functionCallResult != null) {
if (functionCallResult != null && functionCallResult.isNeed()) {
FunctionCall functionCall = functionCallResult.getFunctionCall();
if (functionCallResult.isNeed() && functionCall != null && "web_search".equals(functionCall.getName())) {
AbstractFunctionResult<List<WebSearchFunctionResult>> functionResult = webSearchFunction.doFunction(functionCall.getArguments(), dialoguesId, null, null);
......
......@@ -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.service.BizAgentApplicationGcConfigService;
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.entity.dialogue.Message;
import cn.com.poc.thirdparty.resource.demand.ai.entity.largemodel.LargeModelDemandResult;
......@@ -20,15 +24,16 @@ import cn.com.yict.framemax.frame.service.FmxParamConfigService;
import com.fasterxml.jackson.core.type.TypeReference;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xwpf.usermodel.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.util.*;
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
......@@ -49,6 +54,9 @@ public class ExaminationServiceImpl implements ExaminationService {
@Resource
private LLMService llmService;
@Resource
private BosConfigService bosConfigService;
@Resource
private BizAgentApplicationGcConfigService bizAgentApplicationGcConfigService;
......@@ -130,6 +138,8 @@ public class ExaminationServiceImpl implements ExaminationService {
saveExaminationEntity.setLevel(generateExaminationEntity.getLevel());
saveExaminationEntity.setLanguage(generateExaminationEntity.getLanguage());
saveExaminationEntity.setPositions(generateExaminationEntity.getPositions());
saveExaminationEntity.setFileUrl(generateExaminationEntity.getFileUrl());
saveExaminationEntity.setContent(generateExaminationEntity.getContent());
saveExaminationEntity.setExaminationDetail(JsonUtils.serialize(examinationDetailEntities));
bizExaminationService.save(saveExaminationEntity);
} else {
......@@ -140,6 +150,8 @@ public class ExaminationServiceImpl implements ExaminationService {
updateExaminationEntity.setN(generateExaminationEntity.getN());
updateExaminationEntity.setLevel(generateExaminationEntity.getLevel());
updateExaminationEntity.setLanguage(generateExaminationEntity.getLanguage());
updateExaminationEntity.setFileUrl(generateExaminationEntity.getFileUrl());
updateExaminationEntity.setContent(generateExaminationEntity.getContent());
updateExaminationEntity.setPositions(generateExaminationEntity.getPositions());
updateExaminationEntity.setExaminationDetail(JsonUtils.serialize(examinationDetailEntities));
bizExaminationService.update(updateExaminationEntity);
......@@ -177,9 +189,12 @@ public class ExaminationServiceImpl implements ExaminationService {
result.setTitle(examinationEntity.getTitle());
result.setN(examinationEntity.getN());
result.setLevel(examinationEntity.getLevel());
result.setQuestionType(Arrays.stream(examinationEntity.getQuestionType().split(",")).collect(Collectors.toList()));
result.setDate(examinationEntity.getModifiedTime());
result.setTotalScore(examinationEntity.getTotalScore());
result.setPositions(examinationEntity.getPositions());
result.setFileUrl(examinationEntity.getFileUrl());
result.setContent(examinationEntity.getContent());
return result;
}
......@@ -226,8 +241,102 @@ public class ExaminationServiceImpl implements ExaminationService {
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) {
// 遍历试卷题目,写入试卷
List<ExaminationDetail> examinationDetails = JsonUtils.deSerialize(examinationEntity.getExaminationDetail(), new TypeReference<List<ExaminationDetail>>() {
}.getType());
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);
// 详情
XWPFParagraph detailParagraph = document.createParagraph();
detailParagraph.setAlignment(ParagraphAlignment.CENTER);
detailParagraph.setVerticalAlignment(TextAlignment.CENTER);
XWPFRun detailParagraphRun = detailParagraph.createRun();
detailParagraphRun.setText("总分: " + examinationEntity.getTotalScore() + "分 难度级别:" + examinationEntity.getLevel() + " 总题数: " + examinationDetails.size());
detailParagraphRun.addBreak();
//问题
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(UUIDTool.getUUID(), ".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) {
String fileContent = generateExaminationEntity.getPositions();
String fileContent = StringUtils.EMPTY;
if (StringUtils.isNoneBlank(generateExaminationEntity.getFileUrl())) {
File file = DocumentLoad.downloadURLDocument(generateExaminationEntity.getFileUrl());
fileContent = DocumentLoad.documentToText(file);
......@@ -238,7 +347,7 @@ public class ExaminationServiceImpl implements ExaminationService {
.replace("${number}", generateExaminationEntity.getN().toString())
.replace("${total_score}", generateExaminationEntity.getTotalScore().toString())
.replace("${level}", generateExaminationEntity.getLevel())
.replace("${position}", generateExaminationEntity.getPositions())
.replace("${position}", StringUtils.isBlank(generateExaminationEntity.getPositions()) ? StringUtils.EMPTY : generateExaminationEntity.getPositions())
.replace("${question_type}", StringUtils.join(generateExaminationEntity.getQuestionType(), ","));
Message userMessage = new Message();
......
......@@ -20,6 +20,8 @@ public class BizExaminationConvert {
entity.setLanguage(model.getLanguage());
entity.setPositions(model.getPositions());
entity.setExaminationDetail(model.getExaminationDetail());
entity.setFileUrl(model.getFileUrl());
entity.setContent(model.getContent());
entity.setIsDeleted(model.getIsDeleted());
entity.setCreator(model.getCreator());
entity.setCreatedTime(model.getCreatedTime());
......@@ -42,6 +44,8 @@ public class BizExaminationConvert {
model.setLanguage(entity.getLanguage());
model.setPositions(entity.getPositions());
model.setExaminationDetail(entity.getExaminationDetail());
model.setFileUrl(entity.getFileUrl());
model.setContent(entity.getContent());
model.setIsDeleted(entity.getIsDeleted());
model.setCreator(entity.getCreator());
model.setCreatedTime(entity.getCreatedTime());
......@@ -64,6 +68,8 @@ public class BizExaminationConvert {
dto.setLanguage(entity.getLanguage());
dto.setPositions(entity.getPositions());
dto.setExaminationDetail(entity.getExaminationDetail());
dto.setFileUrl(entity.getFileUrl());
dto.setContent(entity.getContent());
dto.setIsDeleted(entity.getIsDeleted());
dto.setCreator(entity.getCreator());
dto.setCreatedTime(entity.getCreatedTime());
......@@ -86,6 +92,8 @@ public class BizExaminationConvert {
entity.setLanguage(dto.getLanguage());
entity.setPositions(dto.getPositions());
entity.setExaminationDetail(dto.getExaminationDetail());
entity.setFileUrl(dto.getFileUrl());
entity.setContent(dto.getContent());
entity.setIsDeleted(dto.getIsDeleted());
entity.setCreator(dto.getCreator());
entity.setCreatedTime(dto.getCreatedTime());
......
......@@ -135,6 +135,30 @@ public class BizExaminationDto {
public void setExaminationDetail(java.lang.String examinationDetail){
this.examinationDetail = examinationDetail;
}
/** file_url
*文件地址
*/
private java.lang.String fileUrl;
public java.lang.String getFileUrl(){
return this.fileUrl;
}
public void setFileUrl(java.lang.String fileUrl){
this.fileUrl = fileUrl;
}
/** content
*输入文本
*/
private java.lang.String content;
public java.lang.String getContent(){
return this.content;
}
public void setContent(java.lang.String content){
this.content = content;
}
/** is_deleted
*是否删除 Y 是 N 否
......
......@@ -29,6 +29,36 @@ public class ExaminationDto {
private String positions;
private List<String> questionType;
private String content;
private String fileUrl;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getFileUrl() {
return fileUrl;
}
public void setFileUrl(String fileUrl) {
this.fileUrl = fileUrl;
}
public List<String> getQuestionType() {
return questionType;
}
public void setQuestionType(List<String> questionType) {
this.questionType = questionType;
}
public Integer getTotalScore() {
return totalScore;
}
......
......@@ -135,6 +135,30 @@ public class BizExaminationEntity {
public void setExaminationDetail(java.lang.String examinationDetail){
this.examinationDetail = examinationDetail;
}
/** file_url
*文件地址
*/
private java.lang.String fileUrl;
public java.lang.String getFileUrl(){
return this.fileUrl;
}
public void setFileUrl(java.lang.String fileUrl){
this.fileUrl = fileUrl;
}
/** content
*输入文本
*/
private java.lang.String content;
public java.lang.String getContent(){
return this.content;
}
public void setContent(java.lang.String content){
this.content = content;
}
/** is_deleted
*是否删除 Y 是 N 否
......
......@@ -23,8 +23,38 @@ public class ExaminationEntity {
private String positions;
private List<String> questionType;
private List<ExaminationDetail> examinationDetails;
private String content;
private String fileUrl;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getFileUrl() {
return fileUrl;
}
public void setFileUrl(String fileUrl) {
this.fileUrl = fileUrl;
}
public List<String> getQuestionType() {
return questionType;
}
public void setQuestionType(List<String> questionType) {
this.questionType = questionType;
}
public Integer getTotalScore() {
return totalScore;
}
......
......@@ -202,6 +202,38 @@ public class BizExaminationModel extends BaseModelClass implements Serializable
}
/** file_url
*文件地址
*/
private java.lang.String fileUrl;
@Column(name = "file_url",length = 150)
public java.lang.String getFileUrl(){
return this.fileUrl;
}
public void setFileUrl(java.lang.String fileUrl){
this.fileUrl = fileUrl;
super.addValidField("fileUrl");
}
/** content
*输入文本
*/
private java.lang.String content;
@Column(name = "content",length = 2147483647)
public java.lang.String getContent(){
return this.content;
}
public void setContent(java.lang.String content){
this.content = content;
super.addValidField("content");
}
/** is_deleted
*是否删除 Y 是 N 否
*/
......
......@@ -59,4 +59,11 @@ public interface ExaminationRest extends BaseRest {
*/
void batchDelete(@RequestBody ExaminationBatchDeleteDto dto);
/**
* 试卷文件下载
*
* @param examinationId 试卷ID
*/
String downloadExamination(@RequestParam(value = "examinationId") String examinationId);
}
......@@ -48,9 +48,10 @@ public class ExaminationRestImpl implements ExaminationRest {
Assert.notBlank(generateExaminationDto.getLanguage());
Assert.notBlank(generateExaminationDto.getTitle());
Assert.notBlank(generateExaminationDto.getLevel());
Assert.notBlank(generateExaminationDto.getPositions());
// Assert.notBlank(generateExaminationDto.getPositions());
Assert.notEmpty(generateExaminationDto.getQuestionType());
Assert.notNull(generateExaminationDto.getN());
Assert.isTrue(generateExaminationDto.getN() <= 20,"总题数不可大于20题");
UserBaseEntity currentUser = BlContext.getCurrentUser();
GenerateExaminationEntity generateExaminationEntity = new GenerateExaminationEntity();
......@@ -89,11 +90,18 @@ public class ExaminationRestImpl implements ExaminationRest {
@Override
public void batchDelete(ExaminationBatchDeleteDto dto) {
Assert.notEmpty(dto.getExaminationIds(),"删除ID不能为空");
Assert.notEmpty(dto.getExaminationIds(), "删除ID不能为空");
UserBaseEntity currentUser = BlContext.getCurrentUser();
boolean deleted = examinationService.batchDelete(dto.getExaminationIds(), currentUser.getUserId());
if (!deleted){
if (!deleted) {
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 {
String query;
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