Commit 72d8ca68 authored by alex yao's avatar alex yao

feat:Ai软著

parent a549be6d
......@@ -351,36 +351,7 @@ public class AiDialoguesServiceImpl implements AiDialoguesService {
long inputTimeStamp = System.currentTimeMillis();
try {
if (dialoguesType.equals(AiDialoguesTypeEnum.CAR_INSURANCE.getType()) || dialoguesType.equals(AiDialoguesTypeEnum.CAR_RECOMMEND.getType())) {//AppBuilder
BizAiDialogues3rdRelationEntity bizAiDialogues3rdRelationEntity = new BizAiDialogues3rdRelationEntity();
bizAiDialogues3rdRelationEntity.setDialoguesId(dialoguesId);
bizAiDialogues3rdRelationEntity.setPlatform(DialoguesPlatformEnum.AppBuilder.getPlatform());
bizAiDialogues3rdRelationEntity.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizAiDialogues3rdRelationEntity> relationEntities = bizAiDialogues3rdRelationService.findByExample(bizAiDialogues3rdRelationEntity, null);
if (CollectionUtils.isEmpty(relationEntities)) {
throw new BusinessException("获取会话配置异常");
}
AppBuilderClientIterator iterator = appBuilderService.communication(relationEntities.get(0).getRelationId(), input, null, true);
while (iterator.hasNext()) {
AppBuilderClientResult res = iterator.next();
LargeModelDemandResult largeModelDemandResult = new LargeModelDemandResult();
largeModelDemandResult.setCode("0");
if (ArrayUtils.isNotEmpty(res.getEvents())) {
Event event = res.getEvents()[0];
String eventType = event.getEventType();
if ("chatflow".equals(eventType)) {
Map<String, Object> detail = event.getDetail();
if (detail.containsKey("message")) {
String mess = detail.get("message").toString();
largeModelDemandResult.setMessage(mess);
contentBuilder.append(mess);
}
}
} else if (StringUtils.isNotEmpty(res.getAnswer())) {
largeModelDemandResult.setMessage(res.getAnswer());
contentBuilder.append(res.getAnswer());
}
sseUtil.send(JsonUtils.serialize(largeModelDemandResult));
}
appbuilder(dialoguesId, input, contentBuilder, sseUtil);
}
} catch (Exception e) {
logger.error(e.getMessage());
......@@ -414,4 +385,39 @@ public class AiDialoguesServiceImpl implements AiDialoguesService {
}
return contentBuilder.toString();
}
private void appbuilder(String dialoguesId, String input, StringBuilder contentBuilder, SSEUtil sseUtil)
throws Exception {
BizAiDialogues3rdRelationEntity bizAiDialogues3rdRelationEntity = new BizAiDialogues3rdRelationEntity();
bizAiDialogues3rdRelationEntity.setDialoguesId(dialoguesId);
bizAiDialogues3rdRelationEntity.setPlatform(DialoguesPlatformEnum.AppBuilder.getPlatform());
bizAiDialogues3rdRelationEntity.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizAiDialogues3rdRelationEntity> relationEntities = bizAiDialogues3rdRelationService.findByExample(bizAiDialogues3rdRelationEntity, null);
if (CollectionUtils.isEmpty(relationEntities)) {
throw new BusinessException("获取会话配置异常");
}
AppBuilderClientIterator iterator = appBuilderService.communication(relationEntities.get(0).getRelationId(),
input, null, true);
while (iterator.hasNext()) {
AppBuilderClientResult res = iterator.next();
LargeModelDemandResult largeModelDemandResult = new LargeModelDemandResult();
largeModelDemandResult.setCode("0");
if (ArrayUtils.isNotEmpty(res.getEvents())) {
Event event = res.getEvents()[0];
String eventType = event.getEventType();
if ("chatflow".equals(eventType)) {
Map<String, Object> detail = event.getDetail();
if (detail.containsKey("message")) {
String mess = detail.get("message").toString();
largeModelDemandResult.setMessage(mess);
contentBuilder.append(mess);
}
}
} else if (StringUtils.isNotEmpty(res.getAnswer())) {
largeModelDemandResult.setMessage(res.getAnswer());
contentBuilder.append(res.getAnswer());
}
sseUtil.send(JsonUtils.serialize(largeModelDemandResult));
}
}
}
......@@ -5,44 +5,44 @@ import java.util.List;
/**
* @author alex.yao
* @date 2025/6/19
*/
public enum AiDialoguesTypeEnum {
PORTAL("portal", "门户页对话"),
PORTAL("portal", "门户页对话", DialoguesPlatformEnum.ModelLink),
LONG_TEXT_DOCUMENT("long_text_document", "长文本文档"),
LONG_TEXT_DOCUMENT("long_text_document", "长文本文档", DialoguesPlatformEnum.ModelLink),
AI_WRITING("ai_writing", "AI写作"),
AI_WRITING("ai_writing", "AI写作", DialoguesPlatformEnum.ModelLink),
AI_BI("ai_bi", "智能问数"),
AI_BI("ai_bi", "智能问数", DialoguesPlatformEnum.ModelLink),
AI_FINANCE("ai_finance", "AI财务"),
AI_FINANCE("ai_finance", "AI财务", DialoguesPlatformEnum.ModelLink),
LEGAL_AFFAIRS("legal_affairs", "法务问答"),
LEGAL_AFFAIRS("legal_affairs", "法务问答", DialoguesPlatformEnum.ModelLink),
LEGAL_DOCUMENT_WRITING("legal_document_writing", "智写-法律文书写作"),
LEGAL_DOCUMENT_WRITING("legal_document_writing", "智写-法律文书写作", DialoguesPlatformEnum.ModelLink),
AI_LEGAL_DOCUMENT_WRITING("ai_legal_document_writing", "智写-法律文书ai写作"),
AI_LEGAL_DOCUMENT_WRITING("ai_legal_document_writing", "智写-法律文书ai写作", DialoguesPlatformEnum.ModelLink),
TEMPLATE_LEGAL_DOCUMENT_WRITING("template_legal_document_writing", "智写-法律文书模板写作"),
TEMPLATE_LEGAL_DOCUMENT_WRITING("template_legal_document_writing", "智写-法律文书模板写作",
DialoguesPlatformEnum.ModelLink),
TRAVEL_BUSINESS("travel_business", "旅游业务"),
TRAVEL_BUSINESS("travel_business", "旅游业务", DialoguesPlatformEnum.ModelLink),
MEETING_ASSISTANT("meeting_assistant", "会议助手"),
MEETING_ASSISTANT("meeting_assistant", "会议助手", DialoguesPlatformEnum.ModelLink),
LEGISLATIVE_DOCUMENT_WRITING("legislative_document_writing", "立案调查"),
LEGISLATIVE_DOCUMENT_WRITING("legislative_document_writing", "立案调查", DialoguesPlatformEnum.ModelLink),
CAR_INSURANCE("car_insurance", "车辆保险"),
CAR_INSURANCE("car_insurance", "车辆保险", DialoguesPlatformEnum.AppBuilder),
CAR_RECOMMEND("car_recommend", "车辆推荐"),
CAR_RECOMMEND("car_recommend", "车辆推荐", DialoguesPlatformEnum.AppBuilder),
DATA_AUDIT("data_audit", "数据校验"),
DATA_AUDIT("data_audit", "数据校验", DialoguesPlatformEnum.ModelLink),
AI_SOFTWARE_COPYRIGHT("ai_software_copyright", "AI软著"),
AI_SOFTWARE_COPYRIGHT("ai_software_copyright", "AI软著", DialoguesPlatformEnum.Dify),
;
......@@ -50,9 +50,13 @@ public enum AiDialoguesTypeEnum {
private final String desc;
AiDialoguesTypeEnum(String type, String desc) {
private final DialoguesPlatformEnum platform;
// DialoguesPlatformEnum.ModelLink: modellink DialoguesPlatformEnum.AppBuilder: appbuilder DialoguesPlatformEnum.Dify: dify
AiDialoguesTypeEnum(String type, String desc, DialoguesPlatformEnum platform) {
this.type = type;
this.desc = desc;
this.platform = platform;
}
public String getType() {
......@@ -63,6 +67,9 @@ public enum AiDialoguesTypeEnum {
return desc;
}
public DialoguesPlatformEnum getPlatform() {
return platform;
}
public static AiDialoguesTypeEnum getByType(String type) {
for (AiDialoguesTypeEnum aiDialoguesTypeEnum : AiDialoguesTypeEnum.values()) {
......
......@@ -8,9 +8,8 @@ import cn.com.gsst.dify_client.exception.DifyApiException;
import cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightEnum;
import cn.com.poc.ai_software_copyright.domian.BaseInfo;
import cn.com.poc.ai_software_copyright.domian.TechnicalContent;
import cn.com.poc.ai_software_copyright.dto.SoftwareCopyRightFilesDto;
import cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightDocRecordEntity;
import org.springframework.web.bind.annotation.RequestParam;
import cn.com.poc.ai_software_copyright.entity.CallbackEntity;
import org.springframework.web.multipart.MultipartFile;
/**
......@@ -52,7 +51,7 @@ public interface SoftwareCopyRightService {
*
* @param id biz_software_copyright 主键id
*/
BizSoftwareCopyrightDocRecordEntity listFile(Long id) throws Exception;
BizSoftwareCopyrightDocRecordEntity listFile(Long id) ;
/**
* 获取下载地址
......@@ -79,4 +78,13 @@ public interface SoftwareCopyRightService {
*/
String zipFilesAndUpdateRecord(BizSoftwareCopyrightDocRecordEntity recordEntity);
/**
* 回调-生成基础文档
*
* @param taskId 回调任务ID
* @param type 回调类型
* @param callbackEntity 回调结果
*/
void callbackGeneratedBaseDoc(String taskId, String type, CallbackEntity callbackEntity);
}
package cn.com.poc.ai_software_copyright.contant;
/**
* @author alex.yao
* @date 2026/1/5
*/
public class AiSoftWareCopyRightRedisKey {
public static final String CALL_BACK = "SOFT_WARE_COPY_RIGHT_CALL_BACK:";
}
package cn.com.poc.ai_software_copyright.domain;
import java.util.List;
import cn.com.poc.ai_software_copyright.domian.BaseInfo;
import cn.com.poc.ai_software_copyright.domian.TechnicalContent;
/**
* @author alex.yao
* @date 2026/1/7
*/
public class GeneratedDoc {
private Long id;
private String ui;
private String structure;
private String demand;
private String code;
private BaseInfo baseinfo;
private TechnicalContent technical_content;
private List<String> fileURLs;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public List<String> getFileURLs() {
return fileURLs;
}
public void setFileURLs(List<String> fileURLs) {
this.fileURLs = fileURLs;
}
public String getUi() {
return ui;
}
public void setUi(String ui) {
this.ui = ui;
}
public String getStructure() {
return structure;
}
public void setStructure(String structure) {
this.structure = structure;
}
public String getDemand() {
return demand;
}
public void setDemand(String demand) {
this.demand = demand;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public BaseInfo getBaseinfo() {
return baseinfo;
}
public void setBaseinfo(BaseInfo baseinfo) {
this.baseinfo = baseinfo;
}
public TechnicalContent getTechnical_content() {
return technical_content;
}
public void setTechnical_content(TechnicalContent technical_content) {
this.technical_content = technical_content;
}
}
package cn.com.poc.ai_software_copyright.domian;
import java.util.Map;
/**
* @author alex.yao
* @date 2026/1/5
*/
public class BaseDocTask {
private String taskId;
private String status;
private Map<String, Object> result;
public String getTaskId() {
return taskId;
}
public void setTaskId(String taskId) {
this.taskId = taskId;
}
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public Map<String, Object> getResult() {
return result;
}
public void setResult(Map<String, Object> result) {
this.result = result;
}
}
package cn.com.poc.ai_software_copyright.entity;
/**
* @author alex.yao
* @date 2026/1/5
*/
public class CallbackEntity {
private Object result;
public Object getResult() {
return result;
}
public void setResult(Object result) {
this.result = result;
}
}
......@@ -12,4 +12,5 @@ where
is_deleted = 'N'
<< and LOCATE(:query,JSON_EXTRACT(base_info, '$.softwareFullName'))>>
<< and generated_status = :generatedStatus >>
<< and generated_status in (:generatedStatusList) >>
order by CREATED_TIME desc
\ No newline at end of file
package cn.com.poc.ai_software_copyright.query;
import java.io.Serializable;
import java.util.List;
/**
* Query Condition class for SoftwareCopyrightQuery
*/
public class SoftwareCopyrightQueryCondition implements Serializable{
public class SoftwareCopyrightQueryCondition implements Serializable {
private static final long serialVersionUID = 1L;
private java.lang.String query;
public java.lang.String getQuery(){
public java.lang.String getQuery() {
return this.query;
}
public void setQuery(java.lang.String query){
public void setQuery(java.lang.String query) {
this.query = query;
}
private java.lang.String generatedStatus;
public java.lang.String getGeneratedStatus(){
public java.lang.String getGeneratedStatus() {
return this.generatedStatus;
}
public void setGeneratedStatus(java.lang.String generatedStatus){
public void setGeneratedStatus(java.lang.String generatedStatus) {
this.generatedStatus = generatedStatus;
}
private List<String> generatedStatusList;
public List<String> getGeneratedStatusList() {
return generatedStatusList;
}
public void setGeneratedStatusList(List<String> generatedStatusList) {
this.generatedStatusList = generatedStatusList;
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package cn.com.poc.ai_software_copyright.rest.impl;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
......@@ -16,12 +17,14 @@ import cn.com.poc.ai_software_copyright.dto.SoftwareCopyRightAssistantDto;
import cn.com.poc.ai_software_copyright.dto.SoftwareCopyRightDto;
import cn.com.poc.ai_software_copyright.dto.SoftwareCopyRightFilesDto;
import cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity;
import cn.com.poc.ai_software_copyright.entity.CallbackEntity;
import cn.com.poc.ai_software_copyright.query.SoftwareCopyrightQueryCondition;
import cn.com.poc.ai_software_copyright.query.SoftwareCopyrightQueryItem;
import cn.com.poc.ai_software_copyright.rest.BizSoftwareCopyrightRest;
import cn.com.poc.ai_software_copyright.service.BizSoftwareCopyrightService;
import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
import cn.com.yict.framemax.data.model.PagingInfo;
import org.springframework.stereotype.Component;
import org.springframework.util.Assert;
......@@ -31,6 +34,9 @@ import org.springframework.web.multipart.MultipartFile;
public class BizSoftwareCopyrightRestImpl implements BizSoftwareCopyrightRest {
@Resource
private RedisService redisService;
@Resource
private SoftwareCopyRightService softwareCopyRightService;
......@@ -58,10 +64,24 @@ public class BizSoftwareCopyrightRestImpl implements BizSoftwareCopyrightRest {
@Override
public List<SoftwareCopyRightDto> querySoftwareCopyRight(String query, String generatedStatus,
PagingInfo pagingInfo) {
PagingInfo pagingInfo) {
SoftwareCopyrightQueryCondition condition = new SoftwareCopyrightQueryCondition();
List<String> generatedStatusList = null;
if (StringUtils.isNotBlank(generatedStatus)) {
if (generatedStatus.equals(AiSoftWareCopyRightEnum.GENERATED_STATUS.Daft.name())
|| generatedStatus.equals(AiSoftWareCopyRightEnum.GENERATED_STATUS.Pending.name())
|| generatedStatus.equals(AiSoftWareCopyRightEnum.GENERATED_STATUS.Running.name())
) {
generatedStatusList = new ArrayList<>();
generatedStatusList.add(AiSoftWareCopyRightEnum.GENERATED_STATUS.Daft.name());
generatedStatusList.add(AiSoftWareCopyRightEnum.GENERATED_STATUS.Pending.name());
generatedStatusList.add(AiSoftWareCopyRightEnum.GENERATED_STATUS.Running.name());
condition.setGeneratedStatusList(generatedStatusList);
} else {
condition.setGeneratedStatus(generatedStatus);
}
}
condition.setQuery(query);
List<SoftwareCopyrightQueryItem> softwareCopyrightQueryItems =
bizSoftwareCopyrightService.softwareCopyrightQuery(condition, pagingInfo);
......@@ -107,21 +127,15 @@ public class BizSoftwareCopyrightRestImpl implements BizSoftwareCopyrightRest {
return softwareCopyRightService.getDownloadUrl(id);
}
@Resource
private RedisService redisService;
@Override
public void callbackGeneratedBaseDoc(String taskId,
String type,
CallbackDto callbackDto) {
if (redisService.hasKey(taskId)) {
if (type.equals("success")) {
redisService.set(taskId, type);
} else if (type.equals("error")) {
redisService.set(taskId, type);
} else {
redisService.set(taskId + ":" + type, JsonUtils.serialize(callbackDto));
}
CallbackEntity callbackEntity = new CallbackEntity();
if (callbackDto != null && callbackDto.getResult() != null) {
callbackEntity.setResult(callbackDto.getResult());
}
softwareCopyRightService.callbackGeneratedBaseDoc(taskId, type, callbackEntity);
}
}
\ No newline at end of file
......@@ -4,19 +4,21 @@ import cn.com.yict.framemax.core.service.BaseService;
import cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightDocRecordEntity;
import cn.com.yict.framemax.data.model.PagingInfo;
import java.util.Collection;
import java.util.List;
public interface BizSoftwareCopyrightDocRecordService extends BaseService {
BizSoftwareCopyrightDocRecordEntity get(java.lang.Long id) throws Exception;
BizSoftwareCopyrightDocRecordEntity getByRelationId(java.lang.Long relationId);
List<BizSoftwareCopyrightDocRecordEntity> findByExample(BizSoftwareCopyrightDocRecordEntity example,
PagingInfo pagingInfo) throws Exception;
PagingInfo pagingInfo);
BizSoftwareCopyrightDocRecordEntity save(BizSoftwareCopyrightDocRecordEntity entity) throws Exception;
BizSoftwareCopyrightDocRecordEntity save(BizSoftwareCopyrightDocRecordEntity entity);
BizSoftwareCopyrightDocRecordEntity update(BizSoftwareCopyrightDocRecordEntity entity) throws Exception;
BizSoftwareCopyrightDocRecordEntity update(BizSoftwareCopyrightDocRecordEntity entity);
void deletedById(java.lang.Long id) throws Exception;
......
package cn.com.poc.ai_software_copyright.service.impl;
import cn.com.yict.framemax.core.exception.BusinessException;
import cn.com.poc.common.constant.CommonConstant;
import cn.com.yict.framemax.core.service.impl.BaseServiceImpl;
import cn.com.poc.ai_software_copyright.service.BizSoftwareCopyrightDocRecordService;
import cn.com.poc.ai_software_copyright.model.BizSoftwareCopyrightDocRecordModel;
......@@ -8,18 +8,11 @@ import cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightDocRecordEnti
import cn.com.poc.ai_software_copyright.convert.BizSoftwareCopyrightDocRecordConvert;
import cn.com.poc.ai_software_copyright.repository.BizSoftwareCopyrightDocRecordRepository;
import cn.com.yict.framemax.data.model.PagingInfo;
import cn.hutool.core.util.ZipUtil;
import org.springframework.stereotype.Service;
import org.apache.commons.collections4.CollectionUtils;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Collectors;
import java.util.List;
import javax.annotation.Resource;
......@@ -45,9 +38,20 @@ public class BizSoftwareCopyrightDocRecordServiceImpl extends BaseServiceImpl
return BizSoftwareCopyrightDocRecordConvert.modelToEntity(model);
}
@Override
public BizSoftwareCopyrightDocRecordEntity getByRelationId(Long relationId) {
BizSoftwareCopyrightDocRecordModel model = new BizSoftwareCopyrightDocRecordModel();
model.setRelationId(relationId);
model.setIsDeleted(CommonConstant.IsDeleted.N);
List<BizSoftwareCopyrightDocRecordModel> models = this.repository.findByExample(model, null);
if (CollectionUtils.isNotEmpty(models)) {
return BizSoftwareCopyrightDocRecordConvert.modelToEntity(models.get(0));
}
return null;
}
public List<BizSoftwareCopyrightDocRecordEntity> findByExample(BizSoftwareCopyrightDocRecordEntity example,
PagingInfo pagingInfo) throws Exception {
PagingInfo pagingInfo) {
List<BizSoftwareCopyrightDocRecordEntity> result = new ArrayList<BizSoftwareCopyrightDocRecordEntity>();
BizSoftwareCopyrightDocRecordModel model = new BizSoftwareCopyrightDocRecordModel();
if (example != null) {
......@@ -62,7 +66,7 @@ public class BizSoftwareCopyrightDocRecordServiceImpl extends BaseServiceImpl
return result;
}
public BizSoftwareCopyrightDocRecordEntity save(BizSoftwareCopyrightDocRecordEntity entity) throws Exception {
public BizSoftwareCopyrightDocRecordEntity save(BizSoftwareCopyrightDocRecordEntity entity) {
Assert.notNull(entity);
entity.setId(null);
entity.setIsDeleted("N");
......@@ -71,7 +75,7 @@ public class BizSoftwareCopyrightDocRecordServiceImpl extends BaseServiceImpl
return BizSoftwareCopyrightDocRecordConvert.modelToEntity(saveModel);
}
public BizSoftwareCopyrightDocRecordEntity update(BizSoftwareCopyrightDocRecordEntity entity) throws Exception {
public BizSoftwareCopyrightDocRecordEntity update(BizSoftwareCopyrightDocRecordEntity entity) {
Assert.notNull(entity);
Assert.notNull(entity.getId(), "update pk can not be null");
BizSoftwareCopyrightDocRecordModel model = this.repository.get(entity.getId());
......
......@@ -13,6 +13,8 @@ public interface BizFileUploadRecordService extends BaseService {
BizFileUploadRecordModel get(Long id) throws Exception;
BizFileUploadRecordModel getByMD5(String md5);
List<BizFileUploadRecordModel> findByExample(BizFileUploadRecordModel example,PagingInfo pagingInfo) throws Exception;
List<BizFileUploadRecordModel> findByFileLink(List<String> fileLink) throws Exception;
......
......@@ -45,7 +45,19 @@ public class BizFileUploadRecordServiceImpl extends BaseServiceImpl
return this.repository.get(id);
}
public List<BizFileUploadRecordModel> findByExample(BizFileUploadRecordModel example, PagingInfo pagingInfo) throws Exception {
@Override
public BizFileUploadRecordModel getByMD5(String md5) {
BizFileUploadRecordModel bizFileUploadRecordModel = new BizFileUploadRecordModel();
bizFileUploadRecordModel.setMd5(md5);
List<BizFileUploadRecordModel> models = this.repository.findByExample(bizFileUploadRecordModel);
if (CollectionUtils.isEmpty(models)) {
return null;
}
return models.get(0);
}
public List<BizFileUploadRecordModel> findByExample(BizFileUploadRecordModel example, PagingInfo pagingInfo)
throws Exception {
if (example == null) {
example = new BizFileUploadRecordModel();
}
......@@ -60,13 +72,14 @@ public class BizFileUploadRecordServiceImpl extends BaseServiceImpl
FileUploadQueryCondition fileUploadQueryCondition = new FileUploadQueryCondition();
fileUploadQueryCondition.setFileUrlList(fileLinks);
List<FileUploadQueryItem> fileUploadQueryItems = this.sqlDao.query(fileUploadQueryCondition, FileUploadQueryItem.class);
List<FileUploadQueryItem> fileUploadQueryItems =
this.sqlDao.query(fileUploadQueryCondition, FileUploadQueryItem.class);
List<BizFileUploadRecordModel> bizFileUploadRecordModels = new ArrayList<>();
if(CollectionUtils.isNotEmpty(fileUploadQueryItems)){
if (CollectionUtils.isNotEmpty(fileUploadQueryItems)) {
for (FileUploadQueryItem fileUploadQueryItem : fileUploadQueryItems) {
BizFileUploadRecordModel bizFileUploadRecordModel = new BizFileUploadRecordModel();
BeanUtils.copyProperties(fileUploadQueryItem,bizFileUploadRecordModel);
BeanUtils.copyProperties(fileUploadQueryItem, bizFileUploadRecordModel);
bizFileUploadRecordModels.add(bizFileUploadRecordModel);
}
}
......
......@@ -82,7 +82,8 @@ public class DocumentLoad {
List<HSLFSlide> slides = hslfSlideShow.getSlides();
SlideShowExtractor slideShowExtractor = new SlideShowExtractor(hslfSlideShow);
for (HSLFSlide slide : slides) {
sb.append("Page:").append(slide.getSlideNumber()).append(StringUtils.LF).append(slideShowExtractor.getText(slide)).append(StringUtils.LF);
sb.append("Page:").append(slide.getSlideNumber()).append(StringUtils.LF)
.append(slideShowExtractor.getText(slide)).append(StringUtils.LF);
}
slideShowExtractor.close();
is.close();
......@@ -106,7 +107,8 @@ public class DocumentLoad {
for (CTTextParagraph textParagraph : pList) {
List<CTRegularTextRun> textRuns = textParagraph.getRList();
for (CTRegularTextRun textRun : textRuns) {
sb.append("Page:").append(slide.getSlideNumber()).append(StringUtils.LF).append(textRun.getT()).append(StringUtils.LF);
sb.append("Page:").append(slide.getSlideNumber()).append(StringUtils.LF)
.append(textRun.getT()).append(StringUtils.LF);
}
}
}
......@@ -192,6 +194,41 @@ public class DocumentLoad {
case "xls":
case "csv":
return excelToMarkdown(file);
// 添加对代码文件的支持
case "java":
case "py":
case "js":
case "ts":
case "cpp":
case "c":
case "h":
case "cs":
case "go":
case "rb":
case "php":
case "html":
case "css":
case "vue":
case "jsx":
case "tsx":
case "sql":
case "xml":
case "json":
case "yaml":
case "yml":
case "sh":
case "bash":
case "pl":
case "pm":
case "r":
case "scala":
case "kt":
case "kts":
case "swift":
case "dart":
case "rs":
case "lua":
return loadCodeFile(file, type);
default:
throw new BusinessException(type + " format is not yet supported");
}
......@@ -274,4 +311,51 @@ public class DocumentLoad {
throw new I18nMessageException("exception/file.load.error");
}
}
/**
* 读取代码文件内容
*
* @param file 代码文件
* @param type 文件类型扩展名
* @return 代码文件内容
* @throws IOException
*/
public static String loadCodeFile(File file, String type) throws IOException {
// 验证文件类型
if (!isValidCodeFileType(type)) {
throw new BusinessException("Unsupported code file type: " + type);
}
// 使用 UTF-8 编码读取代码文件
StringBuilder content = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file), "UTF-8"))) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line).append(StringUtils.LF);
}
}
return content.toString();
}
/**
* 验证是否为支持的代码文件类型
*
* @param type 文件扩展名
* @return 是否为支持的代码文件类型
*/
private static boolean isValidCodeFileType(String type) {
String[] supportedTypes = {
"java", "py", "js", "ts", "cpp", "c", "h", "cs", "go", "rb",
"php", "html", "css", "vue", "jsx", "tsx", "sql", "xml", "json",
"yaml", "yml", "sh", "bash", "pl", "pm", "r", "scala", "kt",
"kts", "swift", "dart", "rs", "lua"
};
for (String supportedType : supportedTypes) {
if (supportedType.equalsIgnoreCase(type)) {
return true;
}
}
return false;
}
}
package cn.com.poc.common.utils;
import java.io.IOException;
import java.io.InputStream;
import java.security.MessageDigest;
import cn.com.yict.framemax.core.exception.BusinessException;
import cn.hutool.crypto.digest.MD5;
import jdk.internal.util.xml.impl.Input;
public class MD5Util {
private static String byteArrayToHexString(byte b[]) {
......@@ -42,4 +48,15 @@ public class MD5Util {
private static final String hexDigits[] = {"0", "1", "2", "3", "4", "5",
"6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
public static String fileToMD5(InputStream inputStream) {
try {
byte[] bytes = new byte[inputStream.available()];
inputStream.read(bytes);
String md5 = MD5.create().digestHex(bytes);
return md5;
} catch (IOException e) {
throw new BusinessException(e);
}
}
}
......@@ -2,21 +2,34 @@ package cn.com.poc.message.service.impl;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutionException;
import java.util.stream.Collectors;
import cn.com.poc.ai_software_copyright.agent.SoftwareCopyRightAgent;
import cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightEnum;
import cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightRedisKey;
import cn.com.poc.ai_software_copyright.domain.GeneratedDoc;
import cn.com.poc.ai_software_copyright.domian.BaseInfo;
import cn.com.poc.ai_software_copyright.domian.TechnicalContent;
import cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity;
import cn.com.poc.ai_software_copyright.service.BizSoftwareCopyrightService;
import cn.com.poc.common.service.RedisService;
import cn.com.poc.common.utils.JsonUtils;
import cn.com.poc.common.utils.StringUtils;
import cn.com.poc.message.entity.SoftwareCopyRightMessage;
import cn.com.poc.message.service.SoftwareCopyRightConsumerService;
import cn.com.poc.message.service.SoftwareCopyRightProduceService;
import cn.com.poc.message.topic.SoftwareCopyRightTopic;
import cn.com.yict.framemax.core.exception.BusinessException;
import cn.com.yict.framemax.tumbleweed.client.annotation.Consumer;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.type.TypeReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
......@@ -26,6 +39,8 @@ import org.springframework.stereotype.Service;
@Service
public class SoftwareCopyRightConsumerServiceImpl implements SoftwareCopyRightConsumerService {
private Logger logger = LoggerFactory.getLogger(SoftwareCopyRightConsumerService.class);
@Resource
private BizSoftwareCopyrightService bizSoftwareCopyrightService;
......@@ -35,6 +50,9 @@ public class SoftwareCopyRightConsumerServiceImpl implements SoftwareCopyRightCo
@Resource
private SoftwareCopyRightAgent agent;
@Resource
private RedisService redisService;
/**
* 提交生成文档任务
*
......@@ -44,32 +62,39 @@ public class SoftwareCopyRightConsumerServiceImpl implements SoftwareCopyRightCo
@Override
@Consumer(topic = SoftwareCopyRightTopic.SUBMIT_SOFTWARE_COPYRIGHT_TASK, scale = 2)
public void submitTask(SoftwareCopyRightMessage message) {
logger.info("submit task:{}", JsonUtils.serialize(message));
message.setStatus(AiSoftWareCopyRightEnum.GENERATED_STATUS.Running);
produceService.updateStatus(message);
//todo 实现提交生成文档任务
String generatedDocType = message.getGeneratedDocType();
List<String> docTypes = JsonUtils.deSerialize(generatedDocType, new TypeReference<List<String>>() {
}.getType());
// 创建一个CompletableFuture数组来存储所有任务
List<CompletableFuture<Object>> futures = docTypes.stream()
.map(docType ->
CompletableFuture.supplyAsync(() ->
agent.generatedDocByType(message, AiSoftWareCopyRightEnum.DOC_TYPE.valueOf(docType)))
)
.collect(Collectors.toList());
// 等待所有任务完成
CompletableFuture<Void> allFutures = CompletableFuture.allOf(
futures.toArray(new CompletableFuture[0])
);
allFutures.thenRun(() -> {
//todo 处理完成逻辑
}).exceptionally(throwable -> {
return null;
});
List<String> fileURLS = new ArrayList<>();
if (StringUtils.isNotBlank(message.getReferenceDocumentFileUrl())) {
fileURLS = JsonUtils.deSerialize(message.getReferenceDocumentFileUrl(), new TypeReference<List<String>>() {
}.getType());
}
String ui = redisService.get(AiSoftWareCopyRightRedisKey.CALL_BACK + message.getId() + ":ui").toString();
String demand =
redisService.get(AiSoftWareCopyRightRedisKey.CALL_BACK + message.getId() + ":demand").toString();
String structure =
redisService.get(AiSoftWareCopyRightRedisKey.CALL_BACK + message.getId() + ":structure").toString();
JSONObject jsonObject = JSONObject.parseObject(structure);
JSONObject result = jsonObject.getJSONObject("result");
structure = result.toJSONString();
GeneratedDoc generatedDoc = new GeneratedDoc();
generatedDoc.setId(message.getId());
generatedDoc.setFileURLs(fileURLS);
generatedDoc.setUi(ui);
generatedDoc.setDemand(demand);
generatedDoc.setStructure(structure);
generatedDoc.setBaseinfo(StringUtils.isNotBlank(message.getBaseInfo()) ?
JsonUtils.deSerialize(message.getBaseInfo(), BaseInfo.class) : null);
generatedDoc.setTechnical_content(StringUtils.isNotBlank(message.getTechnicalContent()) ?
JsonUtils.deSerialize(message.getTechnicalContent(), TechnicalContent.class) : null);
for (String docType : docTypes) {
agent.generatedDocByType(generatedDoc, AiSoftWareCopyRightEnum.DOC_TYPE.valueOf(docType));
}
}
@Override
......
......@@ -29,3 +29,5 @@ pay.domain.callback.url=https://poc-sit.gsstcloud.com/api/rest/payCallBackRest/p
google.client.id=867985016759-n9qj00k174n9bibrtrqngvt89vbmnjrp.apps.googleusercontent.com
google.custom.search.key=AIzaSyCV8PTQ10rG5wo4E004dR3mcGD1RM_PrBw
google.custom.search.cx=049026ecb26e840ed
dify.software_copyright.callball.url=https://super-modellink-sit.gsstcloud.com/api/rest/bizSoftwareCopyrightRest/callbackGeneratedBaseDoc.json
\ No newline at end of file
......@@ -29,3 +29,5 @@ pay.domain.callback.url=https://model-link.gsstcloud.com/api/rest/payCallBackRes
google.client.id=867985016759-n9qj00k174n9bibrtrqngvt89vbmnjrp.apps.googleusercontent.com
google.custom.search.key=AIzaSyCV8PTQ10rG5wo4E004dR3mcGD1RM_PrBw
google.custom.search.cx=049026ecb26e840ed
dify.software_copyright.callball.url=https://super-modellink.gsstcloud.com/api/rest/bizSoftwareCopyrightRest/callbackGeneratedBaseDoc.json
\ No newline at end of file
......@@ -29,3 +29,5 @@ pay.domain.callback.url=https://poc-sit.gsstcloud.com/api/rest/payCallBackRest/p
google.client.id=867985016759-n9qj00k174n9bibrtrqngvt89vbmnjrp.apps.googleusercontent.com
google.custom.search.key=AIzaSyCV8PTQ10rG5wo4E004dR3mcGD1RM_PrBw
google.custom.search.cx=049026ecb26e840ed
dify.software_copyright.callball.url=https://super-modellink-sit.gsstcloud.com/api/rest/bizSoftwareCopyrightRest/callbackGeneratedBaseDoc.json
\ No newline at end of file
......@@ -29,3 +29,6 @@ pay.domain.callback.url=https://model-link.gsstcloud.com/api/rest/payCallBackRes
google.client.id=867985016759-n9qj00k174n9bibrtrqngvt89vbmnjrp.apps.googleusercontent.com
google.custom.search.key=AIzaSyCV8PTQ10rG5wo4E004dR3mcGD1RM_PrBw
google.custom.search.cx=049026ecb26e840ed
dify.software_copyright.callball.url=https://super-modellink.gsstcloud.com/api/rest/bizSoftwareCopyrightRest/callbackGeneratedBaseDoc.json
\ No newline at end of file
......@@ -72,3 +72,6 @@ framemax-frame.job.disable=false
#pay
pay.config.acctId=16653311814572
pay.config.wxAppId=wxea3470b5d2d97eca
#dify
dify.base.url=https://dify.gsstcloud.com/v1
package cn.com.poc.softwareCopyRight;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.Collections;
import java.util.Set;
import cn.com.gsst.dify_client.exception.DifyApiException;
import cn.com.poc.ai_software_copyright.agent.SoftwareCopyRightAgent;
import cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightRedisKey;
import cn.com.poc.ai_software_copyright.convert.BizSoftwareCopyrightConvert;
import cn.com.poc.ai_software_copyright.dto.SoftwareCopyRightDto;
import cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity;
import cn.com.poc.ai_software_copyright.service.BizSoftwareCopyrightService;
import cn.com.poc.common.service.RedisService;
import cn.com.yict.framemax.core.spring.SingleContextInitializer;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
/**
* @author alex.yao
* @date 2026/1/5
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(initializers = SingleContextInitializer.class)
@WebAppConfiguration
public class AgentTest {
@Resource
private RedisService redisService;
@Resource
private BizSoftwareCopyrightService bizSoftwareCopyrightService;
@Resource
private SoftwareCopyRightAgent softwareCopyRightAgent;
@Test
public void test_agent() throws DifyApiException, IOException, InterruptedException {
BizSoftwareCopyrightEntity bizSoftwareCopyrightEntity = bizSoftwareCopyrightService.get(6L);
SoftwareCopyRightDto softwareCopyRightDto = BizSoftwareCopyrightConvert.entityToDto(bizSoftwareCopyrightEntity);
softwareCopyRightAgent.generatedBaseDoc("SOFT_WARE_COPY_RIGHT_CALL_BACK:6", Collections.emptyList(),
softwareCopyRightDto.getBaseInfo(),
softwareCopyRightDto.getTechnicalContent());
}
@Test
public void test() {
String string = redisService.get(AiSoftWareCopyRightRedisKey.CALL_BACK + "6:structure").toString();
JSONObject jsonObject = JSONObject.parseObject(string);
JSONObject result = jsonObject.getJSONObject("result");
System.out.println(result.toJSONString());
}
}
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