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
1
Merge Requests
1
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
02424b79
Commit
02424b79
authored
Dec 31, 2025
by
alex yao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
feat:Ai软著
parent
93494e03
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
949 additions
and
31 deletions
+949
-31
AiDialoguesTypeEnum.java
...cn/com/poc/ai_dialogues/constant/AiDialoguesTypeEnum.java
+8
-5
SoftwareCopyRightAgent.java
...c/ai_software_copyright/agent/SoftwareCopyRightAgent.java
+283
-0
SoftwareCopyRightService.java
...oftware_copyright/aggregate/SoftwareCopyRightService.java
+45
-0
SoftwareCopyRightServiceImpl.java
...opyright/aggregate/impl/SoftwareCopyRightServiceImpl.java
+133
-0
AiSoftWareCopyRightEnum.java
...i_software_copyright/contant/AiSoftWareCopyRightEnum.java
+37
-2
SoftwareCopyRightAssistantDto.java
...software_copyright/dto/SoftwareCopyRightAssistantDto.java
+55
-0
BizSoftwareCopyrightRest.java
.../ai_software_copyright/rest/BizSoftwareCopyrightRest.java
+13
-3
BizSoftwareCopyrightRestImpl.java
...are_copyright/rest/impl/BizSoftwareCopyrightRestImpl.java
+35
-5
SoftwareCopyRightScheduler.java
...tware_copyright/scheduler/SoftwareCopyRightScheduler.java
+49
-0
BizSoftwareCopyrightService.java
...ftware_copyright/service/BizSoftwareCopyrightService.java
+8
-10
BizSoftwareCopyrightServiceImpl.java
...pyright/service/impl/BizSoftwareCopyrightServiceImpl.java
+5
-6
SoftwareCopyRightMessage.java
...a/cn/com/poc/message/entity/SoftwareCopyRightMessage.java
+94
-0
SoftwareCopyRightConsumerService.java
...poc/message/service/SoftwareCopyRightConsumerService.java
+25
-0
SoftwareCopyRightProduceService.java
.../poc/message/service/SoftwareCopyRightProduceService.java
+27
-0
SoftwareCopyRightConsumerServiceImpl.java
...ge/service/impl/SoftwareCopyRightConsumerServiceImpl.java
+84
-0
SoftwareCopyRightProduceServiceImpl.java
...age/service/impl/SoftwareCopyRightProduceServiceImpl.java
+34
-0
SoftwareCopyRightTopic.java
...java/cn/com/poc/message/topic/SoftwareCopyRightTopic.java
+14
-0
No files found.
src/main/java/cn/com/poc/ai_dialogues/constant/AiDialoguesTypeEnum.java
View file @
02424b79
...
@@ -29,17 +29,20 @@ public enum AiDialoguesTypeEnum {
...
@@ -29,17 +29,20 @@ public enum AiDialoguesTypeEnum {
TRAVEL_BUSINESS
(
"travel_business"
,
"旅游业务"
),
TRAVEL_BUSINESS
(
"travel_business"
,
"旅游业务"
),
MEETING_ASSISTANT
(
"meeting_assistant"
,
"会议助手"
),
MEETING_ASSISTANT
(
"meeting_assistant"
,
"会议助手"
),
LEGISLATIVE_DOCUMENT_WRITING
(
"legislative_document_writing"
,
"立案调查"
),
LEGISLATIVE_DOCUMENT_WRITING
(
"legislative_document_writing"
,
"立案调查"
),
CAR_INSURANCE
(
"car_insurance"
,
"车辆保险"
),
CAR_INSURANCE
(
"car_insurance"
,
"车辆保险"
),
CAR_RECOMMEND
(
"car_recommend"
,
"车辆推荐"
),
CAR_RECOMMEND
(
"car_recommend"
,
"车辆推荐"
),
DATA_AUDIT
(
"data_audit"
,
"数据校验"
),
DATA_AUDIT
(
"data_audit"
,
"数据校验"
),
AI_SOFTWARE_COPYRIGHT
(
"ai_software_copyright"
,
"AI软著"
),
;
;
...
...
src/main/java/cn/com/poc/ai_software_copyright/agent/SoftwareCopyRightAgent.java
0 → 100644
View file @
02424b79
This diff is collapsed.
Click to expand it.
src/main/java/cn/com/poc/ai_software_copyright/aggregate/SoftwareCopyRightService.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
ai_software_copyright
.
aggregate
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.Map
;
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
;
/**
* AI软著-聚合服务
*
* @author alex.yao
* @date 2025/12/26
*/
public
interface
SoftwareCopyRightService
{
/**
* 软著AI助手
*
* @param type 助手类型
* @param fileUrls 文件地址
* @param question 对话 内容
* @param data 输入参数
*/
void
softwareCopyRightAssistant
(
AiSoftWareCopyRightEnum
.
AI_ASSISTANT_TYPE
type
,
List
<
String
>
fileUrls
,
String
question
,
Map
<
String
,
Object
>
data
)
throws
InterruptedException
,
DifyApiException
,
IOException
;
/**
* AI-生成技术内容
*
* @param fileUrls
* @param question
* @param baseInfo
* @return
*/
TechnicalContent
createTechnicalContent
(
List
<
String
>
fileUrls
,
BaseInfo
baseInfo
)
throws
IOException
;
}
src/main/java/cn/com/poc/ai_software_copyright/aggregate/impl/SoftwareCopyRightServiceImpl.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
ai_software_copyright
.
aggregate
.
impl
;
import
javax.annotation.Resource
;
import
java.io.File
;
import
java.io.IOException
;
import
java.nio.file.Files
;
import
java.util.HashMap
;
import
java.util.List
;
import
java.util.Map
;
import
cn.com.gsst.dify_client.exception.DifyApiException
;
import
cn.com.poc.ai_software_copyright.agent.SoftwareCopyRightAgent
;
import
cn.com.poc.ai_software_copyright.aggregate.SoftwareCopyRightService
;
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.common.utils.DocumentLoad
;
import
cn.com.poc.common.utils.JsonUtils
;
import
cn.com.poc.common.utils.StringUtils
;
import
cn.com.yict.framemax.core.exception.BusinessException
;
import
cn.hutool.core.collection.ListUtil
;
import
cn.hutool.core.io.FileUtil
;
import
cn.hutool.core.util.ZipUtil
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.stereotype.Service
;
/**
* @author alex.yao
* @date 2025/12/26
*/
@Service
public
class
SoftwareCopyRightServiceImpl
implements
SoftwareCopyRightService
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SoftwareCopyRightService
.
class
);
@Resource
private
SoftwareCopyRightAgent
softwareCopyRightAgent
;
@Override
public
void
softwareCopyRightAssistant
(
AiSoftWareCopyRightEnum
.
AI_ASSISTANT_TYPE
type
,
List
<
String
>
fileUrls
,
String
question
,
Map
<
String
,
Object
>
data
)
throws
InterruptedException
,
DifyApiException
,
IOException
{
switch
(
type
)
{
case
MAIN_FUNCTION:
softwareCopyRightAgent
.
mainFunction
(
fileUrls
,
"生成[开发目的]"
,
data
);
break
;
case
TARGET_INDUSTRY:
softwareCopyRightAgent
.
targetIndustry
(
fileUrls
,
"生成[面向行业/领域]"
,
data
);
break
;
case
TECHNICAL_FEATURES:
softwareCopyRightAgent
.
technicalFeatures
(
fileUrls
,
"生成[软件的主要功能]"
,
data
);
break
;
case
DEVELOPMENT_PURPOSE:
softwareCopyRightAgent
.
developmentPurpose
(
fileUrls
,
"生成[技术特点]"
,
data
);
break
;
default
:
throw
new
BusinessException
(
"不支持的AI助手类型: "
+
type
);
}
}
@Override
public
TechnicalContent
createTechnicalContent
(
List
<
String
>
fileUrls
,
BaseInfo
baseInfo
)
throws
IOException
{
Map
<
String
,
Object
>
data
=
new
HashMap
<>();
// 下载文件内容
if
(
CollectionUtils
.
isNotEmpty
(
fileUrls
))
{
StringBuilder
stringBuilder
=
new
StringBuilder
();
StringBuilder
codeBuilder
=
new
StringBuilder
();
for
(
String
fileUrl
:
fileUrls
)
{
File
file
=
DocumentLoad
.
downloadURLDocument
(
fileUrl
);
// 判断是否为压缩文件并解压
if
(
isCompressedFile
(
file
))
{
//todo 解压文件,获取解压后的文件列表
List
<
File
>
files
=
unGzip
(
file
);
for
(
File
codeFiles
:
files
)
{
// String fileContent = DocumentLoad.documentToText(codeFiles);
// codeBuilder.append("##").append(file.getName()).append(StringUtils.LF);
// codeBuilder.append(fileContent).append(StringUtils.LF);
}
}
else
{
String
fileContent
=
DocumentLoad
.
documentToText
(
file
);
stringBuilder
.
append
(
"##"
).
append
(
file
.
getName
()).
append
(
StringUtils
.
LF
);
stringBuilder
.
append
(
fileContent
).
append
(
StringUtils
.
LF
);
}
}
data
.
put
(
"files"
,
stringBuilder
.
toString
());
data
.
put
(
"code"
,
codeBuilder
.
toString
());
}
String
baseInfoStr
=
JsonUtils
.
serialize
(
baseInfo
);
String
technicalContent
=
softwareCopyRightAgent
.
technicalContent
(
null
,
baseInfoStr
,
data
);
logger
.
info
(
"【技术内容】 baseInfo:{},生成结果: {}"
,
baseInfoStr
,
technicalContent
);
if
(
StringUtils
.
isBlank
(
technicalContent
))
{
throw
new
BusinessException
(
"执行【技术内容】生成异常"
);
}
return
JsonUtils
.
deSerialize
(
technicalContent
,
TechnicalContent
.
class
);
}
/**
* 判断文件是否为压缩文件
*
* @param file 文件
* @return 是否为压缩文件
*/
private
boolean
isCompressedFile
(
File
file
)
{
String
fileName
=
file
.
getName
().
toLowerCase
();
return
fileName
.
endsWith
(
".zip"
)
||
fileName
.
endsWith
(
".tar"
)
||
fileName
.
endsWith
(
".tar.gz"
)
||
fileName
.
endsWith
(
".tgz"
)
||
fileName
.
endsWith
(
".rar"
)
||
fileName
.
endsWith
(
".7z"
);
}
/**
* 解压文件
*
* @param gzipFile
* @return
* @throws IOException
*/
private
List
<
File
>
unGzip
(
File
gzipFile
)
throws
IOException
{
// 目标解压目录
String
destDir
=
Files
.
createTempDirectory
(
"gzip/temp/"
).
toString
();
// 确保目标目录存在
FileUtil
.
mkdir
(
destDir
);
File
[]
extractedFiles
=
ZipUtil
.
unzip
(
gzipFile
,
new
File
(
destDir
)).
listFiles
();
return
ListUtil
.
toList
(
extractedFiles
);
}
}
\ No newline at end of file
src/main/java/cn/com/poc/ai_software_copyright/contant/AiSoftWareCopyRightEnum.java
View file @
02424b79
...
@@ -8,10 +8,45 @@ package cn.com.poc.ai_software_copyright.contant;
...
@@ -8,10 +8,45 @@ package cn.com.poc.ai_software_copyright.contant;
*/
*/
public
class
AiSoftWareCopyRightEnum
{
public
class
AiSoftWareCopyRightEnum
{
//任务状态 Daft - 草稿 Pending - 排队 Running - 执行中
/**
//Complete - 完成 Error - 错误
* 任务状态
* Daft - 草稿
* Pending - 排队
* Running - 执行中
* Complete - 完成
* Error - 错误
*/
public
enum
GENERATED_STATUS
{
public
enum
GENERATED_STATUS
{
Daft
,
Pending
,
Running
,
Complete
,
Error
Daft
,
Pending
,
Running
,
Complete
,
Error
}
}
/**
* AI助手对话类型
* 1.开发目的 DEVELOPMENT_PURPOSE
* 2.面向行业/领域 TARGET_INDUSTRY
* 3.软件的主要功能 MAIN_FUNCTION
* 4.该软件的技术特点 TECHNICAL_FEATURES
*/
public
enum
AI_ASSISTANT_TYPE
{
DEVELOPMENT_PURPOSE
,
TARGET_INDUSTRY
,
MAIN_FUNCTION
,
TECHNICAL_FEATURES
}
/**
* 文档生成类型
* 信息采集表-information
* 电脑端使用说明书-pc_operating_manual
* 手机端使用说明书-ph_operating_manual
* 源代码文档-source_code
*/
public
enum
DOC_TYPE
{
information
,
pc_operating_manual
,
ph_operating_manual
,
source_code
}
}
}
src/main/java/cn/com/poc/ai_software_copyright/dto/SoftwareCopyRightAssistantDto.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
ai_software_copyright
.
dto
;
import
java.util.List
;
import
java.util.Map
;
import
cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightEnum
;
import
com.fasterxml.jackson.annotation.JsonIgnoreProperties
;
import
com.fasterxml.jackson.annotation.JsonInclude
;
/**
* @author alex.yao
* @date 2025/12/25
*/
public
class
SoftwareCopyRightAssistantDto
{
private
List
<
String
>
fileUrls
;
private
String
question
;
private
AiSoftWareCopyRightEnum
.
AI_ASSISTANT_TYPE
type
;
private
Map
<
String
,
Object
>
data
;
public
List
<
String
>
getFileUrls
()
{
return
fileUrls
;
}
public
void
setFileUrls
(
List
<
String
>
fileUrls
)
{
this
.
fileUrls
=
fileUrls
;
}
public
AiSoftWareCopyRightEnum
.
AI_ASSISTANT_TYPE
getType
()
{
return
type
;
}
public
void
setType
(
AiSoftWareCopyRightEnum
.
AI_ASSISTANT_TYPE
type
)
{
this
.
type
=
type
;
}
public
String
getQuestion
()
{
return
question
;
}
public
void
setQuestion
(
String
question
)
{
this
.
question
=
question
;
}
public
Map
<
String
,
Object
>
getData
()
{
return
data
;
}
public
void
setData
(
Map
<
String
,
Object
>
data
)
{
this
.
data
=
data
;
}
}
src/main/java/cn/com/poc/ai_software_copyright/rest/BizSoftwareCopyrightRest.java
View file @
02424b79
package
cn
.
com
.
poc
.
ai_software_copyright
.
rest
;
package
cn
.
com
.
poc
.
ai_software_copyright
.
rest
;
import
java.io.IOException
;
import
java.util.List
;
import
cn.com.gsst.dify_client.exception.DifyApiException
;
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.SoftwareCopyRightDto
;
import
cn.com.yict.framemax.core.rest.BaseRest
;
import
cn.com.yict.framemax.core.rest.BaseRest
;
import
cn.com.yict.framemax.data.model.PagingInfo
;
import
cn.com.yict.framemax.data.model.PagingInfo
;
import
java.util.List
;
import
cn.com.yict.framemax.web.permission.Access
;
import
cn.com.yict.framemax.web.permission.Access
;
import
cn.com.yict.framemax.web.permission.Permission
;
import
cn.com.yict.framemax.web.permission.Permission
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
org.springframework.web.bind.annotation.RequestBody
;
...
@@ -22,4 +24,12 @@ public interface BizSoftwareCopyrightRest extends BaseRest {
...
@@ -22,4 +24,12 @@ public interface BizSoftwareCopyrightRest extends BaseRest {
List
<
SoftwareCopyRightDto
>
querySoftwareCopyRight
(
@RequestParam
(
required
=
false
)
String
query
List
<
SoftwareCopyRightDto
>
querySoftwareCopyRight
(
@RequestParam
(
required
=
false
)
String
query
,
@RequestParam
(
required
=
false
)
String
generatedStatus
,
PagingInfo
pagingInfo
);
,
@RequestParam
(
required
=
false
)
String
generatedStatus
,
PagingInfo
pagingInfo
);
void
softwareCopyRightAssistant
(
@RequestBody
SoftwareCopyRightAssistantDto
dto
)
throws
DifyApiException
,
IOException
,
InterruptedException
;
/**
* AI软著-生成技术内容
*/
SoftwareCopyRightDto
createTechnicalContent
(
@RequestBody
SoftwareCopyRightDto
dto
)
throws
IOException
;
}
}
\ No newline at end of file
src/main/java/cn/com/poc/ai_software_copyright/rest/impl/BizSoftwareCopyrightRestImpl.java
View file @
02424b79
package
cn
.
com
.
poc
.
ai_software_copyright
.
rest
.
impl
;
package
cn
.
com
.
poc
.
ai_software_copyright
.
rest
.
impl
;
import
javax.annotation.Resource
;
import
javax.annotation.Resource
;
import
java.io.IOException
;
import
java.util.List
;
import
java.util.List
;
import
java.util.stream.Collectors
;
import
java.util.stream.Collectors
;
import
cn.com.gsst.dify_client.exception.DifyApiException
;
import
cn.com.poc.ai_software_copyright.agent.SoftwareCopyRightAgent
;
import
cn.com.poc.ai_software_copyright.aggregate.SoftwareCopyRightService
;
import
cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightEnum
;
import
cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightEnum
;
import
cn.com.poc.ai_software_copyright.convert.BizSoftwareCopyrightConvert
;
import
cn.com.poc.ai_software_copyright.convert.BizSoftwareCopyrightConvert
;
import
cn.com.poc.ai_software_copyright.domian.TechnicalContent
;
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.SoftwareCopyRightDto
;
import
cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity
;
import
cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity
;
import
cn.com.poc.ai_software_copyright.query.SoftwareCopyrightQueryCondition
;
import
cn.com.poc.ai_software_copyright.query.SoftwareCopyrightQueryCondition
;
...
@@ -20,23 +26,26 @@ import org.springframework.util.Assert;
...
@@ -20,23 +26,26 @@ import org.springframework.util.Assert;
public
class
BizSoftwareCopyrightRestImpl
implements
BizSoftwareCopyrightRest
{
public
class
BizSoftwareCopyrightRestImpl
implements
BizSoftwareCopyrightRest
{
@Resource
@Resource
private
BizSoftwareCopyrightService
service
;
private
SoftwareCopyRightService
softwareCopyRightService
;
@Resource
private
BizSoftwareCopyrightService
bizSoftwareCopyrightService
;
public
SoftwareCopyRightDto
getById
(
java
.
lang
.
Long
id
)
throws
Exception
{
public
SoftwareCopyRightDto
getById
(
java
.
lang
.
Long
id
)
throws
Exception
{
Assert
.
notNull
(
id
);
Assert
.
notNull
(
id
);
return
BizSoftwareCopyrightConvert
.
entityToDto
(
s
ervice
.
get
(
id
));
return
BizSoftwareCopyrightConvert
.
entityToDto
(
bizSoftwareCopyrightS
ervice
.
get
(
id
));
}
}
public
SoftwareCopyRightDto
save
(
SoftwareCopyRightDto
dto
)
throws
Exception
{
public
SoftwareCopyRightDto
save
(
SoftwareCopyRightDto
dto
)
throws
Exception
{
Assert
.
notNull
(
dto
);
Assert
.
notNull
(
dto
);
BizSoftwareCopyrightEntity
entity
=
BizSoftwareCopyrightConvert
.
dtoToEntity
(
dto
);
BizSoftwareCopyrightEntity
entity
=
BizSoftwareCopyrightConvert
.
dtoToEntity
(
dto
);
entity
.
setGeneratedStatus
(
AiSoftWareCopyRightEnum
.
GENERATED_STATUS
.
Daft
.
name
());
entity
.
setGeneratedStatus
(
AiSoftWareCopyRightEnum
.
GENERATED_STATUS
.
Daft
.
name
());
return
BizSoftwareCopyrightConvert
.
entityToDto
(
s
ervice
.
save
(
entity
));
return
BizSoftwareCopyrightConvert
.
entityToDto
(
bizSoftwareCopyrightS
ervice
.
save
(
entity
));
}
}
public
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
{
public
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
{
Assert
.
notNull
(
id
);
Assert
.
notNull
(
id
);
s
ervice
.
deletedById
(
id
);
bizSoftwareCopyrightS
ervice
.
deletedById
(
id
);
}
}
@Override
@Override
...
@@ -47,9 +56,30 @@ public class BizSoftwareCopyrightRestImpl implements BizSoftwareCopyrightRest {
...
@@ -47,9 +56,30 @@ public class BizSoftwareCopyrightRestImpl implements BizSoftwareCopyrightRest {
condition
.
setGeneratedStatus
(
generatedStatus
);
condition
.
setGeneratedStatus
(
generatedStatus
);
condition
.
setQuery
(
query
);
condition
.
setQuery
(
query
);
List
<
SoftwareCopyrightQueryItem
>
softwareCopyrightQueryItems
=
List
<
SoftwareCopyrightQueryItem
>
softwareCopyrightQueryItems
=
s
ervice
.
softwareCopyrightQuery
(
condition
,
pagingInfo
);
bizSoftwareCopyrightS
ervice
.
softwareCopyrightQuery
(
condition
,
pagingInfo
);
return
softwareCopyrightQueryItems
.
stream
().
map
(
BizSoftwareCopyrightConvert:
:
softwareCopyrightQueryItemToDto
)
return
softwareCopyrightQueryItems
.
stream
().
map
(
BizSoftwareCopyrightConvert:
:
softwareCopyrightQueryItemToDto
)
.
collect
(
.
collect
(
Collectors
.
toList
());
Collectors
.
toList
());
}
}
@Override
public
void
softwareCopyRightAssistant
(
SoftwareCopyRightAssistantDto
dto
)
throws
DifyApiException
,
IOException
,
InterruptedException
{
softwareCopyRightService
.
softwareCopyRightAssistant
(
dto
.
getType
(),
dto
.
getFileUrls
(),
dto
.
getQuestion
(),
dto
.
getData
()
);
}
@Override
public
SoftwareCopyRightDto
createTechnicalContent
(
SoftwareCopyRightDto
dto
)
throws
IOException
{
Assert
.
notNull
(
dto
.
getBaseInfo
());
TechnicalContent
technicalContent
=
softwareCopyRightService
.
createTechnicalContent
(
dto
.
getReferenceDocumentFileUrl
(),
dto
.
getBaseInfo
());
SoftwareCopyRightDto
result
=
new
SoftwareCopyRightDto
();
result
.
setTechnicalContent
(
technicalContent
);
return
result
;
}
}
}
\ No newline at end of file
src/main/java/cn/com/poc/ai_software_copyright/scheduler/SoftwareCopyRightScheduler.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
ai_software_copyright
.
scheduler
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightEnum
;
import
cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity
;
import
cn.com.poc.ai_software_copyright.service.BizSoftwareCopyrightService
;
import
cn.com.poc.common.constant.CommonConstant
;
import
cn.com.poc.message.entity.SoftwareCopyRightMessage
;
import
cn.com.poc.message.service.SoftwareCopyRightProduceService
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.springframework.scheduling.annotation.Scheduled
;
import
org.springframework.stereotype.Component
;
/**
* @author alex.yao
* @date 2025/12/26
*/
@Component
public
class
SoftwareCopyRightScheduler
{
@Resource
private
SoftwareCopyRightProduceService
produceService
;
@Resource
private
BizSoftwareCopyrightService
bizSoftwareCopyrightService
;
@Scheduled
(
cron
=
"0 0 0/30 * * ?"
)
public
void
checkSoftwareCopyRightTask
()
{
BizSoftwareCopyrightEntity
bizSoftwareCopyrightEntity
=
new
BizSoftwareCopyrightEntity
();
bizSoftwareCopyrightEntity
.
setGeneratedStatus
(
AiSoftWareCopyRightEnum
.
GENERATED_STATUS
.
Daft
.
name
());
bizSoftwareCopyrightEntity
.
setIsDeleted
(
CommonConstant
.
IsDeleted
.
N
);
List
<
BizSoftwareCopyrightEntity
>
bizSoftwareCopyrightEntities
=
bizSoftwareCopyrightService
.
findByExample
(
bizSoftwareCopyrightEntity
,
null
);
if
(
CollectionUtils
.
isNotEmpty
(
bizSoftwareCopyrightEntities
))
{
for
(
BizSoftwareCopyrightEntity
softwareCopyrightEntity
:
bizSoftwareCopyrightEntities
)
{
SoftwareCopyRightMessage
message
=
new
SoftwareCopyRightMessage
();
message
.
setId
(
softwareCopyrightEntity
.
getId
());
message
.
setStatus
(
AiSoftWareCopyRightEnum
.
GENERATED_STATUS
.
Pending
);
message
.
setBaseInfo
(
bizSoftwareCopyrightEntity
.
getBaseInfo
());
message
.
setTechnicalContent
(
bizSoftwareCopyrightEntity
.
getTechnicalContent
());
message
.
setReferenceDocumentFileUrl
(
bizSoftwareCopyrightEntity
.
getReferenceDocumentFileUrl
());
message
.
setGeneratedDocType
(
bizSoftwareCopyrightEntity
.
getGeneratedDocType
());
produceService
.
submitTask
(
message
);
}
}
}
}
src/main/java/cn/com/poc/ai_software_copyright/service/BizSoftwareCopyrightService.java
View file @
02424b79
package
cn
.
com
.
poc
.
ai_software_copyright
.
service
;
package
cn
.
com
.
poc
.
ai_software_copyright
.
service
;
import
java.util.List
;
import
cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity
;
import
cn.com.poc.ai_software_copyright.query.SoftwareCopyrightQueryCondition
;
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.query.SoftwareCopyrightQueryItem
;
import
cn.com.yict.framemax.core.service.BaseService
;
import
cn.com.yict.framemax.core.service.BaseService
;
import
cn.com.poc.ai_software_copyright.entity.BizSoftwareCopyrightEntity
;
import
cn.com.yict.framemax.data.model.PagingInfo
;
import
cn.com.yict.framemax.data.model.PagingInfo
;
import
java.util.Collection
;
import
java.util.List
;
public
interface
BizSoftwareCopyrightService
extends
BaseService
{
public
interface
BizSoftwareCopyrightService
extends
BaseService
{
BizSoftwareCopyrightEntity
get
(
java
.
lang
.
Long
id
)
throws
Exception
;
BizSoftwareCopyrightEntity
get
(
java
.
lang
.
Long
id
);
List
<
BizSoftwareCopyrightEntity
>
findByExample
(
BizSoftwareCopyrightEntity
example
,
PagingInfo
pagingInfo
)
List
<
BizSoftwareCopyrightEntity
>
findByExample
(
BizSoftwareCopyrightEntity
example
,
PagingInfo
pagingInfo
);
throws
Exception
;
BizSoftwareCopyrightEntity
save
(
BizSoftwareCopyrightEntity
entity
)
throws
Exception
;
BizSoftwareCopyrightEntity
save
(
BizSoftwareCopyrightEntity
entity
);
BizSoftwareCopyrightEntity
update
(
BizSoftwareCopyrightEntity
entity
)
throws
Exception
;
BizSoftwareCopyrightEntity
update
(
BizSoftwareCopyrightEntity
entity
);
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
;
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
;
List
<
SoftwareCopyrightQueryItem
>
softwareCopyrightQuery
(
SoftwareCopyrightQueryCondition
condition
,
List
<
SoftwareCopyrightQueryItem
>
softwareCopyrightQuery
(
SoftwareCopyrightQueryCondition
condition
,
PagingInfo
pagingInfo
)
;
PagingInfo
pagingInfo
);
}
}
\ No newline at end of file
src/main/java/cn/com/poc/ai_software_copyright/service/impl/BizSoftwareCopyrightServiceImpl.java
View file @
02424b79
...
@@ -25,7 +25,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
...
@@ -25,7 +25,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
@Resource
@Resource
private
BizSoftwareCopyrightRepository
repository
;
private
BizSoftwareCopyrightRepository
repository
;
public
BizSoftwareCopyrightEntity
get
(
java
.
lang
.
Long
id
)
throws
Exception
{
public
BizSoftwareCopyrightEntity
get
(
java
.
lang
.
Long
id
){
Assert
.
notNull
(
id
);
Assert
.
notNull
(
id
);
BizSoftwareCopyrightModel
model
=
this
.
repository
.
get
(
id
);
BizSoftwareCopyrightModel
model
=
this
.
repository
.
get
(
id
);
if
(
model
==
null
)
{
if
(
model
==
null
)
{
...
@@ -38,8 +38,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
...
@@ -38,8 +38,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
}
}
public
List
<
BizSoftwareCopyrightEntity
>
findByExample
(
BizSoftwareCopyrightEntity
example
,
PagingInfo
pagingInfo
)
public
List
<
BizSoftwareCopyrightEntity
>
findByExample
(
BizSoftwareCopyrightEntity
example
,
PagingInfo
pagingInfo
)
{
throws
Exception
{
List
<
BizSoftwareCopyrightEntity
>
result
=
new
ArrayList
<
BizSoftwareCopyrightEntity
>();
List
<
BizSoftwareCopyrightEntity
>
result
=
new
ArrayList
<
BizSoftwareCopyrightEntity
>();
BizSoftwareCopyrightModel
model
=
new
BizSoftwareCopyrightModel
();
BizSoftwareCopyrightModel
model
=
new
BizSoftwareCopyrightModel
();
if
(
example
!=
null
)
{
if
(
example
!=
null
)
{
...
@@ -53,7 +52,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
...
@@ -53,7 +52,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
return
result
;
return
result
;
}
}
public
BizSoftwareCopyrightEntity
save
(
BizSoftwareCopyrightEntity
entity
)
throws
Exception
{
public
BizSoftwareCopyrightEntity
save
(
BizSoftwareCopyrightEntity
entity
)
{
Assert
.
notNull
(
entity
);
Assert
.
notNull
(
entity
);
entity
.
setId
(
null
);
entity
.
setId
(
null
);
entity
.
setIsDeleted
(
"N"
);
entity
.
setIsDeleted
(
"N"
);
...
@@ -62,7 +61,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
...
@@ -62,7 +61,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
return
BizSoftwareCopyrightConvert
.
modelToEntity
(
saveModel
);
return
BizSoftwareCopyrightConvert
.
modelToEntity
(
saveModel
);
}
}
public
BizSoftwareCopyrightEntity
update
(
BizSoftwareCopyrightEntity
entity
)
throws
Exception
{
public
BizSoftwareCopyrightEntity
update
(
BizSoftwareCopyrightEntity
entity
)
{
Assert
.
notNull
(
entity
);
Assert
.
notNull
(
entity
);
Assert
.
notNull
(
entity
.
getId
(),
"update pk can not be null"
);
Assert
.
notNull
(
entity
.
getId
(),
"update pk can not be null"
);
BizSoftwareCopyrightModel
model
=
this
.
repository
.
get
(
entity
.
getId
());
BizSoftwareCopyrightModel
model
=
this
.
repository
.
get
(
entity
.
getId
());
...
@@ -107,7 +106,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
...
@@ -107,7 +106,7 @@ public class BizSoftwareCopyrightServiceImpl extends BaseServiceImpl
return
BizSoftwareCopyrightConvert
.
modelToEntity
(
saveModel
);
return
BizSoftwareCopyrightConvert
.
modelToEntity
(
saveModel
);
}
}
public
void
deletedById
(
java
.
lang
.
Long
id
)
throws
Exception
{
public
void
deletedById
(
java
.
lang
.
Long
id
){
Assert
.
notNull
(
id
);
Assert
.
notNull
(
id
);
BizSoftwareCopyrightModel
model
=
this
.
repository
.
get
(
id
);
BizSoftwareCopyrightModel
model
=
this
.
repository
.
get
(
id
);
if
(
model
!=
null
)
{
if
(
model
!=
null
)
{
...
...
src/main/java/cn/com/poc/message/entity/SoftwareCopyRightMessage.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
message
.
entity
;
import
cn.com.poc.ai_software_copyright.contant.AiSoftWareCopyRightEnum
;
/**
* @author alex.yao
* @date 2025/12/26
*/
public
class
SoftwareCopyRightMessage
{
private
Long
id
;
private
AiSoftWareCopyRightEnum
.
GENERATED_STATUS
status
;
/**
* base_info
* 基本信息
*/
private
java
.
lang
.
String
baseInfo
;
/**
* technical_content
* 技术内容
*/
private
java
.
lang
.
String
technicalContent
;
/**
* generated_doc_type
* 生成文档类型
*/
private
java
.
lang
.
String
generatedDocType
;
/**
* reference_document_file_url
* 参考文件地址 最大5份
*/
private
java
.
lang
.
String
referenceDocumentFileUrl
;
public
Long
getId
()
{
return
id
;
}
public
void
setId
(
Long
id
)
{
this
.
id
=
id
;
}
public
AiSoftWareCopyRightEnum
.
GENERATED_STATUS
getStatus
()
{
return
status
;
}
public
void
setStatus
(
AiSoftWareCopyRightEnum
.
GENERATED_STATUS
status
)
{
this
.
status
=
status
;
}
public
java
.
lang
.
String
getBaseInfo
()
{
return
this
.
baseInfo
;
}
public
void
setBaseInfo
(
java
.
lang
.
String
baseInfo
)
{
this
.
baseInfo
=
baseInfo
;
}
public
java
.
lang
.
String
getTechnicalContent
()
{
return
this
.
technicalContent
;
}
public
void
setTechnicalContent
(
java
.
lang
.
String
technicalContent
)
{
this
.
technicalContent
=
technicalContent
;
}
public
java
.
lang
.
String
getReferenceDocumentFileUrl
()
{
return
this
.
referenceDocumentFileUrl
;
}
public
void
setReferenceDocumentFileUrl
(
java
.
lang
.
String
referenceDocumentFileUrl
)
{
this
.
referenceDocumentFileUrl
=
referenceDocumentFileUrl
;
}
public
java
.
lang
.
String
getGeneratedDocType
()
{
return
this
.
generatedDocType
;
}
public
void
setGeneratedDocType
(
java
.
lang
.
String
generatedDocType
)
{
this
.
generatedDocType
=
generatedDocType
;
}
}
src/main/java/cn/com/poc/message/service/SoftwareCopyRightConsumerService.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
message
.
service
;
import
cn.com.poc.message.entity.SoftwareCopyRightMessage
;
import
cn.com.yict.framemax.core.service.BaseService
;
/**
* @author alex.yao
* @date 2025/12/26
*/
public
interface
SoftwareCopyRightConsumerService
extends
BaseService
{
/**
* 提交生成文档任务
*
* @param message
* @return
*/
void
submitTask
(
SoftwareCopyRightMessage
message
);
/**
* 更新任务状态
*/
void
updateStatus
(
SoftwareCopyRightMessage
message
);
}
src/main/java/cn/com/poc/message/service/SoftwareCopyRightProduceService.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
message
.
service
;
import
cn.com.poc.message.entity.SoftwareCopyRightMessage
;
import
cn.com.yict.framemax.core.service.BaseService
;
/**
* @author alex.yao
* @date 2025/12/26
*/
public
interface
SoftwareCopyRightProduceService
extends
BaseService
{
/**
* 提交生成文档任务
*
* @param message
* @return
*/
SoftwareCopyRightMessage
submitTask
(
SoftwareCopyRightMessage
message
);
/**
* 更新任务状态
*
* @param message
* @return
*/
SoftwareCopyRightMessage
updateStatus
(
SoftwareCopyRightMessage
message
);
}
src/main/java/cn/com/poc/message/service/impl/SoftwareCopyRightConsumerServiceImpl.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
message
.
service
.
impl
;
import
javax.annotation.Resource
;
import
java.util.List
;
import
java.util.concurrent.CompletableFuture
;
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.entity.BizSoftwareCopyrightEntity
;
import
cn.com.poc.ai_software_copyright.service.BizSoftwareCopyrightService
;
import
cn.com.poc.common.utils.JsonUtils
;
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.tumbleweed.client.annotation.Consumer
;
import
com.fasterxml.jackson.core.type.TypeReference
;
import
org.springframework.stereotype.Service
;
/**
* @author alex.yao
* @date 2025/12/26
*/
@Service
public
class
SoftwareCopyRightConsumerServiceImpl
implements
SoftwareCopyRightConsumerService
{
@Resource
private
BizSoftwareCopyrightService
bizSoftwareCopyrightService
;
@Resource
private
SoftwareCopyRightProduceService
produceService
;
@Resource
private
SoftwareCopyRightAgent
agent
;
/**
* 提交生成文档任务
*
* @param message
* @return
*/
@Override
@Consumer
(
topic
=
SoftwareCopyRightTopic
.
SUBMIT_SOFTWARE_COPYRIGHT_TASK
,
scale
=
2
)
public
void
submitTask
(
SoftwareCopyRightMessage
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
;
});
}
@Override
@Consumer
(
topic
=
SoftwareCopyRightTopic
.
UPDATE_TASK_STATUS
,
retry
=
true
,
scale
=
2
)
public
void
updateStatus
(
SoftwareCopyRightMessage
message
)
{
BizSoftwareCopyrightEntity
bizSoftwareCopyrightEntity
=
bizSoftwareCopyrightService
.
get
(
message
.
getId
());
if
(
bizSoftwareCopyrightEntity
!=
null
)
{
bizSoftwareCopyrightEntity
.
setGeneratedStatus
(
message
.
getStatus
().
name
());
bizSoftwareCopyrightService
.
update
(
bizSoftwareCopyrightEntity
);
}
}
}
src/main/java/cn/com/poc/message/service/impl/SoftwareCopyRightProduceServiceImpl.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
message
.
service
.
impl
;
import
cn.com.poc.message.entity.SoftwareCopyRightMessage
;
import
cn.com.poc.message.service.SoftwareCopyRightProduceService
;
import
cn.com.poc.message.topic.SoftwareCopyRightTopic
;
import
cn.com.yict.framemax.core.service.BaseService
;
import
cn.com.yict.framemax.tumbleweed.client.annotation.Producer
;
import
cn.com.yict.framemax.tumbleweed.constant.PublishPoint
;
import
org.springframework.stereotype.Service
;
/**
* @author alex.yao
* @date 2025/12/26
*/
@Service
public
class
SoftwareCopyRightProduceServiceImpl
implements
SoftwareCopyRightProduceService
{
/**
* 提交生成文档任务
*
* @param message
* @return
*/
@Producer
(
topic
=
SoftwareCopyRightTopic
.
SUBMIT_SOFTWARE_COPYRIGHT_TASK
)
public
SoftwareCopyRightMessage
submitTask
(
SoftwareCopyRightMessage
message
)
{
return
message
;
}
@Override
@Producer
(
topic
=
SoftwareCopyRightTopic
.
UPDATE_TASK_STATUS
,
publishPoint
=
PublishPoint
.
PUBLISH_REAL_TIME
)
public
SoftwareCopyRightMessage
updateStatus
(
SoftwareCopyRightMessage
message
)
{
return
message
;
}
}
src/main/java/cn/com/poc/message/topic/SoftwareCopyRightTopic.java
0 → 100644
View file @
02424b79
package
cn
.
com
.
poc
.
message
.
topic
;
/**
* @author alex.yao
* @date 2025/12/26
*/
public
interface
SoftwareCopyRightTopic
{
String
SUBMIT_SOFTWARE_COPYRIGHT_TASK
=
"SUBMIT_SOFTWARE_COPYRIGHT_TASK"
;
String
UPDATE_TASK_STATUS
=
"UPDATE_TASK_STATUS"
;
}
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