From a145aaef7186b712dae4095fee8bbbd4e71470de Mon Sep 17 00:00:00 2001 From: gaozhaochen Date: Mon, 7 Aug 2023 18:01:00 +0800 Subject: [PATCH] =?UTF-8?q?optimize:=20=E6=9C=BA=E5=99=A8=E4=BA=BA?= =?UTF-8?q?=E9=97=AE=E7=AD=94=E8=BF=94=E5=9B=9E=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../stc/sict/cloud/upms/dto/CurrentUser.java | 2 +- .../mobile/HpGpIntelligentQAController.java | 200 +++++++++--------- 2 files changed, 103 insertions(+), 99 deletions(-) diff --git a/smart-health-modules/cloud-upms/cloud-upms-api/src/main/java/cn/sh/stc/sict/cloud/upms/dto/CurrentUser.java b/smart-health-modules/cloud-upms/cloud-upms-api/src/main/java/cn/sh/stc/sict/cloud/upms/dto/CurrentUser.java index 58fbf8b..af15d99 100644 --- a/smart-health-modules/cloud-upms/cloud-upms-api/src/main/java/cn/sh/stc/sict/cloud/upms/dto/CurrentUser.java +++ b/smart-health-modules/cloud-upms/cloud-upms-api/src/main/java/cn/sh/stc/sict/cloud/upms/dto/CurrentUser.java @@ -41,6 +41,6 @@ public class CurrentUser implements Serializable { /** * 机器人问答 */ - private List> qaHistory; + private String qaHistory; } diff --git a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/controller/mobile/HpGpIntelligentQAController.java b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/controller/mobile/HpGpIntelligentQAController.java index 8f9b0ab..7756c39 100644 --- a/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/controller/mobile/HpGpIntelligentQAController.java +++ b/smart-health-modules/theme-schema/src/main/java/cn/sh/stc/sict/theme/hpgp/controller/mobile/HpGpIntelligentQAController.java @@ -1,10 +1,7 @@ package cn.sh.stc.sict.theme.hpgp.controller.mobile; 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.XmlUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import cn.sh.stc.sict.cloud.common.core.util.R; @@ -13,8 +10,8 @@ import cn.sh.stc.sict.cloud.common.security.util.SecurityUtils; import cn.sh.stc.sict.cloud.upms.dto.CurrentUser; import cn.sh.stc.sict.theme.hpgp.vo.IntelligentAnswerVO; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.google.api.client.util.Lists; import com.google.common.collect.Sets; import io.swagger.annotations.Api; @@ -25,8 +22,8 @@ import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Set; /** @@ -51,108 +48,115 @@ public class HpGpIntelligentQAController { * 打浦桥科室 */ private final static Set DPQ_DEPARTMENT = Sets.newHashSet("皮肤性病科", "中医科", "儿保科", "全科医疗科"); - private final static Set 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 = "\n" + - " \n" + - " \n" + - " " + DateUtil.now() + "\n" + - " \n" + - " \n" + - " " + IdWorker.getId() + "\n" + - ""; - // 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 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); - } + private final static Set XDM_DEPARTMENT = Sets.newHashSet("全科", "全科名医", "中医", "针伤科", "齿科"); // @SysLog // @ApiOperation("智能问答") // @PostMapping -// public R qaV2(String question) { +// public R qa(String question) { // CurrentUser current = SecurityUtils.getCurrentUser(); -// List> qaHistory = current.getQaHistory(); -// 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 currentQa = Lists.newArrayList(); -// currentQa.add(question); -// currentQa.add(null); -// qaHistory.add(currentQa); -// -// jsonObject.put("history", qaHistory); -// String req = JSON.toJSONString(jsonObject); +// String from = StrUtil.isNotBlank(current.getOpenId()) ? current.getOpenId() : current.getId().toString(); // +// String xml = "\n" + +// " \n" + +// " \n" + +// " " + DateUtil.now() + "\n" + +// " \n" + +// " \n" + +// " " + IdWorker.getId() + "\n" + +// ""; // // 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(); -// } +// 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 result = XmlUtil.xmlToMap(body); +// if (result.containsKey(CONTENT)) { +// answerVO.setAnswer(MapUtil.getStr(result, CONTENT)); // -// body = body.replaceAll(QA_RESULT_FLAG, ""); -// body = body.replaceAll("<[.[^>]]*>", ""); -// currentQa.set(1, body); -// current.setQaHistory(qaHistory); -// SecurityUtils.updateCurrent(current); +// // 打浦桥单独处理 +// 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("全科医疗科"); +// } +// } // -// IntelligentAnswerVO answerVO = new IntelligentAnswerVO(); -// answerVO.setAnswer(body); -// return new R(answerVO); +// // 小东门单独处理 +// 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 + @ApiOperation("智能问答") + @PostMapping + public R qaV2(String question) { + CurrentUser current = SecurityUtils.getCurrentUser(); + List 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 currentQa = Lists.newArrayList(); + currentQa.add(question); + currentQa.add(null); + qaHistory.add(JSON.toJSONString(currentQa)); + + List> reqList = new ArrayList<>(); + for (Object item : qaHistory) { + if (item instanceof String) { + List 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(); + } + + body = body.replaceAll(QA_RESULT_FLAG, ""); + body = body.substring(1, body.lastIndexOf("\"")); + currentQa.set(1, body); + current.setQaHistory(JSON.toJSONString(qaHistory)); + SecurityUtils.updateCurrent(current); + + IntelligentAnswerVO answerVO = new IntelligentAnswerVO(); + answerVO.setAnswer(body); + return new R(answerVO); + } } -- 2.22.0