瀏覽代碼

add 即时通信

18339543638 3 年之前
父節點
當前提交
0ef563aa7b
共有 22 個文件被更改,包括 495 次插入27 次删除
  1. 4 0
      nb-im/pom.xml
  2. 1 1
      nb-im/src/main/java/com/nb/im/controller/ChatRooMsgController.java
  3. 65 2
      nb-im/src/main/java/com/nb/im/controller/ChatRoomController.java
  4. 21 0
      nb-im/src/main/java/com/nb/im/entity/ChatRoomEntity.java
  5. 3 0
      nb-im/src/main/java/com/nb/im/entity/ChatRoomMsgEntity.java
  6. 2 2
      nb-im/src/main/java/com/nb/im/enums/SponsorEnum.java
  7. 10 4
      nb-im/src/main/java/com/nb/im/listener/ConsultMsgListener.java
  8. 1 0
      nb-im/src/main/java/com/nb/im/listener/PubMsgListener.java
  9. 25 0
      nb-im/src/main/java/com/nb/im/mapper/ChatRoomMapper.java
  10. 51 1
      nb-im/src/main/java/com/nb/im/service/LocalChatRoomService.java
  11. 20 0
      nb-im/src/main/java/com/nb/im/service/LocalChatRoomUserService.java
  12. 73 0
      nb-im/src/main/java/com/nb/im/service/dto/ChatRoomDto.java
  13. 36 0
      nb-im/src/main/java/com/nb/im/service/dto/ChatRoomQuery.java
  14. 80 0
      nb-im/src/main/java/com/nb/im/service/dto/ChatRoomResult.java
  15. 64 0
      nb-im/src/main/resources/mapper/im/ChatRoomMapper.xml
  16. 4 0
      nb-service-api/app-assistant-api/pom.xml
  17. 11 10
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/entity/AssistantUserBindEntity.java
  18. 5 5
      nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/enums/BindEnum.java
  19. 4 0
      nb-service-api/app-msg-api/pom.xml
  20. 7 0
      nb-service-api/app-msg-api/src/main/java/com/nb/app/msg/bean/MsgBean.java
  21. 4 2
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/MonitorAddVo.java
  22. 4 0
      nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/LocalAssistantUserBindService.java

+ 4 - 0
nb-im/pom.xml

@@ -12,6 +12,10 @@
     <artifactId>nb-im</artifactId>
 
     <dependencies>
+        <dependency>
+            <groupId>com.tuoren</groupId>
+            <artifactId>web-service-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.tuoren</groupId>
             <artifactId>ws-common</artifactId>

+ 1 - 1
nb-im/src/main/java/com/nb/im/controller/ChatRooMsgController.java

@@ -22,7 +22,7 @@ import org.springframework.web.bind.annotation.RestController;
 @RequestMapping("/im/msg")
 @Api(tags = "聊天室消息")
 public class ChatRooMsgController extends BaseCrudController<ChatRoomMsgEntity, String> {
-    private LocalChatRoomMsgService chatRoomMsgService;
+    private final LocalChatRoomMsgService chatRoomMsgService;
 
     @Override
     public BaseService<? extends Mapper<ChatRoomMsgEntity>, ChatRoomMsgEntity, String> getService() {

+ 65 - 2
nb-im/src/main/java/com/nb/im/controller/ChatRoomController.java

@@ -1,13 +1,29 @@
 package com.nb.im.controller;
 
+import cn.dev33.satoken.stp.StpLogic;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.Mapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.nb.auth.utils.SecurityUtil;
 import com.nb.common.crud.BaseService;
 import com.nb.common.crud.controller.BaseCrudController;
+import com.nb.common.crud.controller.BaseSaveController;
 import com.nb.core.result.R;
+import com.nb.im.service.dto.ChatRoomDto;
 import com.nb.im.entity.ChatRoomEntity;
+import com.nb.im.enums.ImStatusEnum;
+import com.nb.im.enums.SponsorEnum;
 import com.nb.im.service.LocalChatRoomService;
+import com.nb.im.service.dto.ChatRoomQuery;
+import com.nb.im.service.dto.ChatRoomResult;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RestController;
 
@@ -22,8 +38,8 @@ import org.springframework.web.bind.annotation.RestController;
 @AllArgsConstructor
 @RequestMapping("/im/room")
 @Api(tags = "聊天室")
-public class ChatRoomController extends BaseCrudController<ChatRoomEntity, String> {
-    private LocalChatRoomService chatRoomService;
+public class ChatRoomController implements BaseSaveController<ChatRoomEntity,String> {
+    private final LocalChatRoomService chatRoomService;
 
     @Override
     public BaseService<? extends Mapper<ChatRoomEntity>, ChatRoomEntity, String> getService() {
@@ -31,4 +47,51 @@ public class ChatRoomController extends BaseCrudController<ChatRoomEntity, Strin
     }
 
 
+    @ApiOperation(value = "查询并自动创建与病人看护人的聊天室",notes = "若存在,则返回聊天室信息,若不存在,则返回空")
+    @PostMapping("/look")
+    public R getChatRoom(@RequestBody@Validated ChatRoomDto source){
+        ChatRoomEntity chatRoom = chatRoomService.getOne(new QueryWrapper<ChatRoomEntity>()
+                .lambda()
+                .eq(ChatRoomEntity::getAssistId, source.getAssistId())
+                .eq(ChatRoomEntity::getDoctorId, source.getDoctorId())
+                .eq(ChatRoomEntity::getPatientId, source.getPatientId())
+                .nested(i->i.eq(ChatRoomEntity::getStatus, ImStatusEnum.WAITING)
+                        .or()
+                        .eq(ChatRoomEntity::getStatus,ImStatusEnum.SUCCESS))
+                .last("limit 1"));
+        if(chatRoom==null&&source.isAutoCreate()){
+            source.setTotalCount(0);
+            source.setSponsorType(SponsorEnum.doctor);
+            source.setStatus(ImStatusEnum.SUCCESS);
+            chatRoomService.createChatRoom(source);
+        }else if(chatRoom!=null&&ImStatusEnum.WAITING.equals(chatRoom.getStatus())&&source.isAutoCreate()){
+            chatRoom.setStatus(ImStatusEnum.SUCCESS);
+            chatRoomService.successChatRoom(chatRoom.getId(),source.getDoctorId());
+        }
+        return R.success(chatRoom);
+    }
+
+
+    @PostMapping("/no_page")
+    @ApiOperation("聊天室列表查询")
+    public R<IPage<ChatRoomResult>> list(@RequestBody @Validated ChatRoomQuery query){
+        query.getPage().setSearchCount(false);
+        if(StrUtil.isNotEmpty(query.getPatient())){
+            return R.success(chatRoomService.getBaseMapper().queryPageNoneMsgBlurry(query.getPage(),query));
+        }else if(StrUtil.isNotEmpty(query.getRecord())){
+
+        }
+        return R.success();
+    }
+
+
+    @Override
+    public String getPermissionPrefix() {
+        return null;
+    }
+
+    @Override
+    public StpLogic getStpLogin() {
+        return SecurityUtil.getStpLogic();
+    }
 }

+ 21 - 0
nb-im/src/main/java/com/nb/im/entity/ChatRoomEntity.java

@@ -2,8 +2,10 @@ package com.nb.im.entity;
 
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.nb.core.entity.GenericEntity;
+import com.nb.core.enums.SexEnum;
 import com.nb.im.enums.ImStatusEnum;
 import com.nb.im.enums.SponsorEnum;
+import com.nb.web.api.enums.ClinicManageEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -12,6 +14,7 @@ import lombok.NoArgsConstructor;
 import lombok.ToString;
 
 import javax.validation.constraints.NotNull;
+import java.util.Date;
 
 /**
  * @author lifang
@@ -31,6 +34,21 @@ public class ChatRoomEntity extends GenericEntity<String> {
     @NotNull(message = "病人id不能为空",groups = Insert.class)
     private String patientId;
 
+    @ApiModelProperty(value = "住院号",required = true)
+    private String patientCode;
+
+    @ApiModelProperty("病人名称")
+    private String patientName;
+
+    @ApiModelProperty("病人年龄")
+    private String patientAge;
+
+    @ApiModelProperty("病人性别")
+    private SexEnum patientSex;
+
+    @ApiModelProperty(value = "看护位置",allowableValues = "0(院内管理) 1(居家管理)")
+    private ClinicManageEnum manageType;
+
     @ApiModelProperty(value = "看护人id",required = true)
     @NotNull(message = "看护人id不能为空",groups = Insert.class)
     private String assistId;
@@ -51,4 +69,7 @@ public class ChatRoomEntity extends GenericEntity<String> {
 
     @ApiModelProperty("聊天室最后一条消息id")
     private String lastMsgId;
+
+    @ApiModelProperty("聊天室最后一条消息时间")
+    private Date lastMsgTime;
 }

+ 3 - 0
nb-im/src/main/java/com/nb/im/entity/ChatRoomMsgEntity.java

@@ -46,6 +46,9 @@ public class ChatRoomMsgEntity extends GenericEntity<String> {
     @ApiModelProperty("发送人昵称")
     private String senderNickname;
 
+    @ApiModelProperty("是否为系统消息")
+    private boolean sys;
+
     @ApiModelProperty("扩展字段,例:当消息类型为一键呼叫时,存放 boolean类型标识是否已处理;当消息类型为问题咨询详情时,存放 咨询问题id")
     private Object extend;
 }

+ 2 - 2
nb-im/src/main/java/com/nb/im/enums/SponsorEnum.java

@@ -16,8 +16,8 @@ import lombok.Getter;
 @AllArgsConstructor
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
 public enum  SponsorEnum implements IEnum<Integer> {
-    assist(0,"看护人发起聊天"),
-    doctor(1,"医生发起聊天");
+    assist(0,"看护人"),
+    doctor(1,"医生");
 
     private Integer value;
     private String text;

+ 10 - 4
nb-im/src/main/java/com/nb/im/listener/ConsultMsgListener.java

@@ -34,6 +34,7 @@ public class ConsultMsgListener {
     private final LocalChatRoomMsgService chatRoomMsgService;
     private final LocalChatRoomUserService roomUserService;
     private final LocalChatRoomService chatRoomService;
+
     @EventListener
     @Async
     @Transactional(rollbackFor = Exception.class)
@@ -48,7 +49,9 @@ public class ConsultMsgListener {
         }
         ChatRoomEntity room = createRoom(payload);
         createRoomUser(payload, room);
-        createRoomMsg(payload, room);
+        ChatRoomMsgEntity roomMsg = createRoomMsg(payload, room);
+        room.setLastMsgId(roomMsg.getId());
+        chatRoomService.save(room);
     }
 
     /**
@@ -62,12 +65,15 @@ public class ConsultMsgListener {
         ChatRoomEntity result = new ChatRoomEntity();
         result.setAssistId(source.getSenderId());
         result.setPatientId(source.getPatientId());
+        result.setPatientCode(source.getPatientCode());
+        result.setPatientName(source.getPatientName());
+        result.setPatientSex(source.getPatientSex());
+        result.setPatientAge(source.getPatientAge());
         result.setDoctorId(source.getReceiverId());
         result.setSponsorType(SponsorEnum.assist);
         result.setTotalCount(1);
         //等待医生确认
         result.setStatus(ImStatusEnum.WAITING);
-        chatRoomService.save(result);
         return result;
     }
 
@@ -106,8 +112,8 @@ public class ConsultMsgListener {
         result.setTop(false);
         result.setParticipantsId(msg.getReceiverId());
         result.setParticipantsType(SponsorEnum.assist);
-        result.setSendCount(0);
-        result.setReadCount(0);
+        result.setSendCount(1);
+        result.setReadCount(1);
         result.setLastSendTime(new Date());
         roomUserService.save(result);
         return result;

+ 1 - 0
nb-im/src/main/java/com/nb/im/listener/PubMsgListener.java

@@ -62,6 +62,7 @@ public class PubMsgListener {
                 .lambda()
                 .eq(ChatRoomEntity::getId,pubMsgInfo.getChatRoomId())
                 .set(ChatRoomEntity::getLastMsgId,roomMsg.getId())
+                .set(ChatRoomEntity::getLastMsgTime,roomMsg.getCreateTime())
                 .setSql("total_count=total_count+1"));
     }
 }

+ 25 - 0
nb-im/src/main/java/com/nb/im/mapper/ChatRoomMapper.java

@@ -1,8 +1,13 @@
 package com.nb.im.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.nb.im.entity.ChatRoomEntity;
+import com.nb.im.service.dto.ChatRoomQuery;
+import com.nb.im.service.dto.ChatRoomResult;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @author lifang
@@ -13,4 +18,24 @@ import org.apache.ibatis.annotations.Mapper;
  */
 @Mapper
 public interface ChatRoomMapper extends BaseMapper<ChatRoomEntity> {
+
+    /**
+     * 描述: 分页查询(查询条件不包含信息内容)
+     * @author lifang
+     * @date 2022/8/16 23:21
+     * @param page
+     * @param query
+     * @return IPage<ChatRoomResult>
+     */
+    IPage<ChatRoomResult> queryPageNoneMsgBlurry(Page<ChatRoomResult> page, @Param("query") ChatRoomQuery query);
+
+    /**
+     * 描述: 分页查询(查询条件包含信息内容)
+     * @author lifang
+     * @date 2022/8/16 23:21
+     * @param page
+     * @param query
+     * @return IPage<ChatRoomResult>
+     */
+    IPage<ChatRoomResult> queryPageMsgBlurry(Page<ChatRoomResult> page, @Param("query") ChatRoomQuery query);
 }

+ 51 - 1
nb-im/src/main/java/com/nb/im/service/LocalChatRoomService.java

@@ -1,11 +1,16 @@
 package com.nb.im.service;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.nb.common.crud.BaseService;
 import com.nb.im.entity.ChatRoomEntity;
+import com.nb.im.enums.ImStatusEnum;
+import com.nb.im.enums.SponsorEnum;
 import com.nb.im.mapper.ChatRoomMapper;
+import com.nb.im.service.dto.ChatRoomDto;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.annotation.Lazy;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * @author lifang
@@ -22,7 +27,7 @@ public class LocalChatRoomService extends BaseService<ChatRoomMapper, ChatRoomEn
 
     @Override
     public void validateBeforeSave(ChatRoomEntity entity) {
-        entity.setTotalCount(0);
+
     }
 
     @Override
@@ -36,5 +41,50 @@ public class LocalChatRoomService extends BaseService<ChatRoomMapper, ChatRoomEn
     }
 
 
+    /**
+     * 描述: 创建聊天室
+     * @author lifang
+     * @date 2022/8/16 16:46
+     * @param source
+     * @return void
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public ChatRoomEntity createChatRoom(ChatRoomDto source) {
+        ChatRoomEntity result = new ChatRoomEntity();
+        result.setAssistId(source.getAssistId());
+        result.setPatientId(source.getPatientId());
+        result.setPatientAge(source.getPatientAge());
+        result.setPatientCode(source.getPatientCode());
+        result.setPatientName(source.getPatientName());
+        result.setPatientSex(source.getPatientSex());
+        result.setDoctorId(source.getDoctorId());
+        result.setSponsorType(source.getSponsorType());
+        result.setTotalCount(0);
+        //等待医生确认
+        result.setStatus(source.getStatus());
+        this.save(result);
+        chatRoomUserService.createRoomUser(result.getId(),source.getAssistId(),SponsorEnum.assist);
+        chatRoomUserService.createRoomUser(result.getId(),source.getDoctorId(),SponsorEnum.doctor);
+        return result;
+    }
+
+
+    /**
+     * 描述: 与看护人成功建立联系
+     * @author lifang
+     * @date 2022/8/16 16:48
+     * @param chatRoomId
+     * @param doctorId
+     * @return void
+     */
+    @Transactional(rollbackFor = Exception.class)
+    public void successChatRoom(String chatRoomId,String doctorId) {
+        chatRoomUserService.createRoomUser(chatRoomId,doctorId,SponsorEnum.doctor);
+        this.update(new UpdateWrapper<ChatRoomEntity>()
+                .lambda()
+                .eq(ChatRoomEntity::getId,chatRoomId)
+                .set(ChatRoomEntity::getStatus,ImStatusEnum.SUCCESS)
+        );
+    }
 
 }

+ 20 - 0
nb-im/src/main/java/com/nb/im/service/LocalChatRoomUserService.java

@@ -2,8 +2,12 @@ package com.nb.im.service;
 
 import com.nb.common.crud.BaseService;
 import com.nb.im.entity.ChatRoomUserEntity;
+import com.nb.im.enums.SponsorEnum;
 import com.nb.im.mapper.ChatRoomUserMapper;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
 
 /**
  * @author lifang
@@ -30,4 +34,20 @@ public class LocalChatRoomUserService extends BaseService<ChatRoomUserMapper, Ch
     public void validateBeforeDelete(String id) {
 
     }
+
+
+
+    @Transactional(rollbackFor = Exception.class)
+    public ChatRoomUserEntity createRoomUser(String roomId, String partId, SponsorEnum partType){
+        ChatRoomUserEntity result = new ChatRoomUserEntity();
+        result.setChatRoomId(roomId);
+        result.setTop(false);
+        result.setParticipantsId(partId);
+        result.setParticipantsType(partType);
+        result.setSendCount(0);
+        result.setReadCount(0);
+        result.setLastSendTime(new Date());
+        this.save(result);
+        return result;
+    }
 }

+ 73 - 0
nb-im/src/main/java/com/nb/im/service/dto/ChatRoomDto.java

@@ -0,0 +1,73 @@
+package com.nb.im.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.nb.core.enums.SexEnum;
+import com.nb.im.enums.ImMsgType;
+import com.nb.im.enums.ImStatusEnum;
+import com.nb.im.enums.SponsorEnum;
+import com.nb.web.api.enums.ClinicManageEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ChatRoomDto.java
+ * @Description TODO
+ * @createTime 2022年08月16日 16:35:00
+ */
+@Data
+@ApiModel("聊天室查询")
+public class ChatRoomDto {
+    @ApiModelProperty(value = "医生id",required = true)
+    @NotNull(message = "医生id不能为空")
+    private String doctorId;
+
+    @ApiModelProperty(value = "看护人员id",required = true)
+    @NotNull(message = "看护人员id不能为空")
+    private String assistId;
+
+    @ApiModelProperty(value = "病人id",required = true)
+    @NotNull(message = "病人id不能为空")
+    private String patientId;
+
+    @ApiModelProperty(value = "住院号",required = true)
+    @NotNull(message = "住院号不能为空")
+    private String patientCode;
+
+    @ApiModelProperty("病人名称")
+    private String patientName;
+
+    @ApiModelProperty("病人年龄")
+    private String patientAge;
+
+    @ApiModelProperty("病人性别")
+    private SexEnum patientSex;
+
+    @ApiModelProperty(value = "看护位置",allowableValues = "0(院内管理) 1(居家管理)")
+    private ClinicManageEnum manageType;
+
+    @ApiModelProperty(value = "消息内容",required = true)
+    private String payload;
+
+    @ApiModelProperty(value = "消息类型")
+    private ImMsgType msgType;
+
+    @ApiModelProperty(hidden = true)
+    @JsonIgnoreProperties
+    private ImStatusEnum status;
+
+    @ApiModelProperty(hidden = true)
+    @JsonIgnoreProperties
+    private SponsorEnum sponsorType;
+
+    @ApiModelProperty(hidden = true)
+    @JsonIgnoreProperties
+    private Integer totalCount;
+
+    @ApiModelProperty(value = "是否自动创建聊天室",required = true)
+    private boolean autoCreate;
+}

+ 36 - 0
nb-im/src/main/java/com/nb/im/service/dto/ChatRoomQuery.java

@@ -0,0 +1,36 @@
+package com.nb.im.service.dto;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ChatRoomQuery.java
+ * @Description TODO
+ * @createTime 2022年08月16日 22:46:00
+ */
+@Data
+@ApiModel("聊天室查询参数")
+public class ChatRoomQuery {
+    @ApiModelProperty(value = "医生id",required = true)
+    @NotNull(message = "医生id不能为空")
+    private String doctorId;
+
+    @ApiModelProperty(value = "管理位置",allowableValues = "0(院内管理) 1(居家管理)")
+    private Integer manageType;
+
+    @ApiModelProperty("病人信息(名称或住院号)")
+    private String patient;
+
+    @ApiModelProperty("聊天内容")
+    private String record;
+
+    @ApiModelProperty("分页查询条件, 仅传输 current 和 size参数即可")
+    @NotNull(message = "分页参数不可为空")
+    private Page<ChatRoomResult> page;
+}

+ 80 - 0
nb-im/src/main/java/com/nb/im/service/dto/ChatRoomResult.java

@@ -0,0 +1,80 @@
+package com.nb.im.service.dto;
+
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.nb.core.enums.SexEnum;
+import com.nb.im.enums.ImMsgType;
+import com.nb.im.enums.ImStatusEnum;
+import com.nb.im.enums.SponsorEnum;
+import com.nb.web.api.enums.ClinicManageEnum;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author lifang
+ * @version 1.0.0
+ * @ClassName ChatRootResult.java
+ * @Description
+ * @createTime 2022年08月16日 22:50:00
+ */
+@Data
+@ApiModel("聊天室列表查询结果")
+public class ChatRoomResult implements Serializable {
+    @ApiModelProperty("聊天室id")
+    private String id;
+
+    @ApiModelProperty(value = "住院号",required = true)
+    @NotNull(message = "住院号不能为空")
+    private String patientCode;
+
+    @ApiModelProperty("病人名称")
+    private String patientName;
+
+    @ApiModelProperty("病人年龄")
+    private String patientAge;
+
+    @ApiModelProperty("病人性别")
+    private SexEnum patientSex;
+
+    @ApiModelProperty(value = "看护位置",allowableValues = "0(院内管理) 1(居家管理)")
+    private ClinicManageEnum manageType;
+
+    @ApiModelProperty(value = "聊天室状态",allowableValues = "0(等待医生确认) 1(成功建立聊天室) 2(医生关闭聊天室)")
+    private ImStatusEnum status;
+
+    @ApiModelProperty(value = "发起人类型",allowableValues = "0(看护人发起聊天) 1(医生发起聊天)")
+    private SponsorEnum sponsorType;
+
+    @ApiModelProperty(value = "聊天室全部消息")
+    private Integer totalCount;
+
+    @ApiModelProperty(value = "发送信息数量")
+    @JsonIgnoreProperties(allowSetters = true)
+    private Integer sendCount;
+
+    @ApiModelProperty(value = "已读数量(不包含己方发送信息数量)")
+    @JsonIgnoreProperties(allowSetters = true)
+    private Integer readCount;
+
+    @ApiModelProperty("未读数量")
+    @JsonIgnoreProperties(allowGetters = true)
+    private Integer unReadCount;
+
+    @ApiModelProperty("聊天室最后一条消息时间")
+    private Date lastMsgTime;
+
+    @ApiModelProperty(value = "消息内容")
+    private String payload;
+
+    @ApiModelProperty(value = "消息类型")
+    private ImMsgType msgType;
+
+    public Integer getUnReadCount() {
+        int unReadCount = totalCount - sendCount - readCount;
+        return unReadCount<0?0:unReadCount;
+    }
+}

+ 64 - 0
nb-im/src/main/resources/mapper/im/ChatRoomMapper.xml

@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.nb.im.mapper.ChatRoomMapper">
+
+    <resultMap id="chatRoomResult" type="com.nb.im.service.dto.ChatRoomResult">
+        <result column="id" property="id"/>
+        <result column="patient_code" property="patientCode"/>
+        <result column="patient_name" property="patientName"/>
+        <result column="patient_age" property="patientAge"/>
+        <result column="patient_sex" property="patientSex"/>
+        <result column="manage_type" property="manageType"/>
+        <result column="status" property="status"/>
+        <result column="sponsor_type" property="sponsorType"/>
+        <result column="total_count" property="totalCount"/>
+        <result column="send_count" property="sendCount"/>
+        <result column="read_count" property="readCount"/>
+        <result column="last_msg_time" property="lastMsgTime"/>
+        <result column="payload" property="payload"/>
+        <result column="msg_type" property="msgType"/>
+    </resultMap>
+
+
+    <select id="queryPageNoneMsgBlurry" resultMap="chatRoomResult">
+        select
+            r.id as id,
+            r.patient_code as patient_code,
+            r.patient_age as patient_age,
+            r.patient_name as patient_name,
+            r.patient_sex as patient_sex,
+            r.manage_type as manage_type,
+            r.`status` as status,
+            r.last_msg_time as last_msg_time,
+            r.sponsor_type as sponsor_type,
+            r.total_count as total_count,
+            ru.send_count as send_count,
+            ru.read_count as read_count,
+            rm.payload as payload,
+            rm.msg_type as msg_type
+            from
+            (select * from chat_room
+            <where>
+                doctor_id=#{query.doctorId}
+                <if test="query.patient != null">
+                    and (patient_code like concat('%',#{query.patient},'%') or patient_name like concat('%',#{query.patient},'%') )
+                </if>
+                <if test="query.manageType != null">
+                    and manage_type=#{query.manageType}
+                </if>
+            </where>
+             ) as r
+            join (select * from chat_room_user
+            <where>
+                participants_id=#{query.doctorId}  and participants_type='1'
+            </where>) as ru
+            on ru.participants_id=r.doctor_id
+            left join (select * from chat_room_msg) as rm
+            on rm.id=r.last_msg_id
+            order by last_msg_time
+    </select>
+
+    <select id="queryPageMsgBlurry" resultMap="chatRoomResult">
+--         todo
+    </select>
+</mapper>

+ 4 - 0
nb-service-api/app-assistant-api/pom.xml

@@ -12,6 +12,10 @@
     <artifactId>app-assistant-api</artifactId>
 
     <dependencies>
+        <dependency>
+            <groupId>com.tuoren</groupId>
+            <artifactId>web-service-api</artifactId>
+        </dependency>
         <dependency>
             <groupId>com.baomidou</groupId>
             <artifactId>mybatis-plus-boot-starter</artifactId>

+ 11 - 10
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/entity/AssistantUserBindEntity.java

@@ -6,6 +6,7 @@ import com.nb.app.assistant.api.enums.ApplyEnum;
 import com.nb.app.assistant.api.enums.BindEnum;
 import com.nb.core.entity.GenericEntity;
 import com.nb.core.enums.SexEnum;
+import com.nb.web.api.enums.ClinicManageEnum;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -41,31 +42,31 @@ public class AssistantUserBindEntity extends GenericEntity<String> {
     @ApiModelProperty(value = "住院号",required = true)
     private String patientCode;
 
-    @ApiModelProperty(value = "病人姓名",required = true)
+    @ApiModelProperty(value = "病人姓名")
     private String patientName;
 
-    @ApiModelProperty(value = "病人性别",required = true)
+    @ApiModelProperty(value = "病人性别")
     private SexEnum patientSex;
 
-    @ApiModelProperty(value = "病人年龄",required = true)
+    @ApiModelProperty(value = "病人年龄")
     private String patientAge;
 
     @ApiModelProperty(value = "医生id",required = true)
     private String doctorId;
 
-    @ApiModelProperty(hidden = true)
-    @TableField(exist = false)
-    private String doctorName;
-
-    @ApiModelProperty(value = "临床结束管理时的时间",required = true)
-    private Date monitorFinishedTime;
+    @ApiModelProperty(value = "管理位置")
+    private ClinicManageEnum manageType;
 
     @ApiModelProperty(value = "申请类型",required = true,allowableValues = "0(手动申请) 1(邀请码申请)")
     private ApplyEnum applyType;
 
-    @ApiModelProperty(value = "绑定状态",required = true)
+    @ApiModelProperty(value = "绑定状态",required = true,allowableValues = "0(等待医生进行绑定操作) 1(绑定成功) 2(拒绝) 3(自动断开) 4(手动断开)")
     private BindEnum status;
 
     @ApiModelProperty(value = "解除绑定人,当与userId相同时,即本人解除绑定关系,当不同时,即由医生解除绑定关系")
     private String liftedBy;
+
+    @ApiModelProperty(hidden = true)
+    @TableField(exist = false)
+    private String doctorName;
 }

+ 5 - 5
nb-service-api/app-assistant-api/src/main/java/com/nb/app/assistant/api/enums/BindEnum.java

@@ -17,11 +17,11 @@ import lombok.Getter;
 @AllArgsConstructor
 @JsonFormat(shape = JsonFormat.Shape.OBJECT)
 public enum  BindEnum  implements IEnum<Integer> {
-    WAITING(1,"等待医生进行绑定操作"),
-    SUCCESS(2,"绑定成功"),
-    REFUSE(3,"拒绝"),
-    AUTO_LIFTED(4,"自动断开"),
-    MANUAL_LIFTED(5,"手动断开")
+    WAITING(0,"等待医生进行绑定操作"),
+    SUCCESS(1,"绑定成功"),
+    REFUSE(2,"拒绝"),
+    AUTO_LIFTED(3,"自动断开"),
+    MANUAL_LIFTED(4,"手动断开")
 ;
     @Getter
     @ApiModelProperty("报警编码")

+ 4 - 0
nb-service-api/app-msg-api/pom.xml

@@ -13,6 +13,10 @@
 
 
     <dependencies>
+        <dependency>
+            <groupId>com.tuoren</groupId>
+            <artifactId>nb-core</artifactId>
+        </dependency>
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>

+ 7 - 0
nb-service-api/app-msg-api/src/main/java/com/nb/app/msg/bean/MsgBean.java

@@ -1,6 +1,7 @@
 package com.nb.app.msg.bean;
 
 import com.nb.app.msg.enums.MsgEnum;
+import com.nb.core.enums.SexEnum;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Builder;
 import lombok.Getter;
@@ -38,6 +39,12 @@ public class MsgBean implements Serializable {
     @ApiModelProperty("病人名称")
     private String patientName;
 
+    @ApiModelProperty("病人年龄")
+    private String patientAge;
+
+    @ApiModelProperty("病人性别")
+    private SexEnum patientSex;
+
     @ApiModelProperty("消息内容")
     private String payload;
 

+ 4 - 2
nb-service/app-assistant/src/main/java/com/nb/app/assistant/controller/vo/MonitorAddVo.java

@@ -22,8 +22,7 @@ public class MonitorAddVo {
     @NotNull(message = "被监护病人id不能为空")
     private String patientId;
 
-
-    @ApiModelProperty(value = "被监护病人性别",required = true)
+    @ApiModelProperty(value = "被监护病人性别")
     @NotNull(message = "被监护病人性别不能为空")
     private SexEnum patientSex;
 
@@ -34,6 +33,9 @@ public class MonitorAddVo {
     @ApiModelProperty(value = "被监护病人姓名")
     private String patientName;
 
+    @ApiModelProperty(value = "病人年龄")
+    private String patientAge;
+
     @ApiModelProperty(value = "app医生端用户id",required = true)
     @NotNull(message = "app医生端用户id不能为空")
     private String doctorId;

+ 4 - 0
nb-service/app-assistant/src/main/java/com/nb/app/assistant/service/LocalAssistantUserBindService.java

@@ -70,6 +70,8 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
                             .patientId(entity.getPatientId())
                             .patientCode(entity.getPatientCode())
                             .patientName(entity.getPatientName())
+                            .patientAge(entity.getPatientAge())
+                            .patientSex(entity.getPatientSex())
                             .receiverId(entity.getDoctorId())
                             .receiverName(entity.getDoctorName())
                             .sys(false)
@@ -100,7 +102,9 @@ public class LocalAssistantUserBindService extends BaseService<AssistantUserBind
                         .senderNickname(user.getNickname())
                         .senderAvatar(user.getAvatar())
                         .patientId(userBind.getPatientId())
+                        .patientSex(userBind.getPatientSex())
                         .patientCode(userBind.getPatientCode())
+                        .patientAge(userBind.getPatientAge())
                         .patientName(userBind.getPatientName())
                         .receiverId(userBind.getDoctorId())
                         .receiverName(userBind.getDoctorName())