Przeglądaj źródła

组织管理添加校验功能、修改新增组织接口

songxinlu 3 lat temu
rodzic
commit
89184d3711

+ 1 - 1
common/src/main/java/com/lantone/common/dto/GetRoleDTO.java

@@ -35,5 +35,5 @@ public class GetRoleDTO implements Serializable {
     private List<SoftwareDTO> loginSoftwares;
 
     @ApiModelProperty(value = "当前登录对象系统服务菜单功能权限树")
-    private Map<Long,List<UserMenuResourceTreeDTO>> loginUserMenuResourceTree;
+    private List<UserMenuResourceTreeDTO> loginUserMenuResourceTree;
 }

+ 2 - 0
common/src/main/java/com/lantone/common/dto/UserMenuResourceTreeDTO.java

@@ -18,6 +18,8 @@ public class UserMenuResourceTreeDTO implements Serializable {
 
     @ApiModelProperty(value = "系统编号编号")
     private Long softwareId;
+    @ApiModelProperty(value = "系统名称")
+    private String softwareName;
     @ApiModelProperty(value = "菜单编号")
     private Long menuId;
     @ApiModelProperty(value = "父级菜单编号")

+ 0 - 11
common/src/main/java/com/lantone/common/vo/AddHospitalTreeVO.java

@@ -16,17 +16,6 @@ import java.util.List;
 public class AddHospitalTreeVO implements Serializable {
     private static final long serialVersionUID = 1L;
 
-//    @ApiModelProperty(value = "医院编号",required = true)
-//    @NotNull(message = "医院编号不能为空")
-//    private Long id;
-//
-//    @ApiModelProperty(value = "医院名称")
-//    private String name;
-//
-//    @ApiModelProperty(value = "组织类型(0:AI病案质控平台 1:集团医院 2:医共 3:医联 4:医院)",required = true)
-//    @NotNull(message = "组织类型不能为空")
-//    private String type;
-
     @ApiModelProperty(value = "科室id列表")
     private List<Long> depts;
 

+ 8 - 1
common/src/main/java/com/lantone/common/vo/AddHospitalVO.java

@@ -31,7 +31,7 @@ public class AddHospitalVO  implements Serializable {
     private String name;
 
 
-    @ApiModelProperty(value = "组织机构类型(0:AI病案质控平台 1:集团医院 2:医共 3:医联 4:医院)",required = true)
+    @ApiModelProperty(value = "组织机构类型(0:AI病案质控平台 1:集团医院 2:医共 3:医联 4:医院 5:科室 6:病区)",required = true)
     @NotBlank(message = "组织机构类型不能为空")
     private String type;
 
@@ -43,6 +43,13 @@ public class AddHospitalVO  implements Serializable {
     private String status;
 
 
+    @ApiModelProperty(value = "病区id")
+    private Long regionId;
+    @ApiModelProperty(value = "病区名称")
+    private String regionName;
+
+
+
     @ApiModelProperty(value = "记录创建时间",hidden = true)
     private Date gmtCreate;
 

+ 1 - 1
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/HospitalMapper.java

@@ -16,7 +16,7 @@ import java.util.List;
  */
 public interface HospitalMapper extends BaseMapper<Hospital> {
 
-    List<GetHospitalTreeDTO> getHospitalTreeInfo(@Param("hospitalId") long hospitalId);
+    List<GetHospitalTreeDTO> getHospitalTreeInfo(@Param("hospitalId") long hospitalId,@Param("status")String status);
 
     List<GetHospitalListInfoDTO> getHospitalById(@Param("getHospitalListInfoVO") GetHospitalListInfoVO getHospitalListInfoVO);
 }

+ 1 - 1
dblayer-mbg/src/main/resources/mapper/HospitalMapper.xml

@@ -11,7 +11,7 @@
             sys_hospital h
         WHERE
             h.is_deleted = 'N'
-        AND h.`status` = '1'
+        AND h.`status` = #{status}
         AND FIND_IN_SET(h.id, getChildList(#{hospitalId}))
     </select>
     <select id="getHospitalById" resultType="com.lantone.common.dto.GetHospitalListInfoDTO">

+ 49 - 41
dblayer-mbg/src/main/resources/mapper/RoleSoftwareMenuMapper.xml

@@ -39,34 +39,38 @@
     </select>
 
     <select id="getUserMenuResourceTree" resultType="com.lantone.common.dto.UserMenuResourceTreeDTO">
-        SELECT DISTINCT
-            t1.menuId,
-            t1.parentId,
-            t1.softwareId,
-            t1.softwareMenuId,
-            t1.menuType,
-            t1.menuName,
-            t2.softwareResourceId
-        FROM
-            (
+            SELECT DISTINCT
+                t1.menuId,
+                t1.parentId,
+                t1.softwareId,
+                t1.softwareMenuId,
+                t1.menuType,
+                t1.menuName,
+                t2.softwareResourceId,
+                t1.softwareName
+                FROM
+                (
                 SELECT
-                    r.id roleId,
-                    m.id menuId,
-                    m.parent_id parentId,
-                    sm.software_id softwareId,
-                    sm.id softwareMenuId,
-                    m.type menuType,
-                    m.`name` menuName
+                r.id roleId,
+                m.id menuId,
+                m.parent_id parentId,
+                sm.software_id softwareId,
+                sm.id softwareMenuId,
+                m.type menuType,
+                m.`name` menuName,
+                s.`name` softwareName
                 FROM
-                    sys_role r
+                sys_role r
                 JOIN sys_role_software_menu rsm ON r.id = rsm.role_id
                 JOIN sys_software_menu sm ON rsm.software_menu_id = sm.id
                 JOIN sys_menu m ON sm.menu_id = m.id
+                JOIN sys_software s ON s.id = sm.software_id
                 WHERE
-                    r.is_deleted = 'N'
+                r.is_deleted = 'N'
                 AND rsm.is_deleted = 'N'
                 AND sm.is_deleted = 'N'
                 AND m.is_deleted = 'N'
+                AND s.is_deleted = 'N'
                 AND r.`status` = '1'
                 AND m.`status` = '1'
                 <if test="roles !=null and roles.size!=0">
@@ -117,29 +121,33 @@
                     t1.softwareMenuId,
                     t1.menuType,
                     t1.menuName,
-                    t2.softwareResourceId
-                FROM
+                    t2.softwareResourceId,
+                    t1.softwareName
+                    FROM
                     (
-                        SELECT
-                            r.id roleId,
-                            m.id menuId,
-                            m.parent_id parentId,
-                            sm.software_id softwareId,
-                            sm.id softwareMenuId,
-                            m.type menuType,
-                            m.`name` menuName
-                        FROM
-                            sys_role r
-                        JOIN sys_role_software_menu rsm ON r.id = rsm.role_id
-                        JOIN sys_software_menu sm ON rsm.software_menu_id = sm.id
-                        JOIN sys_menu m ON sm.menu_id = m.id
-                        WHERE
-                            r.is_deleted = 'N'
-                        AND rsm.is_deleted = 'N'
-                        AND sm.is_deleted = 'N'
-                        AND m.is_deleted = 'N'
-                        AND r.`status` = '1'
-                        AND m.`status` = '1'
+                    SELECT
+                    r.id roleId,
+                    m.id menuId,
+                    m.parent_id parentId,
+                    sm.software_id softwareId,
+                    sm.id softwareMenuId,
+                    m.type menuType,
+                    m.`name` menuName,
+                    s.`name` softwareName
+                    FROM
+                    sys_role r
+                    JOIN sys_role_software_menu rsm ON r.id = rsm.role_id
+                    JOIN sys_software_menu sm ON rsm.software_menu_id = sm.id
+                    JOIN sys_menu m ON sm.menu_id = m.id
+                    JOIN sys_software s ON s.id = sm.software_id
+                    WHERE
+                    r.is_deleted = 'N'
+                    AND rsm.is_deleted = 'N'
+                    AND sm.is_deleted = 'N'
+                    AND m.is_deleted = 'N'
+                    AND s.is_deleted = 'N'
+                    AND r.`status` = '1'
+                    AND m.`status` = '1'
                         <if test="loginRoles !=null and loginRoles.size!=0">
                             AND r.id IN
                             <foreach collection="loginRoles" item="id" open="(" close=")" separator=",">

+ 3 - 1
security-center/src/main/java/com/lantone/security/enums/HospitalTypeEnum.java

@@ -15,7 +15,9 @@ public enum HospitalTypeEnum implements KeyedNamed {
     GROUP_HOSPITAL(1, "集团医院"),
     COMMON_HOSPITAL(2, "医共体"),
     UNION_HOSPITAL(3, "医联体"),
-    SINGLE_HOSPITAL(4, "单家医院");
+    SINGLE_HOSPITAL(4, "单家医院"),
+    DEPT(5, "科室"),
+    REGION(6, "病区");
 
     @Setter
     private int key;

+ 144 - 34
security-center/src/main/java/com/lantone/security/facade/HospitalManagementFacade.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.lantone.common.dto.DownBoxRegionDTO;
 import com.lantone.common.dto.GetHospitalByIdDTO;
 import com.lantone.common.dto.GetHospitalListInfoDTO;
+import com.lantone.common.dto.GetHospitalTreeDTO;
 import com.lantone.common.dto.GetHospitalUserDTO;
 import com.lantone.common.enums.IsDeleteEnum;
 import com.lantone.common.enums.StatusEnum;
@@ -21,16 +22,18 @@ import com.lantone.common.vo.AddRoleVO;
 import com.lantone.common.vo.AddUserVO;
 import com.lantone.common.vo.GetHospitalListInfoVO;
 import com.lantone.common.vo.UpdateHospitalVO;
-import com.lantone.dblayermbg.entity.DictionaryInfo;
+import com.lantone.dblayermbg.entity.Dept;
 import com.lantone.dblayermbg.entity.Hospital;
 import com.lantone.dblayermbg.entity.HospitalUser;
 import com.lantone.dblayermbg.entity.Region;
+import com.lantone.dblayermbg.entity.RegionDept;
 import com.lantone.dblayermbg.entity.Role;
 import com.lantone.dblayermbg.entity.User;
 import com.lantone.dblayermbg.facade.DeptFacade;
 import com.lantone.dblayermbg.facade.DictionaryInfoFacade;
 import com.lantone.dblayermbg.facade.HospitalFacade;
 import com.lantone.dblayermbg.facade.HospitalUserFacade;
+import com.lantone.dblayermbg.facade.RegionDeptFacade;
 import com.lantone.dblayermbg.facade.RegionFacade;
 import com.lantone.dblayermbg.facade.RoleFacade;
 import com.lantone.dblayermbg.facade.UserFacade;
@@ -45,6 +48,8 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
 
 /**
  * 组织管理API
@@ -70,6 +75,8 @@ public class HospitalManagementFacade {
     @Autowired
     private RegionFacade regionFacade;
     @Autowired
+    private RegionDeptFacade regionDeptFacade;
+    @Autowired
     private DictionaryInfoFacade dictionaryInfoFacade;
 
     /**
@@ -78,15 +85,39 @@ public class HospitalManagementFacade {
      * @Return boolean
      */
     public boolean addHospital(AddHospitalVO addHospitalVO) {
-        Hospital hospital = new Hospital();
-        BeanUtils.copyProperties(addHospitalVO, hospital);
-        hospital.setGmtCreate(DateUtil.now());
-        //1.添加组织信息
-        if (hospitalFacade.save(hospital)) {
-            //2.保存该组织的用户
-            return saveUser(hospital.getId(), addHospitalVO);
-        } else {
-            Asserts.fail("组织添加失败");
+
+        //通过任务类型插入医院或科室
+        if((HospitalTypeEnum.DEPT.getKey()+"").equals(addHospitalVO.getType())){
+            Dept dept = new Dept();
+            BeanUtils.copyProperties(addHospitalVO, dept);
+            dept.setHospitalId(addHospitalVO.getParentId());
+            if(deptFacade.save(dept)){
+                //如果选择病区的话保存不能过去和科室的关系
+               if(addHospitalVO.getRegionId()!=null){
+                   RegionDept regionDept  = new RegionDept();
+                   regionDept.setHospitalId(addHospitalVO.getParentId());
+                   regionDept.setRegionId(addHospitalVO.getRegionId());
+                   regionDept.setDeptId(dept.getId());
+                   if(!regionDeptFacade.save(regionDept)){
+                       Asserts.fail("病区和科室关系插入失败");
+                   }
+               }
+                //2.保存该组织的用户
+                return saveUser(dept.getId(), addHospitalVO);
+            } else {
+                Asserts.fail("组织添加失败");
+            }
+        }else {
+            //1.添加组织信息
+            Hospital hospital = new Hospital();
+            BeanUtils.copyProperties(addHospitalVO, hospital);
+            hospital.setGmtCreate(DateUtil.now());
+            if (hospitalFacade.save(hospital)) {
+                //2.保存该组织的用户
+                return saveUser(hospital.getId(), addHospitalVO);
+            } else {
+                Asserts.fail("组织添加失败");
+            }
         }
         return false;
     }
@@ -104,13 +135,19 @@ public class HospitalManagementFacade {
         addRoleVO.setName(addHospitalVO.getName() + "组织管理角色");
         addRoleVO.setRemark("ManagementRole");
         addRoleVO.setStatus("1");
-        addRoleVO.setHospitalId(hospitalId);
+        Long insertHospitalId = 0l;
+        if((HospitalTypeEnum.DEPT.getKey()+"").equals(addHospitalVO.getType())){
+            insertHospitalId = addHospitalVO.getParentId();
+        }else {
+            insertHospitalId = hospitalId;
+        }
+        addRoleVO.setHospitalId(insertHospitalId);
         addRoleVO.setSoftwares(addHospitalVO.getSoftwares());
         if (roleManagementFacade.addRole(addRoleVO)) {
             //2.获取角色id完善新增用户信息
             Long roleId = roleFacade.list(new QueryWrapper<Role>()
                     .eq("name", addHospitalVO.getName() + "组织管理角色")
-                    .eq("hospital_id", hospitalId)).get(0).getId();
+                    .eq("hospital_id", insertHospitalId)).get(0).getId();
             //拼装添加用户信息
             AddUserVO addUserVO = new AddUserVO();
             BeanUtils.copyProperties(addHospitalVO.getAddHospitalUserVO(), addUserVO);
@@ -119,13 +156,22 @@ public class HospitalManagementFacade {
             addUserVO.getRoles().add(roleId);
             addUserVO.setName(addHospitalVO.getName() + "管理员");
             addUserVO.setRemark("Administrators");
-            //用户与组织的关系
+            //用户与组织的关系(医院、科室)
             AddHospitalTreeVO addHospitalTreeVO = new AddHospitalTreeVO();
-//            addHospitalTreeVO.setId(hospitalId);
-            BeanUtils.copyProperties(addHospitalVO, addHospitalTreeVO);
-            addHospitalTreeVO.setHospitals(new ArrayList<>());
-            addHospitalTreeVO.getHospitals().add(hospitalId);
-            addUserVO.setAddHospitalTreeVO(addHospitalTreeVO);
+            if((HospitalTypeEnum.DEPT.getKey()+"").equals(addHospitalVO.getType())){
+                addHospitalTreeVO.setDepts(new ArrayList<>());
+                addHospitalTreeVO.getDepts().add(hospitalId);
+                addUserVO.setAddHospitalTreeVO(addHospitalTreeVO);
+
+                addHospitalTreeVO.setHospitals(new ArrayList<>());
+                addHospitalTreeVO.getHospitals().add(addHospitalVO.getParentId());
+                addUserVO.setAddHospitalTreeVO(addHospitalTreeVO);
+            }else {
+                addHospitalTreeVO.setHospitals(new ArrayList<>());
+                addHospitalTreeVO.getHospitals().add(hospitalId);
+                addUserVO.setAddHospitalTreeVO(addHospitalTreeVO);
+            }
+
             return userManagementFacade.addUser(addUserVO);
         } else {
             Asserts.fail("角色插入失败");
@@ -139,15 +185,40 @@ public class HospitalManagementFacade {
      * @Return boolean
      */
     public boolean deleteHospital(Long hospitalId) {
-        //1.删除组织表sys_hospital
-        if (hospitalFacade.removeById(hospitalId)) {
-            //2.删除该组织的管理用户、角色
-            return deleteHUserAndRole(hospitalId);
-        } else {
-            Asserts.fail("组织表删除失败");
-        }
+        AtomicBoolean out = new AtomicBoolean(false);
+        //1.获取该组织及其子组织
+        List<Long> hospitals = hospitalFacade.getBaseMapper().getHospitalTreeInfo(hospitalId,StatusEnum.Enable.getKey()).stream()
+                .map(GetHospitalTreeDTO::getHospitalId).collect(Collectors.toList());
+        //2.删除这些组织的用户、角色
+        if (ListUtil.isNotEmpty(hospitals)) {
+            hospitals.forEach(id -> {
+                //删除该组织角色
+                if(roleFacade.update(new UpdateWrapper<Role>()
+                        .set("is_deleted", IsDeleteEnum.Y.getKey())
+                        .in("id", roleFacade.list(new QueryWrapper<Role>()
+                                .eq("hospital_id",id))
+                                .stream().map(Role::getId).collect(Collectors.toList())))){
 
-        return false;
+                    //删除组织用户
+                    if(userFacade.update(new UpdateWrapper<User>()
+                            .set("is_deleted", IsDeleteEnum.Y.getKey())
+                            .in("id", hospitalUserFacade.list(new QueryWrapper<HospitalUser>()
+                                    .eq("hospital_id",id))
+                                    .stream().map(HospitalUser::getUserId).collect(Collectors.toList())))){
+                        //删除组织
+                       out.set(hospitalFacade.update(new UpdateWrapper<Hospital>()
+                               .set("is_deleted", IsDeleteEnum.Y.getKey())
+                               .eq("id", id)));
+                    }else {
+                        Asserts.fail("组织用户删除失败");
+                    }
+                }else {
+                    Asserts.fail("组织角色删除失败");
+                }
+
+            });
+        }
+        return out.get();
     }
 
     /**
@@ -201,7 +272,45 @@ public class HospitalManagementFacade {
      * @Return boolean
      */
     public boolean disableHospital(Long hospitalId, String status) {
-        return hospitalFacade.update(new UpdateWrapper<Hospital>().set("status", status).eq("id", hospitalId));
+        AtomicBoolean out = new AtomicBoolean(false);
+        String selectStatus = "0";
+        if(StatusEnum.Enable.getKey().equals(status)){
+            selectStatus = StatusEnum.Disable.getKey();
+        }else {
+            selectStatus = StatusEnum.Enable.getKey();
+        }
+        //1.获取该组织及其子组织
+        List<Long> hospitals = hospitalFacade.getBaseMapper().getHospitalTreeInfo(hospitalId,selectStatus).stream()
+                .map(GetHospitalTreeDTO::getHospitalId).collect(Collectors.toList());
+        //2.禁用这些组织的用户、角色
+        if (ListUtil.isNotEmpty(hospitals)) {
+            hospitals.forEach(id -> {
+                //禁用该组织角色
+                if(roleFacade.update(new UpdateWrapper<Role>()
+                        .set("status", status)
+                        .in("id", roleFacade.list(new QueryWrapper<Role>()
+                                .eq("hospital_id",id))
+                                .stream().map(Role::getId).collect(Collectors.toList())))){
+
+                    //删除组织用户
+                    if(userFacade.update(new UpdateWrapper<User>()
+                            .set("status",status)
+                            .in("id", hospitalUserFacade.list(new QueryWrapper<HospitalUser>()
+                                    .eq("hospital_id",id))
+                                    .stream().map(HospitalUser::getUserId).collect(Collectors.toList())))){
+                        //删除组织
+                        out.set(hospitalFacade.update(new UpdateWrapper<Hospital>()
+                                .set("status", status).eq("id", id)));
+                    }else {
+                        Asserts.fail("组织用户禁用失败");
+                    }
+                }else {
+                    Asserts.fail("组织角色禁用失败");
+                }
+
+            });
+        }
+        return out.get();
     }
 
     /**
@@ -326,23 +435,24 @@ public class HospitalManagementFacade {
     private void getHospitalSonORUser(GetHospitalListInfoDTO hospital) {
         if (hospital != null && hospital.getHospitalId() != null) {
             //获取该组织用户
-            if(hospitalUserFacade.list(new QueryWrapper<HospitalUser>()
-                    .eq("hospital_id",hospital.getHospitalId())
-                    .eq("is_deleted",IsDeleteEnum.N.getKey())).size()>1){
+            if (hospitalUserFacade.list(new QueryWrapper<HospitalUser>()
+                    .eq("hospital_id", hospital.getHospitalId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())).size() > 1) {
                 hospital.setHasUserFlag(true);
             }
             //获取该组织子组织
-            if(hospitalFacade.list(new QueryWrapper<Hospital>()
-                    .eq("parent_id",hospital.getHospitalId())
+            if (hospitalFacade.list(new QueryWrapper<Hospital>()
+                    .eq("parent_id", hospital.getHospitalId())
                     .eq("status", StatusEnum.Enable.getKey())
-                    .eq("is_deleted",IsDeleteEnum.N.getKey())).size()>0){
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())).size() > 0) {
                 hospital.setHasHospitalFlag(true);
             }
         }
     }
+
     /**
-     * @Description重置密码
      * @param hospitalId
+     * @Description重置密码
      * @Return boolean
      */
     public boolean resetPassword(Long hospitalId) {

+ 28 - 15
security-center/src/main/java/com/lantone/security/facade/RoleManagementFacade.java

@@ -41,6 +41,7 @@ import com.lantone.dblayermbg.service.impl.RoleSoftwareResourceServiceImpl;
 import com.lantone.common.enums.IsDeleteEnum;
 import com.lantone.security.enums.DictionaryEnum;
 import com.lantone.security.enums.RelationEnum;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
@@ -252,20 +253,28 @@ public class RoleManagementFacade {
             List<Long> loginRoles = userRoleFacade.getBaseMapper().getUserRoles(SysUserUtils.getCurrentPrincipleId())
                     .stream().map(UserRoleDTO::getRoleId).collect(Collectors.toList());
             if(ListUtil.isNotEmpty(loginRoles)){
+                List<UserMenuResourceTreeDTO> userMenuResourceTreeDTOS =  getUserMenuResourceTreeByRoles(loginRoles, roles.stream().map(Role::getId).collect(Collectors.toList()));
                 //获取用户服务
                 List<SoftwareDTO> loginSoftwares = softwareFacade.getBaseMapper().getUserSoftware(loginRoles);
-                List<SoftwareDTO> hasSoftwares = softwareFacade.getBaseMapper().getUserSoftware(roles.stream().map(Role::getId).collect(Collectors.toList()));
+                List<Long> hasSoftwareIds = softwareFacade.getBaseMapper().getUserSoftware(roles.stream().map(Role::getId).collect(Collectors.toList()))
+                        .stream().map(SoftwareDTO::getId).collect(Collectors.toList());;
                 loginSoftwares.stream().forEach(softwareDTO -> {
-                    hasSoftwares.stream().forEach(hasSoftwareDto -> {
-                        if (softwareDTO.getId().equals(hasSoftwareDto.getId())) {
-                            softwareDTO.setRelation(RelationEnum.Y.getName());
-                        } else {
-                            softwareDTO.setRelation(RelationEnum.N.getName());
-                        }
-                    });
+                    if (hasSoftwareIds.contains(softwareDTO.getId())) {
+                        softwareDTO.setRelation(RelationEnum.Y.getName());
+                    } else {
+                        softwareDTO.setRelation(RelationEnum.N.getName());
+                    }
+                });
+                //添加功能树服务已关联标志
+                userMenuResourceTreeDTOS.stream().forEach(userMenuResourceTreeDTO -> {
+                    if (hasSoftwareIds.contains(userMenuResourceTreeDTO.getSoftwareId())) {
+                        userMenuResourceTreeDTO.setRelation(RelationEnum.Y.getName());
+                    } else {
+                        userMenuResourceTreeDTO.setRelation(RelationEnum.N.getName());
+                    }
                 });
                 getRoleDTO.setLoginSoftwares(loginSoftwares);
-                getRoleDTO.setLoginUserMenuResourceTree(getUserMenuResourceTreeByRoles(loginRoles, roles.stream().map(Role::getId).collect(Collectors.toList())));
+                getRoleDTO.setLoginUserMenuResourceTree(userMenuResourceTreeDTOS);
                 return getRoleDTO;
             }else {
                 Asserts.fail("该登录用户无角色信息");
@@ -320,7 +329,7 @@ public class RoleManagementFacade {
      * @param获取用户功能菜单树
      * @Return java.util.Map<java.lang.Long, java.util.List < com.lantone.common.dto.UserMenuResourceTreeDTO>>
      */
-    public Map<Long, List<UserMenuResourceTreeDTO>> getUserMenuResourceTree() {
+    public List<UserMenuResourceTreeDTO> getUserMenuResourceTree() {
         //1.获取当前用户的角色列表
         List<Long> roles = userRoleFacade.getBaseMapper().getUserRoles(SysUserUtils.getCurrentPrincipleId())
                 .stream().map(UserRoleDTO::getRoleId).collect(Collectors.toList());
@@ -337,7 +346,7 @@ public class RoleManagementFacade {
      * @Description通过角色列表获取用户功能菜单树
      * @Return java.util.Map<java.lang.Long, java.util.List < com.lantone.common.dto.UserMenuResourceTreeDTO>>
      */
-    private Map<Long, List<UserMenuResourceTreeDTO>> getUserMenuResourceTreeByRoles(List<Long> roles) {
+    private List<UserMenuResourceTreeDTO> getUserMenuResourceTreeByRoles(List<Long> roles) {
         List<UserMenuResourceTreeDTO> userMenuResourceTree = roleSoftwareMenuFacade.getBaseMapper().getUserMenuResourceTree(roles);
         return getTree(userMenuResourceTree);
     }
@@ -348,13 +357,13 @@ public class RoleManagementFacade {
      * @Description通过角色列表获取用户功能菜单树
      * @Return java.util.Map<java.lang.Long, java.util.List < com.lantone.common.dto.UserMenuResourceTreeDTO>>
      */
-    private Map<Long, List<UserMenuResourceTreeDTO>> getUserMenuResourceTreeByRoles(List<Long> loginRoles, List<Long> selectRoles) {
+    private List<UserMenuResourceTreeDTO> getUserMenuResourceTreeByRoles(List<Long> loginRoles, List<Long> selectRoles) {
         List<UserMenuResourceTreeDTO> userMenuResourceTree = roleSoftwareMenuFacade.getBaseMapper().getMenuResourceRelation(loginRoles, selectRoles);
         return getTree(userMenuResourceTree);
     }
 
-    private Map<Long, List<UserMenuResourceTreeDTO>> getTree(List<UserMenuResourceTreeDTO> userMenuResourceTree) {
-        Map<Long, List<UserMenuResourceTreeDTO>> resUserMenuResourceTree = new HashMap<>();
+    private List<UserMenuResourceTreeDTO> getTree(List<UserMenuResourceTreeDTO> userMenuResourceTree) {
+        List<UserMenuResourceTreeDTO> resUserMenuResourceTree = new ArrayList<>();
         //2.获取每个系统下的菜单、功能权限
         Map<Long, List<UserMenuResourceTreeDTO>> userMenuResourceMap = EntityUtil
                 .makeEntityListMap(userMenuResourceTree, "softwareId");
@@ -364,10 +373,14 @@ public class RoleManagementFacade {
                 Map<Long, List<UserMenuResourceTreeDTO>> menuResourceMap = EntityUtil
                         .makeEntityListMap(userMenuResourceMap.get(softwareId), "parentId");
                 List<UserMenuResourceTreeDTO> menuRes = menuResourceMap.get(0L);
+                UserMenuResourceTreeDTO tempSoftware = new UserMenuResourceTreeDTO();
+                tempSoftware.setSoftwareId(softwareId);
                 for (UserMenuResourceTreeDTO bean : menuRes) {
+                    tempSoftware.setSoftwareName(bean.getSoftwareName());
                     getSonMenu(bean, menuResourceMap);
                 }
-                resUserMenuResourceTree.put(softwareId, menuRes);
+                tempSoftware.setChildren(menuRes);
+                resUserMenuResourceTree.add(tempSoftware);
             });
         }
         return resUserMenuResourceTree;

+ 116 - 35
security-center/src/main/java/com/lantone/security/facade/UserManagementFacade.java

@@ -138,6 +138,8 @@ public class UserManagementFacade {
         BeanUtils.copyProperties(addUserVO, user);
         user.setGmtCreate(DateUtil.now());
         user.setPassword(BCrypt.hashpw(user.getPassword()));
+        //1.1校验用户
+        checkUser(user.getUsername(), addUserVO.getAddHospitalTreeVO().getHospitals(), addUserVO.getRoles());
         try {
             if (userFacade.save(user)) {
                 //2.插入用户所属组织
@@ -151,6 +153,81 @@ public class UserManagementFacade {
         return false;
     }
 
+    /**
+     * @param usreName
+     * @param hospitals 插入用户组织id
+     * @param roles 插入用户角色id
+     * @Description用户校验
+     * @Return void
+     */
+    private void checkUser(String usreName, List<Long> hospitals, List<Long> roles) {
+
+        //1.当前登录用户、组织是否还存在、能用
+        loginCheck();
+        //2.当前用户是否已存在
+        if (userFacade.list(new QueryWrapper<User>()
+                .eq("username", usreName)
+                .eq("is_deleted", IsDeleteEnum.N.getKey())).size() > 0) {
+            Asserts.fail("该用户已存在,请更换用户名");
+        }
+        //3.校验插入用户所属组织是否正常
+        checkHospitals(hospitals);
+        //4.校验插入用户角色是否正常
+        checkRoles(roles);
+    }
+
+    /**
+     * @param roles
+     * @Description插入角色校验
+     * @Return void
+     */
+    private void checkRoles(List<Long> roles) {
+        if (ListUtil.isNotEmpty(roles)) {
+            if (roles.size() != roleFacade.list(new QueryWrapper<Role>()
+                    .in("id", roles)
+                    .eq("status", StatusEnum.Enable.getKey())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())).size()) {
+                Asserts.fail("插入用户角色列表有改动,请刷新页面重新操作");
+            }
+        }
+    }
+
+    /**
+     * @param hospitals
+     * @Description插入组织校验
+     * @Return void
+     */
+    private void checkHospitals(List<Long> hospitals) {
+        if (ListUtil.isNotEmpty(hospitals)) {
+            if (hospitals.size() != hospitalFacade.list(new QueryWrapper<Hospital>()
+                    .in("id", hospitals)
+                    .eq("status", StatusEnum.Enable.getKey())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey())).size()) {
+                Asserts.fail("插入用户所属组织有改动,请刷新页面重新操作");
+            }
+        }
+    }
+
+    /**
+     * @param
+     * @Description操作用户校验
+     * @Return void
+     */
+    private void loginCheck() {
+        if (hospitalFacade.list(new QueryWrapper<Hospital>()
+                .eq("id", SysUserUtils.getCurrentHospitalId())
+                .eq("status", StatusEnum.Enable.getKey())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())).size() <= 0) {
+            Asserts.fail("操作用户所属组织已被禁用或删除");
+        }
+        if (userFacade.list(new QueryWrapper<User>()
+                .eq("id", SysUserUtils.getCurrentPrincipleId())
+                .eq("status", StatusEnum.Enable.getKey())
+                .eq("is_deleted", IsDeleteEnum.N.getKey())).size() <= 0) {
+            Asserts.fail("该账号暂未开通或已被禁用,请联系管理员~");
+        }
+    }
+
     /**
      * @param addHospitalTreeVO
      * @param userId
@@ -159,7 +236,7 @@ public class UserManagementFacade {
      */
     private boolean saveUserHospital(AddHospitalTreeVO addHospitalTreeVO, Long userId, List<Long> roles) {
 
-        if(ListUtil.isEmpty(addHospitalTreeVO.getDepts())&&ListUtil.isEmpty(addHospitalTreeVO.getHospitals())){
+        if (ListUtil.isEmpty(addHospitalTreeVO.getDepts()) && ListUtil.isEmpty(addHospitalTreeVO.getHospitals())) {
             Asserts.fail("用户关联的医院或科室都为空");
         }
         //插入用户和科室的关系(没有科室信息默认为全院)
@@ -212,7 +289,7 @@ public class UserManagementFacade {
         Hospital hospital = hospitalFacade.getById(SysUserUtils.getCurrentHospitalId());
         //获取当前医院的树状结构
         List<GetHospitalTreeDTO> hospitalTrees = hospitalFacade.getBaseMapper()
-                .getHospitalTreeInfo(SysUserUtils.getCurrentHospitalId());
+                .getHospitalTreeInfo(SysUserUtils.getCurrentHospitalId(), StatusEnum.Enable.getKey());
         //根据parentid分组
         Map<Long, List<GetHospitalTreeDTO>> hospitalMap = EntityUtil.makeEntityListMap(hospitalTrees, "parentId");
         //深度遍历拼装结果
@@ -235,6 +312,8 @@ public class UserManagementFacade {
      */
     public boolean updateUser(UpdateUserVO updateUserVO) {
         //1.删除该用户关联的科室、医院
+        //1.1校验用户
+        checkUser(updateUserVO.getUsername(), updateUserVO.getAddHospitalTreeVO().getHospitals(), updateUserVO.getRoles());
         if (delUserHospitalORDept(updateUserVO.getId())) {
             User user = new User();
             BeanUtils.copyProperties(updateUserVO, user);
@@ -284,11 +363,9 @@ public class UserManagementFacade {
      * @Return boolean
      */
     public boolean deleteUser(Long userId) {
-
-        if (delUserHospitalORDept(userId)) {
-            return userFacade.removeById(userId);
-        }
-        return false;
+        return userFacade.update(new UpdateWrapper<User>()
+                .set("is_deleted", IsDeleteEnum.Y.getKey())
+                .eq("id", userId));
     }
 
     /**
@@ -326,7 +403,7 @@ public class UserManagementFacade {
         //3.2获取当前登录用户的组织机构树
         //获取当前医院的树状结构
         List<GetHospitalTreeDTO> hospitalTrees = hospitalFacade.getBaseMapper()
-                .getHospitalTreeInfo(SysUserUtils.getCurrentHospitalId());
+                .getHospitalTreeInfo(SysUserUtils.getCurrentHospitalId(), StatusEnum.Enable.getKey());
         //根据parentid分组
         Map<Long, List<GetHospitalTreeDTO>> hospitalMap = EntityUtil.makeEntityListMap(hospitalTrees, "parentId");
         //深度遍历拼装结果
@@ -359,10 +436,10 @@ public class UserManagementFacade {
     }
 
     /**
-     * @param hospitalMap 医院结果级
-     * @param hospitals 查询用户所在医院集
-     * @param depts 查询用户所在科室集
-     * @param hospitalTreeDTOS  当前遍历医院集
+     * @param hospitalMap      医院结果级
+     * @param hospitals        查询用户所在医院集
+     * @param depts            查询用户所在科室集
+     * @param hospitalTreeDTOS 当前遍历医院集
      * @Description
      * @Return void
      */
@@ -383,6 +460,7 @@ public class UserManagementFacade {
             getSonHospital(bean, hospitalMap, hospitals, depts);
         }
     }
+
     /**
      * 递归获取医院结构
      *
@@ -399,6 +477,7 @@ public class UserManagementFacade {
             }
         }
     }
+
     /**
      * 递归获取医院结构
      *
@@ -432,66 +511,68 @@ public class UserManagementFacade {
         getUserPageVO.setLocalUserID(SysUserUtils.getCurrentPrincipleId());
         return hospitalUserFacade.getBaseMapper().getUserPage(getUserPageVO);
     }
+
     /**
-     * @Description获取用户所属组织
      * @param
+     * @Description获取用户所属组织
      * @Return java.util.List<com.lantone.common.dto.GetHospitalTreeDTO>
      */
-    public Map<String,Object> getUserHospitals() {
-        Map<String,Object> out = new HashMap<>();
+    public Map<String, Object> getUserHospitals() {
+        Map<String, Object> out = new HashMap<>();
         //但系统单家医院直接跳转
         boolean jumpFlag = true;
         //1.获取用户系统信息
         List<SoftwareDTO> softwares = userFacade.getBaseMapper().getUserSoftwareByUId(SysUserUtils.getCurrentPrincipleId());
-        if(softwares.size()>1){
+        if (softwares.size() > 1) {
             jumpFlag = false;
         }
         AtomicInteger count = new AtomicInteger();
         List<UserSoftwareHospitalDTO> userSoftwareHospitals = new ArrayList<>();
-        if(ListUtil.isNotEmpty(softwares)){
+        if (ListUtil.isNotEmpty(softwares)) {
             softwares.stream().forEach(softwareDTO -> {
                 UserSoftwareHospitalDTO tempU = new UserSoftwareHospitalDTO();
-                BeanUtils.copyProperties(softwareDTO,tempU);
+                BeanUtils.copyProperties(softwareDTO, tempU);
                 //获取该系统下的医院
                 List<GetUserHospitalsDTO> softwareHospitals = userFacade.getBaseMapper()
-                        .getUserSoftwareHospitals(SysUserUtils.getCurrentPrincipleId(),softwareDTO.getId());
+                        .getUserSoftwareHospitals(SysUserUtils.getCurrentPrincipleId(), softwareDTO.getId());
                 count.set(count.get() + softwareHospitals.size());
                 //转换成树状结构
-                Map<Long,List<GetUserHospitalsDTO>> softwareHospitalMap = EntityUtil.makeEntityListMap(softwareHospitals,"parentId");
-                tempU.setHospitals(transTreeData(softwareHospitalMap,softwareHospitals));
+                Map<Long, List<GetUserHospitalsDTO>> softwareHospitalMap = EntityUtil.makeEntityListMap(softwareHospitals, "parentId");
+                tempU.setHospitals(transTreeData(softwareHospitalMap, softwareHospitals));
                 userSoftwareHospitals.add(tempU);
             });
         }
-        if(count.get()>1){
+        if (count.get() > 1) {
             jumpFlag = false;
         }
-        out.put("jump",jumpFlag);
-        out.put("software",userSoftwareHospitals);
+        out.put("jump", jumpFlag);
+        out.put("software", userSoftwareHospitals);
         return out;
     }
+
     /**
-     * @Description将医院信息转换成树状结构
      * @param softwareHospitalMap
      * @param softwareHospitals
+     * @Description将医院信息转换成树状结构
      * @Return java.util.List<com.lantone.common.dto.GetUserHospitalsDTO>
      */
-    private List<GetUserHospitalsDTO> transTreeData(Map<Long, List<GetUserHospitalsDTO>> softwareHospitalMap,List<GetUserHospitalsDTO> softwareHospitals) {
-        if(softwareHospitalMap==null)return null;
+    private List<GetUserHospitalsDTO> transTreeData(Map<Long, List<GetUserHospitalsDTO>> softwareHospitalMap, List<GetUserHospitalsDTO> softwareHospitals) {
+        if (softwareHospitalMap == null) return null;
         List<GetUserHospitalsDTO> out = new ArrayList<>();
-        Set<Long> tempParents  = new HashSet<>();
-        Set<Long> parents  = softwareHospitalMap.keySet();
-        parents.stream().forEach(id->{
+        Set<Long> tempParents = new HashSet<>();
+        Set<Long> parents = softwareHospitalMap.keySet();
+        parents.stream().forEach(id -> {
             softwareHospitals.stream().forEach(getUserHospitalsDTO -> {
-                if(getUserHospitalsDTO.getHospitalId().equals(id)){
+                if (getUserHospitalsDTO.getHospitalId().equals(id)) {
                     tempParents.add(id);
                 }
             });
         });
-        parents.stream().forEach(parentId->{
-            if(!tempParents.contains(parentId)){
+        parents.stream().forEach(parentId -> {
+            if (!tempParents.contains(parentId)) {
                 List<GetUserHospitalsDTO> hospitalListInfos = softwareHospitalMap.get(parentId);
-                for(GetUserHospitalsDTO bean:hospitalListInfos){
-                    getSonHospital(bean,softwareHospitalMap);
+                for (GetUserHospitalsDTO bean : hospitalListInfos) {
+                    getSonHospital(bean, softwareHospitalMap);
                 }
                 out.addAll(hospitalListInfos);
             }

+ 1 - 1
security-center/src/main/java/com/lantone/security/web/RoleManagementController.java

@@ -83,7 +83,7 @@ public class RoleManagementController {
 
     @ApiOperation(value = "获取当前登录用户管理的的功能权限树 [by:songxl]")
     @PostMapping("/getUserMenuResourceTree")
-    public CommonResult<Map<Long, List<UserMenuResourceTreeDTO>>> getUserMenuResourceTree() {
+    public CommonResult<List<UserMenuResourceTreeDTO>> getUserMenuResourceTree() {
         return CommonResult.success(roleManagementFacade.getUserMenuResourceTree());
     }