diff --git a/doctor-modules/doctor-health/pom.xml b/doctor-modules/doctor-health/pom.xml index af2698a..feaf1ca 100644 --- a/doctor-modules/doctor-health/pom.xml +++ b/doctor-modules/doctor-health/pom.xml @@ -19,6 +19,17 @@ + + + org.springframework.boot + spring-boot-starter-websocket + + + com.alibaba + fastjson + 1.2.76 + + diff --git a/doctor-modules/doctor-health/src/main/java/doctor/DoctorHealthApplication.java b/doctor-modules/doctor-health/src/main/java/doctor/DoctorHealthApplication.java index af201ab..a82d2cc 100644 --- a/doctor-modules/doctor-health/src/main/java/doctor/DoctorHealthApplication.java +++ b/doctor-modules/doctor-health/src/main/java/doctor/DoctorHealthApplication.java @@ -3,8 +3,10 @@ package doctor; import doctor.common.security.annotation.EnableCustomConfig; import doctor.common.security.annotation.EnableRyFeignClients; import doctor.common.swagger.annotation.EnableCustomSwagger2; +import doctor.text.WebSocketServer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; @EnableCustomConfig @EnableCustomSwagger2 @@ -13,7 +15,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; public class DoctorHealthApplication { public static void main(String[] args) { - SpringApplication.run(DoctorHealthApplication.class, args); + ConfigurableApplicationContext applicationContext = SpringApplication.run(DoctorHealthApplication.class, args); + WebSocketServer.setUserService(applicationContext); System.out.println("(♥◠‿◠)ノ゙ 健康服务启动成功 ლ(´ڡ`ლ)゙ \n" + " .-------. ____ __ \n" + " | _ _ \\ \\ \\ / / \n" + diff --git a/doctor-modules/doctor-health/src/main/java/doctor/config/WebSocketConfig.java b/doctor-modules/doctor-health/src/main/java/doctor/config/WebSocketConfig.java new file mode 100644 index 0000000..5ca92ec --- /dev/null +++ b/doctor-modules/doctor-health/src/main/java/doctor/config/WebSocketConfig.java @@ -0,0 +1,16 @@ +package doctor.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.server.standard.ServerEndpointExporter; + +// 配置开启WebSocket +@Configuration +public class WebSocketConfig { + + @Bean + public ServerEndpointExporter serverEndpointExporter() { + return new ServerEndpointExporter(); + } + +} diff --git a/doctor-modules/doctor-health/src/main/java/doctor/controller/HealthInquiryVerifyController.java b/doctor-modules/doctor-health/src/main/java/doctor/controller/HealthInquiryVerifyController.java index d8cd699..9362f08 100644 --- a/doctor-modules/doctor-health/src/main/java/doctor/controller/HealthInquiryVerifyController.java +++ b/doctor-modules/doctor-health/src/main/java/doctor/controller/HealthInquiryVerifyController.java @@ -17,7 +17,9 @@ public class HealthInquiryVerifyController { private InquiryVerifyService inquiryVerifyService; @GetMapping("/findInquiryRecordList") - public HealthR> findInquiryRecordList() { + public HealthR> findInquiryRecordList(@RequestParam Integer page, + @RequestParam Integer count, + @RequestParam Integer recordId) { List inquiryRecordList = inquiryVerifyService.findInquiryRecordList(); return HealthR.ok(inquiryRecordList); } @@ -25,8 +27,8 @@ public class HealthInquiryVerifyController { @GetMapping("/findHistoryInquiryRecord") public HealthR> findHistoryInquiryRecord(@RequestParam Integer page, @RequestParam Integer count, - @RequestHeader Integer doctorId) { - List inquiryRecordList = inquiryVerifyService.findHistoryInquiryRecord(page,count,doctorId); + @RequestHeader Integer userId) { + List inquiryRecordList = inquiryVerifyService.findHistoryInquiryRecord(page,count,userId); return HealthR.ok(inquiryRecordList); } diff --git a/doctor-modules/doctor-health/src/main/java/doctor/controller/HealthJobTitleController.java b/doctor-modules/doctor-health/src/main/java/doctor/controller/HealthJobTitleController.java index 167fe32..9a48ec7 100644 --- a/doctor-modules/doctor-health/src/main/java/doctor/controller/HealthJobTitleController.java +++ b/doctor-modules/doctor-health/src/main/java/doctor/controller/HealthJobTitleController.java @@ -39,12 +39,6 @@ public class HealthJobTitleController { HealthR healthR= healthJobTitleService.applyJoin(applyJoinDto); return HealthR.ok(healthR); } - - @GetMapping("/findDoctorById") - public HealthR findDoctorById(@RequestHeader Integer doctorId, - @RequestHeader String sessionId) { - return HealthR.ok(healthJobTitleService.findDoctorById(doctorId)); - } @GetMapping("/findSystemImagePic") public HealthR> findSystemImagePic() { return HealthR.ok(healthJobTitleService.findSystemImagePic()); diff --git a/doctor-modules/doctor-health/src/main/java/doctor/controller/SickCircleController.java b/doctor-modules/doctor-health/src/main/java/doctor/controller/SickCircleController.java index e2c7c3a..b1008de 100644 --- a/doctor-modules/doctor-health/src/main/java/doctor/controller/SickCircleController.java +++ b/doctor-modules/doctor-health/src/main/java/doctor/controller/SickCircleController.java @@ -14,21 +14,11 @@ import org.springframework.web.multipart.MultipartFile; * @Description 新增病友圈 */ @RestController -@RequestMapping("/user/sickCircle/verify/v1/") +@RequestMapping("/sickCircle/verify/v1/") public class SickCircleController { @Autowired SickCircleServer sickCircleServer; - - /** - * 新增病友圈 - */ - @PostMapping("/publishSickCircle") - public HealthR publishSickCircle(@RequestBody SickCircleEntity sickCircleEntity) { - - return sickCircleServer.publishSickCircle(sickCircleEntity); - } - /** * 上传图片 * diff --git a/doctor-modules/doctor-health/src/main/java/doctor/controller/SickCircleV1Controller.java b/doctor-modules/doctor-health/src/main/java/doctor/controller/SickCircleV1Controller.java new file mode 100644 index 0000000..f03fe15 --- /dev/null +++ b/doctor-modules/doctor-health/src/main/java/doctor/controller/SickCircleV1Controller.java @@ -0,0 +1,26 @@ +package doctor.controller; + +import doctor.common.core.domain.HealthR; +import doctor.domain.entity.SickCircleEntity; +import doctor.service.PatientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/sickCircle/v1") +public class SickCircleV1Controller { + @Autowired + private PatientService patientService; + @GetMapping("/findSickCircleList") + public HealthR> findSickCircleList(@RequestParam(value = "departmentId",required = false) Integer departmentId, + @RequestParam(value = "page") Integer page, + @RequestParam(value = "count") Integer count) { + HealthR> listHealthR = patientService.sickCircleList(departmentId, page, count); + return listHealthR; + } +} diff --git a/doctor-modules/doctor-health/src/main/java/doctor/domain/entity/InquiryDetailsRecord.java b/doctor-modules/doctor-health/src/main/java/doctor/domain/entity/InquiryDetailsRecord.java new file mode 100644 index 0000000..bb9f3f5 --- /dev/null +++ b/doctor-modules/doctor-health/src/main/java/doctor/domain/entity/InquiryDetailsRecord.java @@ -0,0 +1,19 @@ +package doctor.domain.entity; + +import lombok.Data; + +import java.util.Date; + +@Data +public class InquiryDetailsRecord { + private Integer id; + private Integer inquiryId; + private Integer userId; + private Integer doctorId; + private String askContent; + private String askImage; + private String voiceChat; + private Integer direction; + private Date askTime; + private Date createTime; +} diff --git a/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/DoctorVo.java b/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/DoctorVo.java index 2534241..a9d02df 100644 --- a/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/DoctorVo.java +++ b/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/DoctorVo.java @@ -16,15 +16,13 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor public class DoctorVo { - private Integer doctorId; - private String doctorName; + private Integer id; + private Integer departmentId; + private String departmentName; + private String goodField; private String imagePic; - private String jobTitle; private String inauguralHospital; - private double praise; - private Integer serverNum; - private Integer servicePrice; - private Integer praiseNum; - private Integer badNum; - private Integer commentNum; + private String jobTitle; + private String name; + private String personalProfile; } diff --git a/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/HistoryInquiryRecordVo.java b/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/HistoryInquiryRecordVo.java index 49b4d5a..a396ec6 100644 --- a/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/HistoryInquiryRecordVo.java +++ b/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/HistoryInquiryRecordVo.java @@ -2,6 +2,8 @@ package doctor.domain.vo; import lombok.Data; +import java.util.Date; + @Data public class HistoryInquiryRecordVo { private Integer recordId; @@ -9,6 +11,6 @@ public class HistoryInquiryRecordVo { private String uerHeadPic; private String doctorHeadPic; private String nickName; - private long inquiryTime; + private Date inquiryTime; private Integer status; } diff --git a/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/TestUserVo.java b/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/TestUserVo.java new file mode 100644 index 0000000..e8856d7 --- /dev/null +++ b/doctor-modules/doctor-health/src/main/java/doctor/domain/vo/TestUserVo.java @@ -0,0 +1,8 @@ +package doctor.domain.vo; + +import lombok.Data; + +@Data +public class TestUserVo { + private String nickName; +} diff --git a/doctor-modules/doctor-health/src/main/java/doctor/mapper/InquiryVerifyServiceMapper.java b/doctor-modules/doctor-health/src/main/java/doctor/mapper/InquiryVerifyServiceMapper.java index 277e23c..bfa06de 100644 --- a/doctor-modules/doctor-health/src/main/java/doctor/mapper/InquiryVerifyServiceMapper.java +++ b/doctor-modules/doctor-health/src/main/java/doctor/mapper/InquiryVerifyServiceMapper.java @@ -1,11 +1,18 @@ package doctor.mapper; +import doctor.domain.entity.InquiryDetailsRecord; +import doctor.domain.entity.UserEntity; import doctor.domain.vo.InquiryRecordVo; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import java.util.List; @Mapper public interface InquiryVerifyServiceMapper { + List findHistoryInquiryRecord(Integer doctorId); + + List findUserByIds(@Param("split") String[] split); + } diff --git a/doctor-modules/doctor-health/src/main/java/doctor/service/UserService.java b/doctor-modules/doctor-health/src/main/java/doctor/service/UserService.java new file mode 100644 index 0000000..8099f8f --- /dev/null +++ b/doctor-modules/doctor-health/src/main/java/doctor/service/UserService.java @@ -0,0 +1,7 @@ +package doctor.service; + +import doctor.domain.vo.TestUserVo; + +public interface UserService { + TestUserVo findById(Long aLong); +} diff --git a/doctor-modules/doctor-health/src/main/java/doctor/service/impl/InquiryVerifyServiceImpl.java b/doctor-modules/doctor-health/src/main/java/doctor/service/impl/InquiryVerifyServiceImpl.java index 215d384..bd13066 100644 --- a/doctor-modules/doctor-health/src/main/java/doctor/service/impl/InquiryVerifyServiceImpl.java +++ b/doctor-modules/doctor-health/src/main/java/doctor/service/impl/InquiryVerifyServiceImpl.java @@ -1,6 +1,8 @@ package doctor.service.impl; import doctor.common.core.web.controller.BaseController; +import doctor.domain.entity.InquiryDetailsRecord; +import doctor.domain.entity.UserEntity; import doctor.domain.vo.HistoryInquiryRecordVo; import doctor.domain.vo.InquiryRecordVo; import doctor.mapper.InquiryVerifyServiceMapper; @@ -8,6 +10,7 @@ import doctor.service.InquiryVerifyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; @Service @@ -25,7 +28,30 @@ public class InquiryVerifyServiceImpl extends BaseController implements InquiryV @Override public List findHistoryInquiryRecord(Integer page, Integer count, Integer doctorId) { startPage(page,count); - //TODO 待做 - return null; + //查询所有和医生聊天的聊天列表拿到患者id + List inquiryDetailsRecord = inquiryVerifyServiceMapper.findHistoryInquiryRecord(doctorId); + //定义一个数组用来接收所有的用户id + String userId=""; + for (InquiryDetailsRecord detailsRecord : inquiryDetailsRecord) { + userId+=","+detailsRecord; + } + String[] split = userId.split(","); + //患者所有信息赋值 + List userEntities = inquiryVerifyServiceMapper.findUserByIds(split); + ArrayList historyInquiryRecordVos = new ArrayList<>(); + for (UserEntity userEntity : userEntities) { + HistoryInquiryRecordVo historyInquiryRecordVo = new HistoryInquiryRecordVo(); + historyInquiryRecordVo.setUserId(userEntity.getId()); + historyInquiryRecordVo.setNickName(historyInquiryRecordVo.getNickName()); + historyInquiryRecordVo.setUerHeadPic(userEntity.getHeadPic()); + historyInquiryRecordVo.setStatus(3); + historyInquiryRecordVos.add(historyInquiryRecordVo); + } + for (HistoryInquiryRecordVo historyInquiryRecordVo : historyInquiryRecordVos) { + for (InquiryDetailsRecord detailsRecord : inquiryDetailsRecord) { + historyInquiryRecordVo.setInquiryTime(detailsRecord.getAskTime()); + } + } + return historyInquiryRecordVos; } } diff --git a/doctor-modules/doctor-health/src/main/java/doctor/service/impl/UserServiceImpl.java b/doctor-modules/doctor-health/src/main/java/doctor/service/impl/UserServiceImpl.java new file mode 100644 index 0000000..eafc6ec --- /dev/null +++ b/doctor-modules/doctor-health/src/main/java/doctor/service/impl/UserServiceImpl.java @@ -0,0 +1,4 @@ +package doctor.service.impl; + +public class UserServiceImpl { +} diff --git a/doctor-modules/doctor-health/src/main/java/doctor/text/WebSocketServer.java b/doctor-modules/doctor-health/src/main/java/doctor/text/WebSocketServer.java new file mode 100644 index 0000000..0665dda --- /dev/null +++ b/doctor-modules/doctor-health/src/main/java/doctor/text/WebSocketServer.java @@ -0,0 +1,169 @@ +//package doctor.text; +// +//import com.alibaba.fastjson.JSON; +//import com.alibaba.fastjson.JSONObject; +//import doctor.common.core.utils.StringUtils; +//import doctor.domain.vo.TestUserVo; +//import doctor.service.UserService; +//import doctor.service.impl.UserServiceImpl; +//import org.slf4j.Logger; +//import org.slf4j.LoggerFactory; +//import org.springframework.context.ApplicationContext; +//import org.springframework.data.redis.core.RedisTemplate; +//import org.springframework.stereotype.Component; +// +//import javax.websocket.*; +//import javax.websocket.server.PathParam; +//import javax.websocket.server.ServerEndpoint; +//import java.util.LinkedList; +//import java.util.List; +//import java.util.Map; +//import java.util.concurrent.ConcurrentHashMap; +//import java.util.concurrent.TimeUnit; +// +///** +// * @author websocket服务 +// */ +//@ServerEndpoint(value = "/imserver/{userId}") +//@Component +//public class WebSocketServer { +// +// +// private static UserService userService; +// +// private static RedisTemplate redisTemplate; +// +// public static void setUserService(ApplicationContext context){ +// userService = context.getBean(UserServiceImpl.class); +// redisTemplate = (RedisTemplate) context.getBean("redisTemplate"); +// } +// +// +// private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class); +// /** +// * 记录当前在线连接数 +// */ +// public static final Map sessionMap = new ConcurrentHashMap<>(); +// /** +// * 连接建立成功调用的方法 +// */ +// // 当前用户 +// private TestUserVo userVo; +// // 连接上服务端触发的方法 +// @OnOpen +// public void onOpen(Session session, @PathParam("userId") String userId) { +// if (StringUtils.hasText(userId)){ +// // 加入新用户 +// if (sessionMap.containsKey(userId)){ +// sessionMap.remove(userId); +// } +// sessionMap.put(userId, session); +// this.userVo = userService.findById(Long.valueOf(userId)); +// // 统计所有在线用户 +// List list = new LinkedList<>(); +// sessionMap.forEach((userId1,session1) -> { +// TestUserVo userVo = userService.findById(Long.valueOf(userId1)); +// list.add(userVo); +// }); +// try { +// // 发送给所有在线的用户,更新在线人数 +// sendAllMessage(JSON.toJSONString(list)); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// log.info("有新用户加入,userId={}, 当前在线人数为:{}", userId, sessionMap.size()); +// } +// +// } +// /** +// * 连接关闭调用的方法 +// */ +// @OnClose +// public void onClose(Session session, @PathParam("userId") String userId) { +// sessionMap.remove(userId); +// // 统计所有在线用户 +// List list = new LinkedList<>(); +// sessionMap.forEach((userId1,session1) -> { +// TestUserVo userVo = userService.findById(Long.valueOf(userId1)); +// list.add(userVo); +// }); +// sendAllMessage(JSON.toJSONString(list)); +// log.info("有一连接关闭,移除userId={}的用户session, 当前在线人数为:{}", userId, sessionMap.size()); +// } +// /** +// * 收到客户端消息后调用的方法 +// * 后台收到客户端发送过来的消息 +// * onMessage 是一个消息的中转站 +// * 接受 浏览器端 socket.send 发送过来的 json数据 +// * @param message 客户端发送过来的消息 +// */ +// @OnMessage +// public void onMessage(String message, Session session, @PathParam("userId") String userId) { +// userVo = userService.findById(Long.valueOf(userId)); +// log.info("服务端收到用户username={},id={}的消息:{}", userVo.getNickName(),userId, message); +// // 解析消息 +// JSONObject jsonObject1 = JSON.parseObject(message); +// String toUserId = jsonObject1.getString("toUserId"); +// String text = jsonObject1.getString("text"); +// // 判断是给指定人发,还是群发 +// if (StringUtils.hasText(toUserId)){ +// // {"to": "admin", "text": "聊天文本"} +// Session toSession = sessionMap.get(toUserId); // 根据 to用户名来获取 session,再通过session发送消息文本 +// if (toSession != null) { +// // 服务器端 再把消息组装一下,组装后的消息包含发送人和发送的文本内容 +// // {"from": "zhang", "text": "hello"} +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("fromUser",userVo); +// jsonObject.put("toUser",userService.findById(Long.valueOf(toUserId))); +// jsonObject.put("text",text); +// this.sendMessage(jsonObject.toJSONString(), toSession); +// log.info("发送给用户userId={},消息:{}", toUserId, jsonObject.toJSONString()); +// } else { +// log.info("发送失败,未找到用户username={}的session", toUserId); +// } +// }else{ +// JSONObject jsonObject = new JSONObject(); +// jsonObject.put("fromUser",userVo); +// jsonObject.put("text",text); +// this.sendAllMessage(jsonObject.toJSONString()); +// // 将消息存入redis +// redisTemplate.opsForList().rightPush("messageList",jsonObject.toJSONString()); +// redisTemplate.expire("messageList",60*60, TimeUnit.SECONDS); // 过期时间 +// +// log.info("发送给所有用户,消息:{}", toUserId, jsonObject.toJSONString()); +// +// } +// } +// @OnError +// public void onError(Session session, Throwable error) { +// log.error("发生错误"); +// error.printStackTrace(); +// } +// /** +// * 服务端发送消息给客户端 +// */ +// private void sendMessage(String message, Session toSession) { +// try { +// log.info("服务端给客户端[{}]发送消息{}", toSession.getId(), message); +// toSession.getBasicRemote().sendText(message); +// } catch (Exception e) { +// log.error("服务端发送消息给客户端失败", e); +// } +// } +// /** +// * 服务端发送消息给所有客户端 +// */ +// private void sendAllMessage(String message) { +// try { +// for (Session session : sessionMap.values()) { +// log.info("服务端给客户端[{}]发送消息{}", session.getId(), message); +// session.getBasicRemote().sendText(message); +// +// } +// } catch (Exception e) { +// log.error("服务端发送消息给客户端失败", e); +// } +// } +//} +// +// diff --git a/doctor-modules/doctor-health/src/main/resources/mapper/doctor/InquiryVerifyServiceMapper.xml b/doctor-modules/doctor-health/src/main/resources/mapper/doctor/InquiryVerifyServiceMapper.xml index 92a7923..1875322 100644 --- a/doctor-modules/doctor-health/src/main/resources/mapper/doctor/InquiryVerifyServiceMapper.xml +++ b/doctor-modules/doctor-health/src/main/resources/mapper/doctor/InquiryVerifyServiceMapper.xml @@ -5,4 +5,14 @@ + + +