From c8794b60d101cac5e0e45f0ceddc80d82c70c1cf Mon Sep 17 00:00:00 2001 From: liu Date: Mon, 23 Oct 2023 18:04:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../supervision/config/ResponseConfig.java | 2 +- virtual-patient-model/pom.xml | 5 ++++ .../supervision/service/PatientService.java | 2 ++ .../service/impl/PatientServiceImpl.java | 7 +++++ .../VirtualPatientApplication.java | 2 +- .../supervision/controller/AskController.java | 27 ++++++++++++++----- .../controller/PatientController.java | 25 +++++++++++++++++ .../com/supervision/service/AskService.java | 11 ++++++++ .../service/impl/AskServiceImpl.java | 22 +++++++++++++++ .../websocket/cache/WebSocketUserCache.java | 1 + .../websocket/dto/SocketMessageDTO.java | 13 +++++++++ .../handler/AskWebSocketHandler.java | 13 ++++++--- .../src/main/resources/application.yml | 15 ++++++++++- 13 files changed, 132 insertions(+), 13 deletions(-) create mode 100644 virtual-patient-web/src/main/java/com/supervision/controller/PatientController.java create mode 100644 virtual-patient-web/src/main/java/com/supervision/service/AskService.java create mode 100644 virtual-patient-web/src/main/java/com/supervision/service/impl/AskServiceImpl.java create mode 100644 virtual-patient-web/src/main/java/com/supervision/websocket/dto/SocketMessageDTO.java diff --git a/virtual-patient-common/src/main/java/com/supervision/config/ResponseConfig.java b/virtual-patient-common/src/main/java/com/supervision/config/ResponseConfig.java index c3207935..52af4d36 100644 --- a/virtual-patient-common/src/main/java/com/supervision/config/ResponseConfig.java +++ b/virtual-patient-common/src/main/java/com/supervision/config/ResponseConfig.java @@ -46,7 +46,7 @@ public class ResponseConfig implements ResponseBodyAdvice { if (Objects.isNull(o)) { - return GlobalResult.ok(null, "success"); + return JSONUtil.toJsonStr(GlobalResult.ok(null, "success")); } if (o instanceof GlobalResult) { return o; diff --git a/virtual-patient-model/pom.xml b/virtual-patient-model/pom.xml index 186ae7b6..75da31ef 100644 --- a/virtual-patient-model/pom.xml +++ b/virtual-patient-model/pom.xml @@ -17,6 +17,11 @@ + + com.supervision + virtual-patient-common + 1.0-SNAPSHOT + diff --git a/virtual-patient-model/src/main/java/com/supervision/service/PatientService.java b/virtual-patient-model/src/main/java/com/supervision/service/PatientService.java index 4d787b25..ca1a3104 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/PatientService.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/PatientService.java @@ -10,4 +10,6 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface PatientService extends IService { + Patient queryPatientById(String id); + } diff --git a/virtual-patient-model/src/main/java/com/supervision/service/impl/PatientServiceImpl.java b/virtual-patient-model/src/main/java/com/supervision/service/impl/PatientServiceImpl.java index 37b785de..f3fd416a 100644 --- a/virtual-patient-model/src/main/java/com/supervision/service/impl/PatientServiceImpl.java +++ b/virtual-patient-model/src/main/java/com/supervision/service/impl/PatientServiceImpl.java @@ -1,11 +1,14 @@ package com.supervision.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.supervision.exception.BusinessException; import com.supervision.model.Patient; import com.supervision.service.PatientService; import com.supervision.mapper.PatientMapper; import org.springframework.stereotype.Service; +import java.util.Optional; + /** * @author flevance * @description 针对表【vp_patient(病人表)】的数据库操作Service实现 @@ -15,6 +18,10 @@ import org.springframework.stereotype.Service; public class PatientServiceImpl extends ServiceImpl implements PatientService{ + @Override + public Patient queryPatientById(String id) { + return this.lambdaQuery().eq(Patient::getId, id).oneOpt().orElseThrow(() -> new BusinessException("未找到用户")); + } } diff --git a/virtual-patient-web/src/main/java/com/supervision/VirtualPatientApplication.java b/virtual-patient-web/src/main/java/com/supervision/VirtualPatientApplication.java index 21c810cd..6c0297a8 100644 --- a/virtual-patient-web/src/main/java/com/supervision/VirtualPatientApplication.java +++ b/virtual-patient-web/src/main/java/com/supervision/VirtualPatientApplication.java @@ -8,7 +8,7 @@ import org.springframework.web.socket.config.annotation.EnableWebSocket; @EnableWebSocket @SpringBootApplication -@MapperScan(basePackages = {"com.supervision.**"}) +@MapperScan(basePackages = {"com.supervision.**.mapper"}) public class VirtualPatientApplication { public static void main(String[] args) { diff --git a/virtual-patient-web/src/main/java/com/supervision/controller/AskController.java b/virtual-patient-web/src/main/java/com/supervision/controller/AskController.java index 1d2b896e..64cdd426 100644 --- a/virtual-patient-web/src/main/java/com/supervision/controller/AskController.java +++ b/virtual-patient-web/src/main/java/com/supervision/controller/AskController.java @@ -1,11 +1,12 @@ package com.supervision.controller; +import com.supervision.service.AskService; import com.supervision.websocket.cache.WebSocketUserCache; import io.swagger.annotations.Api; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.socket.TextMessage; import org.springframework.web.socket.WebSocketSession; @@ -17,18 +18,30 @@ import java.io.IOException; @RequestMapping("/ask/") public class AskController { + @Autowired + private AskService askService; + + + @ApiOperation("发送消息到页面") @GetMapping("/sendMessage") public void sendMessage(String message, String sessionId) throws IOException { WebSocketSession session = WebSocketUserCache.getSession(sessionId); session.sendMessage(new TextMessage(message)); } + @ApiOperation("接收页面的语音消息") @PostMapping("/receiveVoiceFile") - public void receiveVoiceFile(MultipartFile file){ - long size = file.getSize(); - System.out.println(size); + public String receiveVoiceFile(@RequestParam("file") MultipartFile file) throws IOException { + return askService.receiveVoiceFile(file); + } + + @ApiOperation("查询对话历史") + public void queryAskHistory(String processId){ } + + + } diff --git a/virtual-patient-web/src/main/java/com/supervision/controller/PatientController.java b/virtual-patient-web/src/main/java/com/supervision/controller/PatientController.java new file mode 100644 index 00000000..ea22ab4b --- /dev/null +++ b/virtual-patient-web/src/main/java/com/supervision/controller/PatientController.java @@ -0,0 +1,25 @@ +package com.supervision.controller; + +import com.supervision.model.Patient; +import com.supervision.service.PatientService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Api(tags = "病人") +@RestController +@RequestMapping("/patient") +@RequiredArgsConstructor +public class PatientController { + + private final PatientService patientService; + + @ApiOperation("根据病人ID获取病人") + @GetMapping("queryPatientInfo") + public Patient queryPatientInfo(String id) { + return patientService.queryPatientById(id); + } +} diff --git a/virtual-patient-web/src/main/java/com/supervision/service/AskService.java b/virtual-patient-web/src/main/java/com/supervision/service/AskService.java new file mode 100644 index 00000000..cef2b0e4 --- /dev/null +++ b/virtual-patient-web/src/main/java/com/supervision/service/AskService.java @@ -0,0 +1,11 @@ +package com.supervision.service; + +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +public interface AskService { + + String receiveVoiceFile(MultipartFile file) throws IOException; +} diff --git a/virtual-patient-web/src/main/java/com/supervision/service/impl/AskServiceImpl.java b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskServiceImpl.java new file mode 100644 index 00000000..24728c0a --- /dev/null +++ b/virtual-patient-web/src/main/java/com/supervision/service/impl/AskServiceImpl.java @@ -0,0 +1,22 @@ +package com.supervision.service.impl; + +import cn.hutool.core.codec.Base64; +import com.supervision.service.AskService; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; + +@Service +public class AskServiceImpl implements AskService { + + @Override + public String receiveVoiceFile(MultipartFile file) throws IOException { + // 首先编码为base64编码 + String encode = Base64.encode(file.getBytes()); + // TODO 这里调用Python的接口,将文字转换为语音 + return encode; + + + } +} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/cache/WebSocketUserCache.java b/virtual-patient-web/src/main/java/com/supervision/websocket/cache/WebSocketUserCache.java index 2dec435c..9d796202 100644 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/cache/WebSocketUserCache.java +++ b/virtual-patient-web/src/main/java/com/supervision/websocket/cache/WebSocketUserCache.java @@ -20,6 +20,7 @@ public class WebSocketUserCache { public static void login(String id, WebSocketSession socketSession) { map.put(id, socketSession); log.info("sessionId:{}注册成功", id); + } public static void logout(String id) { diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/dto/SocketMessageDTO.java b/virtual-patient-web/src/main/java/com/supervision/websocket/dto/SocketMessageDTO.java new file mode 100644 index 00000000..c469007f --- /dev/null +++ b/virtual-patient-web/src/main/java/com/supervision/websocket/dto/SocketMessageDTO.java @@ -0,0 +1,13 @@ +package com.supervision.websocket.dto; + +import lombok.Data; + +@Data +public class SocketMessageDTO { + + private String socketId; + + private String userId; + + private String data; +} diff --git a/virtual-patient-web/src/main/java/com/supervision/websocket/handler/AskWebSocketHandler.java b/virtual-patient-web/src/main/java/com/supervision/websocket/handler/AskWebSocketHandler.java index 24c774c5..34c8ddeb 100644 --- a/virtual-patient-web/src/main/java/com/supervision/websocket/handler/AskWebSocketHandler.java +++ b/virtual-patient-web/src/main/java/com/supervision/websocket/handler/AskWebSocketHandler.java @@ -1,6 +1,8 @@ package com.supervision.websocket.handler; +import cn.hutool.json.JSONUtil; import com.supervision.websocket.cache.WebSocketUserCache; +import com.supervision.websocket.dto.SocketMessageDTO; import lombok.extern.slf4j.Slf4j; import org.springframework.web.socket.CloseStatus; import org.springframework.web.socket.TextMessage; @@ -14,18 +16,23 @@ public class AskWebSocketHandler extends TextWebSocketHandler { public void afterConnectionEstablished(WebSocketSession session) throws Exception { // 获取本次 String id = session.getId(); + // 缓存sessionId WebSocketUserCache.login(id, session); - // 连接建立时的处理逻辑 + // 返回sessionId到前端 + SocketMessageDTO socketMessageDTO = new SocketMessageDTO(); + socketMessageDTO.setSocketId(id); + socketMessageDTO.setData("链接成功"); + session.sendMessage(new TextMessage(JSONUtil.toJsonStr(socketMessageDTO))); } @Override - protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { + protected void handleTextMessage(WebSocketSession session, TextMessage message) { // 处理接收到的文本消息 log.info("收到消息:{}", message.toString()); } @Override - public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception { + public void afterConnectionClosed(WebSocketSession session, CloseStatus status) { // 连接关闭时的处理逻辑 String id = session.getId(); WebSocketUserCache.logout(id); diff --git a/virtual-patient-web/src/main/resources/application.yml b/virtual-patient-web/src/main/resources/application.yml index fa6d2cf9..e1cb6466 100644 --- a/virtual-patient-web/src/main/resources/application.yml +++ b/virtual-patient-web/src/main/resources/application.yml @@ -3,13 +3,26 @@ server: port: 8899 servlet: context-path: / + undertow: + # HTTP post内容的最大大小。当值为-1时,默认值为大小是无限的 + max-http-post-size: -1 + # 以下的配置会影响buffer,这些buffer会用于服务器连接的IO操作,有点类似netty的池化内存管理 + # 每块buffer的空间大小,越小的空间被利用越充分 + buffer-size: 512 + # 是否分配的直接内存 + direct-buffers: true + spring: profiles: active: dev application: name: virtual-patient - ##数据源配置 + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + ##数据源配置 datasource: type: com.alibaba.druid.pool.DruidDataSource druid: