Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yd-ai
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xingmin
yd-ai
Commits
3c484189
Commit
3c484189
authored
Mar 31, 2026
by
zhangxingmin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
push
parent
0ec64f2c
Hide whitespace changes
Inline
Side-by-side
Showing
26 changed files
with
619 additions
and
149 deletions
+619
-149
.idea/uiDesigner.xml
+125
-0
yd-ai-api/src/main/java/com/yd/ai/api/controller/ApiAiStreamController.java
+1
-1
yd-ai-api/src/main/java/com/yd/ai/api/controller/ApiEntryController.java
+37
-0
yd-ai-api/src/main/java/com/yd/ai/api/service/ApiEntryService.java
+11
-0
yd-ai-api/src/main/java/com/yd/ai/api/service/impl/ApiEntryServiceImpl.java
+45
-0
yd-ai-api/target/classes/banner.txt
+0
-11
yd-ai-api/target/classes/bootstrap.yml
+0
-106
yd-ai-api/target/classes/com/yd/ai/api/AiApiApplication.class
+0
-0
yd-ai-api/target/classes/com/yd/ai/api/service/Main.class
+0
-0
yd-ai-api/target/classes/com/yd/ai/api/service/Main1.class
+0
-0
yd-ai-api/target/classes/com/yd/ai/api/service/Main2.class
+0
-0
yd-ai-api/target/classes/spy.properties
+0
-24
yd-ai-feign/src/main/java/com/yd/ai/feign/client/ApiEntryFeignClient.java
+26
-0
yd-ai-feign/src/main/java/com/yd/ai/feign/fallback/ApiEntryFeignFallbackFactory.java
+29
-0
yd-ai-feign/src/main/java/com/yd/ai/feign/request/ApiEntryRandListRequest.java
+12
-0
yd-ai-feign/src/main/java/com/yd/ai/feign/response/ApiEntryRandListResponse.java
+37
-0
yd-ai-service/src/main/java/com/yd/ai/service/config/AiMybatisPlusConfig.java
+74
-0
yd-ai-service/src/main/java/com/yd/ai/service/dao/EntryMapper.java
+16
-0
yd-ai-service/src/main/java/com/yd/ai/service/model/Entry.java
+98
-0
yd-ai-service/src/main/java/com/yd/ai/service/service/IEntryService.java
+22
-0
yd-ai-service/src/main/java/com/yd/ai/service/service/impl/EntryServiceImpl.java
+40
-0
yd-ai-service/src/main/java/com/yd/ai/service/utils/Main.java
+3
-4
yd-ai-service/src/main/java/com/yd/ai/service/utils/Main1.java
+1
-2
yd-ai-service/src/main/java/com/yd/ai/service/utils/Main2.java
+1
-1
yd-ai-service/src/main/java/com/yd/ai/service/utils/MyBatisPlusCodeGenerator.java
+36
-0
yd-ai-service/src/main/resources/mappers/EntryMapper.xml
+5
-0
No files found.
.idea/uiDesigner.xml
0 → 100644
View file @
3c484189
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"Palette2"
>
<group
name=
"Swing"
>
<item
class=
"com.intellij.uiDesigner.HSpacer"
tooltip-text=
"Horizontal Spacer"
icon=
"/com/intellij/uiDesigner/icons/hspacer.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"1"
hsize-policy=
"6"
anchor=
"0"
fill=
"1"
/>
</item>
<item
class=
"com.intellij.uiDesigner.VSpacer"
tooltip-text=
"Vertical Spacer"
icon=
"/com/intellij/uiDesigner/icons/vspacer.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"1"
anchor=
"0"
fill=
"2"
/>
</item>
<item
class=
"javax.swing.JPanel"
icon=
"/com/intellij/uiDesigner/icons/panel.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"3"
hsize-policy=
"3"
anchor=
"0"
fill=
"3"
/>
</item>
<item
class=
"javax.swing.JScrollPane"
icon=
"/com/intellij/uiDesigner/icons/scrollPane.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"7"
hsize-policy=
"7"
anchor=
"0"
fill=
"3"
/>
</item>
<item
class=
"javax.swing.JButton"
icon=
"/com/intellij/uiDesigner/icons/button.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"3"
anchor=
"0"
fill=
"1"
/>
<initial-values>
<property
name=
"text"
value=
"Button"
/>
</initial-values>
</item>
<item
class=
"javax.swing.JRadioButton"
icon=
"/com/intellij/uiDesigner/icons/radioButton.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"3"
anchor=
"8"
fill=
"0"
/>
<initial-values>
<property
name=
"text"
value=
"RadioButton"
/>
</initial-values>
</item>
<item
class=
"javax.swing.JCheckBox"
icon=
"/com/intellij/uiDesigner/icons/checkBox.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"3"
anchor=
"8"
fill=
"0"
/>
<initial-values>
<property
name=
"text"
value=
"CheckBox"
/>
</initial-values>
</item>
<item
class=
"javax.swing.JLabel"
icon=
"/com/intellij/uiDesigner/icons/label.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"0"
anchor=
"8"
fill=
"0"
/>
<initial-values>
<property
name=
"text"
value=
"Label"
/>
</initial-values>
</item>
<item
class=
"javax.swing.JTextField"
icon=
"/com/intellij/uiDesigner/icons/textField.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"6"
anchor=
"8"
fill=
"1"
>
<preferred-size
width=
"150"
height=
"-1"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JPasswordField"
icon=
"/com/intellij/uiDesigner/icons/passwordField.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"6"
anchor=
"8"
fill=
"1"
>
<preferred-size
width=
"150"
height=
"-1"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JFormattedTextField"
icon=
"/com/intellij/uiDesigner/icons/formattedTextField.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"6"
anchor=
"8"
fill=
"1"
>
<preferred-size
width=
"150"
height=
"-1"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JTextArea"
icon=
"/com/intellij/uiDesigner/icons/textArea.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"6"
anchor=
"0"
fill=
"3"
>
<preferred-size
width=
"150"
height=
"50"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JTextPane"
icon=
"/com/intellij/uiDesigner/icons/textPane.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"6"
anchor=
"0"
fill=
"3"
>
<preferred-size
width=
"150"
height=
"50"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JEditorPane"
icon=
"/com/intellij/uiDesigner/icons/editorPane.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"6"
anchor=
"0"
fill=
"3"
>
<preferred-size
width=
"150"
height=
"50"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JComboBox"
icon=
"/com/intellij/uiDesigner/icons/comboBox.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"2"
anchor=
"8"
fill=
"1"
/>
</item>
<item
class=
"javax.swing.JTable"
icon=
"/com/intellij/uiDesigner/icons/table.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"6"
anchor=
"0"
fill=
"3"
>
<preferred-size
width=
"150"
height=
"50"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JList"
icon=
"/com/intellij/uiDesigner/icons/list.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"2"
anchor=
"0"
fill=
"3"
>
<preferred-size
width=
"150"
height=
"50"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JTree"
icon=
"/com/intellij/uiDesigner/icons/tree.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"6"
anchor=
"0"
fill=
"3"
>
<preferred-size
width=
"150"
height=
"50"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JTabbedPane"
icon=
"/com/intellij/uiDesigner/icons/tabbedPane.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"3"
hsize-policy=
"3"
anchor=
"0"
fill=
"3"
>
<preferred-size
width=
"200"
height=
"200"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JSplitPane"
icon=
"/com/intellij/uiDesigner/icons/splitPane.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"3"
hsize-policy=
"3"
anchor=
"0"
fill=
"3"
>
<preferred-size
width=
"200"
height=
"200"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JSpinner"
icon=
"/com/intellij/uiDesigner/icons/spinner.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"true"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"6"
anchor=
"8"
fill=
"1"
/>
</item>
<item
class=
"javax.swing.JSlider"
icon=
"/com/intellij/uiDesigner/icons/slider.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"6"
anchor=
"8"
fill=
"1"
/>
</item>
<item
class=
"javax.swing.JSeparator"
icon=
"/com/intellij/uiDesigner/icons/separator.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"6"
anchor=
"0"
fill=
"3"
/>
</item>
<item
class=
"javax.swing.JProgressBar"
icon=
"/com/intellij/uiDesigner/icons/progressbar.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"6"
anchor=
"0"
fill=
"1"
/>
</item>
<item
class=
"javax.swing.JToolBar"
icon=
"/com/intellij/uiDesigner/icons/toolbar.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"6"
anchor=
"0"
fill=
"1"
>
<preferred-size
width=
"-1"
height=
"20"
/>
</default-constraints>
</item>
<item
class=
"javax.swing.JToolBar$Separator"
icon=
"/com/intellij/uiDesigner/icons/toolbarSeparator.png"
removable=
"false"
auto-create-binding=
"false"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"0"
hsize-policy=
"0"
anchor=
"0"
fill=
"1"
/>
</item>
<item
class=
"javax.swing.JScrollBar"
icon=
"/com/intellij/uiDesigner/icons/scrollbar.png"
removable=
"false"
auto-create-binding=
"true"
can-attach-label=
"false"
>
<default-constraints
vsize-policy=
"6"
hsize-policy=
"0"
anchor=
"0"
fill=
"2"
/>
</item>
</group>
</component>
</project>
\ No newline at end of file
yd-ai-api/src/main/java/com/yd/ai/api/controller/AiStreamController.java
→
yd-ai-api/src/main/java/com/yd/ai/api/controller/A
piA
iStreamController.java
View file @
3c484189
...
...
@@ -16,7 +16,7 @@ import java.util.Arrays;
@RestController
@RequestMapping
(
"/api/ai"
)
public
class
AiStreamController
{
public
class
A
piA
iStreamController
{
@CrossOrigin
(
origins
=
"*"
)
// 开发时允许跨域
@GetMapping
(
value
=
"/stream"
,
produces
=
MediaType
.
TEXT_EVENT_STREAM_VALUE
)
...
...
yd-ai-api/src/main/java/com/yd/ai/api/controller/ApiEntryController.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
api
.
controller
;
import
com.yd.ai.api.service.ApiEntryService
;
import
com.yd.ai.feign.client.ApiEntryFeignClient
;
import
com.yd.ai.feign.request.ApiEntryRandListRequest
;
import
com.yd.ai.feign.response.ApiEntryRandListResponse
;
import
com.yd.common.result.Result
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.validation.annotation.Validated
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
import
java.util.List
;
/**
* 便捷提问词条信息
*
* @author zxm
* @since 2026-03-31
*/
@RestController
@RequestMapping
(
"/entry"
)
@Validated
public
class
ApiEntryController
implements
ApiEntryFeignClient
{
@Autowired
private
ApiEntryService
apiEntryService
;
/**
* 列表随机查询-便捷提问词条信息
* @param request
* @return
*/
@Override
public
Result
<
List
<
ApiEntryRandListResponse
>>
list
(
ApiEntryRandListRequest
request
)
{
return
apiEntryService
.
list
(
request
);
}
}
yd-ai-api/src/main/java/com/yd/ai/api/service/ApiEntryService.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
api
.
service
;
import
com.yd.ai.feign.request.ApiEntryRandListRequest
;
import
com.yd.ai.feign.response.ApiEntryRandListResponse
;
import
com.yd.common.result.Result
;
import
java.util.List
;
public
interface
ApiEntryService
{
Result
<
List
<
ApiEntryRandListResponse
>>
list
(
ApiEntryRandListRequest
request
);
}
yd-ai-api/src/main/java/com/yd/ai/api/service/impl/ApiEntryServiceImpl.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
api
.
service
.
impl
;
import
com.yd.ai.api.service.ApiEntryService
;
import
com.yd.ai.feign.request.ApiEntryRandListRequest
;
import
com.yd.ai.feign.response.ApiEntryRandListResponse
;
import
com.yd.ai.service.model.Entry
;
import
com.yd.ai.service.service.IEntryService
;
import
com.yd.common.result.Result
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeanUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.stereotype.Service
;
import
org.springframework.util.CollectionUtils
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.stream.Collectors
;
@Slf4j
@Service
public
class
ApiEntryServiceImpl
implements
ApiEntryService
{
@Autowired
private
IEntryService
iEntryService
;
/**
* 列表随机查询-便捷提问词条信息
* @param request
* @return
*/
@Override
public
Result
<
List
<
ApiEntryRandListResponse
>>
list
(
ApiEntryRandListRequest
request
)
{
List
<
ApiEntryRandListResponse
>
responses
=
new
ArrayList
<>();
List
<
Entry
>
entryList
=
iEntryService
.
getRandomRecords
(
request
.
getRandNum
());
if
(!
CollectionUtils
.
isEmpty
(
entryList
))
{
responses
=
entryList
.
stream
().
map
(
dto
->
{
ApiEntryRandListResponse
response
=
new
ApiEntryRandListResponse
();
BeanUtils
.
copyProperties
(
dto
,
response
);
return
response
;
}).
collect
(
Collectors
.
toList
());
}
return
Result
.
success
(
responses
);
}
}
yd-ai-api/target/classes/banner.txt
deleted
100644 → 0
View file @
0ec64f2c
${AnsiColor.GREEN}
_ _ _ __ __ ____ _ _ _ _
| | (_)_ __ | | _\ \ / /__ / ___| |__ __ _| |_ / \ _ __ (_)
| | | | '_ \| |/ /\ \ /\ / / _ \ | | '_ \ / _` | __| / _ \ | '_ \| |
| |___| | | | | < \ V V / __/ |___| | | | (_| | |_ / ___ \| |_) | |
|_____|_|_| |_|_|\_\ \_/\_/ \___|\____|_| |_|\__,_|\__/_/ \_\ .__/|_|
|_|
${AnsiColor.BRIGHT_WHITE}
Spring Boot Version: ${spring-boot.version}
\ No newline at end of file
yd-ai-api/target/classes/bootstrap.yml
deleted
100644 → 0
View file @
0ec64f2c
spring
:
profiles
:
active
:
test
# active: '@spring.profiles.active@'
---
spring
:
application
:
name
:
yd-product-api
profiles
:
dev
main
:
allow-bean-definition-overriding
:
true
allow-circular-references
:
true
cloud
:
nacos
:
# 配置中心
config
:
# 命名空间id(此处不用public,因public初始化的空间, id为空) 4e237601-cea8-414d-b7b9-d7adc8cbcf95
namespace
:
22f9d61e-9011-4d45-88cb-24f9857e3eec
# nacos的ip地址和端口 120.79.64.17:10848
server-addr
:
127.0.0.1:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension
:
yml
config-retry-time
:
300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]
:
dataId
:
linkwe-common.yml
refresh
:
true
# 发布到注册中心 (如果没有使用可以不配)
discovery
:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace
:
${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr
:
${spring.cloud.nacos.config.server-addr}
---
spring
:
application
:
name
:
yd-product-api
profiles
:
test
main
:
allow-bean-definition-overriding
:
true
allow-circular-references
:
true
cloud
:
nacos
:
# 配置中心
config
:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace
:
b3b01715-eb85-4242-992a-5aff03d864d4
# nacos的ip地址和端口
server-addr
:
139.224.145.34:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension
:
yml
config-retry-time
:
300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]
:
dataId
:
yd-common.yml
group
:
YD_GROUP
refresh
:
true
extension-configs
:
# 扩展配置
-
data-id
:
yd-product-api.yml
group
:
YD_GROUP
refresh
:
true
# 发布到注册中心 (如果没有使用可以不配)
discovery
:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace
:
${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr
:
${spring.cloud.nacos.config.server-addr}
group
:
YD_GROUP
---
spring
:
profiles
:
prod
application
:
name
:
yd-product-api
server
:
port
:
9466
main
:
allow-bean-definition-overriding
:
true
allow-circular-references
:
true
cloud
:
nacos
:
# 配置中心
config
:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace
:
cb587d6d-d3b2-45ca-a3ef-5b5c80ece5b3
# nacos的ip地址和端口
server-addr
:
139.224.150.79:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension
:
yml
config-retry-time
:
300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]
:
dataId
:
yd-common.yml
group
:
YD_GROUP
refresh
:
true
extension-configs
:
# 扩展配置
-
data-id
:
yd-product-api.yml
group
:
YD_GROUP
refresh
:
true
# 发布到注册中心 (如果没有使用可以不配)
discovery
:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace
:
${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr
:
${spring.cloud.nacos.config.server-addr}
group
:
YD_GROUP
yd-ai-api/target/classes/com/yd/ai/api/AiApiApplication.class
deleted
100644 → 0
View file @
0ec64f2c
File deleted
yd-ai-api/target/classes/com/yd/ai/api/service/Main.class
deleted
100644 → 0
View file @
0ec64f2c
File deleted
yd-ai-api/target/classes/com/yd/ai/api/service/Main1.class
deleted
100644 → 0
View file @
0ec64f2c
File deleted
yd-ai-api/target/classes/com/yd/ai/api/service/Main2.class
deleted
100644 → 0
View file @
0ec64f2c
File deleted
yd-ai-api/target/classes/spy.properties
deleted
100644 → 0
View file @
0ec64f2c
#3.2.1\u4EE5\u4E0A\u4F7F\u7528
modulelist
=
com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1\u4EE5\u4E0B\u4F7F\u7528\u6216\u8005\u4E0D\u914D\u7F6E
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# \u81EA\u5B9A\u4E49\u65E5\u5FD7\u6253\u5370
logMessageFormat
=
com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#\u65E5\u5FD7\u8F93\u51FA\u5230\u63A7\u5236\u53F0
appender
=
com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# \u4F7F\u7528\u65E5\u5FD7\u7CFB\u7EDF\u8BB0\u5F55 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# \u8BBE\u7F6E p6spy driver \u4EE3\u7406
deregisterdrivers
=
true
# \u53D6\u6D88JDBC URL\u524D\u7F00
useprefix
=
true
# \u914D\u7F6E\u8BB0\u5F55 Log \u4F8B\u5916,\u53EF\u53BB\u6389\u7684\u7ED3\u679C\u96C6\u6709error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories
=
info,debug,result,commit,resultset
# \u65E5\u671F\u683C\u5F0F
dateformat
=
yyyy-MM-dd HH:mm:ss
# \u5B9E\u9645\u9A71\u52A8\u53EF\u591A\u4E2A
#driverlist=org.h2.Driver
# \u662F\u5426\u5F00\u542F\u6162SQL\u8BB0\u5F55
outagedetection
=
true
# \u6162SQL\u8BB0\u5F55\u6807\u51C6 2 \u79D2
outagedetectioninterval
=
2
yd-ai-feign/src/main/java/com/yd/ai/feign/client/ApiEntryFeignClient.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
feign
.
client
;
import
com.yd.ai.feign.fallback.ApiEntryFeignFallbackFactory
;
import
com.yd.ai.feign.request.ApiEntryRandListRequest
;
import
com.yd.ai.feign.response.ApiEntryRandListResponse
;
import
com.yd.common.result.Result
;
import
org.springframework.cloud.openfeign.FeignClient
;
import
org.springframework.web.bind.annotation.PostMapping
;
import
org.springframework.web.bind.annotation.RequestBody
;
import
java.util.List
;
/**
* AI服务-便捷提问词条信息Feign客户端
*/
@FeignClient
(
name
=
"yd-ai-api"
,
fallbackFactory
=
ApiEntryFeignFallbackFactory
.
class
)
public
interface
ApiEntryFeignClient
{
/**
* 列表随机查询-便捷提问词条信息
* @param request
* @return
*/
@PostMapping
(
"/rand/list"
)
Result
<
List
<
ApiEntryRandListResponse
>>
list
(
@RequestBody
ApiEntryRandListRequest
request
);
}
yd-ai-feign/src/main/java/com/yd/ai/feign/fallback/ApiEntryFeignFallbackFactory.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
feign
.
fallback
;
import
com.yd.ai.feign.client.ApiEntryFeignClient
;
import
com.yd.ai.feign.request.ApiEntryRandListRequest
;
import
com.yd.ai.feign.response.ApiEntryRandListResponse
;
import
com.yd.common.result.Result
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.cloud.openfeign.FallbackFactory
;
import
org.springframework.stereotype.Component
;
import
java.util.List
;
/**
* AI服务-便捷提问词条信息Feign降级处理
*/
@Slf4j
@Component
public
class
ApiEntryFeignFallbackFactory
implements
FallbackFactory
<
ApiEntryFeignClient
>
{
@Override
public
ApiEntryFeignClient
create
(
Throwable
cause
)
{
return
new
ApiEntryFeignClient
()
{
@Override
public
Result
<
List
<
ApiEntryRandListResponse
>>
list
(
ApiEntryRandListRequest
request
)
{
return
null
;
}
};
}
}
yd-ai-feign/src/main/java/com/yd/ai/feign/request/ApiEntryRandListRequest.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
feign
.
request
;
import
lombok.Data
;
@Data
public
class
ApiEntryRandListRequest
{
/**
* 随机条数
*/
private
Integer
randNum
=
4
;
}
yd-ai-feign/src/main/java/com/yd/ai/feign/response/ApiEntryRandListResponse.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
feign
.
response
;
import
lombok.Data
;
@Data
public
class
ApiEntryRandListResponse
{
/**
* 主键ID
*/
private
Long
id
;
/**
* AI便捷提问词条表唯一业务ID
*/
private
String
entryBizId
;
/**
* 词条类型(1-家庭规划 2-...等)
*/
private
String
type
;
/**
* 词条内容
*/
private
String
content
;
/**
* 词条访问次数
*/
private
String
number
;
/**
* 排序
*/
private
Integer
sort
;
}
yd-ai-service/src/main/java/com/yd/ai/service/config/AiMybatisPlusConfig.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
service
.
config
;
import
com.alibaba.fastjson.JSON
;
import
com.baomidou.mybatisplus.annotation.DbType
;
import
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
;
import
com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor
;
import
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor
;
import
com.yd.auth.core.dto.AuthUserDto
;
import
com.yd.auth.core.utils.SecurityUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.ibatis.reflection.MetaObject
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Primary
;
@Slf4j
@Configuration
public
class
AiMybatisPlusConfig
{
/**
* 分页插件配置(必须)
*/
@Bean
public
MybatisPlusInterceptor
mybatisPlusInterceptor
()
{
MybatisPlusInterceptor
interceptor
=
new
MybatisPlusInterceptor
();
// 使用正确的枚举值 DbType.MYSQL
interceptor
.
addInnerInterceptor
(
new
PaginationInnerInterceptor
(
DbType
.
MYSQL
));
return
interceptor
;
}
/**
* 自动填充字段配置(如创建人、更新人等)
*/
@Bean
@Primary
public
MetaObjectHandler
metaObjectHandler
()
{
log
.
info
(
"MetaObjectHandler Bean 正在创建..."
,
"MetaObjectHandler Bean 正在创建=========="
);
return
new
MetaObjectHandler
()
{
@Override
public
void
insertFill
(
MetaObject
metaObject
)
{
//获取Security上下文当前用户的登录信息
AuthUserDto
authUserDto
=
null
;
try
{
authUserDto
=
SecurityUtil
.
getCurrentLoginUser
();
}
catch
(
Exception
e
)
{
log
.
info
(
"获取Security上下文当前用户的登录信息失败,{}"
,
e
.
getMessage
());
}
log
.
info
(
"metaObjectHandler=======insertFill自动填充获取用户信息:{}"
,
JSON
.
toJSONString
(
authUserDto
));
if
(
authUserDto
!=
null
)
{
//自动注入创建人和创建用户名
this
.
strictInsertFill
(
metaObject
,
"creatorId"
,
String
.
class
,
authUserDto
.
getUserBizId
());
this
.
strictInsertFill
(
metaObject
,
"creatorName"
,
String
.
class
,
authUserDto
.
getUsername
());
}
}
@Override
public
void
updateFill
(
MetaObject
metaObject
)
{
//获取Security上下文当前用户的登录信息
AuthUserDto
authUserDto
=
null
;
try
{
authUserDto
=
SecurityUtil
.
getCurrentLoginUser
();
}
catch
(
Exception
e
)
{
log
.
info
(
"获取Security上下文当前用户的登录信息失败,{}"
,
e
.
getMessage
());
}
log
.
info
(
"metaObjectHandler=======updateFill自动填充获取用户信息:{}"
,
JSON
.
toJSONString
(
authUserDto
));
if
(
authUserDto
!=
null
)
{
//自动注入更新人和更新用户名
this
.
strictUpdateFill
(
metaObject
,
"updaterId"
,
String
.
class
,
authUserDto
.
getUserBizId
());
this
.
strictUpdateFill
(
metaObject
,
"updaterName"
,
String
.
class
,
authUserDto
.
getUsername
());
}
}
};
}
}
yd-ai-service/src/main/java/com/yd/ai/service/dao/EntryMapper.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
service
.
dao
;
import
com.yd.ai.service.model.Entry
;
import
com.baomidou.mybatisplus.core.mapper.BaseMapper
;
/**
* <p>
* AI便捷提问词条表 Mapper 接口
* </p>
*
* @author zxm
* @since 2026-03-31
*/
public
interface
EntryMapper
extends
BaseMapper
<
Entry
>
{
}
yd-ai-service/src/main/java/com/yd/ai/service/model/Entry.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
service
.
model
;
import
com.baomidou.mybatisplus.annotation.IdType
;
import
com.baomidou.mybatisplus.annotation.TableField
;
import
com.baomidou.mybatisplus.annotation.TableId
;
import
com.baomidou.mybatisplus.annotation.TableName
;
import
java.io.Serializable
;
import
java.time.LocalDateTime
;
import
lombok.Getter
;
import
lombok.Setter
;
/**
* <p>
* AI便捷提问词条表
* </p>
*
* @author zxm
* @since 2026-03-31
*/
@Getter
@Setter
@TableName
(
"entry"
)
public
class
Entry
implements
Serializable
{
private
static
final
long
serialVersionUID
=
1L
;
/**
* 主键ID
*/
@TableId
(
value
=
"id"
,
type
=
IdType
.
AUTO
)
private
Long
id
;
/**
* AI便捷提问词条表唯一业务ID
*/
@TableField
(
"entry_biz_id"
)
private
String
entryBizId
;
/**
* 词条类型(1-家庭规划 2-...等)
*/
@TableField
(
"type"
)
private
String
type
;
/**
* 词条内容
*/
@TableField
(
"content"
)
private
String
content
;
/**
* 词条访问次数
*/
@TableField
(
"number"
)
private
String
number
;
/**
* 排序
*/
@TableField
(
"sort"
)
private
Integer
sort
;
/**
* 通用备注
*/
@TableField
(
"remark"
)
private
String
remark
;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField
(
"is_deleted"
)
private
Integer
isDeleted
;
/**
* 创建人ID
*/
@TableField
(
"creator_id"
)
private
String
creatorId
;
/**
* 更新人ID
*/
@TableField
(
"updater_id"
)
private
String
updaterId
;
/**
* 创建时间
*/
@TableField
(
"create_time"
)
private
LocalDateTime
createTime
;
/**
* 更新时间
*/
@TableField
(
"update_time"
)
private
LocalDateTime
updateTime
;
}
yd-ai-service/src/main/java/com/yd/ai/service/service/IEntryService.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
service
.
service
;
import
com.yd.ai.feign.request.ApiEntryRandListRequest
;
import
com.yd.ai.feign.response.ApiEntryRandListResponse
;
import
com.yd.ai.service.model.Entry
;
import
com.baomidou.mybatisplus.extension.service.IService
;
import
com.yd.common.result.Result
;
import
java.util.List
;
/**
* <p>
* AI便捷提问词条表 服务类
* </p>
*
* @author zxm
* @since 2026-03-31
*/
public
interface
IEntryService
extends
IService
<
Entry
>
{
List
<
Entry
>
getRandomRecords
(
Integer
limitNum
);
}
yd-ai-service/src/main/java/com/yd/ai/service/service/impl/EntryServiceImpl.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
service
.
service
.
impl
;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper
;
import
com.yd.ai.feign.request.ApiEntryRandListRequest
;
import
com.yd.ai.feign.response.ApiEntryRandListResponse
;
import
com.yd.ai.service.model.Entry
;
import
com.yd.ai.service.dao.EntryMapper
;
import
com.yd.ai.service.service.IEntryService
;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl
;
import
com.yd.common.result.Result
;
import
org.springframework.stereotype.Service
;
import
java.util.List
;
/**
* <p>
* AI便捷提问词条表 服务实现类
* </p>
*
* @author zxm
* @since 2026-03-31
*/
@Service
public
class
EntryServiceImpl
extends
ServiceImpl
<
EntryMapper
,
Entry
>
implements
IEntryService
{
/**
* 随机查询limitNum条列表数据
* @param limitNum
* @return
*/
@Override
public
List
<
Entry
>
getRandomRecords
(
Integer
limitNum
)
{
// 构建查询条件(若无额外条件可省略)
QueryWrapper
<
Entry
>
wrapper
=
new
QueryWrapper
<>();
// 随机排序,并限制 limitNum 条
wrapper
.
last
(
"ORDER BY RAND() LIMIT "
+
limitNum
);
return
this
.
baseMapper
.
selectList
(
wrapper
);
}
}
yd-ai-
api/src/main/java/com/yd/ai/api/service
/Main.java
→
yd-ai-
service/src/main/java/com/yd/ai/service/utils
/Main.java
View file @
3c484189
package
com
.
yd
.
ai
.
api
.
service
;
package
com
.
yd
.
ai
.
service
.
utils
;
import
java.util.Arrays
;
import
java.lang.System
;
import
com.alibaba.dashscope.aigc.generation.Generation
;
import
com.alibaba.dashscope.aigc.generation.GenerationParam
;
import
com.alibaba.dashscope.aigc.generation.GenerationResult
;
...
...
@@ -10,7 +8,8 @@ import com.alibaba.dashscope.common.Role;
import
com.alibaba.dashscope.exception.ApiException
;
import
com.alibaba.dashscope.exception.InputRequiredException
;
import
com.alibaba.dashscope.exception.NoApiKeyException
;
import
com.alibaba.dashscope.utils.Constants
;
import
java.util.Arrays
;
public
class
Main
{
// 若使用新加坡地域的模型,请释放下列注释
...
...
yd-ai-
api/src/main/java/com/yd/ai/api/service
/Main1.java
→
yd-ai-
service/src/main/java/com/yd/ai/service/utils
/Main1.java
View file @
3c484189
package
com
.
yd
.
ai
.
api
.
service
;
package
com
.
yd
.
ai
.
service
.
utils
;
import
com.alibaba.dashscope.aigc.generation.Generation
;
import
com.alibaba.dashscope.aigc.generation.GenerationParam
;
import
com.alibaba.dashscope.aigc.generation.GenerationResult
;
import
com.alibaba.dashscope.common.Message
;
import
com.alibaba.dashscope.common.Role
;
import
com.alibaba.dashscope.exception.ApiException
;
import
com.alibaba.dashscope.exception.InputRequiredException
;
import
com.alibaba.dashscope.exception.NoApiKeyException
;
import
io.reactivex.Flowable
;
...
...
yd-ai-
api/src/main/java/com/yd/ai/api/service
/Main2.java
→
yd-ai-
service/src/main/java/com/yd/ai/service/utils
/Main2.java
View file @
3c484189
package
com
.
yd
.
ai
.
api
.
service
;
package
com
.
yd
.
ai
.
service
.
utils
;
import
com.alibaba.dashscope.aigc.generation.Generation
;
import
com.alibaba.dashscope.aigc.generation.GenerationParam
;
...
...
yd-ai-service/src/main/java/com/yd/ai/service/utils/MyBatisPlusCodeGenerator.java
0 → 100644
View file @
3c484189
package
com
.
yd
.
ai
.
service
.
utils
;
import
com.baomidou.mybatisplus.generator.FastAutoGenerator
;
import
com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine
;
public
class
MyBatisPlusCodeGenerator
{
public
static
void
main
(
String
[]
args
)
{
FastAutoGenerator
.
create
(
"jdbc:mysql://139.224.145.34:3308/yd_ai?serverTimezone=GMT%2B8"
,
"root"
,
"Zxm7320017"
)
.
globalConfig
(
builder
->
{
builder
.
author
(
"zxm"
)
// .outputDir("src/main/java/com/yd/ai/service");
.
outputDir
(
"D:/soft/ideaproject/v2/yd-ai/yd-ai-service/src/main/java"
);
})
.
packageConfig
(
builder
->
{
builder
.
parent
(
"com.yd.ai.service"
)
.
entity
(
"model"
)
.
mapper
(
"dao"
)
.
service
(
"service"
)
.
serviceImpl
(
"service.impl"
)
.
xml
(
"mappers"
);
})
.
strategyConfig
(
builder
->
{
builder
.
addInclude
(
"entry"
)
.
entityBuilder
()
.
enableLombok
()
.
enableTableFieldAnnotation
()
.
controllerBuilder
()
.
enableRestStyle
();
})
.
templateEngine
(
new
FreemarkerTemplateEngine
())
.
execute
();
}
}
yd-ai-service/src/main/resources/mappers/EntryMapper.xml
0 → 100644
View file @
3c484189
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper
namespace=
"com.yd.ai.service.dao.EntryMapper"
>
</mapper>
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