浏览代码

添加用户管理相关功能

songxinlu 3 年之前
父节点
当前提交
0c5fdac3fe
共有 31 个文件被更改,包括 1221 次插入10 次删除
  1. 20 0
      common/src/main/java/com/lantone/common/dto/GetCreateRoleDTO.java
  2. 20 0
      common/src/main/java/com/lantone/common/dto/GetDeptTreeDTO.java
  3. 36 0
      common/src/main/java/com/lantone/common/dto/GetHospitalDeptDTO.java
  4. 38 0
      common/src/main/java/com/lantone/common/dto/GetHospitalTreeDTO.java
  5. 62 0
      common/src/main/java/com/lantone/common/dto/GetUserDTO.java
  6. 20 0
      common/src/main/java/com/lantone/common/dto/UserRoleDTO.java
  7. 36 0
      common/src/main/java/com/lantone/common/vo/AddHospitalTreeVO.java
  8. 79 0
      common/src/main/java/com/lantone/common/vo/AddUserVO.java
  9. 71 0
      common/src/main/java/com/lantone/common/vo/UpdateUserVO.java
  10. 79 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/DeptUser.java
  11. 14 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/facade/DeptUserFacade.java
  12. 5 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/DeptMapper.java
  13. 13 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/DeptUserMapper.java
  14. 10 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/HospitalMapper.java
  15. 2 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/RoleMapper.java
  16. 5 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/UserRoleMapper.java
  17. 13 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/DeptUserService.java
  18. 17 0
      dblayer-mbg/src/main/java/com/lantone/dblayermbg/service/impl/DeptUserServiceImpl.java
  19. 12 1
      dblayer-mbg/src/main/resources/mapper/DeptMapper.xml
  20. 5 0
      dblayer-mbg/src/main/resources/mapper/DeptUserMapper.xml
  21. 102 0
      dblayer-mbg/src/main/resources/mapper/HospitalMapper.xml
  22. 11 0
      dblayer-mbg/src/main/resources/mapper/RoleMapper.xml
  23. 14 1
      dblayer-mbg/src/main/resources/mapper/UserRoleMapper.xml
  24. 18 0
      dblayer-mbg/src/main/resources/mapper/base/BaseDeptUserMapper.xml
  25. 9 1
      gateway-service/src/main/resources/bootstrap.yml
  26. 10 0
      security-center/src/main/java/com/lantone/security/facade/HospitalManagementFacade.java
  27. 5 0
      security-center/src/main/java/com/lantone/security/facade/RoleManagementFacade.java
  28. 413 0
      security-center/src/main/java/com/lantone/security/facade/UserAdminFacade.java
  29. 19 0
      security-center/src/main/java/com/lantone/security/web/HospitalManagementController.java
  30. 6 0
      security-center/src/main/java/com/lantone/security/web/RoleManagementController.java
  31. 57 7
      security-center/src/main/java/com/lantone/security/web/UserAdminController.java

+ 20 - 0
common/src/main/java/com/lantone/common/dto/GetCreateRoleDTO.java

@@ -0,0 +1,20 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户创建的角色输出对象
+ */
+@Data
+public class GetCreateRoleDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称")
+    private String name;
+}

+ 20 - 0
common/src/main/java/com/lantone/common/dto/GetDeptTreeDTO.java

@@ -0,0 +1,20 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 科室返回对象
+ */
+@Data
+public class GetDeptTreeDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+    @ApiModelProperty(value = "科室编号")
+    private Long deptId;
+    @ApiModelProperty(value = "科室名称")
+    private String deptName;
+    @ApiModelProperty(value = "是否关联")
+    private String relation;
+}

+ 36 - 0
common/src/main/java/com/lantone/common/dto/GetHospitalDeptDTO.java

@@ -0,0 +1,36 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 医院科室信息对象
+ * </p>
+ */
+@Data
+public class GetHospitalDeptDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long hospitalId;
+
+    private Long parentId;
+
+
+    @ApiModelProperty(value = "名称")
+    private String hospitalName;
+
+    @ApiModelProperty(value = "组织类型(0:AI病案质控平台 1:集团医院 2:医共 3:医联 4:医院)")
+    private String type;
+
+    @ApiModelProperty(value = "科室编号")
+    private Long deptId;
+    @ApiModelProperty(value = "科室名称")
+    private String deptName;
+    @ApiModelProperty(value = "是否关联")
+    private String relation;
+}

+ 38 - 0
common/src/main/java/com/lantone/common/dto/GetHospitalTreeDTO.java

@@ -0,0 +1,38 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 用户组织机构树对象
+ * </p>
+ */
+@Data
+public class GetHospitalTreeDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long hospitalId;
+
+    private Long parentId;
+
+
+    @ApiModelProperty(value = "名称")
+    private String hospitalName;
+
+    @ApiModelProperty(value = "组织类型(0:AI病案质控平台 1:集团医院 2:医共 3:医联 4:医院)")
+    private String type;
+
+    @ApiModelProperty(value = "该医院的科室列表")
+    private List<GetDeptTreeDTO> depts;
+
+    @ApiModelProperty(value = "该虚拟医院的医院列表")
+    private List<GetHospitalTreeDTO> hospitalDTOS;
+
+    @ApiModelProperty(value = "是否关联")
+    private String relation;
+}

+ 62 - 0
common/src/main/java/com/lantone/common/dto/GetUserDTO.java

@@ -0,0 +1,62 @@
+package com.lantone.common.dto;
+
+import com.lantone.common.vo.AddHospitalTreeVO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 用户实体类
+ * </p>
+ */
+@Data
+public class GetUserDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long id;
+    @ApiModelProperty(value = "医生id")
+    private Long doctorId;
+
+    @ApiModelProperty(value = "用户名" )
+    private String username;
+
+    @ApiModelProperty(value = "密码")
+    private String password;
+
+    @ApiModelProperty(value = "姓名")
+    private String name;
+
+    @ApiModelProperty(value = "性别")
+    private Integer sex;
+
+    @ApiModelProperty(value = "手机号")
+    private String mobilePhone;
+
+    @ApiModelProperty(value = "身份证号")
+    private String idcard;
+
+    @ApiModelProperty(value = "职称编号")
+    private String titleId;
+    @ApiModelProperty(value = "职称名称")
+    private String titleName;
+
+    @ApiModelProperty(value = "工号")
+    private Integer jobNo;
+
+    @ApiModelProperty(value = "排序")
+    private Integer orderNo;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用")
+    private String status;
+
+    @ApiModelProperty(value = "所属组织")
+    private List<GetHospitalTreeDTO> hospitalDTOS;
+    @ApiModelProperty(value = "用户角色列表")
+    private List<UserRoleDTO> roles;
+
+}

+ 20 - 0
common/src/main/java/com/lantone/common/dto/UserRoleDTO.java

@@ -0,0 +1,20 @@
+package com.lantone.common.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 用户的角色输出对象
+ */
+@Data
+public class UserRoleDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+}

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

@@ -0,0 +1,36 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 用户组织机构树对象
+ * </p>
+ */
+@Data
+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;
+
+    @ApiModelProperty(value = "医院的id列表")
+    private List<Long> hospitals;
+
+}

+ 79 - 0
common/src/main/java/com/lantone/common/vo/AddUserVO.java

@@ -0,0 +1,79 @@
+package com.lantone.common.vo;
+
+import com.lantone.common.dto.GetHospitalTreeDTO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 用户实体类
+ * </p>
+ */
+@Data
+public class AddUserVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+
+    @ApiModelProperty(value = "医生id")
+    private Long doctorId;
+
+    @ApiModelProperty(value = "用户名" ,required = true)
+    @NotBlank(message = "用户名不能为空")
+    private String username;
+
+    @ApiModelProperty(value = "密码",required = true)
+    @NotBlank(message = "密码不能为空")
+    private String password;
+
+    @ApiModelProperty(value = "姓名",required = true)
+    @NotBlank(message = "姓名不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "性别")
+    private Integer sex;
+
+    @ApiModelProperty(value = "手机号")
+    private String mobilePhone;
+
+    @ApiModelProperty(value = "身份证号")
+    private String idcard;
+
+    @ApiModelProperty(value = "职称编号")
+    private String titleId;
+
+    @ApiModelProperty(value = "工号")
+    private Integer jobNo;
+
+    @ApiModelProperty(value = "排序")
+    private Integer orderNo;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用",required = true)
+    @NotBlank(message = "状态不能为空")
+    private String status;
+
+    @ApiModelProperty(value = "记录创建时间" ,hidden = true)
+    private Date gmtCreate;
+
+
+    @ApiModelProperty(value = "创建人,0表示无创建人值",hidden = true)
+    private String creator;
+
+    @ApiModelProperty(value = "所属组织",required = true)
+    @Valid
+    @NotNull(message = "所属组织不能为空")
+    private AddHospitalTreeVO addHospitalTreeVO;
+
+    @ApiModelProperty(value = "所属组织",required = true)
+    @NotEmpty(message = "用户的角色列表不能为空")
+    private List<Long> roles;
+
+}

+ 71 - 0
common/src/main/java/com/lantone/common/vo/UpdateUserVO.java

@@ -0,0 +1,71 @@
+package com.lantone.common.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * <p>
+ * 用户实体类
+ * </p>
+ */
+@Data
+public class UpdateUserVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "编号", required = true)
+    @NotNull(message = "用户编号不能为空")
+    private Long id;
+    @ApiModelProperty(value = "医生id")
+    private Long doctorId;
+
+    @ApiModelProperty(value = "用户名" ,required = true)
+    @NotBlank(message = "用户名不能为空")
+    private String username;
+
+    @ApiModelProperty(value = "密码",required = true)
+    @NotBlank(message = "密码不能为空")
+    private String password;
+
+    @ApiModelProperty(value = "姓名",required = true)
+    @NotBlank(message = "姓名不能为空")
+    private String name;
+
+    @ApiModelProperty(value = "性别")
+    private Integer sex;
+
+    @ApiModelProperty(value = "手机号")
+    private String mobilePhone;
+
+    @ApiModelProperty(value = "身份证号")
+    private String idcard;
+
+    @ApiModelProperty(value = "职称编号")
+    private String titleId;
+
+    @ApiModelProperty(value = "工号")
+    private Integer jobNo;
+
+    @ApiModelProperty(value = "排序")
+    private Integer orderNo;
+
+    @ApiModelProperty(value = "状态 0:禁用,1:启用",required = true)
+    @NotBlank(message = "状态不能为空")
+    private String status;
+
+    @ApiModelProperty(value = "所属组织",required = true)
+    @Valid
+    @NotNull(message = "所属组织不能为空")
+    private AddHospitalTreeVO addHospitalTreeVO;
+
+    @ApiModelProperty(value = "所属组织",required = true)
+    @NotEmpty(message = "用户的角色列表不能为空")
+    private List<Long> roles;
+}

+ 79 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/entity/DeptUser.java

@@ -0,0 +1,79 @@
+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_dept_user")
+public class DeptUser 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("dept_id")
+    private Long deptId;
+
+    /**
+     * 是否删除,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;
+
+}

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

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

+ 5 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/DeptMapper.java

@@ -1,7 +1,11 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.GetDeptTreeDTO;
 import com.lantone.dblayermbg.entity.Dept;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -10,4 +14,5 @@ import com.lantone.dblayermbg.entity.Dept;
  */
 public interface DeptMapper extends BaseMapper<Dept> {
 
+    List<GetDeptTreeDTO> getDeptInfo(@Param("hospitalId") long hospitalId);
 }

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

@@ -0,0 +1,13 @@
+package com.lantone.dblayermbg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.dblayermbg.entity.DeptUser;
+
+/**
+ * <p>
+ * 表名:sys_dept_user Mapper接口
+ * </p>
+ */
+public interface DeptUserMapper extends BaseMapper<DeptUser> {
+
+}

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

@@ -1,7 +1,12 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.GetHospitalDeptDTO;
+import com.lantone.common.dto.GetHospitalTreeDTO;
 import com.lantone.dblayermbg.entity.Hospital;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -10,4 +15,9 @@ import com.lantone.dblayermbg.entity.Hospital;
  */
 public interface HospitalMapper extends BaseMapper<Hospital> {
 
+    List<GetHospitalTreeDTO> getHospitalTreeInfo(@Param("hospitalId") long hospitalId);
+
+    List<GetHospitalDeptDTO> getUserHospitalDept(@Param("hospitalId")Long hospitalId,@Param("userId") Long userId);
+
+    List<GetHospitalDeptDTO> getUserHospital(@Param("hospitalId")Long hospitalId,@Param("userId") Long userId);
 }

+ 2 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/RoleMapper.java

@@ -1,6 +1,7 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.GetCreateRoleDTO;
 import com.lantone.common.dto.GetRolePageDTO;
 import com.lantone.common.vo.GetRolePageVO;
 import com.lantone.dblayermbg.entity.Role;
@@ -22,4 +23,5 @@ public interface RoleMapper extends BaseMapper<Role> {
      */
     List<GetRolePageDTO> getRolePage(@Param("getRolePageVO") GetRolePageVO getRolePageVO);
 
+    List<GetCreateRoleDTO> getCreateRoles(@Param("userId") long userId);
 }

+ 5 - 0
dblayer-mbg/src/main/java/com/lantone/dblayermbg/mapper/UserRoleMapper.java

@@ -1,7 +1,11 @@
 package com.lantone.dblayermbg.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.lantone.common.dto.UserRoleDTO;
 import com.lantone.dblayermbg.entity.UserRole;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -10,4 +14,5 @@ import com.lantone.dblayermbg.entity.UserRole;
  */
 public interface UserRoleMapper extends BaseMapper<UserRole> {
 
+    List<UserRoleDTO> getUserRoles(@Param("userId") Long userId);
 }

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

@@ -0,0 +1,13 @@
+package com.lantone.dblayermbg.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.lantone.dblayermbg.entity.DeptUser;
+
+/**
+ * <p>
+ * 用户与科室关联表 Service类
+ * </p>
+ */
+public interface DeptUserService extends IService<DeptUser> {
+
+}

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

@@ -0,0 +1,17 @@
+package com.lantone.dblayermbg.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.lantone.dblayermbg.entity.DeptUser;
+import com.lantone.dblayermbg.mapper.DeptUserMapper;
+import com.lantone.dblayermbg.service.DeptUserService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户与科室关联表 Service实现类
+ * </p>
+ */
+@Service
+public class DeptUserServiceImpl extends ServiceImpl<DeptUserMapper, DeptUser> implements DeptUserService {
+
+}

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

@@ -1,5 +1,16 @@
 <?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.DeptMapper">
-
+    <select id="getDeptInfo" resultType="com.lantone.common.dto.GetDeptTreeDTO">
+        SELECT
+            d.id deptId,
+            d.`name` deptName
+        FROM
+            `sys_dept` d
+        WHERE
+            d.is_deleted = 'N'
+        <if test="hospitalId!=null">
+            AND d.`hospital_id` = #{hospitalId}
+        </if>
+    </select>
 </mapper>

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

@@ -0,0 +1,5 @@
+<?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.DeptUserMapper">
+
+</mapper>

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

@@ -1,5 +1,107 @@
 <?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.HospitalMapper">
+    <select id="getHospitalTreeInfo" resultType="com.lantone.common.dto.GetHospitalTreeDTO">
+        SELECT
+        h.id hospitalId,
+        h.`name` hospitalName,
+        h.type,
+        h.parent_id parentId
+        FROM
+        sys_hospital h
+        WHERE
+        h.is_deleted = 'N'
+        AND h.status  = '1'
+        <if test="hospitalId!=null">
+            AND h.parent_id = #{hospitalId}
+        </if>
+    </select>
+    <select id="getUserHospitalDept" resultType="com.lantone.common.dto.GetHospitalDeptDTO">
+        SELECT
+            t1.*,
+        IF (
+            ISNULL(t2.hospitalId),
+            '未关联',
+            '已关联'
+        ) relation
+        FROM
+            (
+                SELECT
+                    h.id hospitalId,
+                    h.`name` hospitalName,
+                    d.id deptId,
+                    d.`name` deptName,
+                    h.parent_id parentId,
+			        h.type
+                FROM
+                    sys_hospital h,
+                    sys_dept d
+                WHERE
+                    h.id = d.hospital_id
+                AND h.`status` = '1'
+                AND h.is_deleted = 'N'
+                AND d.is_deleted = 'N'
+                AND h.id = #{hospitalId}
+            ) t1
+        LEFT JOIN (
+            SELECT
+                h.id hospitalId,
+                h.`name` hospitalName,
+                d.id deptId,
+                d.`name` deptName
+            FROM
+                sys_hospital h,
+                sys_hospital_user hu,
+                sys_dept_user ud,
+                sys_dept d,
+                sys_user u
+            WHERE
+                h.id = hu.hospital_id
+            AND h.`status` = '1'
+            AND u.`status` = '1'
+            AND u.id = hu.user_id
+            AND hu.user_id = ud.user_id
+            AND ud.dept_id = d.id
+            AND hu.hospital_id = d.hospital_id
+            AND ud.user_id = #{userId}
+        ) t2 ON t1.hospitalId = t2.hospitalId
+        AND t1.deptId = t2.deptId
+    </select>
+    <select id="getUserHospital" resultType="com.lantone.common.dto.GetHospitalDeptDTO">
+        SELECT
+            t1.*,
+        IF (
+            ISNULL(t2.hospitalId),
+            '未关联',
+            '已关联'
+        ) relation
+        FROM
+            (
+                SELECT
+                    h.id hospitalId,
+                    h.`name` hospitalName,
+                    h.parent_id parentId,
+                    h.type
+                FROM
+                    sys_hospital h
+                WHERE
+                    h.`status` = 1
+                AND h.is_deleted = 'N'
+                AND h.id = #{hospitalId}
+                OR h.parent_id = #{hospitalId}
+            ) t1
+        LEFT JOIN (
+            SELECT
+                h.id hospitalId,
+                h.`name` hospitalName,
+                h.type
+            FROM
+                sys_hospital h,
+                sys_hospital_user hu
+            WHERE
+                h.id = hu.hospital_id
+            AND hu.user_id = #{userId}
+        ) t2 ON t1.hospitalId = t2.hospitalId
 
+    </select>
 </mapper>

+ 11 - 0
dblayer-mbg/src/main/resources/mapper/RoleMapper.xml

@@ -17,4 +17,15 @@
             AND r.`status` = #{getRolePageVO.status}
         </if>
     </select>
+    <select id="getCreateRoles" resultType="com.lantone.common.dto.GetCreateRoleDTO">
+        SELECT
+            r.id,
+            r.name
+        FROM
+            sys_role r
+        WHERE
+            r.is_deleted = 'N'
+        AND r.`status` = '1'
+        AND r.creator = #{userId}
+    </select>
 </mapper>

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

@@ -1,5 +1,18 @@
 <?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.UserRoleMapper">
-
+    <select id="getUserRoles" resultType="com.lantone.common.dto.UserRoleDTO">
+        SELECT
+            r.id roleId,
+          r.`name` roleName
+        FROM
+            sys_user_role ur,
+            sys_role r
+        WHERE
+            r.`status` = '1'
+        and ur.role_id = r.id
+        AND ur.is_deleted = 'N'
+        AND r.is_deleted = 'N'
+        AND ur.user_id = #{userId}
+    </select>
 </mapper>

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

@@ -0,0 +1,18 @@
+<?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.DeptUserMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.lantone.dblayermbg.entity.DeptUser">
+        <id column="id" property="id"/>
+        <result column="user_id" property="userId"/>
+        <result column="dept_id" property="deptId"/>
+        <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>

+ 9 - 1
gateway-service/src/main/resources/bootstrap.yml

@@ -104,4 +104,12 @@ secure:
       - "/security-center/roleManage/getRoleById"
       - "/security-center/roleManage/getRolePage"
       - "/security-center/roleManage/updateRole"
-      - "/security-center/roleManage/getUserMenuResourceTree"
+      - "/security-center/roleManage/getCreateRoles"
+      - "/security-center/roleManage/getUserMenuResourceTree"
+      - "/security-center/userAdmin/getHospitalTree"
+      - "/security-center/userAdmin/addUser"
+      - "/security-center/userAdmin/updateUser"
+      - "/security-center/userAdmin/deleteUser"
+      - "/security-center/userAdmin/disableUser"
+      - "/security-center/userAdmin/getUserById"
+      - "/security-center/userAdmin/getUserPage"

+ 10 - 0
security-center/src/main/java/com/lantone/security/facade/HospitalManagementFacade.java

@@ -0,0 +1,10 @@
+package com.lantone.security.facade;
+
+import org.springframework.stereotype.Component;
+
+/**
+ * 组织管理API
+ */
+@Component
+public class HospitalManagementFacade {
+}

+ 5 - 0
security-center/src/main/java/com/lantone/security/facade/RoleManagementFacade.java

@@ -2,6 +2,7 @@ package com.lantone.security.facade;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.lantone.common.dto.GetCreateRoleDTO;
 import com.lantone.common.dto.GetRoleDTO;
 import com.lantone.common.dto.GetRolePageDTO;
 import com.lantone.common.dto.SoftwareDTO;
@@ -333,4 +334,8 @@ public class RoleManagementFacade {
         }
         return resUserMenuResourceTree;
     }
+
+    public List<GetCreateRoleDTO> getCreateRoles() {
+        return roleFacade.getBaseMapper().getCreateRoles(1l);
+    }
 }

+ 413 - 0
security-center/src/main/java/com/lantone/security/facade/UserAdminFacade.java

@@ -1,13 +1,47 @@
 package com.lantone.security.facade;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.lantone.common.api.CommonResult;
 import com.lantone.common.constant.AuthConstant;
+import com.lantone.common.dto.GetDeptTreeDTO;
+import com.lantone.common.dto.GetHospitalDeptDTO;
+import com.lantone.common.dto.GetHospitalTreeDTO;
+import com.lantone.common.dto.GetMenusTreeDTO;
+import com.lantone.common.dto.GetUserDTO;
+import com.lantone.common.dto.HospitalDTO;
+import com.lantone.common.dto.UserMenuResourceTreeDTO;
+import com.lantone.common.dto.UserRoleDTO;
+import com.lantone.common.exception.Asserts;
+import com.lantone.common.util.DateUtil;
+import com.lantone.common.util.EntityUtil;
+import com.lantone.common.util.ListUtil;
+import com.lantone.common.util.StringUtil;
+import com.lantone.common.vo.AddHospitalTreeVO;
+import com.lantone.common.vo.AddUserVO;
 import com.lantone.common.vo.LoginVO;
+import com.lantone.common.vo.UpdateUserVO;
+import com.lantone.dblayermbg.entity.Hospital;
+import com.lantone.dblayermbg.entity.HospitalUser;
+import com.lantone.dblayermbg.entity.User;
+import com.lantone.dblayermbg.entity.DeptUser;
+import com.lantone.dblayermbg.entity.UserRole;
+import com.lantone.dblayermbg.facade.DeptFacade;
+import com.lantone.dblayermbg.facade.HospitalFacade;
+import com.lantone.dblayermbg.facade.HospitalUserFacade;
+import com.lantone.dblayermbg.facade.DeptUserFacade;
+import com.lantone.dblayermbg.facade.UserFacade;
+import com.lantone.dblayermbg.facade.UserRoleFacade;
+import com.lantone.security.enums.HospitalTypeEnum;
+import com.lantone.security.enums.IsDeleteEnum;
 import com.lantone.security.service.AuthService;
+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.List;
 import java.util.Map;
 
 /**
@@ -20,6 +54,18 @@ public class UserAdminFacade {
 
     @Autowired
     private AuthService authService;
+    @Autowired
+    private HospitalFacade hospitalFacade;
+    @Autowired
+    private HospitalUserFacade hospitalUserFacade;
+    @Autowired
+    private DeptFacade deptFacade;
+    @Autowired
+    private UserFacade userFacade;
+    @Autowired
+    private DeptUserFacade userDeptFacade;
+    @Autowired
+    private UserRoleFacade userRoleFacade;
 
     public CommonResult login(LoginVO loginVO) {
         Map<String, String> params = new HashMap<>();
@@ -32,4 +78,371 @@ public class UserAdminFacade {
         return restResult;
     }
 
+    /**
+     * @param addUserVO
+     * @Description添加用户
+     * @Return boolean
+     */
+    public boolean addUser(AddUserVO addUserVO) {
+        //1.新增用户基本信息
+        User user = new User();
+        BeanUtils.copyProperties(addUserVO, user);
+        user.setGmtCreate(DateUtil.now());
+        if (userFacade.save(user)) {
+            Long userId = userFacade.list(new QueryWrapper<User>().eq("username", user.getUsername())).get(0).getId();
+            //2.插入用户所属组织
+            return saveUserHospital(addUserVO.getAddHospitalTreeVO(), userId, addUserVO.getRoles());
+        } else {
+            Asserts.fail("用户添加失败");
+        }
+        return false;
+    }
+
+    /**
+     * @param addHospitalTreeVO
+     * @param userId
+     * @Description保存用户关联的医院、科室
+     * @Return boolean
+     */
+    private boolean saveUserHospital(AddHospitalTreeVO addHospitalTreeVO, Long userId, List<Long> roles) {
+
+        //1.获取组织类型
+        //1.1单家医院
+        if (HospitalTypeEnum.SINGLE_HOSPITAL.getKey() == Integer.parseInt(addHospitalTreeVO.getType())) {
+            //插入用户和医院的关系
+            if (ListUtil.isNotEmpty(addHospitalTreeVO.getHospitals())) {
+                addHospitalTreeVO.getHospitals().stream().forEach(hospitalId -> {
+                    HospitalUser hospitalUser = new HospitalUser();
+                    hospitalUser.setUserId(userId);
+                    hospitalUser.setHospitalId(hospitalId);
+                    hospitalUserFacade.save(hospitalUser);
+                });
+                //插入用户和科室的关系
+                if (ListUtil.isNotEmpty(addHospitalTreeVO.getDepts())) {
+                    addHospitalTreeVO.getDepts().stream().forEach(deptID -> {
+                        DeptUser userDept = new DeptUser();
+                        userDept.setDeptId(deptID);
+                        userDept.setUserId(userId);
+                        userDeptFacade.save(userDept);
+                    });
+                    //插入用户和角色的关系
+                    return saveUserRole(userId, roles);
+                } else {
+                    Asserts.fail("添加用户的科室为空");
+                }
+            } else {
+                Asserts.fail("用户所属组织为空");
+            }
+            //非单家医院用户
+        } else {
+            //插入用户和医院的关系
+            if (ListUtil.isNotEmpty(addHospitalTreeVO.getHospitals())) {
+                addHospitalTreeVO.getHospitals().stream().forEach(hospitalId -> {
+                    HospitalUser hospitalUser = new HospitalUser();
+                    hospitalUser.setUserId(userId);
+                    hospitalUser.setHospitalId(hospitalId);
+                    hospitalUserFacade.save(hospitalUser);
+                });
+                //插入用户和角色的关系
+                return saveUserRole(userId, roles);
+            } else {
+                Asserts.fail("用户所属组织为空");
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @param userId
+     * @param roles
+     * @Description插入用户和角色的关系
+     * @Return boolean
+     */
+    private boolean saveUserRole(Long userId, List<Long> roles) {
+        if (ListUtil.isNotEmpty(roles)) {
+            roles.stream().forEach(roleId -> {
+                UserRole userRole = new UserRole();
+                userRole.setRoleId(roleId);
+                userRole.setUserId(userId);
+                userRoleFacade.save(userRole);
+            });
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * @param
+     * @Description获取当前用户的组织机构树
+     * @Return java.util.List<com.lantone.common.dto.GetHospitalTreeDTO>
+     */
+    public List<GetHospitalTreeDTO> getLoginUserHospitalTree() {
+        List<GetHospitalTreeDTO> outTree = new ArrayList<>();
+        //1.获取当前用户的组织类型
+        int hospitalType = -1;
+        Hospital hospital = getLocalHospital(1l);//###当前登录用户的医院id
+        if (hospital != null) {
+            hospitalType = Integer.parseInt(hospital.getType());
+        }
+        //单家医院
+        if (HospitalTypeEnum.SINGLE_HOSPITAL.getKey() == hospitalType) {
+            //获取医院的科室信息
+            List<GetDeptTreeDTO> deptTreeDTOS = deptFacade.getBaseMapper().getDeptInfo(1l);//###当前登录用户的医院id
+            GetHospitalTreeDTO getHospitalTreeDTO = new GetHospitalTreeDTO();
+            getHospitalTreeDTO.setDepts(deptTreeDTOS);
+            BeanUtils.copyProperties(hospital, getHospitalTreeDTO);
+            outTree.add(getHospitalTreeDTO);
+            return outTree;
+
+            //虚拟医院
+        } else if (hospitalType >= 0) {
+            //获取医院信息
+            GetHospitalTreeDTO getHospitalTreeDTO = new GetHospitalTreeDTO();
+            getHospitalTreeDTO.setHospitalId(hospital.getId());
+            getHospitalTreeDTO.setHospitalName(hospital.getName());
+            BeanUtils.copyProperties(hospital, getHospitalTreeDTO);
+            List<GetHospitalTreeDTO> hospitalTrees = getSonHospital(getHospitalTreeDTO);
+            getAllHospitalDTO(hospitalTrees);
+            getHospitalTreeDTO.setHospitalDTOS(hospitalTrees);
+            outTree.add(getHospitalTreeDTO);
+            return outTree;
+        }
+        return null;
+    }
+
+
+    /**
+     * @param hospitalTrees
+     * @Description 获取医院对应的子医院信息
+     * @Return void
+     */
+    private void getAllHospitalDTO(List<GetHospitalTreeDTO> hospitalTrees) {
+        if (ListUtil.isNotEmpty(hospitalTrees)) {
+            for (GetHospitalTreeDTO tempHospitalDTO : hospitalTrees) {
+                getAllHospitalDTO(getSonHospital(tempHospitalDTO));
+            }
+        }
+    }
+
+    /**
+     * @param getHospitalTreeDTO
+     * @Description获取医院信息
+     * @Return java.util.List<com.lantone.common.dto.HospitalDTO>
+     */
+    private List<GetHospitalTreeDTO> getSonHospital(GetHospitalTreeDTO getHospitalTreeDTO) {
+        if (getHospitalTreeDTO.getHospitalId() != null) {
+            List<GetHospitalTreeDTO> sonHospitals = hospitalFacade.getBaseMapper().getHospitalTreeInfo(getHospitalTreeDTO.getHospitalId());
+            getHospitalTreeDTO.setHospitalDTOS(sonHospitals);
+            return sonHospitals;
+        }
+        return null;
+    }
+
+    private Hospital getLocalHospital(Long hospitalId) {
+        List<Hospital> hospitals = hospitalFacade.list(new QueryWrapper<Hospital>()
+                .eq("id", hospitalId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+        if (ListUtil.isNotEmpty(hospitals)) {
+            return hospitals.get(0);
+        } else {
+            Asserts.fail("当前登录用户的医院信息不存在");
+        }
+        return null;
+    }
+
+    /**
+     * @param updateUserVO
+     * @Description修改用户
+     * @Return boolean
+     */
+    public boolean updateUser(UpdateUserVO updateUserVO) {
+        //1.删除该用户关联的科室、医院
+        if (delUserHospitalORDept(updateUserVO.getId())) {
+            if (userFacade.update(new UpdateWrapper<User>()
+                    .set("username", updateUserVO.getUsername())
+                    .set("password", updateUserVO.getPassword())
+                    .set("name", updateUserVO.getName())
+                    .set("status", updateUserVO.getStatus())
+                    .set(StringUtil.isNotEmpty(updateUserVO.getMobilePhone()), "mobile_phone", updateUserVO.getMobilePhone())
+                    .set(StringUtil.isNotEmpty(updateUserVO.getIdcard()), "idcard", updateUserVO.getIdcard())
+                    .set(StringUtil.isNotEmpty(updateUserVO.getTitleId()), "title_id", updateUserVO.getTitleId())
+                    .set(updateUserVO.getJobNo() != null, "job_no", updateUserVO.getJobNo())
+                    .set(updateUserVO.getOrderNo() != null, "order_no", updateUserVO.getOrderNo())
+                    .eq("id", updateUserVO.getId())
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+                //2.插入用户新关联的医院、科室
+                return saveUserHospital(updateUserVO.getAddHospitalTreeVO(), updateUserVO.getId(), updateUserVO.getRoles());
+            } else {
+                Asserts.fail("用户基本信息修改失败");
+            }
+        }
+        return false;
+    }
+
+    /**
+     * @param id
+     * @Description删除用户与医院、科室的关联关系
+     * @Return boolean
+     */
+    private boolean delUserHospitalORDept(Long id) {
+        if (hospitalUserFacade.remove(new UpdateWrapper<HospitalUser>()
+                .eq("user_id", id)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+            if (userRoleFacade.remove(new UpdateWrapper<UserRole>()
+                    .eq("user_id", id)
+                    .eq("is_deleted", IsDeleteEnum.N.getKey()))) {
+                if (userDeptFacade.list(new QueryWrapper<DeptUser>()
+                        .eq("user_id", id)
+                        .eq("is_deleted", IsDeleteEnum.N.getKey())).size() > 0) {
+                    return userDeptFacade.remove(new UpdateWrapper<DeptUser>()
+                            .eq("user_id", id)
+                            .eq("is_deleted", IsDeleteEnum.N.getKey()));
+                }
+                return true;
+            } else {
+                Asserts.fail("用户和角色的关联关系删除失败");
+            }
+        } else {
+            Asserts.fail("用户和医院的关联关系删除失败");
+        }
+        return false;
+    }
+
+    /**
+     * @param userId
+     * @Description删除用户
+     * @Return boolean
+     */
+    public boolean deleteUser(Long userId) {
+
+        if (delUserHospitalORDept(userId)) {
+            return userFacade.removeById(userId);
+        }
+        return false;
+    }
+
+    /**
+     * @param userId
+     * @param status
+     * @Description启用禁用用户
+     * @Return boolean
+     */
+    public boolean disableUser(Long userId, String status) {
+
+        return userFacade.update(new UpdateWrapper<User>()
+                .set("status", status)
+                .eq("id", userId)
+                .eq("is_deleted", IsDeleteEnum.N.getKey()));
+    }
+
+    /**
+     * @param userId
+     * @Description获取用户详情
+     * @Return com.lantone.common.dto.GetUserDTO
+     */
+    public GetUserDTO getUserById(Long userId, Long local) {
+        GetUserDTO getUserDTO = new GetUserDTO();
+        //1.获取用户的基本信息
+        BeanUtils.copyProperties(userFacade.getById(userId), getUserDTO);
+        //2.获取当前用户的组织类型
+        int hospitalType = -1;
+        Hospital hospital = getLocalHospital(local);//###当前登录用户的医院id
+        if (hospital != null) {
+            hospitalType = Integer.parseInt(hospital.getType());
+        }
+
+        //###通过职称id获取用户的职称
+
+        //3.1如果是单家医院
+        if (HospitalTypeEnum.SINGLE_HOSPITAL.getKey() == hospitalType) {
+            List<GetHospitalDeptDTO> hospitalDepts = hospitalFacade.getBaseMapper().getUserHospitalDept(hospital.getId(), userId);
+            getUserRelation(getUserDTO, hospitalDepts, hospitalType);
+            //3.2虚拟医院
+        } else if (hospitalType >= 0) {
+            List<GetHospitalDeptDTO> hospitals = hospitalFacade.getBaseMapper().getUserHospital(hospital.getId(), userId);
+            getUserRelation(getUserDTO, hospitals, hospitalType);
+        }
+        //4.获取用户的角色
+        getUserDTO.setRoles(userRoleFacade.getBaseMapper().getUserRoles(userId));
+        return getUserDTO;
+    }
+
+    /**
+     * @param getUserDTO
+     * @param hospitalDepts
+     * @param hospitalType
+     * @Description 获取当前用户组织机构树以及查询用户对应组织关联关系
+     * @Return void
+     */
+    private void getUserRelation(GetUserDTO getUserDTO, List<GetHospitalDeptDTO> hospitalDepts, int hospitalType) {
+
+        //单家医院
+        if (HospitalTypeEnum.SINGLE_HOSPITAL.getKey() == hospitalType) {
+            if (ListUtil.isNotEmpty(hospitalDepts)) {
+                Map<Long, List<GetHospitalDeptDTO>> hospitalDeptMap = EntityUtil.makeEntityListMap(hospitalDepts, "hospitalId");
+                hospitalDeptMap.keySet().stream().forEach(hospitalId -> {
+                    if (ListUtil.isEmpty(getUserDTO.getHospitalDTOS())) {
+                        getUserDTO.setHospitalDTOS(new ArrayList<>());
+                    }
+                    if (ListUtil.isNotEmpty(hospitalDeptMap.get(hospitalId))) {
+                        GetHospitalTreeDTO oneGetHospitalTreeDTO = new GetHospitalTreeDTO();
+                        BeanUtils.copyProperties(hospitalDeptMap.get(hospitalId).get(0), oneGetHospitalTreeDTO);
+                        hospitalDeptMap.get(hospitalId).stream().forEach(getHospitalDeptDTO -> {
+                            if (ListUtil.isEmpty(oneGetHospitalTreeDTO.getDepts())) {
+                                oneGetHospitalTreeDTO.setDepts(new ArrayList<>());
+                            }
+                            GetDeptTreeDTO oneGetDeptTreeDTO = new GetDeptTreeDTO();
+                            BeanUtils.copyProperties(getHospitalDeptDTO, oneGetDeptTreeDTO);
+                            oneGetHospitalTreeDTO.getDepts().add(oneGetDeptTreeDTO);
+                        });
+                        getUserDTO.getHospitalDTOS().add(oneGetHospitalTreeDTO);
+                    }
+                });
+            }
+            //虚拟医院
+        } else if (hospitalType >= 0) {
+            if (ListUtil.isNotEmpty(hospitalDepts)) {
+                Map<Long, List<GetHospitalDeptDTO>> hospitalDeptMap = EntityUtil.makeEntityListMap(hospitalDepts, "parentId");
+                hospitalDeptMap.keySet().stream().forEach(hospitalId -> {
+                    if (ListUtil.isEmpty(getUserDTO.getHospitalDTOS())) {
+                        getUserDTO.setHospitalDTOS(new ArrayList<>());
+                    }
+                    if (ListUtil.isNotEmpty(hospitalDeptMap.get(hospitalId))) {
+                        hospitalDeptMap.get(hospitalId).stream().forEach(getHospitalDeptDTO -> {
+                            GetHospitalTreeDTO oneGetHospitalTreeDTO = new GetHospitalTreeDTO();
+                            BeanUtils.copyProperties(getHospitalDeptDTO, oneGetHospitalTreeDTO);
+                            getUserDTO.getHospitalDTOS().add(oneGetHospitalTreeDTO);
+                        });
+                    }
+                });
+                //转成树装结构
+                Map<Long, List<GetHospitalTreeDTO>> tempHospitalDeptMap = EntityUtil.makeEntityListMap(getUserDTO.getHospitalDTOS(), "parentId");
+                List<GetHospitalTreeDTO> HospitalTreeRes = tempHospitalDeptMap.get(1L);
+                for (GetHospitalTreeDTO bean : HospitalTreeRes) {
+                    getSonHospital(bean, tempHospitalDeptMap);
+                }
+                getUserDTO.setHospitalDTOS(HospitalTreeRes);
+            }
+        }
+
+    }
+
+    /**
+     * 递归获取医院结构
+     *
+     * @param hospital    当前医院
+     * @param hospitalMap 医院集
+     * @return 菜单结构
+     */
+    public List<GetHospitalTreeDTO> getSonHospital(GetHospitalTreeDTO hospital, Map<Long, List<GetHospitalTreeDTO>> hospitalMap) {
+        List<GetHospitalTreeDTO> sonMenu = new ArrayList<>();
+        List<GetHospitalTreeDTO> menuList = hospitalMap.get(hospital.getHospitalId());
+        if (ListUtil.isNotEmpty(menuList)) {
+            hospital.setHospitalDTOS(menuList);
+            for (GetHospitalTreeDTO bean : menuList) {
+                getSonHospital(bean, hospitalMap);
+            }
+        }
+        return sonMenu;
+    }
 }

+ 19 - 0
security-center/src/main/java/com/lantone/security/web/HospitalManagementController.java

@@ -0,0 +1,19 @@
+package com.lantone.security.web;
+
+
+import com.lantone.security.facade.HospitalManagementFacade;
+import io.swagger.annotations.Api;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 组织管理API
+ */
+@RestController
+@Api(value = "组织管理API", tags = "HospitalManagementController")
+@RequestMapping("/hospitalManage")
+public class HospitalManagementController {
+    @Autowired
+    private HospitalManagementFacade hospitalManagementFacade;
+}

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

@@ -1,6 +1,7 @@
 package com.lantone.security.web;
 
 import com.lantone.common.api.CommonResult;
+import com.lantone.common.dto.GetCreateRoleDTO;
 import com.lantone.common.dto.GetRoleDTO;
 import com.lantone.common.dto.GetRolePageDTO;
 import com.lantone.common.dto.UserMenuResourceTreeDTO;
@@ -84,4 +85,9 @@ public class RoleManagementController {
     public CommonResult<Map<Long,List<UserMenuResourceTreeDTO>>> getUserMenuResourceTree() {
         return CommonResult.success(roleManagementFacade.getUserMenuResourceTree());
     }
+    @ApiOperation(value = "获取当前登录用户创建的角色列表 [by:songxl]")
+    @PostMapping("/getCreateRoles")
+    public CommonResult<List<GetCreateRoleDTO>> getCreateRoles() {
+        return CommonResult.success(roleManagementFacade.getCreateRoles());
+    }
 }

+ 57 - 7
security-center/src/main/java/com/lantone/security/web/UserAdminController.java

@@ -3,25 +3,35 @@ package com.lantone.security.web;
 import com.google.common.collect.Lists;
 import com.lantone.common.api.CommonResult;
 import com.lantone.common.domain.UserDto;
+import com.lantone.common.dto.GetHospitalTreeDTO;
+import com.lantone.common.dto.GetUserDTO;
+import com.lantone.common.vo.AddUserVO;
 import com.lantone.common.vo.LoginVO;
+import com.lantone.common.vo.UpdateUserVO;
 import com.lantone.security.facade.UserAdminFacade;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Controller;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.util.List;
 
 /**
  * @Description: 用户管理
  * @author: rengb
  * @time: 2021/1/5 18:27
  */
-@Controller
+@RestController
 @Api(tags = "UserAdminController", description = "用户管理")
 @RequestMapping("/userAdmin")
 public class UserAdminController {
@@ -31,21 +41,18 @@ public class UserAdminController {
 
     @ApiOperation(value = "登录以后返回token")
     @RequestMapping(value = "/login", method = RequestMethod.POST)
-    @ResponseBody
     public CommonResult login(@Validated @RequestBody LoginVO loginVO) {
         return userAdminFacade.login(loginVO);
     }
 
     @ApiOperation(value = "登出功能")
     @RequestMapping(value = "/logout", method = RequestMethod.POST)
-    @ResponseBody
     public CommonResult logout() {
         return CommonResult.success(null);
     }
 
     @ApiOperation(value = "登录以后返回token")
     @RequestMapping(value = "/getMyName", method = RequestMethod.POST)
-    @ResponseBody
     public CommonResult getMyName() {
         return CommonResult.success("任国宾");
     }
@@ -53,7 +60,6 @@ public class UserAdminController {
 
     @ApiOperation("根据用户名获取通用用户信息")
     @RequestMapping(value = "/loadByUsername", method = RequestMethod.GET)
-    @ResponseBody
     public UserDto loadUserByUsername(@RequestParam String username) {
         if (!username.equals("lantone")) {
             return null;
@@ -68,4 +74,48 @@ public class UserAdminController {
         return userDTO;
     }
 
+    @ApiOperation(value = "添加用户 [by:songxl]")
+    @PostMapping("/addUser")
+    @Transactional
+    public CommonResult<Boolean> addUser(@RequestBody @Valid AddUserVO addUserVO) {
+        return CommonResult.success(userAdminFacade.addUser(addUserVO));
+    }
+    @ApiOperation(value = "修改用户 [by:songxl]")
+    @PostMapping("/updateUser")
+    @Transactional
+    public CommonResult<Boolean> updateUser(@RequestBody @Valid UpdateUserVO updateUserVO) {
+        return CommonResult.success(userAdminFacade.updateUser(updateUserVO));
+    }
+
+    @ApiOperation(value = "删除用户 [by:songxl]")
+    @PostMapping("/deleteUser")
+    @Transactional
+    public CommonResult<Boolean> deleteUser(@RequestParam @Valid @NotNull(message = "用户编号为空") Long userId) {
+        return CommonResult.success(userAdminFacade.deleteUser(userId));
+    }
+
+
+    @ApiOperation(value = "禁用|启用用户 [by:songxl]")
+    @PostMapping("/disableUser")
+    @Transactional
+    public CommonResult<Boolean> disableUser(@RequestParam @Valid @NotNull(message = "用户编号为空") Long userId,@RequestParam @Valid @NotBlank(message = "启用禁用status为空") String status) {
+        return CommonResult.success(userAdminFacade.disableUser(userId,status));
+    }
+
+    @ApiOperation(value = "查看用户 [by:songxl]")
+    @PostMapping("/getUserById")
+    public CommonResult<GetUserDTO> getUserById(@RequestParam @Valid @NotNull(message = "用户编号为空") Long userId,Long local) {
+        return CommonResult.success(userAdminFacade.getUserById(userId,local));
+    }
+    @ApiOperation(value = "获取登录用户的组织机构树 [by:songxl]")
+    @PostMapping("/getHospitalTree")
+    public CommonResult<List<GetHospitalTreeDTO>> getLoginUserHospitalTree() {
+        return CommonResult.success(userAdminFacade.getLoginUserHospitalTree());
+    }
+
+//    @ApiOperation(value = "获取当前用户所在组织的用户列表 [by:songxl]")
+//    @PostMapping("/getUserPage")
+//    public CommonResult<List<GetHospitalTreeDTO>> getUserPage(GetUserPageVO getUserPageVO) {
+//        return CommonResult.success(userAdminFacade.getLoginUserHospitalTree());
+//    }
 }