Pārlūkot izejas kodu

发送、获取通知不同组织用户区分开

songxinlu 3 gadi atpakaļ
vecāks
revīzija
7556c7fff0

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

@@ -26,8 +26,8 @@ public class AddNoticeVO {
     @ApiModelProperty(value = "通知内容",required = true)
     @NotBlank(message = "通知内容不能为空")
     private String content;
-    @ApiModelProperty(value = "发送用户集合")
-    private List<Long> sendUsers;
+    @ApiModelProperty(value = "发送用户集合 组织id-用户id")
+    private List<String> sendUsers;
     @ApiModelProperty(value = "发送科室集合")
     private List<Long> sendDepts;
     @ApiModelProperty(value = "发送医院集合")

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

@@ -14,6 +14,8 @@ import javax.validation.constraints.NotBlank;
 @Data
 public class GetMyNoticeListVO extends BasePageVo {
 
+    @ApiModelProperty(value = "我的通知组织id" ,hidden = true)
+    private Long hospitalId;
     @ApiModelProperty(value = "我的通知用户id" ,hidden = true)
     private Long id;
     @ApiModelProperty(value = "通知类型 0:公告,1:其他")

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

@@ -28,6 +28,12 @@ public class NoticeUser implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
+    /**
+     * 组织id
+     */
+    @TableField("hospital_id")
+    private Long hospitalId;
+
     /**
      * 用户ID
      */

+ 6 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/DeptUserMapper.java

@@ -2,6 +2,11 @@ package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.lantone.dblayermbg.entity.DeptUser;
+import com.lantone.dblayermbg.entity.HospitalUser;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+import java.util.stream.DoubleStream;
 
 /**
  * <p>
@@ -10,4 +15,5 @@ import com.lantone.dblayermbg.entity.DeptUser;
  */
 public interface DeptUserMapper extends BaseMapper<DeptUser> {
 
+    List<HospitalUser> getDeptUser(@Param("depts") List<Long> depts);
 }

+ 18 - 0
dblayer-mbg/src/main/resources/mapper/DeptUserMapper.xml

@@ -2,4 +2,22 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.lantone.dblayermbg.mapper.DeptUserMapper">
 
+    <select id="getDeptUser" resultType="com.lantone.dblayermbg.entity.HospitalUser">
+        SELECT DISTINCT
+            du.user_id userId,
+            d.hospital_id hospitalId
+        FROM
+            `sys_dept_user` du,
+            sys_dept d
+        WHERE
+          du.is_deleted = 'N'
+        AND d.is_deleted = 'N'
+        AND	d.id = du.dept_id
+        <if test="depts !=null and depts!=0">
+            AND du.dept_id IN
+            <foreach collection="depts" item="id" open="(" close=")" separator=",">
+                #{id}
+            </foreach>
+        </if>
+    </select>
 </mapper>

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

@@ -39,6 +39,9 @@
         u.is_deleted = 'N'
         AND n.is_deleted = 'N'
         AND u.notice_id = n.id
+        <if test="getMyNoticeListVO.hospitalId != null">
+            AND u.hospital_id = #{getMyNoticeListVO.hospitalId}
+        </if>
         <if test="getMyNoticeListVO.id != null">
             AND u.user_id = #{getMyNoticeListVO.id}
         </if>

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

@@ -5,6 +5,7 @@
     <!-- 通用查询映射结果 -->
     <resultMap id="BaseResultMap" type="com.lantone.dblayermbg.entity.NoticeUser">
         <id column="id" property="id"/>
+        <result column="hospital_id" property="hospitalId"/>
         <result column="user_id" property="userId"/>
         <result column="notice_id" property="noticeId"/>
         <result column="status" property="status"/>

+ 36 - 23
security-center/src/main/java/com/lantone/security/facade/NoticeManagementFacade.java

@@ -14,6 +14,7 @@ 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.StringUtil;
 import com.lantone.common.util.SysUserUtils;
 import com.lantone.common.vo.AddNoticeVO;
 import com.lantone.common.vo.GetHospitalUserVO;
@@ -85,6 +86,7 @@ public class NoticeManagementFacade {
      */
     public IPage<GetMyNoticeListDTO> listPage(GetMyNoticeListVO getMyNoticeListVO) {
         getMyNoticeListVO.setId(SysUserUtils.getCurrentPrincipleId());
+        getMyNoticeListVO.setHospitalId(SysUserUtils.getCurrentHospitalId());
         return noticeUserFacade.getBaseMapper().listPage(getMyNoticeListVO);
     }
 
@@ -114,14 +116,14 @@ public class NoticeManagementFacade {
         notice.setCreator(SysUserUtils.getCurrentPrincipleId() + "");
         notice.setGmtCreate(DateUtil.now());
         //根据通知类型查询通知用户
-        Set<Long> userIds = new HashSet<>();
+        Set<HospitalUser> hospitalUsers = 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);
+            getUserByHospitals(hospitals, hospitalUsers);
         } else if (ReceiveTypeEnum.CUSTOM.getKey().equals(addNoticeVO.getReceiveType())) {
             if (ListUtil.isEmpty(addNoticeVO.getSendHospitals()) &&
                     ListUtil.isEmpty(addNoticeVO.getSendDepts()) &&
@@ -130,46 +132,58 @@ public class NoticeManagementFacade {
             }
             //获取通知的医院-转成用户
             if (ListUtil.isNotEmpty(addNoticeVO.getSendHospitals())) {
-                getUserByHospitals(addNoticeVO.getSendHospitals(), userIds);
+                getUserByHospitals(addNoticeVO.getSendHospitals(), hospitalUsers);
             }
             //获取通知的科室-转成用户
             if (ListUtil.isNotEmpty(addNoticeVO.getSendDepts())) {
-                getUserByDepts(addNoticeVO.getSendDepts(), userIds);
+                getUserByDepts(addNoticeVO.getSendDepts(), hospitalUsers);
             }
             if (ListUtil.isNotEmpty(addNoticeVO.getSendUsers())) {
-                userIds.addAll(addNoticeVO.getSendUsers());
+                try {
+                    addNoticeVO.getSendUsers().stream().forEach(temp -> {
+                        if (StringUtil.isNotBlank(temp) && temp.contains("-")) {
+                            HospitalUser hospitaluser = new HospitalUser();
+                            hospitaluser.setHospitalId(Long.parseLong(temp.split("-")[0]));
+                            hospitaluser.setUserId(Long.parseLong(temp.split("-")[1]));
+                            hospitalUsers.add(hospitaluser);
+                        }
+                    });
+                } catch (Exception e) {
+
+                }
             }
         } else {
             Asserts.fail("接收类型不存在,请检查重新输入~");
         }
-        if (userIds.isEmpty()) {
+        if (hospitalUsers.isEmpty()) {
             Asserts.fail("通知用户为空,请联系管理员~");
         }
         if (noticeFacade.save(notice)) {
             //发送通知
-            return sendNotice(userIds, notice.getId());
+            return sendNotice(hospitalUsers, notice.getId());
         }
         return false;
     }
 
     /**
-     * @param userIds
+     * @param hospitalUsers
      * @param id
      * @Description发送通知
      * @Return java.lang.Boolean
      */
-    private Boolean sendNotice(Set<Long> userIds, Long id) {
+    private Boolean sendNotice(Set<HospitalUser> hospitalUsers, Long id) {
         List<NoticeUser> noticeUsers = new ArrayList<>();
         List<SendToTopicDTO> sendToTopics = new ArrayList<>();
-        userIds.stream().forEach(userId -> {
+        hospitalUsers.stream().forEach(hospitalUser -> {
             NoticeUser noticeUser = new NoticeUser();
-            noticeUser.setUserId(userId);
+            noticeUser.setHospitalId(hospitalUser.getHospitalId());
+            noticeUser.setUserId(hospitalUser.getUserId());
             noticeUser.setNoticeId(id);
             noticeUsers.add(noticeUser);
             SendToTopicDTO sendToTopicDTO = new SendToTopicDTO();
             sendToTopicDTO.setMessage("+1");
             sendToTopicDTO.setType("count");
-            sendToTopicDTO.setTopic(userId + "");
+            sendToTopicDTO.setTopic(hospitalUser.getHospitalId() + "-" + hospitalUser.getUserId() + "");
             sendToTopics.add(sendToTopicDTO);
         });
         messageService.sendToTopic(sendToTopics);
@@ -178,45 +192,43 @@ public class NoticeManagementFacade {
 
     /**
      * @param hospitals
-     * @param userIds
+     * @param hospitalUsers
      * @Description获取医院的用户
      * @Return void
      */
-    private void getUserByHospitals(List<Long> hospitals, Set<Long> userIds) {
+    private void getUserByHospitals(List<Long> hospitals, Set<HospitalUser> hospitalUsers) {
 
         if (ListUtil.isEmpty(hospitals)) {
             Asserts.fail("当前管理员发送通知的组织集合为空,请联系管理员~");
         }
         //获取该医院的用户
-        Set<Long> tempUsers = hospitalUserFacade.list(new QueryWrapper<HospitalUser>()
+        Set<HospitalUser> tempUsers = hospitalUserFacade.list(new QueryWrapper<HospitalUser>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
-                .in("hospital_id", hospitals)).stream().map(HospitalUser::getUserId).collect(Collectors.toSet());
+                .in("hospital_id", hospitals)).stream().collect(Collectors.toSet());
         if (tempUsers != null && tempUsers.isEmpty()) {
-            userIds.addAll(tempUsers);
+            hospitalUsers.addAll(tempUsers);
         }
         //获取医院的科室
         List<Long> tempDepts = deptFacade.list(new QueryWrapper<Dept>()
                 .eq("is_deleted", IsDeleteEnum.N.getKey())
                 .in("hospital_id", hospitals)).stream().map(Dept::getId).collect(Collectors.toList());
         if (ListUtil.isNotEmpty(tempDepts)) {
-            getUserByDepts(tempDepts, userIds);
+            getUserByDepts(tempDepts, hospitalUsers);
         }
     }
 
     /**
      * @param depts
-     * @param userIds
+     * @param hospitalUsers
      * @Description获取科室的用户
      * @Return void
      */
-    private void getUserByDepts(List<Long> depts, Set<Long> userIds) {
+    private void getUserByDepts(List<Long> depts, Set<HospitalUser> hospitalUsers) {
         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()));
+        hospitalUsers.addAll(deptUserFacade.getBaseMapper().getDeptUser(depts).stream().collect(Collectors.toSet()));
     }
 
     /**
@@ -277,6 +289,7 @@ public class NoticeManagementFacade {
     public Map<String, Integer> getNotNoticeCount() {
         Map<String, Integer> out = new HashMap<>();
         out.put("count", noticeUserFacade.count(new QueryWrapper<NoticeUser>()
+                .eq("hospital_id", SysUserUtils.getCurrentHospitalId())
                 .eq("user_id", SysUserUtils.getCurrentPrincipleId())
                 .eq("status", ReadTypeEnum.NOT_READ.getKey())
                 .eq("is_deleted", IsDeleteEnum.N.getKey())));