소스 검색

站内通知相关接口提交

songxinlu 3 년 전
부모
커밋
96f09127a2
35개의 변경된 파일1286개의 추가작업 그리고 37개의 파일을 삭제
  1. 25 0
      common/src/main/java/com/lantone/common/dto/GetHospitalUserPageDTO.java
  2. 39 0
      common/src/main/java/com/lantone/common/dto/GetMyNoticeListDTO.java
  3. 31 0
      common/src/main/java/com/lantone/common/dto/GetNoticeInfoByIdDTO.java
  4. 39 0
      common/src/main/java/com/lantone/common/dto/ListManagePageDTO.java
  5. 18 0
      common/src/main/java/com/lantone/common/dto/SendToTopicDTO.java
  6. 41 0
      common/src/main/java/com/lantone/common/vo/AddNoticeVO.java
  7. 31 0
      common/src/main/java/com/lantone/common/vo/GetHospitalUserVO.java
  8. 23 0
      common/src/main/java/com/lantone/common/vo/GetMyNoticeListVO.java
  9. 19 0
      common/src/main/java/com/lantone/common/vo/ListManagePageVO.java
  10. 91 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/Notice.java
  11. 85 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/NoticeUser.java
  12. 16 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/facade/DictionaryInfoFacade.java
  13. 14 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/facade/NoticeFacade.java
  14. 14 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/facade/NoticeUserFacade.java
  15. 6 2
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/HospitalUserMapper.java
  16. 18 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/NoticeMapper.java
  17. 18 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/NoticeUserMapper.java
  18. 13 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/NoticeService.java
  19. 13 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/NoticeUserService.java
  20. 17 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/impl/NoticeServiceImpl.java
  21. 17 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/impl/NoticeUserServiceImpl.java
  22. 68 4
      dblayer-mbg/src/main/resources/mapper/HospitalUserMapper.xml
  23. 34 0
      dblayer-mbg/src/main/resources/mapper/NoticeMapper.xml
  24. 52 0
      dblayer-mbg/src/main/resources/mapper/NoticeUserMapper.xml
  25. 20 0
      dblayer-mbg/src/main/resources/mapper/base/BaseNoticeMapper.xml
  26. 19 0
      dblayer-mbg/src/main/resources/mapper/base/BaseNoticeUserMapper.xml
  27. 3 1
      dblayer-mbg/src/test/java/com/lantone/dblayermbg/CodeAutoGenerator.java
  28. 11 2
      message-service/src/main/java/com/lantone/message/web/BackSampleController.java
  29. 1 0
      security-center/src/main/java/com/lantone/security/enums/DictionaryEnum.java
  30. 42 0
      security-center/src/main/java/com/lantone/security/enums/ReadTypeEnum.java
  31. 41 0
      security-center/src/main/java/com/lantone/security/enums/ReceiveTypeEnum.java
  32. 25 28
      security-center/src/main/java/com/lantone/security/facade/FuncManagementFacade.java
  33. 287 0
      security-center/src/main/java/com/lantone/security/facade/NoticeManagementFacade.java
  34. 6 0
      security-center/src/main/java/com/lantone/security/service/MessageService.java
  35. 89 0
      security-center/src/main/java/com/lantone/security/web/NoticeManagementController.java

+ 25 - 0
common/src/main/java/com/lantone/common/dto/GetHospitalUserPageDTO.java

@@ -0,0 +1,25 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description:组织用户信息
+ * @Author songxl
+ * @Date 2021/8/6
+ */
+@Data
+public class GetHospitalUserPageDTO {
+    @ApiModelProperty(value = "用户编号")
+    private Long id;
+    @ApiModelProperty(value = "组织编号")
+    private Long hospitalId;
+    @ApiModelProperty(value = "用户姓名")
+    private String name;
+
+    @ApiModelProperty(value = "手机号")
+    private String mobilePhone;
+
+    @ApiModelProperty(value = "所属组织名")
+    private String hospitalName;
+}

+ 39 - 0
common/src/main/java/com/lantone/common/dto/GetMyNoticeListDTO.java

@@ -0,0 +1,39 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 我的通知列表页对象
+ * </p>
+ */
+@Data
+public class GetMyNoticeListDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "通知编号")
+    private Long id;
+    @ApiModelProperty(value = "用户编号")
+    private Long userId;
+    @ApiModelProperty(value = "通知标题")
+    private String title;
+    @ApiModelProperty(value = "通知类型 0:公告,1:其他")
+    private String type;
+    @ApiModelProperty(value = "通知类型名称")
+    private String typeName;
+    @ApiModelProperty(value = "阅读状态 0:未读,1:已读")
+    private String status;
+    @ApiModelProperty(value = "阅读状态名称")
+    private String statusName;
+    @ApiModelProperty(value = "通知内容")
+    private String content;
+    @ApiModelProperty(value = "发送者")
+    private String sender;
+    @ApiModelProperty(value = "记录创建时间")
+    private Date gmtCreate;
+
+}

+ 31 - 0
common/src/main/java/com/lantone/common/dto/GetNoticeInfoByIdDTO.java

@@ -0,0 +1,31 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @Description:查看通知详情对象
+ * @Author songxl
+ * @Date 2021/9/13
+ */
+@Data
+public class GetNoticeInfoByIdDTO {
+    @ApiModelProperty(value = "通知编号")
+    private Long id;
+    @ApiModelProperty(value = "通知标题",required = true)
+    private String title;
+    @ApiModelProperty(value = "通知类型 0:公告,1:其他",required = true)
+    private String type;
+    @ApiModelProperty(value = "通知类型名称 0:公告,1:其他",required = true)
+    private String typeName;
+    @ApiModelProperty(value = "通知内容",required = true)
+    private String content;
+    @ApiModelProperty(value = "创建者", hidden = true)
+    private Long creator;
+    @ApiModelProperty(value = "创建者姓名", hidden = true)
+    private String creatorName;
+    @ApiModelProperty(value = "记录创建时间", hidden = true)
+    private Date gmtCreate;
+}

+ 39 - 0
common/src/main/java/com/lantone/common/dto/ListManagePageDTO.java

@@ -0,0 +1,39 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 知管理列表页
+ * </p>
+ */
+@Data
+public class ListManagePageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "通知编号")
+    private Long id;
+    @ApiModelProperty(value = "用户编号")
+    private Long userId;
+    @ApiModelProperty(value = "通知标题")
+    private String title;
+    @ApiModelProperty(value = "通知类型 0:公告,1:其他")
+    private String type;
+    @ApiModelProperty(value = "通知类型名称")
+    private String typeName;
+    @ApiModelProperty(value = "阅读状态 0:未读,1:已读")
+    private String status;
+    @ApiModelProperty(value = "阅读状态名称")
+    private String statusName;
+    @ApiModelProperty(value = "通知内容")
+    private String content;
+    @ApiModelProperty(value = "发送者")
+    private String sender;
+    @ApiModelProperty(value = "记录创建时间")
+    private Date gmtCreate;
+
+}

+ 18 - 0
common/src/main/java/com/lantone/common/dto/SendToTopicDTO.java

@@ -0,0 +1,18 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 返回topic信息
+ */
+@Data
+public class SendToTopicDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "信息")
+    private String message;
+    @ApiModelProperty(value = "topic")
+    private String topic;
+}

+ 41 - 0
common/src/main/java/com/lantone/common/vo/AddNoticeVO.java

@@ -0,0 +1,41 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Description:添加通知对象
+ * @Author songxl
+ * @Date 2021/9/10
+ */
+@Data
+public class AddNoticeVO {
+    @ApiModelProperty(value = "通知标题",required = true)
+    @NotBlank(message = "通知标题不能为空")
+    private String title;
+    @ApiModelProperty(value = "通知类型 0:公告,1:其他",required = true)
+    @NotBlank(message = "通知类型不能为空")
+    private String type;
+    @ApiModelProperty(value = "接收者类型 0:所有人,1:自定义",required = true)
+    @NotBlank(message = "接收者类型不能为空")
+    private String receiveType;
+    @ApiModelProperty(value = "通知内容",required = true)
+    @NotBlank(message = "通知内容不能为空")
+    private String content;
+    @ApiModelProperty(value = "发送用户集合")
+    private List<Long> sendUsers;
+    @ApiModelProperty(value = "发送科室集合")
+    private List<Long> sendDepts;
+    @ApiModelProperty(value = "发送医院集合")
+    private List<Long> sendHospitals;
+    @ApiModelProperty(value = "创建者", hidden = true)
+    private Long creator;
+    @ApiModelProperty(value = "创建者姓名", hidden = true)
+    private String creatorName;
+    @ApiModelProperty(value = "记录创建时间", hidden = true)
+    private Date gmtCreate;
+}

+ 31 - 0
common/src/main/java/com/lantone/common/vo/GetHospitalUserVO.java

@@ -0,0 +1,31 @@
+package com.lantone.common.vo;
+
+import com.lantone.common.vo.base.BasePageVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 获取用户
+ * </p>
+ */
+@Data
+public class GetHospitalUserVO extends BasePageVo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "用户姓名")
+    private String name;
+
+    @ApiModelProperty(value = "手机号")
+    private String mobilePhone;
+
+    @ApiModelProperty(value = "科室id集合")
+    private List<Long> depts;
+
+    @ApiModelProperty(value = "医院id集合")
+    private List<Long> hospitals;
+}

+ 23 - 0
common/src/main/java/com/lantone/common/vo/GetMyNoticeListVO.java

@@ -0,0 +1,23 @@
+package com.lantone.common.vo;
+
+import com.lantone.common.vo.base.BasePageVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * @Description:获取我的通知对象
+ * @Author songxl
+ * @Date 2021/9/10
+ */
+@Data
+public class GetMyNoticeListVO extends BasePageVo {
+
+    @ApiModelProperty(value = "我的通知用户id" ,hidden = true)
+    private Long id;
+    @ApiModelProperty(value = "通知类型 0:公告,1:其他")
+    private String type;
+    @ApiModelProperty(value = "阅读状态 0:未读,1:已读")
+    private String status;
+}

+ 19 - 0
common/src/main/java/com/lantone/common/vo/ListManagePageVO.java

@@ -0,0 +1,19 @@
+package com.lantone.common.vo;
+
+import com.lantone.common.vo.base.BasePageVo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Description:获取我的通知对象
+ * @Author songxl
+ * @Date 2021/9/10
+ */
+@Data
+public class ListManagePageVO extends BasePageVo {
+
+    @ApiModelProperty(value = "创建用户id" ,hidden = true)
+    private Long id;
+    @ApiModelProperty(value = "通知类型 0:公告,1:其他")
+    private String type;
+}

+ 91 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/Notice.java

@@ -0,0 +1,91 @@
+package com.lantone.dblayermbg.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 通知详情表 实体类
+ * </p>
+ */
+@Data
+@TableName("sys_notice")
+public class Notice implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 标题
+     */
+    @TableField("title")
+    private String title;
+
+    /**
+     * 通知类型 0:公告,1:其他
+     */
+    @TableField("type")
+    private String type;
+
+    /**
+     * 内容
+     */
+    @TableField("content")
+    private String content;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 创建者姓名
+     */
+    @TableField("creatorName")
+    private String creatorName;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+}

+ 85 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/NoticeUser.java

@@ -0,0 +1,85 @@
+package com.lantone.dblayermbg.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户通知关系表 实体类
+ * </p>
+ */
+@Data
+@TableName("sys_notice_user")
+public class NoticeUser implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 用户ID
+     */
+    @TableField("user_id")
+    private Long userId;
+
+    /**
+     * 通知ID
+     */
+    @TableField("notice_id")
+    private Long noticeId;
+
+    /**
+     * 状态 0:未读,1:已读
+     */
+    @TableField("status")
+    private String status;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    @TableField("is_deleted")
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    @TableField("gmt_create")
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    @TableField("gmt_modified")
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    @TableField("creator")
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    @TableField("modifier")
+    private String modifier;
+
+    /**
+     * 备注
+     */
+    @TableField("remark")
+    private String remark;
+
+}

+ 16 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/facade/DictionaryInfoFacade.java

@@ -7,6 +7,7 @@ import com.lantone.common.enums.IsDeleteEnum;
 import com.lantone.common.enums.StatusEnum;
 import com.lantone.common.service.RedisService;
 import com.lantone.common.util.ListUtil;
+import com.lantone.common.util.StringUtil;
 import com.lantone.dblayermbg.entity.DictionaryInfo;
 import com.lantone.dblayermbg.service.impl.DictionaryInfoServiceImpl;
 import org.apache.commons.collections.MapUtils;
@@ -72,6 +73,21 @@ public class DictionaryInfoFacade extends DictionaryInfoServiceImpl {
         return outDicMap;
     }
 
+    /**
+     * @param returnType 返回类型
+     * @param groupType  分组集合
+     * @Description获取指定groupTyeps的字典集
+     * @Return java.util.Map<java.lang.String, java.util.Map < java.lang.String, java.lang.String>>
+     */
+    public Map<String, String> getOneDicMap(String returnType, String groupType) {
+        Map<String, Map<String, Map<String, String>>> dicMap = redisService.get(AuthConstant.DIC_MAP_KEY);
+        Map<String, Map<String, String>> returnDicMap = dicMap.get(returnType);
+        if (MapUtils.isNotEmpty(returnDicMap) && StringUtil.isNotBlank(groupType)) {
+            return returnDicMap.get(groupType);
+        }
+        return null;
+    }
+
 
     /**
      * @param returnType 返回类型

+ 14 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/facade/NoticeFacade.java

@@ -0,0 +1,14 @@
+package com.lantone.dblayermbg.facade;
+
+import com.lantone.dblayermbg.service.impl.NoticeServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ * 表名:sys_notice 业务类
+ * </p>
+ */
+@Component
+public class NoticeFacade extends NoticeServiceImpl {
+
+}

+ 14 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/facade/NoticeUserFacade.java

@@ -0,0 +1,14 @@
+package com.lantone.dblayermbg.facade;
+
+import com.lantone.dblayermbg.service.impl.NoticeUserServiceImpl;
+import org.springframework.stereotype.Component;
+
+/**
+ * <p>
+ * 表名:sys_notice_user 业务类
+ * </p>
+ */
+@Component
+public class NoticeUserFacade extends NoticeUserServiceImpl {
+
+}

+ 6 - 2
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/HospitalUserMapper.java

@@ -2,8 +2,10 @@ package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.dto.GetHospitalUserPageDTO;
 import com.lantone.common.dto.GetUserHospitalDeptDTO;
 import com.lantone.common.dto.GetUserPageDTO;
+import com.lantone.common.vo.GetHospitalUserVO;
 import com.lantone.common.vo.GetUserPageVO;
 import com.lantone.dblayermbg.entity.HospitalUser;
 import org.apache.ibatis.annotations.Param;
@@ -19,7 +21,9 @@ public interface HospitalUserMapper extends BaseMapper<HospitalUser> {
 
     IPage<GetUserPageDTO> getUserPage(@Param("getUserPageVO") GetUserPageVO getUserPageVO);
 
-    List<Long> getHospitalUserById(@Param("hospitalId") Long hospitalId ,@Param("name") String name);
+    List<Long> getHospitalUserById(@Param("hospitalId") Long hospitalId, @Param("name") String name);
 
-    List<GetUserHospitalDeptDTO> getUserHospitaDeptById(@Param("userId")Long userId);
+    List<GetUserHospitalDeptDTO> getUserHospitaDeptById(@Param("userId") Long userId);
+
+    IPage<GetHospitalUserPageDTO> getHospitalUser(@Param("getHospitalUserVO") GetHospitalUserVO getHospitalUserVO);
 }

+ 18 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/NoticeMapper.java

@@ -0,0 +1,18 @@
+package com.lantone.dblayermbg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.dto.ListManagePageDTO;
+import com.lantone.common.vo.ListManagePageVO;
+import com.lantone.dblayermbg.entity.Notice;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 表名:sys_notice Mapper接口
+ * </p>
+ */
+public interface NoticeMapper extends BaseMapper<Notice> {
+
+    IPage<ListManagePageDTO> listPage(@Param("listManagePageVO") ListManagePageVO listManagePageVO);
+}

+ 18 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/NoticeUserMapper.java

@@ -0,0 +1,18 @@
+package com.lantone.dblayermbg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.dto.GetMyNoticeListDTO;
+import com.lantone.common.vo.GetMyNoticeListVO;
+import com.lantone.dblayermbg.entity.NoticeUser;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 表名:sys_notice_user Mapper接口
+ * </p>
+ */
+public interface NoticeUserMapper extends BaseMapper<NoticeUser> {
+
+    IPage<GetMyNoticeListDTO> listPage(@Param("getMyNoticeListVO") GetMyNoticeListVO getMyNoticeListVO);
+}

+ 13 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/NoticeService.java

@@ -0,0 +1,13 @@
+package com.lantone.dblayermbg.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lantone.dblayermbg.entity.Notice;
+
+/**
+ * <p>
+ * 通知详情表 Service类
+ * </p>
+ */
+public interface NoticeService extends IService<Notice> {
+
+}

+ 13 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/NoticeUserService.java

@@ -0,0 +1,13 @@
+package com.lantone.dblayermbg.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lantone.dblayermbg.entity.NoticeUser;
+
+/**
+ * <p>
+ * 用户通知关系表 Service类
+ * </p>
+ */
+public interface NoticeUserService extends IService<NoticeUser> {
+
+}

+ 17 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/impl/NoticeServiceImpl.java

@@ -0,0 +1,17 @@
+package com.lantone.dblayermbg.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.lantone.dblayermbg.entity.Notice;
+import com.lantone.dblayermbg.mapper.NoticeMapper;
+import com.lantone.dblayermbg.service.NoticeService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 通知详情表 Service实现类
+ * </p>
+ */
+@Service
+public class NoticeServiceImpl extends ServiceImpl<NoticeMapper, Notice> implements NoticeService {
+
+}

+ 17 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/impl/NoticeUserServiceImpl.java

@@ -0,0 +1,17 @@
+package com.lantone.dblayermbg.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.lantone.dblayermbg.entity.NoticeUser;
+import com.lantone.dblayermbg.mapper.NoticeUserMapper;
+import com.lantone.dblayermbg.service.NoticeUserService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户通知关系表 Service实现类
+ * </p>
+ */
+@Service
+public class NoticeUserServiceImpl extends ServiceImpl<NoticeUserMapper, NoticeUser> implements NoticeUserService {
+
+}

+ 68 - 4
dblayer-mbg/src/main/resources/mapper/HospitalUserMapper.xml

@@ -41,12 +41,12 @@
     </select>
     <select id="getHospitalUserById" resultType="java.lang.Long">
         SELECT
-            u.id
+        u.id
         FROM
-            sys_user u,
-            sys_hospital_user hu
+        sys_user u,
+        sys_hospital_user hu
         WHERE
-            u.is_deleted = 'N'
+        u.is_deleted = 'N'
         AND hu.is_deleted = 'N'
         AND u.remark = 'Administrators'
         AND u.id = hu.user_id
@@ -68,4 +68,68 @@
         AND d.`status` = '1'
         AND du.user_id = #{userId}
     </select>
+    <select id="getHospitalUser" resultType="com.lantone.common.dto.GetHospitalUserPageDTO">
+        SELECT DISTINCT
+        u.id,
+        u.mobile_phone mobilePhone,
+        u.`name`,
+        hu.hospitalId,
+        hu.hospitalName
+        FROM
+        `sys_user` u
+        LEFT OUTER JOIN (
+        SELECT
+        hu.hospital_id hospitalId,
+        h.`name` hospitalName,
+        hu.user_id
+        FROM
+        sys_hospital_user hu
+        JOIN sys_hospital h ON h.id = hu.hospital_id
+        ) hu ON u.id = hu.user_id
+        LEFT OUTER JOIN (
+        SELECT
+        d.hospital_id,
+        d.id deptId,
+        du.user_id
+        FROM
+        sys_dept_user du
+        JOIN sys_dept d ON d.id = du.dept_id
+        ) du ON du.hospital_id = hu.hospitalId
+        AND hu.user_id = du.user_id
+        WHERE
+        u.is_deleted = 'N'
+        AND u.`status` = '1'
+        <if test="getHospitalUserVO.name != null and getHospitalUserVO.name != ''">
+            AND u.`name` LIKE concat('%',#{getHospitalUserVO.name},'%')
+        </if>
+        <if test="getHospitalUserVO.mobilePhone != null and getHospitalUserVO.mobilePhone != ''">
+            AND u.mobile_phone LIKE concat('%',#{getHospitalUserVO.mobilePhone},'%')
+        </if>
+        <if test="getHospitalUserVO.hospitals !=null and getHospitalUserVO.hospitals.size!=0
+         and (getHospitalUserVO.depts ==null or getHospitalUserVO.depts.size ==0)">
+            AND hu.hospitalId IN
+            <foreach collection="getHospitalUserVO.hospitals" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+        <if test="getHospitalUserVO.depts !=null and getHospitalUserVO.depts.size!=0
+         and (getHospitalUserVO.hospitals ==null or getHospitalUserVO.hospitals.size ==0)">
+            AND du.deptId IN
+            <foreach collection="getHospitalUserVO.depts" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+        <if test="getHospitalUserVO.depts !=null and getHospitalUserVO.depts.size!=0
+             and getHospitalUserVO.hospitals !=null and getHospitalUserVO.hospitals.size !=0">
+            AND (hu.hospitalId IN
+            <foreach collection="getHospitalUserVO.hospitals" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+            OR du.deptId IN
+            <foreach collection="getHospitalUserVO.depts" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+            )
+        </if>
+    </select>
 </mapper>

+ 34 - 0
dblayer-mbg/src/main/resources/mapper/NoticeMapper.xml

@@ -0,0 +1,34 @@
+<?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.lantone.dblayermbg.mapper.NoticeMapper">
+
+    <select id="listPage" resultType="com.lantone.common.dto.ListManagePageDTO">
+        SELECT
+        n.id,
+        n.title,
+        n.type,
+        (
+        CASE
+        WHEN n.type = 0 THEN
+        "公告"
+        WHEN n.type = 1 THEN
+        "其他"
+        ELSE
+        "未知类型"
+        END
+        ) typeName,
+        n.creatorName sender,
+        n.gmt_create gmtCreate
+        FROM
+        sys_notice n
+        WHERE
+        n.is_deleted = 'N'
+        <if test="listManagePageVO.type !=null and listManagePageVO.type != ''">
+            AND n.type = #{listManagePageVO.type}
+        </if>
+        <if test="listManagePageVO.id !=null">
+            AND n.creator = #{listManagePageVO.id}
+        </if>
+
+    </select>
+</mapper>

+ 52 - 0
dblayer-mbg/src/main/resources/mapper/NoticeUserMapper.xml

@@ -0,0 +1,52 @@
+<?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.lantone.dblayermbg.mapper.NoticeUserMapper">
+
+    <select id="listPage" resultType="com.lantone.common.dto.GetMyNoticeListDTO">
+        SELECT
+        n.id,
+        u.user_id userId,
+        n.title,
+        n.type,
+        (
+        CASE
+        WHEN n.type = 0 THEN
+        "公告"
+        WHEN n.type = 1 THEN
+        "其他"
+        ELSE
+        "未知类型"
+        END
+        ) typeName,
+        n.content,
+        n.creatorName sender,
+        n.gmt_create gmtCreate,
+        u.`status`,
+        (
+        CASE
+        WHEN u.`status` = 0 THEN
+        "未读"
+        WHEN u.`status` = 1 THEN
+        "已读"
+        ELSE
+        "未知类型"
+        END
+        ) statusName
+        FROM
+        `sys_notice_user` u,
+        sys_notice n
+        WHERE
+        u.is_deleted = 'N'
+        AND n.is_deleted = 'N'
+        AND u.notice_id = n.id
+        <if test="getMyNoticeListVO.id != null">
+            AND u.user_id = #{getMyNoticeListVO.id}
+        </if>
+        <if test="getMyNoticeListVO.status != null and getMyNoticeListVO.status != ''">
+            AND u.`status` = #{getMyNoticeListVO.status}
+        </if>
+        <if test="getMyNoticeListVO.type != null and getMyNoticeListVO.type != ''">
+            AND n.type = #{getMyNoticeListVO.type}
+        </if>
+    </select>
+</mapper>

+ 20 - 0
dblayer-mbg/src/main/resources/mapper/base/BaseNoticeMapper.xml

@@ -0,0 +1,20 @@
+<?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.lantone.dblayermbg.mapper.NoticeMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.lantone.dblayermbg.entity.Notice">
+        <id column="id" property="id"/>
+        <result column="title" property="title"/>
+        <result column="type" property="type"/>
+        <result column="content" property="content"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="gmt_create" property="gmtCreate"/>
+        <result column="gmt_modified" property="gmtModified"/>
+        <result column="creator" property="creator"/>
+        <result column="creatorName" property="creatorName"/>
+        <result column="modifier" property="modifier"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+</mapper>

+ 19 - 0
dblayer-mbg/src/main/resources/mapper/base/BaseNoticeUserMapper.xml

@@ -0,0 +1,19 @@
+<?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.lantone.dblayermbg.mapper.NoticeUserMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.lantone.dblayermbg.entity.NoticeUser">
+        <id column="id" property="id"/>
+        <result column="user_id" property="userId"/>
+        <result column="notice_id" property="noticeId"/>
+        <result column="status" property="status"/>
+        <result column="is_deleted" property="isDeleted"/>
+        <result column="gmt_create" property="gmtCreate"/>
+        <result column="gmt_modified" property="gmtModified"/>
+        <result column="creator" property="creator"/>
+        <result column="modifier" property="modifier"/>
+        <result column="remark" property="remark"/>
+    </resultMap>
+
+</mapper>

+ 3 - 1
dblayer-mbg/src/test/java/com/lantone/dblayermbg/CodeAutoGenerator.java

@@ -51,7 +51,9 @@ public class CodeAutoGenerator {
             "sys_software_resource",
             "sys_user",
             "sys_user_role",
-            "sys_dept_user"
+            "sys_dept_user",
+            "sys_notice",
+            "sys_notice_user"
     };
 
     /**

+ 11 - 2
message-service/src/main/java/com/lantone/message/web/BackSampleController.java

@@ -1,14 +1,19 @@
 package com.lantone.message.web;
 
 import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.SendToTopicDTO;
+import com.lantone.common.util.ListUtil;
 import com.lantone.message.gateway.MqttGateway;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 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;
 
+import java.util.List;
+
 /**
  * @Description: 即时通讯后端示例
  * @author: rengb
@@ -31,8 +36,12 @@ public class BackSampleController {
 
     @PostMapping("/sendToTopic")
     @ApiOperation("向指定主题发送消息")
-    public CommonResult sendToTopic(String payload, String topic) {
-        mqttGateway.sendToMqtt(payload, topic);
+    public CommonResult sendToTopic(@RequestBody List<SendToTopicDTO> sendToTopics) {
+        if(ListUtil.isNotEmpty(sendToTopics)){
+            sendToTopics.stream().forEach(sendToTopicDTO -> {
+                mqttGateway.sendToMqtt(sendToTopicDTO.getMessage(), sendToTopicDTO.getTopic());
+            });
+        }
         return CommonResult.success(null);
     }
 

+ 1 - 0
security-center/src/main/java/com/lantone/security/enums/DictionaryEnum.java

@@ -16,6 +16,7 @@ public enum DictionaryEnum implements KeyedNamed {
     MANAGE_HIDE_MENU(46, "管理隐藏功能菜单"),
     STATUS(47, "启用禁用"),
     DATA_AUTH(48, "数据权限"),
+    NOTICE_TYPE(50, "通知类型"),
     NOT_SHOW_MENU(41,"不显示菜单");
 
     @Setter

+ 42 - 0
security-center/src/main/java/com/lantone/security/enums/ReadTypeEnum.java

@@ -0,0 +1,42 @@
+package com.lantone.security.enums;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 已读未读注解
+ * @author: gaodm
+ * @time: 2018/9/3 16:01
+ */
+public enum ReadTypeEnum {
+
+    NOT_READ("0", "未读"),
+    READ("1", "已读");
+
+    @Getter
+    @Setter
+    private String key;
+
+    @Getter
+    @Setter
+    private String name;
+
+    ReadTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static ReadTypeEnum getEnum(String key) {
+        for (ReadTypeEnum item : ReadTypeEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        ReadTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+}

+ 41 - 0
security-center/src/main/java/com/lantone/security/enums/ReceiveTypeEnum.java

@@ -0,0 +1,41 @@
+package com.lantone.security.enums;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description: 是否删除, N:未删除,Y:删除
+ * @author: gaodm
+ * @time: 2018/9/3 16:01
+ */
+public enum ReceiveTypeEnum {
+
+    ALL("0", "所有人"),
+    CUSTOM("1", "自定义");
+    @Setter
+    @Getter
+    private String key;
+    @Setter
+    @Getter
+    private String name;
+
+    ReceiveTypeEnum(String key, String name) {
+        this.key = key;
+        this.name = name;
+    }
+
+    public static ReceiveTypeEnum getEnum(String key) {
+        for (ReceiveTypeEnum item : ReceiveTypeEnum.values()) {
+            if (item.key.equals(key)) {
+                return item;
+            }
+        }
+        return null;
+    }
+
+    public static String getName(String key) {
+        ReceiveTypeEnum item = getEnum(key);
+        return item != null ? item.name : null;
+    }
+
+}

+ 25 - 28
security-center/src/main/java/com/lantone/security/facade/FuncManagementFacade.java

@@ -17,6 +17,7 @@ import com.lantone.common.vo.UpdateMenuVO;
 import com.lantone.dblayermbg.entity.Menu;
 import com.lantone.dblayermbg.entity.MenuResource;
 import com.lantone.dblayermbg.entity.Resource;
+import com.lantone.dblayermbg.entity.RoleSoftwareMenu;
 import com.lantone.dblayermbg.entity.SoftwareMenu;
 import com.lantone.dblayermbg.entity.SoftwareResource;
 import com.lantone.dblayermbg.entity.User;
@@ -230,18 +231,14 @@ public class FuncManagementFacade {
                 softwareMenu.setMenuId(menuID);
                 softwareMenu.setSoftwareId(softwareId);
                 if (softwareMenuFacade.save(softwareMenu)) {
-//                    Long softwareMenuId = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
-//                            .eq("software_id", softwareMenu.getSoftwareId())
-//                            .eq("menu_id", softwareMenu.getMenuId())
-//                            .eq("is_deleted", IsDeleteEnum.N.getKey())).get(0).getId();
-//                    RoleSoftwareMenu roleSoftwareMenu = new RoleSoftwareMenu();
-//                    roleSoftwareMenu.setRoleId(roleID);
-//                    roleSoftwareMenu.setSoftwareMenuId(softwareMenuId);
-//                    if (roleSoftwareMenuFacade.save(roleSoftwareMenu)) {
-//
-//                    } else {
-//                        Asserts.fail("角色与服务菜单关系插入失败");
-//                    }
+                    RoleSoftwareMenu roleSoftwareMenu = new RoleSoftwareMenu();
+                    roleSoftwareMenu.setRoleId(roleID);
+                    roleSoftwareMenu.setSoftwareMenuId(softwareMenu.getId());
+                    if (roleSoftwareMenuFacade.save(roleSoftwareMenu)) {
+
+                    } else {
+                        Asserts.fail("角色与服务菜单关系插入失败");
+                    }
                 } else {
                     Asserts.fail("服务与菜单对应关系插入失败");
                 }
@@ -371,22 +368,22 @@ public class FuncManagementFacade {
             Asserts.fail("服务菜单关系清除失败");
         }
         //2.2删除超级管理员该菜单的管理sys_software_menu、sys_role_software_menu
-//        List<Long> softwareMenuIds = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
-//                .eq("menu_id", menuId)
-//                .eq("is_deleted", IsDeleteEnum.N.getKey())).stream().map(SoftwareMenu::getId).collect(Collectors.toList());
-//        if (roleSoftwareMenuFacade.remove(new UpdateWrapper<RoleSoftwareMenu>()
-//                .in("software_menu_id", softwareMenuIds)
-//                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
-//            if (softwareMenuFacade.remove(new UpdateWrapper<SoftwareMenu>()
-//                    .eq("menu_id", menuId)
-//                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
-//                return true;
-//            } else {
-//                Asserts.fail("服务菜单关系清除失败");
-//            }
-//        } else {
-//            Asserts.fail("角色对应服务菜单关系清除失败");
-//        }
+        List<Long> softwareMenuIds = softwareMenuFacade.list(new QueryWrapper<SoftwareMenu>()
+                .eq("menu_id", menuId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey())).stream().map(SoftwareMenu::getId).collect(Collectors.toList());
+        if (roleSoftwareMenuFacade.remove(new UpdateWrapper<RoleSoftwareMenu>()
+                .in("software_menu_id", softwareMenuIds)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+            if (softwareMenuFacade.remove(new UpdateWrapper<SoftwareMenu>()
+                    .eq("menu_id", menuId)
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+                return true;
+            } else {
+                Asserts.fail("服务菜单关系清除失败");
+            }
+        } else {
+            Asserts.fail("角色对应服务菜单关系清除失败");
+        }
         return false;
     }
 

+ 287 - 0
security-center/src/main/java/com/lantone/security/facade/NoticeManagementFacade.java

@@ -0,0 +1,287 @@
+package com.lantone.security.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.dto.GetHospitalTreeDTO;
+import com.lantone.common.dto.GetHospitalUserPageDTO;
+import com.lantone.common.dto.GetMyNoticeListDTO;
+import com.lantone.common.dto.GetNoticeInfoByIdDTO;
+import com.lantone.common.dto.ListManagePageDTO;
+import com.lantone.common.dto.SendToTopicDTO;
+import com.lantone.common.enums.IsDeleteEnum;
+import com.lantone.common.enums.StatusEnum;
+import com.lantone.common.exception.Asserts;
+import com.lantone.common.util.DateUtil;
+import com.lantone.common.util.ListUtil;
+import com.lantone.common.util.SysUserUtils;
+import com.lantone.common.vo.AddNoticeVO;
+import com.lantone.common.vo.GetHospitalUserVO;
+import com.lantone.common.vo.GetMyNoticeListVO;
+import com.lantone.common.vo.ListManagePageVO;
+import com.lantone.dblayermbg.entity.Dept;
+import com.lantone.dblayermbg.entity.DeptUser;
+import com.lantone.dblayermbg.entity.HospitalUser;
+import com.lantone.dblayermbg.entity.Notice;
+import com.lantone.dblayermbg.entity.NoticeUser;
+import com.lantone.dblayermbg.entity.User;
+import com.lantone.dblayermbg.facade.DeptFacade;
+import com.lantone.dblayermbg.facade.DeptUserFacade;
+import com.lantone.dblayermbg.facade.DictionaryInfoFacade;
+import com.lantone.dblayermbg.facade.HospitalFacade;
+import com.lantone.dblayermbg.facade.HospitalUserFacade;
+import com.lantone.dblayermbg.facade.NoticeFacade;
+import com.lantone.dblayermbg.facade.NoticeUserFacade;
+import com.lantone.dblayermbg.facade.UserFacade;
+import com.lantone.dblayermbg.service.impl.NoticeUserServiceImpl;
+import com.lantone.security.enums.DictionaryEnum;
+import com.lantone.security.enums.ReadTypeEnum;
+import com.lantone.security.enums.ReceiveTypeEnum;
+import com.lantone.security.enums.ReturnTypeEnum;
+import com.lantone.security.service.MessageService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 站内通知管理-业务处理类
+ * @author: songxl
+ * @time: 2021/9/10 13:39
+ */
+@Component
+public class NoticeManagementFacade {
+    @Autowired
+    private NoticeUserFacade noticeUserFacade;
+    @Autowired
+    private UserFacade userFacade;
+    @Autowired
+    private NoticeFacade noticeFacade;
+    @Autowired
+    private HospitalFacade hospitalFacade;
+    @Autowired
+    private HospitalUserFacade hospitalUserFacade;
+    @Autowired
+    private DeptUserFacade deptUserFacade;
+    @Autowired
+    private DeptFacade deptFacade;
+    @Autowired
+    private DictionaryInfoFacade dictionaryInfoFacade;
+    @Autowired
+    private MessageService messageService;
+
+    /**
+     * @param getMyNoticeListVO
+     * @Description我的通知列表页
+     * @Return com.baomidou.mybatisplus.core.metadata.IPage<com.lantone.common.dto.GetMyNoticeListDTO>
+     */
+    public IPage<GetMyNoticeListDTO> listPage(GetMyNoticeListVO getMyNoticeListVO) {
+        getMyNoticeListVO.setId(SysUserUtils.getCurrentPrincipleId());
+        return noticeUserFacade.getBaseMapper().listPage(getMyNoticeListVO);
+    }
+
+    /**
+     * @param listManagePageVO
+     * @Description通知管理列表页
+     * @Return com.baomidou.mybatisplus.core.metadata.IPage<com.lantone.common.dto.GetMyNoticeListDTO>
+     */
+    public IPage<ListManagePageDTO> listManagePage(ListManagePageVO listManagePageVO) {
+        listManagePageVO.setId(SysUserUtils.getCurrentPrincipleId());
+        return noticeFacade.getBaseMapper().listPage(listManagePageVO);
+    }
+
+    /**
+     * @param addNoticeVO
+     * @Description添加通知
+     * @Return java.lang.Boolean
+     */
+    public Boolean add(AddNoticeVO addNoticeVO) {
+        addNoticeVO.setCreator(SysUserUtils.getCurrentPrincipleId());
+        User user = userFacade.getById(SysUserUtils.getCurrentPrincipleId());
+        if (user != null) {
+            addNoticeVO.setCreatorName(user.getName());
+        }
+        Notice notice = new Notice();
+        BeanUtils.copyProperties(addNoticeVO, notice);
+        notice.setCreator(SysUserUtils.getCurrentPrincipleId() + "");
+        notice.setGmtCreate(DateUtil.now());
+        //根据通知类型查询通知用户
+        Set<Long> userIds = new HashSet<>();
+        if (ReceiveTypeEnum.ALL.getKey().equals(addNoticeVO.getReceiveType())) {
+            //获取当前登录用户管理的医院
+            List<Long> hospitals = hospitalFacade.getBaseMapper()
+                    .getHospitalTreeInfo(SysUserUtils.getCurrentHospitalId(), StatusEnum.Enable.getKey()).stream()
+                    .map(GetHospitalTreeDTO::getHospitalId).collect(Collectors.toList());
+            //获取这些组织的用户
+            getUserByHospitals(hospitals, userIds);
+        } else if (ReceiveTypeEnum.CUSTOM.getKey().equals(addNoticeVO.getReceiveType())) {
+            if (ListUtil.isEmpty(addNoticeVO.getSendHospitals()) &&
+                    ListUtil.isEmpty(addNoticeVO.getSendDepts()) &&
+                    ListUtil.isEmpty(addNoticeVO.getSendUsers())) {
+                Asserts.fail("选择发送的用户为空~");
+            }
+            //获取通知的医院-转成用户
+            if (ListUtil.isNotEmpty(addNoticeVO.getSendHospitals())) {
+                getUserByHospitals(addNoticeVO.getSendHospitals(), userIds);
+            }
+            //获取通知的科室-转成用户
+            if (ListUtil.isNotEmpty(addNoticeVO.getSendDepts())) {
+                getUserByDepts(addNoticeVO.getSendDepts(), userIds);
+            }
+            if (ListUtil.isNotEmpty(addNoticeVO.getSendUsers())) {
+                userIds.addAll(addNoticeVO.getSendUsers());
+            }
+        } else {
+            Asserts.fail("接收类型不存在,请检查重新输入~");
+        }
+        if (userIds.isEmpty()) {
+            Asserts.fail("通知用户为空,请联系管理员~");
+        }
+        if (noticeFacade.save(notice)) {
+            //发送通知
+            return sendNotice(userIds, notice.getId());
+        }
+        return false;
+    }
+
+    /**
+     * @param userIds
+     * @param id
+     * @Description发送通知
+     * @Return java.lang.Boolean
+     */
+    private Boolean sendNotice(Set<Long> userIds, Long id) {
+        List<NoticeUser> noticeUsers = new ArrayList<>();
+        List<SendToTopicDTO> sendToTopics = new ArrayList<>();
+        userIds.stream().forEach(userId -> {
+            NoticeUser noticeUser = new NoticeUser();
+            noticeUser.setUserId(userId);
+            noticeUser.setNoticeId(id);
+            noticeUsers.add(noticeUser);
+            SendToTopicDTO sendToTopicDTO = new SendToTopicDTO();
+            sendToTopicDTO.setMessage("+1");
+            sendToTopicDTO.setTopic(userId+"");
+            sendToTopics.add(sendToTopicDTO);
+        });
+        messageService.sendToTopic(sendToTopics);
+        return new NoticeUserServiceImpl().saveBatch(noticeUsers);
+    }
+
+    /**
+     * @param hospitals
+     * @param userIds
+     * @Description获取医院的用户
+     * @Return void
+     */
+    private void getUserByHospitals(List<Long> hospitals, Set<Long> userIds) {
+
+        if (ListUtil.isEmpty(hospitals)) {
+            Asserts.fail("当前管理员发送通知的组织集合为空,请联系管理员~");
+        }
+        //获取该医院的用户
+        userIds.addAll(hospitalUserFacade.list(new QueryWrapper<HospitalUser>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("hospital_id", hospitals)).stream().map(HospitalUser::getUserId).collect(Collectors.toSet()));
+
+        //获取医院的科室
+        getUserByDepts(deptFacade.list(new QueryWrapper<Dept>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("hospital_id", hospitals)).stream().map(Dept::getId).collect(Collectors.toList()), userIds);
+    }
+
+    /**
+     * @param depts
+     * @param userIds
+     * @Description获取科室的用户
+     * @Return void
+     */
+    private void getUserByDepts(List<Long> depts, Set<Long> userIds) {
+        if (ListUtil.isEmpty(depts)) {
+            Asserts.fail("当前管理员发送通知的组织集合为空,请联系管理员~");
+        }
+        //获取该医院的用户
+        userIds.addAll(deptUserFacade.list(new QueryWrapper<DeptUser>()
+                .eq("is_deleted", IsDeleteEnum.N.getKey())
+                .in("dept_id", depts)).stream().map(DeptUser::getUserId).collect(Collectors.toSet()));
+    }
+
+    /**
+     * @param id
+     * @param type
+     * @Description获取通知详情
+     * @Return com.lantone.common.dto.GetNoticeInfoByIdDTO
+     */
+    public GetNoticeInfoByIdDTO getNoticeInfoById(Long id, String type) {
+
+        GetNoticeInfoByIdDTO getNoticeInfoByIdDTO = new GetNoticeInfoByIdDTO();
+        //获取字典类型
+        Map<String, String> noticeType = dictionaryInfoFacade.getOneDicMap(ReturnTypeEnum.INTERFACE.getKey(),
+                DictionaryEnum.NOTICE_TYPE.getKey() + "");
+        Notice notice = noticeFacade.getById(id);
+        if (notice == null) {
+            Asserts.fail("通知不存在,请联系管理员~");
+        }
+        BeanUtils.copyProperties(notice, getNoticeInfoByIdDTO);
+        getNoticeInfoByIdDTO.setTypeName(noticeType.get(getNoticeInfoByIdDTO.getType()));
+        //我的通知点击查看要更新通知状态为已读
+        if ("1".equals(type)) {
+            if (!noticeUserFacade.update(new UpdateWrapper<NoticeUser>()
+                    .set("status", ReadTypeEnum.READ.getKey())
+                    .eq("user_id", SysUserUtils.getCurrentPrincipleId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())
+                    .eq("notice_id", notice.getId()))) {
+                Asserts.fail("通知已读状态更新失败,请联系管理员~");
+            }
+        }
+        return getNoticeInfoByIdDTO;
+    }
+
+    /**
+     * @param id
+     * @Description删除通知
+     * @Return boolean
+     */
+    public boolean deleteNoticeInfo(Long id) {
+        if (noticeFacade.update(new UpdateWrapper<Notice>()
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
+                .eq("id", id)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+            return noticeUserFacade.update(new UpdateWrapper<NoticeUser>()
+                    .set("is_deleted", IsDeleteEnum.Y.getKey())
+                    .in("notice_id", id)
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()));
+
+        }
+        return false;
+    }
+
+    /**
+     * @param
+     * @Description获取未读信息数量
+     * @Return java.lang.Integer
+     */
+    public Map<String, Integer> getNotNoticeCount() {
+        Map<String, Integer> out = new HashMap<>();
+        out.put("count", noticeUserFacade.count(new QueryWrapper<NoticeUser>()
+                .eq("user_id", SysUserUtils.getCurrentPrincipleId())
+                .eq("status", ReadTypeEnum.NOT_READ.getKey())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())));
+        return out;
+    }
+
+    /**
+     * @param getHospitalUserVO
+     * @Description获取用户列表
+     * @Return com.baomidou.mybatisplus.core.metadata.IPage<com.lantone.common.dto.GetHospitalUserPageDTO>
+     */
+    public IPage<GetHospitalUserPageDTO> getHospitalUser(GetHospitalUserVO getHospitalUserVO) {
+        return hospitalUserFacade.getBaseMapper().getHospitalUser(getHospitalUserVO);
+    }
+}

+ 6 - 0
security-center/src/main/java/com/lantone/security/service/MessageService.java

@@ -4,9 +4,12 @@ import com.lantone.common.api.CommonResult;
 import com.lantone.common.dto.AbnormalLogDTO;
 import com.lantone.common.dto.LoginLogDTO;
 import com.lantone.common.dto.OperationLogDTO;
+import com.lantone.common.dto.SendToTopicDTO;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.web.bind.annotation.PostMapping;
 
+import java.util.List;
+
 /**
  * @Description: 消息服务远程调用
  * @author: rengb
@@ -27,4 +30,7 @@ public interface MessageService {
     @PostMapping("/abnormalLogHandle")
     CommonResult abnormalLogHandle(AbnormalLogDTO abnormalLogDTO);
 
+    @PostMapping("/backSample/sendToTopic")
+    CommonResult sendToTopic(List<SendToTopicDTO> sendToTopics);
+
 }

+ 89 - 0
security-center/src/main/java/com/lantone/security/web/NoticeManagementController.java

@@ -0,0 +1,89 @@
+package com.lantone.security.web;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.GetHospitalUserPageDTO;
+import com.lantone.common.dto.GetMyNoticeListDTO;
+import com.lantone.common.dto.GetNoticeInfoByIdDTO;
+import com.lantone.common.dto.ListManagePageDTO;
+import com.lantone.common.vo.AddNoticeVO;
+import com.lantone.common.vo.GetHospitalUserVO;
+import com.lantone.common.vo.GetMyNoticeListVO;
+import com.lantone.common.vo.ListManagePageVO;
+import com.lantone.security.facade.NoticeManagementFacade;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+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.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.Map;
+
+/**
+ * @Description: 站内通知管理API
+ * @author: songxl
+ * @time: 2021/9/10 13:39
+ */
+@RestController
+@Api(value = "站内通知管理API", tags = {"站内通知管理API"})
+@RequestMapping("/noticeManage")
+public class NoticeManagementController {
+
+    @Autowired
+    private NoticeManagementFacade noticeManagementFacade;
+
+    @ApiOperation(value = "我的通知列表页")
+    @PostMapping(value = "/listPage")
+    public CommonResult<IPage<GetMyNoticeListDTO>> listPage(@Valid @RequestBody GetMyNoticeListVO getMyNoticeListVO) {
+        return CommonResult.success(noticeManagementFacade.listPage(getMyNoticeListVO));
+    }
+
+    @ApiOperation(value = "知管理列表页")
+    @PostMapping(value = "/listManagePage")
+    public CommonResult<IPage<ListManagePageDTO>> listManagePage(@Valid @RequestBody ListManagePageVO listManagePageVO) {
+        return CommonResult.success(noticeManagementFacade.listManagePage(listManagePageVO));
+    }
+
+    @ApiOperation(value = "获取指定组织的用户")
+    @PostMapping(value = "/getHospitalUser")
+    public CommonResult<IPage<GetHospitalUserPageDTO>> getHospitalUser(@Valid @RequestBody GetHospitalUserVO getHospitalUserVO) {
+        return CommonResult.success(noticeManagementFacade.getHospitalUser(getHospitalUserVO));
+    }
+
+    @ApiOperation(value = "获取未读信息数量")
+    @PostMapping(value = "/getNotNoticeCount")
+    public CommonResult<Map<String, Integer>> getNotNoticeCount() {
+        return CommonResult.success(noticeManagementFacade.getNotNoticeCount());
+    }
+
+
+    @ApiOperation(value = "添加")
+    @PostMapping(value = "/add")
+    @Transactional
+    public CommonResult<Boolean> add(@Valid @RequestBody AddNoticeVO addNoticeVO) {
+        return CommonResult.success(noticeManagementFacade.add(addNoticeVO));
+    }
+
+    @ApiOperation(value = "查看",
+            notes = "type:管理列表查看通知内容还是我的通知列表查看通知功能(0:管理页面查看,1:我的通知列表查看),必填<br>")
+    @PostMapping(value = "/getNoticeInfoById")
+    public CommonResult<GetNoticeInfoByIdDTO> getNoticeInfoById(@RequestParam @Valid @NotNull(message = "通知编号为空") Long id
+            , @RequestParam @Valid @NotBlank(message = "查看类型为空") String type) {
+        return CommonResult.success(noticeManagementFacade.getNoticeInfoById(id, type));
+    }
+
+    @ApiOperation(value = "删除")
+    @PostMapping(value = "/deleteNoticeInfo")
+    @Transactional
+    public CommonResult<Boolean> deleteNoticeInfo(@RequestParam @Valid @NotNull(message = "通知编号为空") Long id) {
+        return CommonResult.success(noticeManagementFacade.deleteNoticeInfo(id));
+    }
+
+}