Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
H
hphy
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
向怀芳
hphy
Commits
b3191c83
Commit
b3191c83
authored
Sep 05, 2023
by
gaozhaochen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update: 更新qa接口
parent
3f92b2eb
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
126 additions
and
128 deletions
+126
-128
EncodeResponseAdvice.java
...ava/cn/sh/stc/sict/theme/config/EncodeResponseAdvice.java
+1
-0
HpGpIntelligentQAController.java
...e/hpgp/controller/mobile/HpGpIntelligentQAController.java
+125
-128
No files found.
smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/config/EncodeResponseAdvice.java
View file @
b3191c83
...
@@ -27,6 +27,7 @@ public class EncodeResponseAdvice implements ResponseBodyAdvice {
...
@@ -27,6 +27,7 @@ public class EncodeResponseAdvice implements ResponseBodyAdvice {
@Override
@Override
public
boolean
supports
(
MethodParameter
methodParameter
,
Class
aClass
)
{
public
boolean
supports
(
MethodParameter
methodParameter
,
Class
aClass
)
{
// 方法上有SecurityParameter注解的进行加密 根据需求可以在判断SecurityParameter注解中的outEncode是否为true
// 方法上有SecurityParameter注解的进行加密 根据需求可以在判断SecurityParameter注解中的outEncode是否为true
// 这里返回true对所有接口返回结果加密,可能影响swagger显示
return
true
;
return
true
;
}
}
...
...
smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/controller/mobile/HpGpIntelligentQAController.java
View file @
b3191c83
package
cn
.
sh
.
stc
.
sict
.
theme
.
hpgp
.
controller
.
mobile
;
package
cn
.
sh
.
stc
.
sict
.
theme
.
hpgp
.
controller
.
mobile
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.collection.CollUtil
;
import
cn.hutool.core.date.DateUtil
;
import
cn.hutool.core.map.MapUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.StrUtil
;
import
cn.hutool.core.util.XmlUtil
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpRequest
;
import
cn.hutool.http.HttpResponse
;
import
cn.hutool.http.HttpResponse
;
import
cn.sh.stc.sict.cloud.common.core.util.R
;
import
cn.sh.stc.sict.cloud.common.core.util.R
;
...
@@ -12,6 +15,7 @@ import cn.sh.stc.sict.theme.hpgp.vo.IntelligentAnswerVO;
...
@@ -12,6 +15,7 @@ import cn.sh.stc.sict.theme.hpgp.vo.IntelligentAnswerVO;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSON
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONArray
;
import
com.alibaba.fastjson.JSONObject
;
import
com.alibaba.fastjson.JSONObject
;
import
com.baomidou.mybatisplus.core.toolkit.IdWorker
;
import
com.google.api.client.util.Lists
;
import
com.google.api.client.util.Lists
;
import
com.google.common.collect.Sets
;
import
com.google.common.collect.Sets
;
import
io.swagger.annotations.Api
;
import
io.swagger.annotations.Api
;
...
@@ -24,10 +28,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
...
@@ -24,10 +28,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.bind.annotation.RestController
;
import
org.springframework.web.reactive.function.client.WebClient
;
import
org.springframework.web.reactive.function.client.WebClient
;
import
java.util.ArrayList
;
import
java.util.*
;
import
java.util.List
;
import
java.util.Random
;
import
java.util.Set
;
import
java.util.concurrent.Executor
;
import
java.util.concurrent.Executor
;
import
java.util.concurrent.Executors
;
import
java.util.concurrent.Executors
;
...
@@ -47,12 +48,8 @@ public class HpGpIntelligentQAController {
...
@@ -47,12 +48,8 @@ public class HpGpIntelligentQAController {
@Value
(
"${hpgp-guide.qa-history-limit:3}"
)
@Value
(
"${hpgp-guide.qa-history-limit:3}"
)
private
Integer
qaHistoryLimit
;
private
Integer
qaHistoryLimit
;
private
WebClient
webClient
;
private
final
static
String
QA_RESULT_FLAG
=
"Helper: "
;
private
final
static
String
QA_RESULT_FLAG
=
"Helper: "
;
private
static
final
String
ERROR_MSG
=
"使用的人太多啦!等下再用吧!"
;
private
static
final
Random
RANDOM
=
new
Random
();
private
static
final
Executor
EXECUTOR
=
Executors
.
newFixedThreadPool
(
10
);
// 报告查询、医疗知识问答、医疗分诊、预约挂号
// 报告查询、医疗知识问答、医疗分诊、预约挂号
private
static
final
Set
<
String
>
QA_TYPE
=
Sets
.
newHashSet
(
"报告查询"
,
"预约挂号"
);
private
static
final
Set
<
String
>
QA_TYPE
=
Sets
.
newHashSet
(
"报告查询"
,
"预约挂号"
);
...
@@ -62,139 +59,139 @@ public class HpGpIntelligentQAController {
...
@@ -62,139 +59,139 @@ public class HpGpIntelligentQAController {
private
final
static
Set
<
String
>
DPQ_DEPARTMENT
=
Sets
.
newHashSet
(
"皮肤性病科"
,
"中医科"
,
"儿保科"
,
"全科医疗科"
);
private
final
static
Set
<
String
>
DPQ_DEPARTMENT
=
Sets
.
newHashSet
(
"皮肤性病科"
,
"中医科"
,
"儿保科"
,
"全科医疗科"
);
private
final
static
Set
<
String
>
XDM_DEPARTMENT
=
Sets
.
newHashSet
(
"全科"
,
"全科名医"
,
"中医"
,
"针伤科"
,
"齿科"
);
private
final
static
Set
<
String
>
XDM_DEPARTMENT
=
Sets
.
newHashSet
(
"全科"
,
"全科名医"
,
"中医"
,
"针伤科"
,
"齿科"
);
// @SysLog
// @ApiOperation("智能问答")
// @PostMapping
// public R<?> qa(String question) {
// CurrentUser current = SecurityUtils.getCurrentUser();
// String from = StrUtil.isNotBlank(current.getOpenId()) ? current.getOpenId() : current.getId().toString();
//
// String xml = "<xml>\n" +
// " <ToUserName><![CDATA[huangpurobot]]></ToUserName>\n" +
// " <FromUserName><![CDATA[" + from + "]]></FromUserName>\n" +
// " <CreateTime>" + DateUtil.now() + "</CreateTime>\n" +
// " <MsgType><![CDATA[text]]></MsgType>\n" +
// " <Content><![CDATA[" + question + "]]></Content>\n" +
// " <MsgId>" + IdWorker.getId() + "</MsgId>\n" +
// "</xml>";
// // 162 为黄浦高血压专病导医机器人
// // 51 黄浦高血压全科导诊机器人
// String body = HttpRequest.post("http://30.30.5.74:9988/qa/jqrsvr.ashx?Command=talk_51")
// .body(xml)
// .execute()
// .body();
// log.error("孙总接口请求 xml = {}", xml);
// log.error("孙总接口返回 body = {}", body);
// IntelligentAnswerVO answerVO = new IntelligentAnswerVO();
// Map<String, Object> result = XmlUtil.xmlToMap(body);
// if (result.containsKey(CONTENT)) {
// answerVO.setAnswer(MapUtil.getStr(result, CONTENT));
//
// // 打浦桥单独处理
// if (StrUtil.isNotBlank(current.getHospitalCode())
// && "42502942300".equals(current.getHospitalCode())) {
// if (StrUtil.isNotBlank(answerVO.getDeptName())
// && !DPQ_DEPARTMENT.contains(answerVO.getDeptName())) {
// String oldDeptName = answerVO.getDeptName();
// answerVO.setAnswer(answerVO.getAnswer().replace(oldDeptName, "全科医疗科"));
// answerVO.setDeptName("全科医疗科");
// }
// }
//
// // 小东门单独处理
// if (StrUtil.isNotBlank(current.getHospitalCode())
// && "42507025800".equals(current.getHospitalCode())) {
// if (StrUtil.isNotBlank(answerVO.getDeptName())
// && !XDM_DEPARTMENT.contains(answerVO.getDeptName())) {
// String oldDeptName = answerVO.getDeptName();
// answerVO.setAnswer(answerVO.getAnswer().replace(oldDeptName, "全科"));
// answerVO.setDeptName("全科");
// }
// }
//
// }
// return new R<>(answerVO);
// }
@SysLog
@SysLog
@ApiOperation
(
"智能问答"
)
@ApiOperation
(
"智能问答"
)
@PostMapping
@PostMapping
public
R
qaV2
(
String
question
)
{
public
R
<?>
qa
(
String
question
)
{
if
(
StrUtil
.
isNotBlank
(
question
)
&&
question
.
contains
(
"上周的血检报告出了"
))
{
IntelligentAnswerVO
answerVO
=
new
IntelligentAnswerVO
();
answerVO
.
setAnswer
(
"<a href=\"https://www.sh-sict.com/healthExam\">https://www.sh-sict.com/healthExam</a>"
);
return
new
R
(
answerVO
);
}
CurrentUser
current
=
SecurityUtils
.
getCurrentUser
();
CurrentUser
current
=
SecurityUtils
.
getCurrentUser
();
List
<
String
>
qaHistory
=
JSON
.
parseArray
(
current
.
getQaHistory
(),
String
.
class
);
String
from
=
StrUtil
.
isNotBlank
(
current
.
getOpenId
())
?
current
.
getOpenId
()
:
current
.
getId
().
toString
();
String
from
=
current
.
getId
().
toString
();
JSONObject
jsonObject
=
new
JSONObject
();
jsonObject
.
put
(
"username"
,
from
);
if
(
CollUtil
.
isEmpty
(
qaHistory
))
{
qaHistory
=
Lists
.
newArrayListWithCapacity
(
1
);
}
if
(
qaHistory
.
size
()
>
qaHistoryLimit
)
{
qaHistory
=
qaHistory
.
subList
(
0
,
qaHistoryLimit
-
1
);
}
List
<
String
>
currentQa
=
Lists
.
newArrayList
();
currentQa
.
add
(
question
);
currentQa
.
add
(
null
);
qaHistory
.
add
(
JSON
.
toJSONString
(
currentQa
));
List
<
List
<
String
>>
reqList
=
new
ArrayList
<>();
for
(
Object
item
:
qaHistory
)
{
if
(
item
instanceof
String
)
{
List
<
String
>
itemList
=
JSONArray
.
parseArray
((
String
)
item
,
String
.
class
);
reqList
.
add
(
itemList
);
}
}
jsonObject
.
put
(
"history"
,
reqList
);
String
req
=
JSON
.
toJSONString
(
jsonObject
);
String
xml
=
"<xml>\n"
+
" <ToUserName><![CDATA[huangpurobot]]></ToUserName>\n"
+
" <FromUserName><![CDATA["
+
from
+
"]]></FromUserName>\n"
+
" <CreateTime>"
+
DateUtil
.
now
()
+
"</CreateTime>\n"
+
" <MsgType><![CDATA[text]]></MsgType>\n"
+
" <Content><![CDATA["
+
question
+
"]]></Content>\n"
+
" <MsgId>"
+
IdWorker
.
getId
()
+
"</MsgId>\n"
+
"</xml>"
;
// 162 为黄浦高血压专病导医机器人
// 162 为黄浦高血压专病导医机器人
// 51 黄浦高血压全科导诊机器人
// 51 黄浦高血压全科导诊机器人
HttpResponse
response
=
HttpRequest
.
post
(
qaUrl
)
String
body
=
HttpRequest
.
post
(
"http://30.30.5.74:9988/qa/jqrsvr.ashx?Command=talk_51"
)
.
body
(
req
,
"application/json"
)
.
body
(
xml
)
.
execute
();
.
execute
()
String
body
=
response
.
body
();
.
body
();
log
.
error
(
"接口请求 req = {}"
,
req
);
log
.
error
(
"孙总接口请求 xml = {}"
,
xml
);
log
.
error
(
"接口返回 body = {}"
,
body
);
log
.
error
(
"孙总接口返回 body = {}"
,
body
);
if
(
response
.
getStatus
()
!=
200
||
StrUtil
.
isBlank
(
body
))
{
IntelligentAnswerVO
answerVO
=
new
IntelligentAnswerVO
();
return
new
R
();
Map
<
String
,
Object
>
result
=
XmlUtil
.
xmlToMap
(
body
);
}
if
(
result
.
containsKey
(
CONTENT
))
{
answerVO
.
setAnswer
(
MapUtil
.
getStr
(
result
,
CONTENT
));
JSONObject
bodyJson
=
JSON
.
parseObject
(
body
);
// 打浦桥单独处理
String
chat
=
bodyJson
.
getString
(
"Chat"
);
if
(
StrUtil
.
isNotBlank
(
current
.
getHospitalCode
())
JSONArray
departmentArray
=
bodyJson
.
getJSONArray
(
"Department"
);
&&
"42502942300"
.
equals
(
current
.
getHospitalCode
()))
{
String
medicalType
=
bodyJson
.
getString
(
"Medical_type"
);
if
(
StrUtil
.
isNotBlank
(
answerVO
.
getDeptName
())
if
(
StrUtil
.
isNotBlank
(
medicalType
)
&&
QA_TYPE
.
contains
(
medicalType
)){
&&
!
DPQ_DEPARTMENT
.
contains
(
answerVO
.
getDeptName
()))
{
IntelligentAnswerVO
answerVO
=
new
IntelligentAnswerVO
();
String
oldDeptName
=
answerVO
.
getDeptName
();
answerVO
.
setAnswer
(
"<a href=\"https://www.sh-sict.com/healthExam\">https://www.sh-sict.com/healthExam</a>"
);
answerVO
.
setAnswer
(
answerVO
.
getAnswer
().
replace
(
oldDeptName
,
"全科医疗科"
));
return
new
R
(
answerVO
);
answerVO
.
setDeptName
(
"全科医疗科"
);
}
}
if
(
StrUtil
.
isBlank
(
chat
))
{
}
return
new
R
();
}
chat
=
chat
.
replaceAll
(
QA_RESULT_FLAG
,
""
);
// 小东门单独处理
if
(
chat
.
startsWith
(
"\""
)
&&
chat
.
endsWith
(
"\""
))
{
if
(
StrUtil
.
isNotBlank
(
current
.
getHospitalCode
())
chat
=
chat
.
substring
(
1
,
chat
.
length
()
-
1
);
&&
"42507025800"
.
equals
(
current
.
getHospitalCode
()))
{
}
if
(
StrUtil
.
isNotBlank
(
answerVO
.
getDeptName
())
currentQa
.
set
(
1
,
chat
);
&&
!
XDM_DEPARTMENT
.
contains
(
answerVO
.
getDeptName
()))
{
current
.
setQaHistory
(
JSON
.
toJSONString
(
qaHistory
));
String
oldDeptName
=
answerVO
.
getDeptName
();
SecurityUtils
.
updateCurrent
(
current
);
answerVO
.
setAnswer
(
answerVO
.
getAnswer
().
replace
(
oldDeptName
,
"全科"
));
answerVO
.
setDeptName
(
"全科"
);
}
}
IntelligentAnswerVO
answerVO
=
new
IntelligentAnswerVO
();
answerVO
.
setAnswer
(
chat
);
if
(
CollUtil
.
isNotEmpty
(
departmentArray
))
{
answerVO
.
setDeptName
(
departmentArray
.
getString
(
0
));
}
}
return
new
R
(
answerVO
);
return
new
R
<>
(
answerVO
);
}
}
// @SysLog
// @ApiOperation("智能问答")
// @PostMapping
// public R qaV2(String question) {
// if (StrUtil.isNotBlank(question) && question.contains("上周的血检报告出了")) {
// IntelligentAnswerVO answerVO = new IntelligentAnswerVO();
// answerVO.setAnswer("<a href=\"https://www.sh-sict.com/healthExam\">https://www.sh-sict.com/healthExam</a>");
// return new R(answerVO);
// }
// CurrentUser current = SecurityUtils.getCurrentUser();
// List<String> qaHistory = JSON.parseArray(current.getQaHistory(), String.class);
// String from = current.getId().toString();
//
// JSONObject jsonObject = new JSONObject();
// jsonObject.put("username", from);
// if (CollUtil.isEmpty(qaHistory)) {
// qaHistory = Lists.newArrayListWithCapacity(1);
// }
//
// if (qaHistory.size() > qaHistoryLimit) {
// qaHistory = qaHistory.subList(0, qaHistoryLimit - 1);
// }
//
// List<String> currentQa = Lists.newArrayList();
// currentQa.add(question);
// currentQa.add(null);
// qaHistory.add(JSON.toJSONString(currentQa));
//
// List<List<String>> reqList = new ArrayList<>();
// for (Object item : qaHistory) {
// if (item instanceof String) {
// List<String> itemList = JSONArray.parseArray((String) item, String.class);
// reqList.add(itemList);
// }
// }
// jsonObject.put("history", reqList);
// String req = JSON.toJSONString(jsonObject);
//
// // 162 为黄浦高血压专病导医机器人
// // 51 黄浦高血压全科导诊机器人
// HttpResponse response = HttpRequest.post(qaUrl)
// .body(req, "application/json")
// .execute();
// String body = response.body();
// log.error("接口请求 req = {}", req);
// log.error("接口返回 body = {}", body);
// if (response.getStatus() != 200 || StrUtil.isBlank(body)) {
// return new R();
// }
//
// JSONObject bodyJson = JSON.parseObject(body);
// String chat = bodyJson.getString("Chat");
// JSONArray departmentArray = bodyJson.getJSONArray("Department");
// String medicalType = bodyJson.getString("Medical_type");
// if(StrUtil.isNotBlank(medicalType) && QA_TYPE.contains(medicalType)){
// IntelligentAnswerVO answerVO = new IntelligentAnswerVO();
// answerVO.setAnswer("<a href=\"https://www.sh-sict.com/healthExam\">https://www.sh-sict.com/healthExam</a>");
// return new R(answerVO);
// }
// if (StrUtil.isBlank(chat)) {
// return new R();
// }
//
// chat = chat.replaceAll(QA_RESULT_FLAG, "");
// if (chat.startsWith("\"") && chat.endsWith("\"")) {
// chat = chat.substring(1, chat.length() - 1);
// }
// currentQa.set(1, chat);
// current.setQaHistory(JSON.toJSONString(qaHistory));
// SecurityUtils.updateCurrent(current);
//
// IntelligentAnswerVO answerVO = new IntelligentAnswerVO();
// answerVO.setAnswer(chat);
// if (CollUtil.isNotEmpty(departmentArray)) {
// answerVO.setDeptName(departmentArray.getString(0));
// }
// return new R(answerVO);
// }
/**
/**
* post方式,可以解决特殊符号,过长的文本等问题
* post方式,可以解决特殊符号,过长的文本等问题
*
*
...
...
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