Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
志
志愿填报
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
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
单欣鑫
志愿填报
Commits
c54de2f1
Commit
c54de2f1
authored
May 28, 2025
by
sunsongtao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
11
parent
a2f158f6
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
1086 additions
and
603 deletions
+1086
-603
pom.xml
ruoyi-admin/pom.xml
+3
-2
ApiChatController.java
.../java/com/ruoyi/web/controller/api/ApiChatController.java
+600
-600
ApiChatNewController.java
...va/com/ruoyi/web/controller/api/ApiChatNewController.java
+309
-0
application.yml
ruoyi-admin/src/main/resources/application.yml
+4
-0
pom.xml
ruoyi-system/pom.xml
+7
-1
BaiduAppRequest.java
...main/java/com/ruoyi/mall/domain/Chat/BaiduAppRequest.java
+66
-0
BaiduAppResponse.java
...ain/java/com/ruoyi/mall/domain/Chat/BaiduAppResponse.java
+97
-0
No files found.
ruoyi-admin/pom.xml
View file @
c54de2f1
...
@@ -73,11 +73,12 @@
...
@@ -73,11 +73,12 @@
<artifactId>
weixin-java-miniapp
</artifactId>
<artifactId>
weixin-java-miniapp
</artifactId>
</dependency>
</dependency>
<!--千帆 智能对话-->
<!--文心一言-->
<!-- https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp -->
<dependency>
<dependency>
<groupId>
com.squareup.okhttp3
</groupId>
<groupId>
com.squareup.okhttp3
</groupId>
<artifactId>
okhttp
</artifactId>
<artifactId>
okhttp
</artifactId>
<version>
4.
8.1
</version>
<version>
4.
12.0
</version>
</dependency>
</dependency>
<!-- <dependency>-->
<!-- <dependency>-->
...
...
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiChatController.java
View file @
c54de2f1
package
com
.
ruoyi
.
web
.
controller
.
api
;
//
package com.ruoyi.web.controller.api;
//
import
cn.hutool.core.bean.BeanUtil
;
//
import cn.hutool.core.bean.BeanUtil;
import
cn.hutool.json.JSONObject
;
//
import cn.hutool.json.JSONObject;
import
cn.hutool.json.JSONUtil
;
//
import cn.hutool.json.JSONUtil;
import
com.github.pagehelper.PageInfo
;
//
import com.github.pagehelper.PageInfo;
import
com.ruoyi.common.core.domain.AjaxResult
;
//
import com.ruoyi.common.core.domain.AjaxResult;
import
com.ruoyi.common.utils.StringUtils
;
//
import com.ruoyi.common.utils.StringUtils;
import
com.ruoyi.mall.domain.Bo.SaveChatRequestMessage
;
//
import com.ruoyi.mall.domain.Bo.SaveChatRequestMessage;
import
com.ruoyi.mall.domain.Bo.SaveMessage
;
//
import com.ruoyi.mall.domain.Bo.SaveMessage;
import
com.ruoyi.mall.domain.Chat.ChatRequestMessage
;
//
import com.ruoyi.mall.domain.Chat.ChatRequestMessage;
import
com.ruoyi.mall.domain.Chat.ChatResponseMessage
;
//
import com.ruoyi.mall.domain.Chat.ChatResponseMessage;
import
com.ruoyi.mall.domain.Chat.Message
;
//
import com.ruoyi.mall.domain.Chat.Message;
import
com.ruoyi.mall.domain.MallMemberUser
;
//
import com.ruoyi.mall.domain.MallMemberUser;
import
com.ruoyi.mall.service.IMallMemberUserService
;
//
import com.ruoyi.mall.service.IMallMemberUserService;
import
okhttp3.*
;
//
import okhttp3.*;
import
okhttp3.RequestBody
;
//
import okhttp3.RequestBody;
import
org.apache.commons.lang3.ObjectUtils
;
//
import org.apache.commons.lang3.ObjectUtils;
import
org.slf4j.Logger
;
//
import org.slf4j.Logger;
import
org.slf4j.LoggerFactory
;
//
import org.slf4j.LoggerFactory;
import
org.springframework.data.redis.core.RedisTemplate
;
//
import org.springframework.data.redis.core.RedisTemplate;
import
org.springframework.web.bind.annotation.*
;
//
import org.springframework.web.bind.annotation.*;
//
import
javax.annotation.Resource
;
//
import javax.annotation.Resource;
import
javax.validation.constraints.NotNull
;
//
import javax.validation.constraints.NotNull;
import
java.io.IOException
;
//
import java.io.IOException;
import
java.util.*
;
//
import java.util.*;
import
java.util.concurrent.TimeUnit
;
//
import java.util.concurrent.TimeUnit;
import
java.util.stream.Collectors
;
//
import java.util.stream.Collectors;
//
/**
/
/ /
**
* @ClassName 智能对话接口
//
* @ClassName 智能对话接口
* @Description 智能对话接口
//
* @Description 智能对话接口
* @Author LHY
//
* @Author LHY
* @Date 2023/10/18
//
* @Date 2023/10/18
* @Version 1.0
//
* @Version 1.0
**/
//
**/
@RestController
//
@RestController
@RequestMapping
(
"/api/chat"
)
//
@RequestMapping("/api/chat")
public
class
ApiChatController
{
//
public class ApiChatController {
//
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
this
.
getClass
());
//
private final Logger logger = LoggerFactory.getLogger(this.getClass());
//
@Resource
//
@Resource
private
RedisTemplate
redisTemplate
;
//
private RedisTemplate redisTemplate;
//
@Resource
//
@Resource
private
IMallMemberUserService
mallMemberUserService
;
//
private IMallMemberUserService mallMemberUserService;
//读取超时为60s
//
//读取超时为60s
private
static
final
long
READ_TIMEOUT
=
60000
;
//
private static final long READ_TIMEOUT = 60000;
//写入超时为60s
//
//写入超时为60s
private
static
final
long
WRITE_TIMEOUT
=
60000
;
//
private static final long WRITE_TIMEOUT = 60000;
//连接超时为60s
//
//连接超时为60s
private
static
final
long
CONNECT_TIMEOUT
=
60000
;
//
private static final long CONNECT_TIMEOUT = 60000;
//
private
OkHttpClient
.
Builder
builder
=
new
OkHttpClient
.
Builder
()
//
private OkHttpClient.Builder builder = new OkHttpClient.Builder()
.
readTimeout
(
READ_TIMEOUT
,
TimeUnit
.
MILLISECONDS
)
//
.readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS)
.
writeTimeout
(
WRITE_TIMEOUT
,
TimeUnit
.
MILLISECONDS
)
//
.writeTimeout(WRITE_TIMEOUT, TimeUnit.MILLISECONDS)
.
connectTimeout
(
CONNECT_TIMEOUT
,
TimeUnit
.
MILLISECONDS
);
//
.connectTimeout(CONNECT_TIMEOUT, TimeUnit.MILLISECONDS);
//
//
private
OkHttpClient
client
=
builder
.
build
();
//
private OkHttpClient client = builder.build();
private
final
String
ACCESS_TOKEN_URI
=
"https://aip.baidubce.com/oauth/2.0/token"
;
//
private final String ACCESS_TOKEN_URI = "https://aip.baidubce.com/oauth/2.0/token";
// private final String CHAT_URI = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions";
//
// private final String CHAT_URI = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions";
private
final
String
CHAT_URI
=
"https://aip.baidubce.com/rpc/2.0/ai_custom/v2/wenxinworkshop/chat/completions"
;
//
private final String CHAT_URI = "https://aip.baidubce.com/rpc/2.0/ai_custom/v2/wenxinworkshop/chat/completions";
//
private
String
apiKey
=
"hco0U4TGdVpA73F5mGBZliai"
;
//
private String apiKey = "hco0U4TGdVpA73F5mGBZliai";
private
String
secretKey
=
"kBwPxP7PxRy5fTtIalW81GN7A3LFBrEN"
;
//
private String secretKey = "kBwPxP7PxRy5fTtIalW81GN7A3LFBrEN";
//
//
//响应超时时间
//
//响应超时时间
private
int
responseTimeOut
=
5000
;
//
private int responseTimeOut = 5000;
//
//
/**
//
/**
* 删除旧token
//
* 删除旧token
*
//
*
* @return
//
* @return
*/
//
*/
@GetMapping
(
"/delQFAccessToken"
)
//
@GetMapping("/delQFAccessToken")
public
AjaxResult
delQFAccessToken
(){
//
public AjaxResult delQFAccessToken(){
try
{
//
try {
// 删除原来的token
//
// 删除原来的token
redisTemplate
.
delete
(
"qianFanAccessToken"
);
//
redisTemplate.delete("qianFanAccessToken");
return
AjaxResult
.
success
(
"删除token成功"
);
//
return AjaxResult.success("删除token成功");
}
catch
(
Exception
e
){
//
}catch (Exception e){
return
AjaxResult
.
error
(
"获取AccessToken异常!"
);
//
return AjaxResult.error("获取AccessToken异常!");
}
//
}
}
//
}
//
//
/**
//
/**
* 获取千帆AccessToken
//
* 获取千帆AccessToken
*
//
*
* @return
//
* @return
*/
//
*/
@GetMapping
(
"/getQFAccessToken"
)
//
@GetMapping("/getQFAccessToken")
public
AjaxResult
getAccessToken
(){
//
public AjaxResult getAccessToken(){
try
{
//
try {
String
token
=
getQianFanAccessToken
();
//
String token = getQianFanAccessToken();
return
AjaxResult
.
success
(
token
);
//
return AjaxResult.success(token);
}
catch
(
Exception
e
){
//
}catch (Exception e){
return
AjaxResult
.
error
(
"获取AccessToken异常!"
);
//
return AjaxResult.error("获取AccessToken异常!");
}
//
}
}
//
}
//
//
//
/**
//
/**
* 从缓存中拿到千帆AccessToken
//
* 从缓存中拿到千帆AccessToken
*
//
*
* @return
//
* @return
*/
//
*/
private
String
getQianFanAccessToken
()
{
//
private String getQianFanAccessToken() {
String
qianFanAccessToken
=
new
String
();
//
String qianFanAccessToken = new String();
if
(
null
==
redisTemplate
.
boundValueOps
(
"qianFanAccessToken"
).
get
()){
//
if(null == redisTemplate.boundValueOps("qianFanAccessToken").get()){
MediaType
mediaType
=
MediaType
.
parse
(
"application/json"
);
//
MediaType mediaType = MediaType.parse("application/json");
// MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
//
// MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody
body
=
RequestBody
.
create
(
mediaType
,
""
);
//
RequestBody body = RequestBody.create(mediaType, "");
//创建一个请求
//
//创建一个请求
Request
request
=
new
Request
.
Builder
()
//
Request request = new Request.Builder()
.
url
(
ACCESS_TOKEN_URI
+
"?client_id="
+
apiKey
+
"&client_secret="
+
secretKey
+
"&grant_type=client_credentials"
)
//
.url(ACCESS_TOKEN_URI+"?client_id=" + apiKey + "&client_secret=" + secretKey + "&grant_type=client_credentials")
.
method
(
"POST"
,
body
)
//
.method("POST",body)
.
addHeader
(
"Content-Type"
,
"application/json"
)
//
.addHeader("Content-Type", "application/json")
.
addHeader
(
"Accept"
,
"application/json"
)
//
.addHeader("Accept", "application/json")
// .addHeader("Content-Type", "application/x-www-form-urlencoded")
//
// .addHeader("Content-Type", "application/x-www-form-urlencoded")
.
build
();
//
.build();
try
{
//
try {
//使用浏览器对象发起请求
//
//使用浏览器对象发起请求
Response
response
=
client
.
newCall
(
request
).
execute
();
//
Response response = client.newCall(request).execute();
//只能执行一次response.body().string()。下次再执行会抛出流关闭异常,因此需要一个对象存储返回结果
//
//只能执行一次response.body().string()。下次再执行会抛出流关闭异常,因此需要一个对象存储返回结果
String
responseMessage
=
response
.
body
().
string
();
//
String responseMessage = response.body().string();
logger
.
info
(
"获取accessToken成功"
);
//
logger.info("获取accessToken成功");
JSONObject
jsonObject
=
JSONUtil
.
parseObj
(
responseMessage
);
//
JSONObject jsonObject = JSONUtil.parseObj(responseMessage);
String
accessToken
=
(
String
)
jsonObject
.
get
(
"access_token"
);
//
String accessToken = (String) jsonObject.get("access_token");
redisTemplate
.
boundValueOps
(
"qianFanAccessToken"
).
set
(
accessToken
,
30
,
TimeUnit
.
DAYS
);
//
redisTemplate.boundValueOps("qianFanAccessToken").set(accessToken, 30, TimeUnit.DAYS);
//
qianFanAccessToken
=
(
String
)
redisTemplate
.
boundValueOps
(
"qianFanAccessToken"
).
get
();
//
qianFanAccessToken = (String) redisTemplate.boundValueOps("qianFanAccessToken").get();
}
catch
(
Exception
e
)
{
//
} catch (Exception e) {
e
.
printStackTrace
();
//
e.printStackTrace();
}
//
}
}
else
{
//
}else{
qianFanAccessToken
=
(
String
)
redisTemplate
.
boundValueOps
(
"qianFanAccessToken"
).
get
();
//
qianFanAccessToken = (String) redisTemplate.boundValueOps("qianFanAccessToken").get();
}
//
}
return
qianFanAccessToken
;
//
return qianFanAccessToken;
}
//
}
//
/**对话
//
/**对话
*
//
*
* @param params
//
* @param params
* @return
//
* @return
* @throws IOException
//
* @throws IOException
*/
//
*/
@PostMapping
(
"/createPicture"
)
//
@PostMapping("/createPicture")
@org
.
springframework
.
web
.
bind
.
annotation
.
ResponseBody
//
@org.springframework.web.bind.annotation.ResponseBody
public
AjaxResult
chat
(
@org
.
springframework
.
web
.
bind
.
annotation
.
RequestBody
Map
<
String
,
Object
>
params
)
throws
IOException
{
//
public AjaxResult chat(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params) throws IOException {
//对用户问题的判断
//
//对用户问题的判断
if
(!
params
.
containsKey
(
"question"
)
||
StringUtils
.
isEmpty
(
params
.
get
(
"question"
).
toString
()))
{
//
if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
return
AjaxResult
.
error
(
"缺少问题"
);
//
return AjaxResult.error("缺少问题");
}
//
}
if
(!
params
.
containsKey
(
"userId"
)
||
StringUtils
.
isEmpty
(
params
.
get
(
"userId"
).
toString
()))
{
//
if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
return
AjaxResult
.
error
(
"缺少用户id"
);
//
return AjaxResult.error("缺少用户id");
}
//
}
long
userId
=
Long
.
parseLong
(
params
.
get
(
"userId"
).
toString
());
//
long userId = Long.parseLong(params.get("userId").toString());
//
MallMemberUser
memberUser
=
mallMemberUserService
.
selectMallMemberUserById
(
userId
);
//
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if
(
memberUser
==
null
)
{
//
if (memberUser == null) {
return
AjaxResult
.
error
(
"用户信息异常!!!"
);
//
return AjaxResult.error("用户信息异常!!!");
}
//
}
//
String
question
=
params
.
get
(
"question"
).
toString
();
//
String question = params.get("question").toString();
//通过参数获取一个Message
//
//通过参数获取一个Message
Message
message
=
new
Message
(
"user"
,
question
);
//
Message message = new Message("user",question);
//请求参数
//
//请求参数
ChatRequestMessage
requestBody
=
new
ChatRequestMessage
();
//
ChatRequestMessage requestBody = new ChatRequestMessage();
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
//
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String
json
=
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
();
//
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
//System.out.println("json:"+json);
//
//System.out.println("json:"+json);
requestBody
=
JSONUtil
.
toBean
(
json
,
ChatRequestMessage
.
class
);
//
requestBody = JSONUtil.toBean(json, ChatRequestMessage.class);
}
//
}
//将新的问题添加到消息上下文
//
//将新的问题添加到消息上下文
requestBody
.
addMessage
(
message
);
//
requestBody.addMessage(message);
String
jsonStr
=
JSONUtil
.
toJsonStr
(
requestBody
);
//
String jsonStr = JSONUtil.toJsonStr(requestBody);
//System.out.println("jsonStr:"+jsonStr);
//
//System.out.println("jsonStr:"+jsonStr);
MediaType
mediaType
=
MediaType
.
parse
(
"application/json"
);
//
MediaType mediaType = MediaType.parse("application/json");
RequestBody
body
=
RequestBody
.
create
(
mediaType
,
jsonStr
);
//
RequestBody body = RequestBody.create(mediaType, jsonStr);
Request
request
=
new
Request
.
Builder
()
//
Request request = new Request.Builder()
.
url
(
CHAT_URI
+
"?access_token="
+
getQianFanAccessToken
())
//
.url(CHAT_URI+"?access_token="+getQianFanAccessToken())
.
method
(
"POST"
,
body
)
//
.method("POST", body)
.
addHeader
(
"Content-Type"
,
"application/json"
)
//
.addHeader("Content-Type", "application/json")
.
build
();
//
.build();
try
{
//
try{
//logger.info("千帆AccessToken:{}",getQianFanAccessToken());
//
//logger.info("千帆AccessToken:{}",getQianFanAccessToken());
Response
response
=
client
.
newCall
(
request
).
execute
();
//
Response response = client.newCall(request).execute();
String
responseJsonStr
=
response
.
body
().
string
();
//
String responseJsonStr = response.body().string();
logger
.
info
(
"发送一次请求,询问问题:{}"
,
question
);
//
logger.info("发送一次请求,询问问题:{}",question);
ChatResponseMessage
responseMessage
=
JSONUtil
.
toBean
(
responseJsonStr
,
ChatResponseMessage
.
class
);
//
ChatResponseMessage responseMessage = JSONUtil.toBean(responseJsonStr, ChatResponseMessage.class);
System
.
out
.
println
(
"返回的响应结果为:"
+
responseJsonStr
);
//
System.out.println("返回的响应结果为:"+responseJsonStr);
String
result
=
responseMessage
.
getResult
();
//
String result = responseMessage.getResult();
String
answer
=
result
.
replaceAll
(
"\n+"
,
"\n"
);
//
String answer = result.replaceAll("\n+", "\n");
logger
.
info
(
"{}"
,
answer
);
//
logger.info("{}",answer);
Message
assistant
=
new
Message
(
"assistant"
,
answer
);
//
Message assistant = new Message("assistant", answer);
requestBody
.
addMessage
(
assistant
);
//
requestBody.addMessage(assistant);
//redis 存储
//
//redis 存储
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
//
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
Long
expire
=
redisTemplate
.
getExpire
(
"ChatWith"
+
memberUser
.
getId
());
//
Long expire = redisTemplate.getExpire("ChatWith" + memberUser.getId());
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
set
(
JSONUtil
.
toJsonStr
(
requestBody
),
30
,
TimeUnit
.
DAYS
);
//
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(requestBody), 30, TimeUnit.DAYS);
}
else
{
//
}else{
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
set
(
JSONUtil
.
toJsonStr
(
requestBody
),
30
,
TimeUnit
.
DAYS
);
//
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(requestBody), 30, TimeUnit.DAYS);
}
//
}
logger
.
info
(
"存入redis:"
+
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
());
//
logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString());
return
AjaxResult
.
success
(
requestBody
);
//
return AjaxResult.success(requestBody);
}
catch
(
Exception
e
){
//
}catch (Exception e){
e
.
printStackTrace
();
//
e.printStackTrace();
return
AjaxResult
.
error
(
"对话失败!"
);
//
return AjaxResult.error("对话失败!");
}
//
}
//
}
//
}
//
/**对话 只返回最新内容
//
/**对话 只返回最新内容
*
//
*
* @param params
//
* @param params
* @return
//
* @return
* @throws IOException
//
* @throws IOException
*/
//
*/
@PostMapping
(
"/newChat"
)
//
@PostMapping("/newChat")
@org
.
springframework
.
web
.
bind
.
annotation
.
ResponseBody
//
@org.springframework.web.bind.annotation.ResponseBody
public
AjaxResult
chatNew
(
@org
.
springframework
.
web
.
bind
.
annotation
.
RequestBody
Map
<
String
,
Object
>
params
)
throws
IOException
{
//
public AjaxResult chatNew(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params) throws IOException {
//对用户问题的判断
//
//对用户问题的判断
if
(!
params
.
containsKey
(
"question"
)
||
StringUtils
.
isEmpty
(
params
.
get
(
"question"
).
toString
()))
{
//
if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
return
AjaxResult
.
error
(
"缺少问题"
);
//
return AjaxResult.error("缺少问题");
}
//
}
if
(!
params
.
containsKey
(
"userId"
)
||
StringUtils
.
isEmpty
(
params
.
get
(
"userId"
).
toString
()))
{
//
if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
return
AjaxResult
.
error
(
"缺少用户id"
);
//
return AjaxResult.error("缺少用户id");
}
//
}
if
(!
params
.
containsKey
(
"hasVoice"
)
||
ObjectUtils
.
isEmpty
(
Integer
.
valueOf
(
params
.
get
(
"hasVoice"
).
toString
()))){
//
if (!params.containsKey("hasVoice") || ObjectUtils.isEmpty(Integer.valueOf(params.get("hasVoice").toString()))){
return
AjaxResult
.
error
(
"缺少语音状态"
);
//
return AjaxResult.error("缺少语音状态");
}
//
}
long
userId
=
Long
.
parseLong
(
params
.
get
(
"userId"
).
toString
());
//
long userId = Long.parseLong(params.get("userId").toString());
// 是否有语音0-没有,1-有
//
// 是否有语音0-没有,1-有
Integer
hasVoice
=
Integer
.
valueOf
(
params
.
get
(
"hasVoice"
).
toString
());
//
Integer hasVoice = Integer.valueOf(params.get("hasVoice").toString());
//
MallMemberUser
memberUser
=
mallMemberUserService
.
selectMallMemberUserById
(
userId
);
//
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if
(
memberUser
==
null
)
{
//
if (memberUser == null) {
return
AjaxResult
.
error
(
"用户信息异常!!!"
);
//
return AjaxResult.error("用户信息异常!!!");
}
//
}
//
String
question
=
params
.
get
(
"question"
).
toString
();
//
String question = params.get("question").toString();
//通过参数获取一个Message
//
//通过参数获取一个Message
Message
message
=
new
Message
(
"user"
,
question
);
//
Message message = new Message("user",question);
// 创建存储用saveMessage
//
// 创建存储用saveMessage
SaveMessage
saveMessage
=
new
SaveMessage
();
//
SaveMessage saveMessage = new SaveMessage();
saveMessage
.
setRole
(
"user"
);
//
saveMessage.setRole("user");
saveMessage
.
setContent
(
question
);
//
saveMessage.setContent(question);
saveMessage
.
setHasVoice
(
hasVoice
);
//
saveMessage.setHasVoice(hasVoice);
if
(
hasVoice
==
1
){
//
if (hasVoice == 1){
saveMessage
.
setVoiceUrl
(
params
.
get
(
"voiceUrl"
).
toString
());
//
saveMessage.setVoiceUrl(params.get("voiceUrl").toString());
}
//
}
//请求参数
//
//请求参数
ChatRequestMessage
requestBody
=
new
ChatRequestMessage
();
//
ChatRequestMessage requestBody = new ChatRequestMessage();
// 创建存储类
//
// 创建存储类
SaveChatRequestMessage
saveChatRequestMessage
=
new
SaveChatRequestMessage
();
//
SaveChatRequestMessage saveChatRequestMessage = new SaveChatRequestMessage();
//
// 查询是否有记录
//
// 查询是否有记录
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
//
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String
json
=
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
();
//
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
//System.out.println("json:"+json);
//
//System.out.println("json:"+json);
//requestBody = JSONUtil.toBean(json, ChatRequestMessage.class);
//
//requestBody = JSONUtil.toBean(json, ChatRequestMessage.class);
saveChatRequestMessage
=
JSONUtil
.
toBean
(
json
,
SaveChatRequestMessage
.
class
);
//
saveChatRequestMessage = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// 记录信息复制到请求参数中
//
// 记录信息复制到请求参数中
BeanUtil
.
copyProperties
(
saveChatRequestMessage
,
requestBody
);
//
BeanUtil.copyProperties(saveChatRequestMessage, requestBody);
List
<
SaveMessage
>
saveMessageList
=
saveChatRequestMessage
.
getSaveMessageList
();
//
List<SaveMessage> saveMessageList = saveChatRequestMessage.getSaveMessageList();
ArrayList
<
Message
>
list
=
new
ArrayList
<>();
//
ArrayList<Message> list = new ArrayList<>();
if
(!
saveMessageList
.
isEmpty
()){
//
if (!saveMessageList.isEmpty()){
for
(
SaveMessage
saveMessageHistory
:
saveMessageList
)
{
//
for (SaveMessage saveMessageHistory : saveMessageList) {
Message
m
=
BeanUtil
.
copyProperties
(
saveMessageHistory
,
Message
.
class
);
//
Message m = BeanUtil.copyProperties(saveMessageHistory, Message.class);
list
.
add
(
m
);
//
list.add(m);
}
//
}
requestBody
.
setMessages
(
list
);
//
requestBody.setMessages(list);
}
//
}
}
//
}
//将新的问题添加到消息上下文
//
//将新的问题添加到消息上下文
requestBody
.
addMessage
(
message
);
//
requestBody.addMessage(message);
// 新信息添加保存
//
// 新信息添加保存
saveChatRequestMessage
.
addSaveMessage
(
saveMessage
);
//
saveChatRequestMessage.addSaveMessage(saveMessage);
//
String
jsonStr
=
JSONUtil
.
toJsonStr
(
requestBody
);
//
String jsonStr = JSONUtil.toJsonStr(requestBody);
//System.out.println("jsonStr:"+jsonStr);
//
//System.out.println("jsonStr:"+jsonStr);
MediaType
mediaType
=
MediaType
.
parse
(
"application/json"
);
//
MediaType mediaType = MediaType.parse("application/json");
RequestBody
body
=
RequestBody
.
create
(
mediaType
,
jsonStr
);
//
RequestBody body = RequestBody.create(mediaType, jsonStr);
Request
request
=
new
Request
.
Builder
()
//
Request request = new Request.Builder()
.
url
(
CHAT_URI
+
"?access_token="
+
getQianFanAccessToken
())
//
.url(CHAT_URI+"?access_token="+getQianFanAccessToken())
.
method
(
"POST"
,
body
)
//
.method("POST", body)
.
addHeader
(
"Content-Type"
,
"application/json"
)
//
.addHeader("Content-Type", "application/json")
.
build
();
//
.build();
try
{
//
try{
//logger.info("千帆AccessToken:{}",getQianFanAccessToken());
//
//logger.info("千帆AccessToken:{}",getQianFanAccessToken());
Response
response
=
client
.
newCall
(
request
).
execute
();
//
Response response = client.newCall(request).execute();
String
responseJsonStr
=
response
.
body
().
string
();
//
String responseJsonStr = response.body().string();
logger
.
info
(
"发送一次请求,询问问题:{}"
,
question
);
//
logger.info("发送一次请求,询问问题:{}",question);
ChatResponseMessage
responseMessage
=
JSONUtil
.
toBean
(
responseJsonStr
,
ChatResponseMessage
.
class
);
//
ChatResponseMessage responseMessage = JSONUtil.toBean(responseJsonStr, ChatResponseMessage.class);
System
.
out
.
println
(
"返回的响应结果为:"
+
responseJsonStr
);
//
System.out.println("返回的响应结果为:"+responseJsonStr);
String
result
=
responseMessage
.
getResult
();
//
String result = responseMessage.getResult();
String
answer
=
result
.
replaceAll
(
"\n+"
,
"\n"
);
//
String answer = result.replaceAll("\n+", "\n");
logger
.
info
(
"{}"
,
answer
);
//
logger.info("{}",answer);
Message
assistant
=
new
Message
(
"assistant"
,
answer
);
//
Message assistant = new Message("assistant", answer);
requestBody
.
addMessage
(
assistant
);
//
requestBody.addMessage(assistant);
//
// 存储信息
//
// 存储信息
SaveMessage
saveAnswer
=
BeanUtil
.
copyProperties
(
assistant
,
SaveMessage
.
class
);
//
SaveMessage saveAnswer = BeanUtil.copyProperties(assistant, SaveMessage.class);
saveAnswer
.
setHasVoice
(
hasVoice
);
//
saveAnswer.setHasVoice(hasVoice);
saveChatRequestMessage
.
addSaveMessage
(
saveAnswer
);
//
saveChatRequestMessage.addSaveMessage(saveAnswer);
//
//redis 存储
//
//redis 存储
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
//
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
Long
expire
=
redisTemplate
.
getExpire
(
"ChatWith"
+
memberUser
.
getId
());
//
Long expire = redisTemplate.getExpire("ChatWith" + memberUser.getId());
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
set
(
JSONUtil
.
toJsonStr
(
saveChatRequestMessage
),
30
,
TimeUnit
.
DAYS
);
//
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS);
}
else
{
//
}else{
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
set
(
JSONUtil
.
toJsonStr
(
saveChatRequestMessage
),
30
,
TimeUnit
.
DAYS
);
//
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS);
}
//
}
logger
.
info
(
"存入redis:"
+
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
());
//
logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString());
List
<
SaveMessage
>
newChat
=
new
ArrayList
<>();
//
List<SaveMessage> newChat = new ArrayList<>();
newChat
.
add
(
saveMessage
);
//
newChat.add(saveMessage);
newChat
.
add
(
saveAnswer
);
//
newChat.add(saveAnswer);
return
AjaxResult
.
success
(
newChat
);
//
return AjaxResult.success(newChat);
}
catch
(
Exception
e
){
//
}catch (Exception e){
e
.
printStackTrace
();
//
e.printStackTrace();
return
AjaxResult
.
error
(
"对话失败!"
);
//
return AjaxResult.error("对话失败!");
}
//
}
//
}
//
}
//
/**对话历史-近到远—分页
//
/**对话历史-近到远—分页
*
//
*
* @param userId 当前对话用户id
//
* @param userId 当前对话用户id
* @return
//
* @return
*/
//
*/
@GetMapping
(
"/getChatHistory"
)
//
@GetMapping("/getChatHistory")
public
AjaxResult
getChatHistory
(
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
//
public AjaxResult getChatHistory(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
,
//
@RequestParam(defaultValue = "10") Integer pageSize,
@NotNull
(
message
=
"Chat.getChatHistory.userId.isNull"
)
Long
userId
){
//
@NotNull(message = "Chat.getChatHistory.userId.isNull") Long userId){
try
{
//
try {
MallMemberUser
memberUser
=
mallMemberUserService
.
selectMallMemberUserById
(
userId
);
//
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if
(
memberUser
==
null
)
{
//
if (memberUser == null) {
return
AjaxResult
.
error
(
"用户信息异常!!!"
);
//
return AjaxResult.error("用户信息异常!!!");
}
//
}
SaveChatRequestMessage
requestBody
=
new
SaveChatRequestMessage
();
//
SaveChatRequestMessage requestBody = new SaveChatRequestMessage();
List
<
SaveMessage
>
history
=
new
ArrayList
<>();
//
List<SaveMessage> history = new ArrayList<>();
//有历史消息
//
//有历史消息
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
//
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String
json
=
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
();
//
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
System
.
out
.
println
(
"json:"
+
json
);
//
System.out.println("json:"+json);
requestBody
=
JSONUtil
.
toBean
(
json
,
SaveChatRequestMessage
.
class
);
//
requestBody = JSONUtil.toBean(json, SaveChatRequestMessage.class);
if
(
null
!=
requestBody
.
getSaveMessageList
()
&&
requestBody
.
getSaveMessageList
().
size
()>
0
){
//
if(null != requestBody.getSaveMessageList() && requestBody.getSaveMessageList().size()>0){
history
=
requestBody
.
getSaveMessageList
();
//
history = requestBody.getSaveMessageList();
Collections
.
reverse
(
history
);
//
Collections.reverse(history);
}
//
}
}
//
}
//
//Page page = new Page<>(pageNum,pageSize);
//
//Page page = new Page<>(pageNum,pageSize);
////为Page类中的total属性赋值
//
////为Page类中的total属性赋值
//int total = history.size();
//
//int total = history.size();
//page.setTotal(total);
//
//page.setTotal(total);
////计算当前需要显示的数据下标起始值
//
////计算当前需要显示的数据下标起始值
//int startIndex = (pageNum - 1) * pageSize;
//
//int startIndex = (pageNum - 1) * pageSize;
//int endIndex = Math.min(startIndex + pageSize,total);
//
//int endIndex = Math.min(startIndex + pageSize,total);
////从链表中截取需要显示的子链表,并加入到Page
//
////从链表中截取需要显示的子链表,并加入到Page
//page.addAll(history.subList(startIndex,endIndex));
//
//page.addAll(history.subList(startIndex,endIndex));
////以Page创建PageInfo
//
////以Page创建PageInfo
//PageInfo pageInfo = new PageInfo<>(page);
//
//PageInfo pageInfo = new PageInfo<>(page);
//return AjaxResult.success().put("data",pageInfo);
//
//return AjaxResult.success().put("data",pageInfo);
//
//java8 stream实现list分页
//
//java8 stream实现list分页
//
List
<
SaveMessage
>
pageList
=
history
.
stream
().
sorted
().
skip
((
pageNum
-
1
)
*
pageSize
)
//
List<SaveMessage> pageList = history.stream().sorted().skip((pageNum - 1) * pageSize)
.
limit
(
pageSize
)
//
.limit(pageSize)
.
collect
(
Collectors
.
toList
());
//
.collect(Collectors.toList());
PageInfo
<
SaveMessage
>
pageInfo
=
new
PageInfo
<
SaveMessage
>(
pageList
);
//
PageInfo<SaveMessage> pageInfo = new PageInfo<SaveMessage>(pageList);
//获取PageInfo其他参数
//
//获取PageInfo其他参数
pageInfo
.
setTotal
(
history
.
size
());
//
pageInfo.setTotal(history.size());
//
int
endRow
=
pageInfo
.
getEndRow
()
==
0
?
0
:
(
int
)((
pageNum
-
1
)
*
pageSize
+
pageInfo
.
getEndRow
()
+
1
);
//
int endRow = pageInfo.getEndRow() == 0 ? 0 : (int)((pageNum - 1) * pageSize + pageInfo.getEndRow() + 1);
pageInfo
.
setEndRow
(
endRow
);
//
pageInfo.setEndRow(endRow);
boolean
hasNextPage
=
history
.
size
()
<=
pageSize
*
pageNum
?
false
:
true
;
//
boolean hasNextPage = history.size() <= pageSize * pageNum ? false : true;
pageInfo
.
setHasNextPage
(
hasNextPage
);
//
pageInfo.setHasNextPage(hasNextPage);
boolean
hasPreviousPage
=
pageNum
==
1
?
false
:
true
;
//
boolean hasPreviousPage = pageNum == 1 ? false : true;
pageInfo
.
setHasPreviousPage
(
hasPreviousPage
);
//
pageInfo.setHasPreviousPage(hasPreviousPage);
pageInfo
.
setIsFirstPage
(!
hasPreviousPage
);
//
pageInfo.setIsFirstPage(!hasPreviousPage);
boolean
isLastPage
=
(
history
.
size
()
>
pageSize
*
(
pageNum
-
1
)
&&
history
.
size
()
<=
pageSize
*
pageNum
)
?
true
:
false
;
//
boolean isLastPage = (history.size() > pageSize * (pageNum - 1) && history.size() <= pageSize * pageNum) ? true : false;
pageInfo
.
setIsLastPage
(
isLastPage
);
//
pageInfo.setIsLastPage(isLastPage);
int
pages
=
history
.
size
()
%
pageSize
==
0
?
history
.
size
()
/
pageSize
:
(
history
.
size
()
/
pageSize
)
+
1
;
//
int pages = history.size() % pageSize == 0 ? history.size() / pageSize : (history.size() / pageSize) + 1;
pageInfo
.
setNavigateLastPage
(
pages
);
//
pageInfo.setNavigateLastPage(pages);
int
[]
navigatePageNums
=
new
int
[
pages
];
//
int[] navigatePageNums = new int[pages];
for
(
int
i
=
1
;
i
<
pages
;
i
++)
{
//
for (int i = 1; i < pages; i++) {
navigatePageNums
[
i
-
1
]
=
i
;
//
navigatePageNums[i - 1] = i;
}
//
}
pageInfo
.
setNavigatepageNums
(
navigatePageNums
);
//
pageInfo.setNavigatepageNums(navigatePageNums);
int
nextPage
=
pageNum
<
pages
?
pageNum
+
1
:
0
;
//
int nextPage = pageNum < pages ? pageNum + 1 : 0;
pageInfo
.
setNextPage
(
nextPage
);
//
pageInfo.setNextPage(nextPage);
pageInfo
.
setPageNum
(
pageNum
);
//
pageInfo.setPageNum(pageNum);
pageInfo
.
setPageSize
(
pageSize
);
//
pageInfo.setPageSize(pageSize);
pageInfo
.
setPages
(
pages
);
//
pageInfo.setPages(pages);
pageInfo
.
setPrePage
(
pageNum
-
1
);
//
pageInfo.setPrePage(pageNum - 1);
pageInfo
.
setSize
(
pageInfo
.
getList
().
size
());
//
pageInfo.setSize(pageInfo.getList().size());
int
starRow
=
history
.
size
()
<
pageSize
*
pageNum
?
1
+
pageSize
*
(
pageNum
-
1
)
:
0
;
//
int starRow = history.size() < pageSize * pageNum ? 1 + pageSize * (pageNum - 1) : 0;
pageInfo
.
setStartRow
(
starRow
);
//
pageInfo.setStartRow(starRow);
return
AjaxResult
.
success
().
put
(
"data"
,
pageInfo
);
//
return AjaxResult.success().put("data", pageInfo);
//
}
catch
(
Exception
e
){
//
}catch (Exception e){
return
AjaxResult
.
error
(
"获取对话历史异常!"
);
//
return AjaxResult.error("获取对话历史异常!");
}
//
}
}
//
}
//
/** 最后一页页数
//
/** 最后一页页数
*
//
*
* @param pageNum
//
* @param pageNum
* @param pageSize
//
* @param pageSize
* @param userId
//
* @param userId
* @return
//
* @return
*/
//
*/
@GetMapping
(
"/getLastNum"
)
//
@GetMapping("/getLastNum")
public
AjaxResult
getLastNum
(
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
//
public AjaxResult getLastNum(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
,
//
@RequestParam(defaultValue = "10") Integer pageSize,
@NotNull
(
message
=
"Chat.getChatHistory.userId.isNull"
)
Long
userId
){
//
@NotNull(message = "Chat.getChatHistory.userId.isNull") Long userId){
try
{
//
try {
MallMemberUser
memberUser
=
mallMemberUserService
.
selectMallMemberUserById
(
userId
);
//
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if
(
memberUser
==
null
)
{
//
if (memberUser == null) {
return
AjaxResult
.
error
(
"用户信息异常!!!"
);
//
return AjaxResult.error("用户信息异常!!!");
}
//
}
SaveChatRequestMessage
requestBody
=
new
SaveChatRequestMessage
();
//
SaveChatRequestMessage requestBody = new SaveChatRequestMessage();
List
<
SaveMessage
>
history
=
new
ArrayList
<>();
//
List<SaveMessage> history = new ArrayList<>();
//有历史消息
//
//有历史消息
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
//
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String
json
=
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
();
//
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
System
.
out
.
println
(
"json:"
+
json
);
//
System.out.println("json:"+json);
requestBody
=
JSONUtil
.
toBean
(
json
,
SaveChatRequestMessage
.
class
);
//
requestBody = JSONUtil.toBean(json, SaveChatRequestMessage.class);
if
(
null
!=
requestBody
.
getSaveMessageList
()
&&
requestBody
.
getSaveMessageList
().
size
()>
0
){
//
if(null != requestBody.getSaveMessageList() && requestBody.getSaveMessageList().size()>0){
history
=
requestBody
.
getSaveMessageList
();
//
history = requestBody.getSaveMessageList();
}
//
}
int
total
=
history
.
size
();
//
int total = history.size();
int
num
=
total
/
pageSize
;
//
int num = total/pageSize;
int
remain
=
total
%
pageSize
;
//
int remain = total%pageSize;
if
(
num
==
0
&&
remain
>
0
){
//
if(num == 0 && remain > 0){
return
AjaxResult
.
success
().
put
(
"lastPage"
,
1
);
//
return AjaxResult.success().put("lastPage",1);
}
else
if
(
num
>
0
&&
remain
>
0
)
{
//
} else if(num > 0 && remain > 0) {
return
AjaxResult
.
success
().
put
(
"lastPage"
,
num
+
1
);
//
return AjaxResult.success().put("lastPage",num+1);
}
else
if
(
num
>
0
&&
remain
==
0
)
{
//
}else if(num > 0 && remain == 0) {
return
AjaxResult
.
success
().
put
(
"lastPage"
,
num
);
//
return AjaxResult.success().put("lastPage",num);
}
else
{
//
}else{
return
AjaxResult
.
success
().
put
(
"lastPage"
,
0
);
//
return AjaxResult.success().put("lastPage",0);
}
//
}
}
else
{
//
}else{
return
AjaxResult
.
success
().
put
(
"lastPage"
,
0
);
//
return AjaxResult.success().put("lastPage",0);
}
//
}
//
//
}
catch
(
Exception
e
){
//
}catch (Exception e){
return
AjaxResult
.
error
(
"获取最后页数异常!"
);
//
return AjaxResult.error("获取最后页数异常!");
}
//
}
}
//
}
//
//
/**
//
/**
* 调用知识库
//
* 调用知识库
*/
//
*/
@PostMapping
(
"/chatNew"
)
//
@PostMapping("/chatNew")
@org
.
springframework
.
web
.
bind
.
annotation
.
ResponseBody
//
@org.springframework.web.bind.annotation.ResponseBody
public
AjaxResult
newChat
(
@org
.
springframework
.
web
.
bind
.
annotation
.
RequestBody
Map
<
String
,
Object
>
params
){
//
public AjaxResult newChat(@org.springframework.web.bind.annotation.RequestBody Map<String, Object> params){
//对用户问题的判断
//
//对用户问题的判断
if
(!
params
.
containsKey
(
"question"
)
||
StringUtils
.
isEmpty
(
params
.
get
(
"question"
).
toString
()))
{
//
if (!params.containsKey("question") || StringUtils.isEmpty(params.get("question").toString())) {
return
AjaxResult
.
error
(
"缺少问题"
);
//
return AjaxResult.error("缺少问题");
}
//
}
if
(!
params
.
containsKey
(
"userId"
)
||
StringUtils
.
isEmpty
(
params
.
get
(
"userId"
).
toString
()))
{
//
if (!params.containsKey("userId") || StringUtils.isEmpty(params.get("userId").toString())) {
return
AjaxResult
.
error
(
"缺少用户id"
);
//
return AjaxResult.error("缺少用户id");
}
//
}
if
(!
params
.
containsKey
(
"hasVoice"
)
||
ObjectUtils
.
isEmpty
(
Integer
.
valueOf
(
params
.
get
(
"hasVoice"
).
toString
()))){
//
if (!params.containsKey("hasVoice") || ObjectUtils.isEmpty(Integer.valueOf(params.get("hasVoice").toString()))){
return
AjaxResult
.
error
(
"缺少语音状态"
);
//
return AjaxResult.error("缺少语音状态");
}
//
}
long
userId
=
Long
.
parseLong
(
params
.
get
(
"userId"
).
toString
());
//
long userId = Long.parseLong(params.get("userId").toString());
// 是否有语音0-没有,1-有
//
// 是否有语音0-没有,1-有
Integer
hasVoice
=
Integer
.
valueOf
(
params
.
get
(
"hasVoice"
).
toString
());
//
Integer hasVoice = Integer.valueOf(params.get("hasVoice").toString());
//
MallMemberUser
memberUser
=
mallMemberUserService
.
selectMallMemberUserById
(
userId
);
//
MallMemberUser memberUser = mallMemberUserService.selectMallMemberUserById(userId);
if
(
memberUser
==
null
)
{
//
if (memberUser == null) {
return
AjaxResult
.
error
(
"用户信息异常!!!"
);
//
return AjaxResult.error("用户信息异常!!!");
}
//
}
//
String
question
=
params
.
get
(
"question"
).
toString
();
//
String question = params.get("question").toString();
//通过参数获取一个Message
//
//通过参数获取一个Message
Message
message
=
new
Message
(
"user"
,
question
);
//
Message message = new Message("user",question);
// 创建存储用saveMessage
//
// 创建存储用saveMessage
SaveMessage
saveMessage
=
new
SaveMessage
();
//
SaveMessage saveMessage = new SaveMessage();
saveMessage
.
setRole
(
"user"
);
//
saveMessage.setRole("user");
saveMessage
.
setContent
(
question
);
//
saveMessage.setContent(question);
saveMessage
.
setHasVoice
(
hasVoice
);
//
saveMessage.setHasVoice(hasVoice);
if
(
hasVoice
==
1
){
//
if (hasVoice == 1){
saveMessage
.
setVoiceUrl
(
params
.
get
(
"voiceUrl"
).
toString
());
//
saveMessage.setVoiceUrl(params.get("voiceUrl").toString());
}
//
}
//
com
.
alibaba
.
fastjson
.
JSONObject
jsonObject
=
new
com
.
alibaba
.
fastjson
.
JSONObject
();
//
com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
jsonObject
.
put
(
"query"
,
question
);
//
jsonObject.put("query", question);
List
<
String
>
plugins
=
new
ArrayList
<>();
//
List<String> plugins = new ArrayList<>();
plugins
.
add
(
"uuid-zhishiku"
);
//
plugins.add("uuid-zhishiku");
//plugins.add("uuid-weatherforecast");
//
//plugins.add("uuid-weatherforecast");
//jsonObject.put("plugins", plugins);
//
//jsonObject.put("plugins", plugins);
//jsonObject.put("verbose", false);
//
//jsonObject.put("verbose", false);
//
//
// 创建存储类
//
// 创建存储类
SaveChatRequestMessage
saveChatRequestMessage
=
new
SaveChatRequestMessage
();
//
SaveChatRequestMessage saveChatRequestMessage = new SaveChatRequestMessage();
ArrayList
<
Message
>
historyList
=
new
ArrayList
<>();
//
ArrayList<Message> historyList = new ArrayList<>();
// 查询是否有记录
//
// 查询是否有记录
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
//
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
String
json
=
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
();
//
String json = redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString();
saveChatRequestMessage
=
JSONUtil
.
toBean
(
json
,
SaveChatRequestMessage
.
class
);
//
saveChatRequestMessage = JSONUtil.toBean(json, SaveChatRequestMessage.class);
// 记录信息复制到请求参数中
//
// 记录信息复制到请求参数中
List
<
SaveMessage
>
saveMessageList
=
saveChatRequestMessage
.
getSaveMessageList
();
//
List<SaveMessage> saveMessageList = saveChatRequestMessage.getSaveMessageList();
//
if
(!
saveMessageList
.
isEmpty
()){
//
if (!saveMessageList.isEmpty()){
List
<
SaveMessage
>
shortList
=
new
ArrayList
<>();
//
List<SaveMessage> shortList = new ArrayList<>();
int
size
=
saveMessageList
.
size
();
//
int size = saveMessageList.size();
if
(
size
>=
2
){
//
if ( size >= 2){
shortList
.
add
(
saveMessageList
.
get
(
size
-
2
));
//
shortList.add(saveMessageList.get(size - 2));
shortList
.
add
(
saveMessageList
.
get
(
size
-
1
));
//
shortList.add(saveMessageList.get(size - 1));
for
(
SaveMessage
saveMessageHistory
:
shortList
)
{
//
for (SaveMessage saveMessageHistory : shortList) {
Message
m
=
BeanUtil
.
copyProperties
(
saveMessageHistory
,
Message
.
class
);
//
Message m = BeanUtil.copyProperties(saveMessageHistory, Message.class);
historyList
.
add
(
m
);
//
historyList.add(m);
}
//
}
}
//
}
//
}
//
}
}
//
}
//将新的问题添加到消息上下文
//
//将新的问题添加到消息上下文
//jsonObject.put("history", historyList);
//
//jsonObject.put("history", historyList);
// 新信息添加保存
//
// 新信息添加保存
saveChatRequestMessage
.
addSaveMessage
(
saveMessage
);
//
saveChatRequestMessage.addSaveMessage(saveMessage);
//
String
jsonStr
=
jsonObject
.
toJSONString
();
//
String jsonStr = jsonObject.toJSONString();
MediaType
mediaType
=
MediaType
.
parse
(
"application/json"
);
//
MediaType mediaType = MediaType.parse("application/json");
RequestBody
body
=
RequestBody
.
create
(
mediaType
,
jsonStr
);
//
RequestBody body = RequestBody.create(mediaType, jsonStr);
Request
request
=
new
Request
.
Builder
()
//
Request request = new Request.Builder()
// .url("https://aip.baidubce.com/rpc/2.0/ai_custom/v2/wenxinworkshop/plugin/jfa2nhi1zap61qy7?access_token="+getQianFanAccessToken())
//
// .url("https://aip.baidubce.com/rpc/2.0/ai_custom/v2/wenxinworkshop/plugin/jfa2nhi1zap61qy7?access_token="+getQianFanAccessToken())
.
url
(
"https://qianfan.baidubce.com/v2/chat/completions"
)
//
.url("https://qianfan.baidubce.com/v2/chat/completions")
.
method
(
"POST"
,
body
)
//
.method("POST", body)
.
addHeader
(
"Content-Type"
,
"application/json"
)
//
.addHeader("Content-Type", "application/json")
.
addHeader
(
"Authorization"
,
"Bearer "
+
getQianFanAccessToken
())
//
.addHeader("Authorization", "Bearer " + getQianFanAccessToken())
.
build
();
//
.build();
try
{
//
try{
logger
.
info
(
"千帆AccessToken:{}"
,
getQianFanAccessToken
());
//
logger.info("千帆AccessToken:{}",getQianFanAccessToken());
Response
response
=
client
.
newCall
(
request
).
execute
();
//
Response response = client.newCall(request).execute();
String
responseJsonStr
=
response
.
body
().
string
();
//
String responseJsonStr = response.body().string();
//
com
.
alibaba
.
fastjson
.
JSONObject
data
=
JSONUtil
.
toBean
(
responseJsonStr
,
com
.
alibaba
.
fastjson
.
JSONObject
.
class
);
//
com.alibaba.fastjson.JSONObject data = JSONUtil.toBean(responseJsonStr, com.alibaba.fastjson.JSONObject.class);
System
.
out
.
println
(
"返回的响应结果为:"
+
responseJsonStr
);
//
System.out.println("返回的响应结果为:"+responseJsonStr);
System
.
out
.
println
(
"data:"
+
data
);
//
System.out.println("data:"+data);
System
.
out
.
println
(
"result:"
+
data
.
getString
(
"result"
));
//
System.out.println("result:"+data.getString("result"));
System
.
out
.
println
(
"response:"
+
response
);
//
System.out.println("response:"+response);
String
result
=
data
.
getString
(
"result"
);
//
String result = data.getString("result");
if
(
StringUtils
.
isNotBlank
(
result
)){
//
if (StringUtils.isNotBlank(result)){
String
answer
=
result
.
replaceAll
(
"\n"
,
""
);
//
String answer = result.replaceAll("\n", "");
//
//int i = answer.indexOf("\n");
//
//int i = answer.indexOf("\n");
Message
assistant
=
new
Message
(
"assistant"
,
answer
);
//
Message assistant = new Message("assistant", answer);
//if (i> 0){
//
//if (i> 0){
// assistant.setContent(answer.substring(0,i));
//
// assistant.setContent(answer.substring(0,i));
//}
//
//}
//
//
// 存储信息
//
// 存储信息
SaveMessage
saveAnswer
=
BeanUtil
.
copyProperties
(
assistant
,
SaveMessage
.
class
);
//
SaveMessage saveAnswer = BeanUtil.copyProperties(assistant, SaveMessage.class);
saveAnswer
.
setHasVoice
(
hasVoice
);
//
saveAnswer.setHasVoice(hasVoice);
//
saveChatRequestMessage
.
addSaveMessage
(
saveAnswer
);
//
saveChatRequestMessage.addSaveMessage(saveAnswer);
//
//redis 存储
//
//redis 存储
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
//
if(redisTemplate.hasKey("ChatWith" + memberUser.getId())){
Long
expire
=
redisTemplate
.
getExpire
(
"ChatWith"
+
memberUser
.
getId
());
//
Long expire = redisTemplate.getExpire("ChatWith" + memberUser.getId());
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
set
(
JSONUtil
.
toJsonStr
(
saveChatRequestMessage
),
30
,
TimeUnit
.
DAYS
);
//
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS);
}
else
{
//
}else{
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
set
(
JSONUtil
.
toJsonStr
(
saveChatRequestMessage
),
30
,
TimeUnit
.
DAYS
);
//
redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).set(JSONUtil.toJsonStr(saveChatRequestMessage), 30, TimeUnit.DAYS);
}
//
}
logger
.
info
(
"存入redis:"
+
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
());
//
logger.info("存入redis:" +redisTemplate.boundValueOps("ChatWith" + memberUser.getId()).get().toString());
List
<
SaveMessage
>
newChat
=
new
ArrayList
<>();
//
List<SaveMessage> newChat = new ArrayList<>();
newChat
.
add
(
saveMessage
);
//
newChat.add(saveMessage);
newChat
.
add
(
saveAnswer
);
//
newChat.add(saveAnswer);
//
return
AjaxResult
.
success
(
newChat
);
//
return AjaxResult.success(newChat);
}
else
{
//
}else{
logger
.
error
(
"对话返回结果为空"
);
//
logger.error("对话返回结果为空");
return
AjaxResult
.
error
(
"对话失败!"
);
//
return AjaxResult.error("对话失败!");
}
//
}
//
}
catch
(
Exception
e
){
//
}catch (Exception e){
e
.
printStackTrace
();
//
e.printStackTrace();
return
AjaxResult
.
error
(
"对话失败!"
);
//
return AjaxResult.error("对话失败!");
}
//
}
//
}
//
}
//
}
//
}
ruoyi-admin/src/main/java/com/ruoyi/web/controller/api/ApiChatNewController.java
0 → 100644
View file @
c54de2f1
package
com
.
ruoyi
.
web
.
controller
.
api
;
import
cn.hutool.core.bean.BeanUtil
;
import
cn.hutool.json.JSONObject
;
import
cn.hutool.json.JSONUtil
;
import
com.fasterxml.jackson.databind.ObjectMapper
;
import
com.github.pagehelper.PageInfo
;
import
com.ruoyi.common.core.domain.AjaxResult
;
import
com.ruoyi.common.utils.StringUtils
;
import
com.ruoyi.mall.domain.Bo.SaveChatRequestMessage
;
import
com.ruoyi.mall.domain.Bo.SaveMessage
;
import
com.ruoyi.mall.domain.Chat.*
;
import
com.ruoyi.mall.domain.MallMemberUser
;
import
com.ruoyi.mall.service.IMallMemberUserService
;
import
okhttp3.RequestBody
;
import
okhttp3.*
;
import
org.apache.commons.lang3.ObjectUtils
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.web.bind.annotation.*
;
import
javax.annotation.Resource
;
import
javax.validation.constraints.NotNull
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.Collections
;
import
java.util.List
;
import
java.util.Map
;
import
java.util.concurrent.TimeUnit
;
import
java.util.stream.Collectors
;
/**
* @ClassName 智能对话接口
* @Description 智能对话接口
* @Author LHY
* @Date 2023/10/18
* @Version 1.0
**/
@RestController
@RequestMapping
(
"/api/chat"
)
public
class
ApiChatNewController
{
private
final
Logger
logger
=
LoggerFactory
.
getLogger
(
this
.
getClass
());
@Resource
private
RedisTemplate
redisTemplate
;
@Resource
private
IMallMemberUserService
mallMemberUserService
;
@Value
(
"${baidu.appKey}"
)
private
String
appKey
;
@Value
(
"${baidu.appId}"
)
private
String
appId
;
// 读取超时为60s
private
static
final
long
READ_TIMEOUT
=
60000
;
// 写入超时为60s
private
static
final
long
WRITE_TIMEOUT
=
60000
;
// 连接超时为60s
private
static
final
long
CONNECT_TIMEOUT
=
60000
;
private
static
final
long
CALL_TIMEOUT
=
60000
;
private
static
final
OkHttpClient
HTTP_CLIENT
=
new
OkHttpClient
().
newBuilder
()
// 设置调用超时时间
.
callTimeout
(
CALL_TIMEOUT
,
TimeUnit
.
MILLISECONDS
)
// 设置读取超时时间
.
readTimeout
(
READ_TIMEOUT
,
TimeUnit
.
MILLISECONDS
)
// 设置写超时时间
.
writeTimeout
(
WRITE_TIMEOUT
,
TimeUnit
.
MILLISECONDS
)
// 设置连接超时时间
.
connectTimeout
(
CONNECT_TIMEOUT
,
TimeUnit
.
MILLISECONDS
)
.
build
();
private
static
final
ObjectMapper
objectMapper
=
new
ObjectMapper
();
// 本次对话ID
private
String
conversation_id
;
/**对话历史-近到远—分页
*
* @param userId 当前对话用户id
* @return
*/
@GetMapping
(
"/getChatHistory"
)
public
AjaxResult
getChatHistory
(
@RequestParam
(
defaultValue
=
"1"
)
Integer
pageNum
,
@RequestParam
(
defaultValue
=
"10"
)
Integer
pageSize
,
@NotNull
(
message
=
"Chat.getChatHistory.userId.isNull"
)
Long
userId
){
try
{
MallMemberUser
memberUser
=
mallMemberUserService
.
selectMallMemberUserById
(
userId
);
if
(
memberUser
==
null
)
{
return
AjaxResult
.
error
(
"用户信息异常!!!"
);
}
SaveChatRequestMessage
requestBody
=
new
SaveChatRequestMessage
();
List
<
SaveMessage
>
history
=
new
ArrayList
<>();
//有历史消息
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
String
json
=
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
();
System
.
out
.
println
(
"json:"
+
json
);
requestBody
=
JSONUtil
.
toBean
(
json
,
SaveChatRequestMessage
.
class
);
if
(
null
!=
requestBody
.
getSaveMessageList
()
&&
requestBody
.
getSaveMessageList
().
size
()>
0
){
history
=
requestBody
.
getSaveMessageList
();
Collections
.
reverse
(
history
);
}
}
List
<
SaveMessage
>
pageList
=
history
.
stream
().
sorted
().
skip
((
pageNum
-
1
)
*
pageSize
)
.
limit
(
pageSize
)
.
collect
(
Collectors
.
toList
());
PageInfo
<
SaveMessage
>
pageInfo
=
new
PageInfo
<
SaveMessage
>(
pageList
);
//获取PageInfo其他参数
pageInfo
.
setTotal
(
history
.
size
());
int
endRow
=
pageInfo
.
getEndRow
()
==
0
?
0
:
(
int
)((
pageNum
-
1
)
*
pageSize
+
pageInfo
.
getEndRow
()
+
1
);
pageInfo
.
setEndRow
(
endRow
);
boolean
hasNextPage
=
history
.
size
()
<=
pageSize
*
pageNum
?
false
:
true
;
pageInfo
.
setHasNextPage
(
hasNextPage
);
boolean
hasPreviousPage
=
pageNum
==
1
?
false
:
true
;
pageInfo
.
setHasPreviousPage
(
hasPreviousPage
);
pageInfo
.
setIsFirstPage
(!
hasPreviousPage
);
boolean
isLastPage
=
(
history
.
size
()
>
pageSize
*
(
pageNum
-
1
)
&&
history
.
size
()
<=
pageSize
*
pageNum
)
?
true
:
false
;
pageInfo
.
setIsLastPage
(
isLastPage
);
int
pages
=
history
.
size
()
%
pageSize
==
0
?
history
.
size
()
/
pageSize
:
(
history
.
size
()
/
pageSize
)
+
1
;
pageInfo
.
setNavigateLastPage
(
pages
);
int
[]
navigatePageNums
=
new
int
[
pages
];
for
(
int
i
=
1
;
i
<
pages
;
i
++)
{
navigatePageNums
[
i
-
1
]
=
i
;
}
pageInfo
.
setNavigatepageNums
(
navigatePageNums
);
int
nextPage
=
pageNum
<
pages
?
pageNum
+
1
:
0
;
pageInfo
.
setNextPage
(
nextPage
);
pageInfo
.
setPageNum
(
pageNum
);
pageInfo
.
setPageSize
(
pageSize
);
pageInfo
.
setPages
(
pages
);
pageInfo
.
setPrePage
(
pageNum
-
1
);
pageInfo
.
setSize
(
pageInfo
.
getList
().
size
());
int
starRow
=
history
.
size
()
<
pageSize
*
pageNum
?
1
+
pageSize
*
(
pageNum
-
1
)
:
0
;
pageInfo
.
setStartRow
(
starRow
);
return
AjaxResult
.
success
().
put
(
"data"
,
pageInfo
);
}
catch
(
Exception
e
){
return
AjaxResult
.
error
(
"获取对话历史异常!"
);
}
}
/**
* 调用知识库
*/
@PostMapping
(
"/chatNew"
)
@org
.
springframework
.
web
.
bind
.
annotation
.
ResponseBody
public
AjaxResult
newChat
(
@org
.
springframework
.
web
.
bind
.
annotation
.
RequestBody
Map
<
String
,
Object
>
params
){
//对用户问题的判断
if
(!
params
.
containsKey
(
"question"
)
||
StringUtils
.
isEmpty
(
params
.
get
(
"question"
).
toString
()))
{
return
AjaxResult
.
error
(
"缺少问题"
);
}
if
(!
params
.
containsKey
(
"userId"
)
||
StringUtils
.
isEmpty
(
params
.
get
(
"userId"
).
toString
()))
{
return
AjaxResult
.
error
(
"缺少用户id"
);
}
if
(!
params
.
containsKey
(
"hasVoice"
)
||
ObjectUtils
.
isEmpty
(
Integer
.
valueOf
(
params
.
get
(
"hasVoice"
).
toString
()))){
return
AjaxResult
.
error
(
"缺少语音状态"
);
}
long
userId
=
Long
.
parseLong
(
params
.
get
(
"userId"
).
toString
());
// 是否有语音0-没有,1-有
Integer
hasVoice
=
Integer
.
valueOf
(
params
.
get
(
"hasVoice"
).
toString
());
MallMemberUser
memberUser
=
mallMemberUserService
.
selectMallMemberUserById
(
userId
);
if
(
memberUser
==
null
)
{
return
AjaxResult
.
error
(
"用户信息异常!!!"
);
}
String
question
=
params
.
get
(
"question"
).
toString
();
// 创建存储用saveMessage
SaveMessage
saveMessage
=
new
SaveMessage
();
saveMessage
.
setRole
(
"user"
);
saveMessage
.
setContent
(
question
);
saveMessage
.
setHasVoice
(
hasVoice
);
if
(
hasVoice
==
1
){
saveMessage
.
setVoiceUrl
(
params
.
get
(
"voiceUrl"
).
toString
());
}
com
.
alibaba
.
fastjson
.
JSONObject
jsonObject
=
new
com
.
alibaba
.
fastjson
.
JSONObject
();
jsonObject
.
put
(
"query"
,
question
);
List
<
String
>
plugins
=
new
ArrayList
<>();
plugins
.
add
(
"uuid-zhishiku"
);
//plugins.add("uuid-weatherforecast");
//jsonObject.put("plugins", plugins);
//jsonObject.put("verbose", false);
// 创建存储类
SaveChatRequestMessage
saveChatRequestMessage
=
new
SaveChatRequestMessage
();
ArrayList
<
Message
>
historyList
=
new
ArrayList
<>();
// 查询是否有记录
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
())){
String
json
=
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
();
saveChatRequestMessage
=
JSONUtil
.
toBean
(
json
,
SaveChatRequestMessage
.
class
);
// 记录信息复制到请求参数中
List
<
SaveMessage
>
saveMessageList
=
saveChatRequestMessage
.
getSaveMessageList
();
if
(!
saveMessageList
.
isEmpty
()){
List
<
SaveMessage
>
shortList
=
new
ArrayList
<>();
int
size
=
saveMessageList
.
size
();
if
(
size
>=
2
){
shortList
.
add
(
saveMessageList
.
get
(
size
-
2
));
shortList
.
add
(
saveMessageList
.
get
(
size
-
1
));
for
(
SaveMessage
saveMessageHistory
:
shortList
)
{
Message
m
=
BeanUtil
.
copyProperties
(
saveMessageHistory
,
Message
.
class
);
historyList
.
add
(
m
);
}
}
}
}
//将新的问题添加到消息上下文
jsonObject
.
put
(
"history"
,
historyList
);
// 新信息添加保存
saveChatRequestMessage
.
addSaveMessage
(
saveMessage
);
try
{
BaiduAppResponse
qaq
=
qaq
(
question
,
memberUser
);
if
(
StringUtils
.
isNotBlank
(
qaq
.
getAnswer
()))
{
Message
assistant
=
new
Message
(
"assistant"
,
qaq
.
getAnswer
());
// // 存储信息
SaveMessage
saveAnswer
=
BeanUtil
.
copyProperties
(
assistant
,
SaveMessage
.
class
);
saveAnswer
.
setHasVoice
(
hasVoice
);
saveChatRequestMessage
.
addSaveMessage
(
saveAnswer
);
// redis 存储
if
(
redisTemplate
.
hasKey
(
"ChatWith"
+
memberUser
.
getId
()))
{
redisTemplate
.
getExpire
(
"ChatWith"
+
memberUser
.
getId
());
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
set
(
JSONUtil
.
toJsonStr
(
saveChatRequestMessage
),
30
,
TimeUnit
.
DAYS
);
}
else
{
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
set
(
JSONUtil
.
toJsonStr
(
saveChatRequestMessage
),
30
,
TimeUnit
.
DAYS
);
}
logger
.
info
(
"存入redis:"
+
redisTemplate
.
boundValueOps
(
"ChatWith"
+
memberUser
.
getId
()).
get
().
toString
());
List
<
SaveMessage
>
newChat
=
new
ArrayList
<>();
newChat
.
add
(
saveMessage
);
newChat
.
add
(
saveAnswer
);
return
AjaxResult
.
success
(
newChat
);
}
else
{
logger
.
error
(
"对话返回结果为空"
);
return
AjaxResult
.
error
(
"对话失败!"
);
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
return
AjaxResult
.
error
(
"对话失败!"
);
}
}
/**
* 提问且获取消息
*/
public
BaiduAppResponse
qaq
(
String
question
,
MallMemberUser
memberUser
)
throws
Exception
{
// 没有创建回话则创建。
if
(
conversation_id
==
null
||
""
.
equals
(
conversation_id
))
{
createConversation
(
memberUser
.
getId
());
}
// 提问
logger
.
info
(
"提问千帆App:"
+
question
);
MediaType
mediaType
=
MediaType
.
parse
(
"application/json"
);
// 消息体
String
json
=
objectMapper
.
writeValueAsString
(
new
BaiduAppRequest
(
appId
,
question
,
conversation_id
));
RequestBody
body
=
RequestBody
.
create
(
mediaType
,
json
);
// 请求
Request
request
=
new
Request
.
Builder
()
.
url
(
"https://qianfan.baidubce.com/v2/app/conversation/runs"
)
.
method
(
"POST"
,
body
)
.
addHeader
(
"Content-Type"
,
"application/json"
)
.
addHeader
(
"X-Appbuilder-Authorization"
,
"Bearer "
+
appKey
)
.
build
();
Response
response
=
HTTP_CLIENT
.
newCall
(
request
).
execute
();
// 获取消息
String
res
=
response
.
body
().
string
();
logger
.
info
(
"HTTP请求千帆App回复:"
+
res
);
BaiduAppResponse
baiduAppResponse
=
objectMapper
.
readValue
(
res
,
BaiduAppResponse
.
class
);
logger
.
info
(
"千帆App回复对象:"
+
JSONUtil
.
toJsonStr
(
baiduAppResponse
));
logger
.
info
(
"千帆App回复:"
+
baiduAppResponse
.
getAnswer
());
return
baiduAppResponse
;
}
/**
* 创建和百度千帆AppBuilder的对话
*/
private
void
createConversation
(
Long
userId
)
throws
IOException
{
Object
object
=
redisTemplate
.
boundValueOps
(
"conversation_id_"
+
userId
).
get
();
if
(
ObjectUtils
.
isNotEmpty
(
object
)){
conversation_id
=
object
.
toString
();
}
else
{
MediaType
mediaType
=
MediaType
.
parse
(
"application/json"
);
RequestBody
body
=
RequestBody
.
create
(
mediaType
,
"{\"appId\":\""
+
appId
+
"\"}"
);
Request
request
=
new
Request
.
Builder
()
.
url
(
"https://qianfan.baidubce.com/v2/app/conversation"
)
.
method
(
"POST"
,
body
)
.
addHeader
(
"Content-Type"
,
"application/json"
)
.
addHeader
(
"X-Appbuilder-Authorization"
,
"Bearer "
+
appKey
)
.
build
();
Response
response
=
HTTP_CLIENT
.
newCall
(
request
).
execute
();
String
res
=
response
.
body
().
string
();
logger
.
info
(
"百度千帆AppBuilder 创建对话响应:"
+
res
);
conversation_id
=
objectMapper
.
readTree
(
res
).
get
(
"conversation_id"
).
asText
();
}
redisTemplate
.
boundValueOps
(
"conversation_id_"
+
userId
).
set
(
conversation_id
,
30
,
TimeUnit
.
DAYS
);
}
}
ruoyi-admin/src/main/resources/application.yml
View file @
c54de2f1
...
@@ -142,3 +142,7 @@ qiNiu:
...
@@ -142,3 +142,7 @@ qiNiu:
secretKey
:
tWJjsaYPBBACuyw8CfaF9h2BRUziuje_zwrz4GyE
secretKey
:
tWJjsaYPBBACuyw8CfaF9h2BRUziuje_zwrz4GyE
bucketName
:
xiaoniu666666
bucketName
:
xiaoniu666666
baseUrl
:
https://image.xnszz.com/
baseUrl
:
https://image.xnszz.com/
baidu
:
appId
:
a7234eb3-fc6b-4e8a-baae-e7f2df86a1f3
appKey
:
bce-v3/ALTAK-SJq4Dnyo31QJlajmyMT40/d806d48c7b7f2ec9675c7cbf2171e6dd0676b274
\ No newline at end of file
ruoyi-system/pom.xml
View file @
c54de2f1
...
@@ -22,7 +22,13 @@
...
@@ -22,7 +22,13 @@
<groupId>
com.ruoyi
</groupId>
<groupId>
com.ruoyi
</groupId>
<artifactId>
ruoyi-common
</artifactId>
<artifactId>
ruoyi-common
</artifactId>
</dependency>
</dependency>
<!--lombok-->
<dependency>
<groupId>
org.projectlombok
</groupId>
<artifactId>
lombok
</artifactId>
<version>
1.18.4
</version>
<scope>
provided
</scope>
</dependency>
</dependencies>
</dependencies>
</project>
</project>
ruoyi-system/src/main/java/com/ruoyi/mall/domain/Chat/BaiduAppRequest.java
0 → 100644
View file @
c54de2f1
package
com
.
ruoyi
.
mall
.
domain
.
Chat
;
import
lombok.Data
;
/**
* 请求体 用于请求百度千帆
*/
public
class
BaiduAppRequest
{
private
String
app_id
;
private
String
query
;
private
boolean
stream
;
private
String
conversation_id
;
public
BaiduAppRequest
(
String
app_id
,
String
query
,
String
conversation_id
)
{
this
.
app_id
=
app_id
;
this
.
query
=
query
;
this
.
conversation_id
=
conversation_id
;
}
public
String
getApp_id
()
{
return
app_id
;
}
public
void
setApp_id
(
String
app_id
)
{
this
.
app_id
=
app_id
;
}
public
String
getQuery
()
{
return
query
;
}
public
void
setQuery
(
String
query
)
{
this
.
query
=
query
;
}
public
boolean
isStream
()
{
return
stream
;
}
public
void
setStream
(
boolean
stream
)
{
this
.
stream
=
stream
;
}
public
String
getConversation_id
()
{
return
conversation_id
;
}
public
void
setConversation_id
(
String
conversation_id
)
{
this
.
conversation_id
=
conversation_id
;
}
@Override
public
String
toString
()
{
return
"BaiduAppRequest{"
+
"app_id='"
+
app_id
+
'\''
+
", query='"
+
query
+
'\''
+
", stream="
+
stream
+
", conversation_id='"
+
conversation_id
+
'\''
+
'}'
;
}
}
ruoyi-system/src/main/java/com/ruoyi/mall/domain/Chat/BaiduAppResponse.java
0 → 100644
View file @
c54de2f1
package
com
.
ruoyi
.
mall
.
domain
.
Chat
;
import
lombok.Data
;
import
java.util.List
;
/**
* 响应体 接收消息用
*/
public
class
BaiduAppResponse
{
private
String
request_id
;
private
String
date
;
private
String
answer
;
private
String
conversation_id
;
private
String
message_id
;
private
Boolean
is_completion
;
private
List
<
Object
>
content
;
public
String
getRequest_id
()
{
return
request_id
;
}
public
void
setRequest_id
(
String
request_id
)
{
this
.
request_id
=
request_id
;
}
public
String
getDate
()
{
return
date
;
}
public
void
setDate
(
String
date
)
{
this
.
date
=
date
;
}
public
String
getAnswer
()
{
return
answer
;
}
public
void
setAnswer
(
String
answer
)
{
this
.
answer
=
answer
;
}
public
String
getConversation_id
()
{
return
conversation_id
;
}
public
void
setConversation_id
(
String
conversation_id
)
{
this
.
conversation_id
=
conversation_id
;
}
public
String
getMessage_id
()
{
return
message_id
;
}
public
void
setMessage_id
(
String
message_id
)
{
this
.
message_id
=
message_id
;
}
public
Boolean
getIs_completion
()
{
return
is_completion
;
}
public
void
setIs_completion
(
Boolean
is_completion
)
{
this
.
is_completion
=
is_completion
;
}
public
List
<
Object
>
getContent
()
{
return
content
;
}
public
void
setContent
(
List
<
Object
>
content
)
{
this
.
content
=
content
;
}
@Override
public
String
toString
()
{
return
"BaiduAppResponse{"
+
"request_id='"
+
request_id
+
'\''
+
", date='"
+
date
+
'\''
+
", answer='"
+
answer
+
'\''
+
", conversation_id='"
+
conversation_id
+
'\''
+
", message_id='"
+
message_id
+
'\''
+
", is_completion="
+
is_completion
+
", content="
+
content
+
'}'
;
}
}
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