From 6ec40d5a0c145ccffd1a28841f1c732f764e3e44 Mon Sep 17 00:00:00 2001
From: zhaoxiaohao <913652501@qq.com>
Date: Mon, 20 Apr 2020 17:32:00 +0800
Subject: [PATCH] 添加   部门的拦截的功能

---
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysOrganizationMapper.xml                               |   38 +
 kidgrow-springcloud/kidgrow-springcloud-zuul/pom.xml                                                                                         |    5 
 kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisConstant.java                                    |   13 
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysOrganizationService.java         |    2 
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserOrgController.java      |   26 +
 kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/SysOrganizationService.java                                |   29 +
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/doctor.html                                                         |  124 +++-
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/index.js                                                                    |   65 +-
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysOrganizationController.java |    2 
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/SecurityConstants.java                          |    4 
 kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/OrganizationFilter.java                                   |  147 +++++
 kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/resources/application.yml                                                              |   10 
 kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/resolver/TokenArgumentResolver.java                      |   13 
 kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/fallback/SysUserOrgServiceFallbackFactory.java             |   36 +
 kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/UserInfoHeaderFilter.java                                 |   40 
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysCompanyServiceImpl.java      |   78 +-
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java       |   44 +
 kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisUtils.java                                       |  658 +++++++++++++++++++++++++
 kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/sysOrganization.html                                                |    2 
 kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysOrganizationServiceImpl.java |  100 ++-
 kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/SysUserOrgService.java                                     |   33 +
 kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/fallback/SysOrganizationServiceFallbackFactory.java        |   34 +
 22 files changed, 1,309 insertions(+), 194 deletions(-)

diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysOrganizationService.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysOrganizationService.java
index c6df0c7..b904bee 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysOrganizationService.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/ISysOrganizationService.java
@@ -55,5 +55,7 @@
      * @return
      */
     ResultBody getTree(Map<String, Object> params);
+
+    boolean saveOrUpdateSer(SysOrganization sysOrganization);
 }
 
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysCompanyServiceImpl.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysCompanyServiceImpl.java
index 6cf4234..fb8302b 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysCompanyServiceImpl.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysCompanyServiceImpl.java
@@ -43,47 +43,47 @@
      * @return
      */
     @Override
-    public PageResult<SysCompanyVo> findList(Map<String, Object> params){
+    public PageResult findList(Map<String, Object> params){
         Page<SysCompany> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
         List<SysCompany> list  =  baseMapper.findList(page, params);
-        List<SysCompanyVo> listVo=new ArrayList<>();
-        list.forEach(e -> {
-            SysCompanyVo vo=new SysCompanyVo();
-            BeanCopier beanCopier = BeanCopier.create(SysCompany.class, SysCompanyVo.class, false);
-            beanCopier.copy(e,vo,null);
-            if(vo.getCompanyArea()!=null){
-                SysArea byId = sysAreaService.getById(vo.getCompanyArea());
-                if(byId.getAreaLeveltype()==XIAN){
-                    vo.setXianId(byId.getId());
-                    vo.setXian(byId.getAreaName());
-                    SysArea shi = sysAreaService.getById(byId.getAreaParentId());
-                    if(shi!=null){
-                        vo.setShi(shi.getAreaName());
-                        vo.setShiId(shi.getId());
-                        SysArea sheng = sysAreaService.getById(shi.getAreaParentId());
-                        if (sheng != null) {
-                            vo.setSheng(sheng.getAreaName());
-                            vo.setShengId(sheng.getId());
-                        }
-                    }
-                }
-                if(byId.getAreaLeveltype()==SHI){
-                    vo.setShi(byId.getAreaName());
-                    vo.setShiId(byId.getId());
-                    SysArea sheng = sysAreaService.getById(byId.getAreaParentId());
-                    if (sheng != null) {
-                        vo.setSheng(sheng.getAreaName());
-                        vo.setShengId(sheng.getId());
-                    }
-                }
-                if(byId.getAreaLeveltype()==SHENG){
-                    vo.setSheng(byId.getAreaName());
-                    vo.setShengId(byId.getId());
-                }
-            }
-            listVo.add(vo);
-        });
-        return PageResult.<SysCompanyVo>builder().data(listVo).code(0).count(page.getTotal()).build();
+//        List<SysCompanyVo> listVo=new ArrayList<>();
+//        list.forEach(e -> {
+//            SysCompanyVo vo=new SysCompanyVo();
+//            BeanCopier beanCopier = BeanCopier.create(SysCompany.class, SysCompanyVo.class, false);
+//            beanCopier.copy(e,vo,null);
+//            if(vo.getCompanyArea()!=null){
+//                SysArea byId = sysAreaService.getById(vo.getCompanyArea());
+//                if(byId.getAreaLeveltype()==XIAN){
+//                    vo.setXianId(byId.getId());
+//                    vo.setXian(byId.getAreaName());
+//                    SysArea shi = sysAreaService.getById(byId.getAreaParentId());
+//                    if(shi!=null){
+//                        vo.setShi(shi.getAreaName());
+//                        vo.setShiId(shi.getId());
+//                        SysArea sheng = sysAreaService.getById(shi.getAreaParentId());
+//                        if (sheng != null) {
+//                            vo.setSheng(sheng.getAreaName());
+//                            vo.setShengId(sheng.getId());
+//                        }
+//                    }
+//                }
+//                if(byId.getAreaLeveltype()==SHI){
+//                    vo.setShi(byId.getAreaName());
+//                    vo.setShiId(byId.getId());
+//                    SysArea sheng = sysAreaService.getById(byId.getAreaParentId());
+//                    if (sheng != null) {
+//                        vo.setSheng(sheng.getAreaName());
+//                        vo.setShengId(sheng.getId());
+//                    }
+//                }
+//                if(byId.getAreaLeveltype()==SHENG){
+//                    vo.setSheng(byId.getAreaName());
+//                    vo.setShengId(byId.getId());
+//                }
+//            }
+//            listVo.add(vo);
+//        });
+        return PageResult.<SysCompany>builder().data(list).code(0).count(page.getTotal()).build();
     }
 
     /**
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java
index 4fcd9b5..8d64181 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysDoctorServiceImpl.java
@@ -1,8 +1,11 @@
 package com.kidgrow.usercenter.service.impl;
 
+import com.alibaba.fastjson.JSON;
 import com.kidgrow.common.constant.SecurityConstants;
-import com.kidgrow.common.model.ResultBody;
-import com.kidgrow.common.model.SysUser;
+import com.kidgrow.common.model.*;
+import com.kidgrow.redis.util.RedisConstant;
+import com.kidgrow.redis.util.RedisUtils;
+import com.kidgrow.usercenter.service.ISysUserOrgService;
 import com.kidgrow.usercenter.service.ISysUserService;
 import com.kidgrow.usercenter.vo.SysDoctorDto;
 import com.kidgrow.usercenter.vo.SysDoctorVo;
@@ -10,14 +13,10 @@
 import org.springframework.cglib.beans.BeanCopier;
 import org.springframework.security.crypto.password.PasswordEncoder;
 import org.springframework.stereotype.Service;
-import com.kidgrow.common.model.PageResult;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.kidgrow.common.service.impl.SuperServiceImpl;
 
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 import org.apache.commons.collections4.MapUtils;
 import lombok.extern.slf4j.Slf4j;
@@ -51,6 +50,10 @@
     private ISysUserService iSysUserService;
     @Autowired
     private PasswordEncoder passwordEncoder;
+    @Autowired
+    private ISysUserOrgService sysUserOrgService;
+    @Autowired
+    RedisUtils redisUtils;
 
     @Override
     public PageResult<SysDoctorVo> findList(Map<String, Object> params) {
@@ -146,9 +149,36 @@
                 beanCopier.copy(sysDoctor,sysDoc,null);
                 sysDoc.setUserId(sysUser.getId());
                 baseMapper.insert(sysDoc);
+                //保存将sys_user_org
+                SysUserOrg sysUserOrg=new SysUserOrg();
+                sysUserOrg.setUserId(sysUser.getId());
+                sysUserOrg.setEnabled(false);
+                sysUserOrg.setOrgId(sysDoctor.getDepartmentId());
+                sysUserOrg.setCreateTime(new Date());
+                sysUserOrgService.saveOrUpdate(sysUserOrg);
+                //保存到Redis
+                boolean hset = redisUtils.hset(RedisConstant.USER_ORGANIZATION, sysUserOrg.getUserId().toString(), sysUserOrg);
             }else {
                 //更新
+                redisUtils.hdel(RedisConstant.USER_ORGANIZATION, sysDoctor.getUserId().toString());
+//                List<SysUserOrg> sysOrganizations = JSON.parseArray(JSON.toJSONString(redisUtils.hget(RedisConstant.USER_ORGANIZATION, sysDoctor.getUserId().toString())), SysUserOrg.class);
+//                sysOrganizations.forEach( e-> {
+//                    if(e.getId()==sysDoctor.getId()){
+//                        sysOrganizations.set(0,sysDoctor);
+//                    }
+//                });
+                Map<String, Object> columnMap=new HashMap<>();
+                columnMap.put("user_id",sysDoctor.getUserId());
+                boolean b = sysUserOrgService.removeByMap(columnMap);
+                //保存将sys_user_org
+                SysUserOrg sysUserOrg=new SysUserOrg();
+                sysUserOrg.setUserId(sysDoctor.getUserId());
+                sysUserOrg.setEnabled(false);
+                sysUserOrg.setOrgId(sysDoctor.getDepartmentId());
+                sysUserOrg.setCreateTime(new Date());
+                sysUserOrgService.saveOrUpdate(sysUserOrg);
                 baseMapper.updateById(sysDoctor);
+                redisUtils.hset(RedisConstant.USER_ORGANIZATION, sysUserOrg.getUserId().toString(), sysUserOrg);
             }
         }
         return true;
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysOrganizationServiceImpl.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysOrganizationServiceImpl.java
index 9174b7a..d815af8 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysOrganizationServiceImpl.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/java/com/kidgrow/usercenter/service/impl/SysOrganizationServiceImpl.java
@@ -6,14 +6,18 @@
 import com.kidgrow.common.model.ResultBody;
 import com.kidgrow.common.model.SysOrganization;
 import com.kidgrow.common.service.impl.SuperServiceImpl;
+import com.kidgrow.redis.util.RedisConstant;
+import com.kidgrow.redis.util.RedisUtils;
 import com.kidgrow.usercenter.mapper.SysOrganizationMapper;
 import com.kidgrow.usercenter.service.ISysOrganizationService;
 import com.kidgrow.usercenter.vo.SysOrganizationVo;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cglib.beans.BeanCopier;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,39 +28,46 @@
 
 /**
  * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @version 1.0
  * @Description: 组织架构表<br>
  * @Project: 用户中心<br>
  * @CreateDate: Created in 2020-03-31 11:01:35 <br>
  * @Author: <a href="4345453@kidgrow.com">liuke</a>
- * @version 1.0
  */
 @Slf4j
 @Service
 public class SysOrganizationServiceImpl extends SuperServiceImpl<SysOrganizationMapper, SysOrganization> implements ISysOrganizationService {
+    @Autowired
+    RedisUtils redisUtils;
+
     /**
      * 列表
+     *
      * @param params
      * @return
      */
     @Override
-    public PageResult<SysOrganization> findList(Map<String, Object> params){
+    public PageResult<SysOrganization> findList(Map<String, Object> params) {
         Page<SysOrganization> page = new Page<>(MapUtils.getInteger(params, "page"), MapUtils.getInteger(params, "limit"));
-        List<SysOrganization> list  =  baseMapper.findList(page, params);
+        List<SysOrganization> list = baseMapper.findList(page, params);
         return PageResult.<SysOrganization>builder().data(list).code(0).count(page.getTotal()).build();
     }
 
     /**
-   * 根据SysOrganization对象当做查询条件进行查询
-   * @param sysOrganization
-   * @return SysOrganization
-   */
+     * 根据SysOrganization对象当做查询条件进行查询
+     *
+     * @param sysOrganization
+     * @return SysOrganization
+     */
     @Override
-    public SysOrganization findByObject(SysOrganization sysOrganization){
+    public SysOrganization findByObject(SysOrganization sysOrganization) {
         return baseMapper.findByObject(sysOrganization);
     }
 
     /**
      * 根据用户  获取组织
+     *
      * @param userId
      * @return
      */
@@ -67,6 +78,7 @@
 
     /**
      * 根据map  查询,  将参数中的  access_token 去掉
+     *
      * @param params
      * @return
      */
@@ -75,14 +87,14 @@
         //将access_token  参数去掉
         params.remove("access_token");
         List<SysOrganization> sysOrganizations = baseMapper.selectByMap(params);
-        List<SysOrganizationVo> sysOrganizationVos=new ArrayList<>();
-        sysOrganizations.forEach(e ->{
-            if(e.getOrgParentId()!=null){
-                SysOrganizationVo sysOrganizationVo=new SysOrganizationVo();
+        List<SysOrganizationVo> sysOrganizationVos = new ArrayList<>();
+        sysOrganizations.forEach(e -> {
+            if (e.getOrgParentId() != null) {
+                SysOrganizationVo sysOrganizationVo = new SysOrganizationVo();
                 BeanCopier beanCopier = BeanCopier.create(SysOrganization.class, SysOrganizationVo.class, false);
-                beanCopier.copy(e,sysOrganizationVo,null);
+                beanCopier.copy(e, sysOrganizationVo, null);
                 SysOrganization sysOrganization = baseMapper.selectById(e.getOrgParentId());
-                if(sysOrganization!=null){
+                if (sysOrganization != null) {
                     sysOrganizationVo.setOrgParentName(sysOrganization.getOrgName());
                 }
                 sysOrganizationVos.add(sysOrganizationVo);
@@ -93,31 +105,35 @@
 
     /**
      * 更新状态
+     *
      * @param params
      * @return
      */
     @Override
     public ResultBody updateEnabled(Map<String, Object> params) {
         Long id = MapUtils.getLong(params, "id");
-        if(id==null){
+        if (id == null) {
             return ResultBody.failed("请选取一条数据");
         }
         SysOrganization sysOrganization = baseMapper.selectById(id);
         if (sysOrganization != null) {
-            sysOrganization.setEnabled(MapUtils.getBoolean(params,"enabled"));
+            sysOrganization.setEnabled(MapUtils.getBoolean(params, "enabled"));
             int i = baseMapper.updateById(sysOrganization);
-            if(i>0){
-                return  ResultBody.ok();
-            }else {
+            redisUtils.hdel(RedisConstant.ORGANIZATION, sysOrganization.getId().toString());
+            redisUtils.hset(RedisConstant.ORGANIZATION, sysOrganization.getId().toString(), sysOrganization);
+            if (i > 0) {
+                return ResultBody.ok();
+            } else {
                 return ResultBody.failed("更新失败");
             }
-        }else {
+        } else {
             return ResultBody.failed("更新失败");
         }
     }
 
     /**
      * 获取树状图
+     *
      * @param params
      * @return
      */
@@ -130,27 +146,49 @@
 
     /**
      * 将数据  封装成  tree   (递归方式)
+     *
      * @param MyId
      * @param sysOrganizations
      * @return
      */
-    public List<Map<String,Object>> getTreeData(Long MyId,List<SysOrganization> sysOrganizations){
-        List<Map<String,Object>> listMap=new ArrayList<>();
+    public List<Map<String, Object>> getTreeData(Long MyId, List<SysOrganization> sysOrganizations) {
+        List<Map<String, Object>> listMap = new ArrayList<>();
         Map<Long, SysOrganization> collect = sysOrganizations.stream().collect(Collectors.toMap(SysOrganization::getId, SysOrganization -> SysOrganization));
-        List<Long> idList = sysOrganizations.stream().filter(e -> e.getOrgParentId()==MyId).map(e -> e.getId()).collect(Collectors.toList());
-        for (Long id:idList
-             ) {
-            Map<String,Object> map=new HashMap<>();
-            map.put("id",id);
-            map.put("name",collect.get(id).getOrgName());
-            map.put("level",collect.get(id).getOrgLevel());
+        List<Long> idList = sysOrganizations.stream().filter(e -> e.getOrgParentId() == MyId).map(e -> e.getId()).collect(Collectors.toList());
+        for (Long id : idList
+        ) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("id", id);
+            map.put("name", collect.get(id).getOrgName());
+            map.put("level", collect.get(id).getOrgLevel());
             List<Long> childs = sysOrganizations.stream().filter(e -> e.getOrgParentId() == id).map(e -> e.getId()).collect(Collectors.toList());
-            if(childs.size()>0){
+            if (childs.size() > 0) {
                 List<Map<String, Object>> treeData = getTreeData(id, sysOrganizations);
-                map.put("children",treeData);
+                map.put("children", treeData);
             }
             listMap.add(map);
         }
         return listMap;
     }
+
+    /**
+     * 保存或者更新
+     *
+     * @param sysOrganization
+     * @return
+     */
+    @Override
+    @Transactional
+    public boolean saveOrUpdateSer(SysOrganization sysOrganization) {
+        if (sysOrganization.getId() == null) {
+            //保存
+            baseMapper.insert(sysOrganization);
+        } else {
+            //更新
+            int i = baseMapper.updateById(sysOrganization);
+        }
+        redisUtils.hdel(RedisConstant.ORGANIZATION, sysOrganization.getId().toString());
+        redisUtils.hset(RedisConstant.ORGANIZATION, sysOrganization.getId().toString(), sysOrganization);
+        return true;
+    }
 }
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysOrganizationMapper.xml b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysOrganizationMapper.xml
index df3f4fe..a16ab43 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysOrganizationMapper.xml
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-biz/src/main/resources/mapper/SysOrganizationMapper.xml
@@ -77,17 +77,33 @@
     </select>
 
     <!--根据用户ID查询用户所属组织机构列表-->
+<!--        <select id="findListByUserId" resultType="com.kidgrow.common.model.SysOrganization">-->
+<!--        SELECT-->
+<!--            org.id,-->
+<!--            org.org_parent_id,-->
+<!--            org.org_name ,-->
+<!--            org.org_attr,-->
+<!--            org.org_level-->
+<!--        FROM sys_user_org uo-->
+<!--        LEFT JOIN sys_organization org ON uo.org_id = org.id-->
+<!--        AND (uo.enabled = TRUE AND uo.is_del = FALSE) AND (org.is_del = FALSE AND org.enabled = TRUE)-->
+<!--        where uo.user_id=#{userId}-->
+<!--        order by org_level-->
+<!--        </select>-->
     <select id="findListByUserId" resultType="com.kidgrow.common.model.SysOrganization">
-    SELECT
-        org.id,
-        org.org_parent_id,
-        org.org_name ,
-        org.org_attr,
-        org.org_level
-    FROM sys_user_org uo
-    LEFT JOIN sys_organization org ON uo.org_id = org.id
-    AND (uo.enabled = TRUE AND uo.is_del = FALSE) AND (org.is_del = FALSE AND org.enabled = TRUE)
-    where uo.user_id=#{userId}
-    order by org_level
+         SELECT
+            *
+            FROM
+            sys_user_org uo
+            LEFT JOIN sys_organization org ON uo.org_id = org.id
+            WHERE
+            org.is_del = FALSE
+            AND org.enabled = TRUE
+            AND uo.enabled = TRUE
+            AND uo.is_del = FALSE
+            and  uo.user_id=#{userId}
+            ORDER BY
+            org_level
     </select>
+
 </mapper>
\ No newline at end of file
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysOrganizationController.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysOrganizationController.java
index 43d1c19..5abd0cc 100644
--- a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysOrganizationController.java
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysOrganizationController.java
@@ -102,7 +102,7 @@
             }
             return ResultBody.failed().msg(errMsg.toString());
         } else {
-            boolean v= sysOrganizationService.saveOrUpdate(sysOrganization);
+            boolean v= sysOrganizationService.saveOrUpdateSer(sysOrganization);
             if(v) {
                 return ResultBody.ok().data(sysOrganization).msg("保存成功");
             }
diff --git a/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserOrgController.java b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserOrgController.java
new file mode 100644
index 0000000..1a9db1d
--- /dev/null
+++ b/kidgrow-business/kidgrow-usercenter/kidgrow-usercenter-server/src/main/java/com/kidgrow/usercenter/controller/SysUserOrgController.java
@@ -0,0 +1,26 @@
+package com.kidgrow.usercenter.controller;
+
+import com.kidgrow.common.model.SysUserOrg;
+import com.kidgrow.usercenter.service.ISysOrganizationService;
+import com.kidgrow.usercenter.service.ISysUserOrgService;
+import io.swagger.annotations.Api;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@RestController
+@RequestMapping("/sysuserorg")
+@Api(tags = "")
+public class SysUserOrgController {
+    @Autowired
+    private ISysUserOrgService iSysUserOrgService;
+    @PostMapping("getListByMap")
+    public List<SysUserOrg> getListByMap(@RequestParam Map<String,Object> map){
+        List<SysUserOrg> sysUserOrgs = iSysUserOrgService.listByMap(map);
+        return sysUserOrgs;
+    }
+}
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/SecurityConstants.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/SecurityConstants.java
index f1b26c1..fb4ef28 100644
--- a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/SecurityConstants.java
+++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/constant/SecurityConstants.java
@@ -25,6 +25,10 @@
     String USER_ID_HEADER = "x-userid-header";
 
     /**
+     * 用户所属组织   为集合
+     */
+    String USER_ORGS_HEADER="x-user-orgs-header";
+    /**
      * 用户所属组织ID
      */
     String USER_ORG_ID_HEADER="x-user-org-id-header";
diff --git a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/resolver/TokenArgumentResolver.java b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/resolver/TokenArgumentResolver.java
index c37a0d4..d5b321a 100644
--- a/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/resolver/TokenArgumentResolver.java
+++ b/kidgrow-commons/kidgrow-common-spring-boot-starter/src/main/java/com/kidgrow/common/resolver/TokenArgumentResolver.java
@@ -6,6 +6,7 @@
 import com.kidgrow.common.feign.UserService;
 import com.kidgrow.common.model.SysRole;
 import com.kidgrow.common.model.SysUser;
+import com.kidgrow.common.utils.StringUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.core.MethodParameter;
 import org.springframework.web.bind.support.WebDataBinderFactory;
@@ -77,11 +78,13 @@
             user.setUsername(username);
         }
         List<SysRole> sysRoleList = new ArrayList<>();
-        Arrays.stream(roles.split(",")).forEach(role -> {
-            SysRole sysRole = new SysRole();
-            sysRole.setCode(role);
-            sysRoleList.add(sysRole);
-        });
+        if(StringUtils.isNotBlank(roles)){
+            Arrays.stream(roles.split(",")).forEach(role -> {
+                SysRole sysRole = new SysRole();
+                sysRole.setCode(role);
+                sysRoleList.add(sysRole);
+            });
+        }
         user.setRoles(sysRoleList);
         return user;
     }
diff --git a/kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisConstant.java b/kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisConstant.java
new file mode 100644
index 0000000..98b073b
--- /dev/null
+++ b/kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisConstant.java
@@ -0,0 +1,13 @@
+package com.kidgrow.redis.util;
+
+/**
+ * Redis  中的常量
+ */
+public  interface RedisConstant {
+    /**
+     * 用户与组织的关系
+     */
+    String USER_ORGANIZATION="USER_ORGANIZATION";
+
+    String ORGANIZATION="ORGANIZATION";
+}
diff --git a/kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisUtils.java b/kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisUtils.java
new file mode 100644
index 0000000..b2a7bd2
--- /dev/null
+++ b/kidgrow-commons/kidgrow-redis-spring-boot-starter/src/main/java/com/kidgrow/redis/util/RedisUtils.java
@@ -0,0 +1,658 @@
+package com.kidgrow.redis.util;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.TimeUnit;
+
+@Component
+public class RedisUtils {
+    @Autowired
+
+    private RedisTemplate<String, Object> redisTemplate;
+
+
+    // =============================common============================
+
+    /**
+     * 指定缓存失效时间
+     *
+     * @param key  键
+     * @param time 时间(秒)
+     * @return
+     */
+
+    public boolean expire(String key, long time) {
+
+        try {
+            if (time > 0) {
+                redisTemplate.expire(key, time, TimeUnit.SECONDS);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 根据key 获取过期时间
+     *
+     * @param key 键 不能为null
+     * @return 时间(秒) 返回0代表为永久有效
+     */
+
+    public long getExpire(String key) {
+        return redisTemplate.getExpire(key, TimeUnit.SECONDS);
+
+    }
+
+
+    /**
+     * 判断key是否存在
+     *
+     * @param key 键
+     * @return true 存在 false不存在
+     */
+
+    public boolean hasKey(String key) {
+
+        try {
+            return redisTemplate.hasKey(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 删除缓存
+     *
+     * @param key 可以传一个值 或多个
+     */
+
+    @SuppressWarnings("unchecked")
+
+    public void del(String... key) {
+
+        if (key != null && key.length > 0) {
+
+            if (key.length == 0) {
+                redisTemplate.delete(key[0]);
+            } else {
+                redisTemplate.delete(CollectionUtils.arrayToList(key));
+            }
+        }
+
+    }
+    // ============================String=============================
+
+    /**
+     * 普通缓存获取
+     *
+     * @param key 键
+     * @return 值
+     */
+
+    public Object get(String key) {
+        return key == null ? null : redisTemplate.opsForValue().get(key);
+    }
+
+    /**
+     * 普通缓存放入
+     *
+     * @param key   键
+     * @param value 值
+     * @return true成功 false失败
+     */
+
+    public boolean set(String key, Object value) {
+
+        try {
+            redisTemplate.opsForValue().set(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 普通缓存放入并设置时间
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒) time要大于0 如果time小于等于0 将设置无限期
+     * @return true成功 false 失败
+     */
+
+    public boolean set(String key, Object value, long time) {
+
+        try {
+            if (time > 0) {
+                redisTemplate.opsForValue().set(key, value, time, TimeUnit.SECONDS);
+            } else {
+                set(key, value);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+    /**
+     * 递增
+     *
+     * @param key   键
+     * @param delta 要增加几(大于0)
+     * @return
+     */
+
+    public long incr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("递增因子必须大于0");
+        }
+        return redisTemplate.opsForValue().increment(key, delta);
+    }
+
+
+    /**
+     * 递减
+     *
+     * @param key   键
+     * @param delta 要减少几(小于0)
+     * @return
+     */
+
+    public long decr(String key, long delta) {
+        if (delta < 0) {
+            throw new RuntimeException("递减因子必须大于0");
+        }
+        return redisTemplate.opsForValue().increment(key, -delta);
+    }
+
+
+    // ================================Map=================================
+
+    /**
+     * HashGet
+     *
+     * @param key  键 不能为null
+     * @param item 项 不能为null
+     * @return 值
+     */
+
+    public Object hget(String key, String item) {
+        return redisTemplate.opsForHash().get(key, item);
+    }
+
+
+    /**
+     * 获取hashKey对应的所有键值
+     *
+     * @param key 键
+     * @return 对应的多个键值
+     */
+
+    public Map<Object, Object> hmget(String key) {
+        return redisTemplate.opsForHash().entries(key);
+    }
+
+
+    /**
+     * HashSet
+     *
+     * @param key 键
+     * @param map 对应多个键值
+     * @return true 成功 false 失败
+     */
+
+    public boolean hmset(String key, Map<String, Object> map) {
+
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * HashSet 并设置时间
+     *
+     * @param key  键
+     * @param map  对应多个键值
+     * @param time 时间(秒)
+     * @return true成功 false失败
+     */
+
+    public boolean hmset(String key, Map<String, Object> map, long time) {
+
+        try {
+            redisTemplate.opsForHash().putAll(key, map);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+
+    }
+
+    /**
+     * 向一张hash表中放入数据,如果不存在将创建
+     *
+     * @param key   键
+     * @param item  项
+     * @param value 值
+     * @return true 成功 false失败
+     */
+
+    public boolean hset(String key, String item, Object value) {
+
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 向一张hash表中放入数据,如果不存在将创建
+     *
+     * @param key   键
+     * @param item  项
+     * @param value 值
+     * @param time  时间(秒) 注意:如果已存在的hash表有时间,这里将会替换原有的时间
+     * @return true 成功 false失败
+     */
+
+    public boolean hset(String key, String item, Object value, long time) {
+
+        try {
+            redisTemplate.opsForHash().put(key, item, value);
+            if (time > 0) {
+                expire(key, time);
+            }
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 删除hash表中的值
+     *
+     * @param key  键 不能为null
+     * @param item 项 可以使多个 不能为null
+     */
+
+    public void hdel(String key, Object... item) {
+        redisTemplate.opsForHash().delete(key, item);
+    }
+
+
+    /**
+     * 判断hash表中是否有该项的值
+     *
+     * @param key  键 不能为null
+     * @param item 项 不能为null
+     * @return true 存在 false不存在
+     */
+
+    public boolean hHasKey(String key, String item) {
+        return redisTemplate.opsForHash().hasKey(key, item);
+    }
+
+
+    /**
+     * hash递增 如果不存在,就会创建一个 并把新增后的值返回
+     *
+     * @param key  键
+     * @param item 项
+     * @param by   要增加几(大于0)
+     * @return
+     */
+
+    public double hincr(String key, String item, double by) {
+        return redisTemplate.opsForHash().increment(key, item, by);
+    }
+
+
+    /**
+     * hash递减
+     *
+     * @param key  键
+     * @param item 项
+     * @param by   要减少记(小于0)
+     * @return
+     */
+
+    public double hdecr(String key, String item, double by) {
+        return redisTemplate.opsForHash().increment(key, item, -by);
+
+    }
+
+
+    // ============================set=============================
+
+    /**
+     * 根据key获取Set中的所有值
+     *
+     * @param key 键
+     * @return
+     */
+
+    public Set<Object> sGet(String key) {
+        try {
+            return redisTemplate.opsForSet().members(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+    }
+
+    /**
+     * 根据value从一个set中查询,是否存在
+     *
+     * @param key   键
+     * @param value 值
+     * @return true 存在 false不存在
+     */
+
+    public boolean sHasKey(String key, Object value) {
+
+        try {
+            return redisTemplate.opsForSet().isMember(key, value);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+
+    /**
+     * 将数据放入set缓存
+     *
+     * @param key    键
+     * @param values 值 可以是多个
+     * @return 成功个数
+     */
+
+    public long sSet(String key, Object... values) {
+
+        try {
+            return redisTemplate.opsForSet().add(key, values);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+
+    /**
+     * 将set数据放入缓存
+     *
+     * @param key    键
+     * @param time   时间(秒)
+     * @param values 值 可以是多个
+     * @return 成功个数
+     */
+
+    public long sSetAndTime(String key, long time, Object... values) {
+
+        try {
+            Long count = redisTemplate.opsForSet().add(key, values);
+            if (time > 0)
+                expire(key, time);
+            return count;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+
+    /**
+     * 获取set缓存的长度
+     *
+     * @param key 键
+     * @return
+     */
+
+    public long sGetSetSize(String key) {
+        try {
+            return redisTemplate.opsForSet().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+
+
+    /**
+     * 移除值为value的
+     *
+     * @param key    键
+     * @param values 值 可以是多个
+     * @return 移除的个数
+     */
+
+    public long setRemove(String key, Object... values) {
+
+        try {
+            Long count = redisTemplate.opsForSet().remove(key, values);
+            return count;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+
+    }
+
+    // ===============================list=================================
+
+
+    /**
+     * 获取list缓存的内容
+     *
+     * @param key   键
+     * @param start 开始
+     * @param end   结束 0 到 -代表所有值
+     * @return
+     */
+
+    public List<Object> lGet(String key, long start, long end) {
+
+        try {
+            return redisTemplate.opsForList().range(key, start, end);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+
+    }
+
+
+    /**
+     * 获取list缓存的长度
+     *
+     * @param key 键
+     * @return
+     */
+
+    public long lGetListSize(String key) {
+
+        try {
+            return redisTemplate.opsForList().size(key);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+
+    }
+
+
+    /**
+     * 通过索引 获取list中的值
+     *
+     * @param key   键
+     * @param index 索引 index>=0时, 0 表头, 第二个元素,依次类推;index<0时,-,表尾,-倒数第二个元素,依次类推
+     * @return
+     */
+
+    public Object lGetIndex(String key, long index) {
+
+        try {
+            return redisTemplate.opsForList().index(key, index);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return null;
+        }
+
+    }
+
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+
+    public boolean lSet(String key, Object value) {
+        try {
+            redisTemplate.opsForList().rightPush(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+
+        }
+
+    }
+
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒)
+     * @return
+     */
+
+    public boolean lSet(String key, Object value, long time) {
+
+        try {
+
+            redisTemplate.opsForList().rightPush(key, value);
+
+            if (time > 0)
+
+                expire(key, time);
+
+            return true;
+
+        } catch (Exception e) {
+
+            e.printStackTrace();
+
+            return false;
+
+        }
+
+    }
+
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @return
+     */
+
+    public boolean lSet(String key, List<Object> value) {
+        try {
+            redisTemplate.opsForList().rightPushAll(key, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 将list放入缓存
+     *
+     * @param key   键
+     * @param value 值
+     * @param time  时间(秒)
+     * @return
+     */
+    public boolean lSet(String key, List<Object> value, long time) {
+        try {
+            redisTemplate.opsForList().rightPushAll(key, value);
+            if (time > 0)
+                expire(key, time);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 根据索引修改list中的某条数据
+     *
+     * @param key   键
+     * @param index 索引
+     * @param value 值
+     * @return
+     */
+    public boolean lUpdateIndex(String key, long index, Object value) {
+        try {
+            redisTemplate.opsForList().set(key, index, value);
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+    }
+
+    /**
+     * 移除N个值为value
+     *
+     * @param key   键
+     * @param count 移除多少个
+     * @param value 值
+     * @return 移除的个数
+     */
+    public long lRemove(String key, long count, Object value) {
+        try {
+            Long remove = redisTemplate.opsForList().remove(key, count, value);
+            return remove;
+        } catch (Exception e) {
+            e.printStackTrace();
+            return 0;
+        }
+    }
+}
diff --git a/kidgrow-springcloud/kidgrow-springcloud-zuul/pom.xml b/kidgrow-springcloud/kidgrow-springcloud-zuul/pom.xml
index 6092725..a1ab394 100644
--- a/kidgrow-springcloud/kidgrow-springcloud-zuul/pom.xml
+++ b/kidgrow-springcloud/kidgrow-springcloud-zuul/pom.xml
@@ -112,6 +112,11 @@
             <groupId>com.github.zlt2000</groupId>
             <artifactId>swagger-butler-core</artifactId>
         </dependency>
+        <!--  redis-->
+        <dependency>
+            <groupId>com.kidgrow</groupId>
+            <artifactId>kidgrow-redis-spring-boot-starter</artifactId>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/SysOrganizationService.java b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/SysOrganizationService.java
new file mode 100644
index 0000000..ea483d2
--- /dev/null
+++ b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/SysOrganizationService.java
@@ -0,0 +1,29 @@
+package com.kidgrow.zuul.feign;
+
+import com.kidgrow.common.constant.ServiceNameConstants;
+import com.kidgrow.common.model.ResultBody;
+import com.kidgrow.common.model.SysMenu;
+import com.kidgrow.zuul.feign.fallback.SysOrganizationServiceFallbackFactory;
+import com.kidgrow.zuul.feign.fallback.SysUserOrgServiceFallbackFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: <br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/2/22 14:33 <br>
+ * @Author: <a href="4345453@kidgrow.com">liuke</a>
+ */
+@FeignClient(name = ServiceNameConstants.USER_SERVICE, fallbackFactory = SysOrganizationServiceFallbackFactory.class, decode404 = true)
+public interface SysOrganizationService {
+
+    @GetMapping("sysorganization/getListByMap")
+    public ResultBody getListByMap(@RequestParam Map<String, Object> params);
+}
diff --git a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/SysUserOrgService.java b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/SysUserOrgService.java
new file mode 100644
index 0000000..4f8c7b8
--- /dev/null
+++ b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/SysUserOrgService.java
@@ -0,0 +1,33 @@
+package com.kidgrow.zuul.feign;
+
+import com.kidgrow.common.constant.ServiceNameConstants;
+import com.kidgrow.common.model.SysMenu;
+import com.kidgrow.common.model.SysUserOrg;
+import com.kidgrow.zuul.feign.fallback.MenuServiceFallbackFactory;
+import com.kidgrow.zuul.feign.fallback.SysUserOrgServiceFallbackFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: <br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/2/22 14:33 <br>
+ * @Author: <a href="4345453@kidgrow.com">liuke</a>
+ */
+@FeignClient(name = ServiceNameConstants.USER_SERVICE, fallbackFactory = SysUserOrgServiceFallbackFactory.class, decode404 = true)
+public interface SysUserOrgService {
+    /**
+     * 根据条件查询
+     * @param map
+     */
+    @PostMapping(value = "/sysuserorg/getListByMap")
+    List<SysUserOrg> getListByMap(@RequestParam Map<String,Object> map);
+}
diff --git a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/fallback/SysOrganizationServiceFallbackFactory.java b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/fallback/SysOrganizationServiceFallbackFactory.java
new file mode 100644
index 0000000..61acc86
--- /dev/null
+++ b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/fallback/SysOrganizationServiceFallbackFactory.java
@@ -0,0 +1,34 @@
+package com.kidgrow.zuul.feign.fallback;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.kidgrow.common.model.ResultBody;
+import com.kidgrow.zuul.feign.MenuService;
+import com.kidgrow.zuul.feign.SysOrganizationService;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: <br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/2/22 14:33 <br>
+ * @Author: <a href="4345453@kidgrow.com">liuke</a>
+ */
+@Slf4j
+@Component
+public class SysOrganizationServiceFallbackFactory implements FallbackFactory<SysOrganizationService> {
+
+    @Override
+    public SysOrganizationService create(Throwable throwable) {
+        return  new SysOrganizationService() {
+            @Override
+            public ResultBody getListByMap(Map<String, Object> params) {
+                return ResultBody.failed().msg("FeignClient调用参数传递测试失败");
+            }
+        };
+    }
+}
diff --git a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/fallback/SysUserOrgServiceFallbackFactory.java b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/fallback/SysUserOrgServiceFallbackFactory.java
new file mode 100644
index 0000000..74e671a
--- /dev/null
+++ b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/feign/fallback/SysUserOrgServiceFallbackFactory.java
@@ -0,0 +1,36 @@
+package com.kidgrow.zuul.feign.fallback;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.kidgrow.common.model.ResultBody;
+import com.kidgrow.common.model.SysMenu;
+import com.kidgrow.common.model.SysUserOrg;
+import com.kidgrow.zuul.feign.MenuService;
+import com.kidgrow.zuul.feign.SysUserOrgService;
+import feign.hystrix.FallbackFactory;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: <br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/2/22 14:33 <br>
+ * @Author: <a href="4345453@kidgrow.com">liuke</a>
+ */
+@Slf4j
+@Component
+public class SysUserOrgServiceFallbackFactory implements FallbackFactory<SysUserOrgService> {
+    @Override
+    public SysUserOrgService create(Throwable throwable) {
+      return new SysUserOrgService() {
+          @Override
+          public List<SysUserOrg> getListByMap(Map<String, Object> map) {
+              return null;
+          }
+      };
+    }
+}
diff --git a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/OrganizationFilter.java b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/OrganizationFilter.java
new file mode 100644
index 0000000..bcd7ade
--- /dev/null
+++ b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/OrganizationFilter.java
@@ -0,0 +1,147 @@
+package com.kidgrow.zuul.filter;
+
+import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSON;
+import com.kidgrow.common.constant.CommonConstant;
+import com.kidgrow.common.constant.SecurityConstants;
+import com.kidgrow.common.model.ResultBody;
+import com.kidgrow.common.model.SysOrganization;
+import com.kidgrow.common.model.SysUser;
+import com.kidgrow.common.model.SysUserOrg;
+import com.kidgrow.common.utils.AddrUtil;
+import com.kidgrow.redis.util.RedisConstant;
+import com.kidgrow.redis.util.RedisUtils;
+import com.kidgrow.zuul.feign.SysOrganizationService;
+import com.kidgrow.zuul.feign.SysUserOrgService;
+import com.netflix.zuul.ZuulFilter;
+import com.netflix.zuul.context.RequestContext;
+import eu.bitwalker.useragentutils.UserAgent;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import org.hibernate.validator.constraints.NotBlank;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.security.authentication.AnonymousAuthenticationToken;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.oauth2.provider.OAuth2Authentication;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+import java.util.stream.Collectors;
+
+import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;
+
+/**
+ * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
+ *
+ * @Description: 将认证用户的相关信息放入header中, 后端服务可以直接读取使用     包含了----组织的拦截---<br>
+ * @Project: <br>
+ * @CreateDate: Created in 2020/2/21 10:12 <br>
+ * @Author: <a href="4345453@kidgrow.com">liuke</a>
+ */
+@Slf4j
+@Component
+public class OrganizationFilter extends ZuulFilter {
+    @Override
+    public String filterType() {
+        return FilterConstants.PRE_TYPE;
+    }
+
+    @Override
+    public int filterOrder() {
+        return PRE_DECORATION_FILTER_ORDER;
+    }
+
+    @Override
+    public boolean shouldFilter() {
+        return true;
+    }
+
+    @Autowired
+    RedisUtils redisUtils;
+    @Autowired
+    private SysUserOrgService sysUserOrgService;
+    @Autowired
+    private SysOrganizationService sysOrganizationService;
+
+    private final String CLIENTID = "webApp";//运营端
+
+    @SneakyThrows
+    @Override
+    public Object run() {
+        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
+        if (authentication != null && !(authentication instanceof AnonymousAuthenticationToken)) {
+            Object principal = authentication.getPrincipal();
+            RequestContext ctx = RequestContext.getCurrentContext();
+            if (principal instanceof SysUser) {
+                //运营端进行
+                OAuth2Authentication oauth2Authentication = (OAuth2Authentication) authentication;
+                String clientId = oauth2Authentication.getOAuth2Request().getClientId();
+                if (CLIENTID.equals(clientId)) {
+                    SysUser user = (SysUser) authentication.getPrincipal();
+                    /**
+                     * 将组织中为空的拦截
+                     */
+                    List<SysUserOrg> sysUserOrgs = getSysUserOrg(user.getId());
+                    if (sysUserOrgs == null || sysUserOrgs.isEmpty()) {
+                        ctx.setSendZuulResponse(false);
+                        ctx.setResponseBody(JSON.toJSONString(ResultBody.fail(1000, "您的组织已经被禁用,请联系管理员")));
+                    } else {
+                        List<Long> collect = sysUserOrgs.stream().map(e -> e.getOrgId()).collect(Collectors.toList());
+                        List<SysOrganization> sysOrganizations = getSysOrganization();
+                        List<Long> orgIds = sysOrganizations.stream().filter(e -> e.getEnabled() == true && collect.contains(e.getId())).map(e -> e.getId()).collect(Collectors.toList());
+                        if (orgIds == null || orgIds.size() <= 0) {
+                            ctx.setSendZuulResponse(false);
+                            ctx.setResponseBody(JSON.toJSONString(ResultBody.fail(1000, "您的组织已经被禁用,请联系管理员")));
+                        }
+                    }
+                }
+            }
+        }
+        return null;
+    }
+
+    /**
+     * 通过userID  获取组织的关系
+     *
+     * @param str
+     * @return
+     */
+    public List<SysUserOrg> getSysUserOrg(Long str) {
+        //获取组织 Redis中获取
+        List<SysUserOrg> sysUserOrgs = JSON.parseArray(JSON.toJSONString(redisUtils.hget(RedisConstant.USER_ORGANIZATION, str.toString())), SysUserOrg.class);
+        if (sysUserOrgs == null || sysUserOrgs.size() <= 0) {
+            //在数据库查询
+            Map<String, Object> map = new HashMap<>();
+            map.put("user_id", str);
+            sysUserOrgs = sysUserOrgService.getListByMap(map);
+            redisUtils.hset(RedisConstant.USER_ORGANIZATION, str.toString(), sysUserOrgs);
+        }
+        return sysUserOrgs;
+    }
+
+    public List<SysOrganization> getSysOrganization() {
+        Map<Object, Object> hmget = redisUtils.hmget(RedisConstant.ORGANIZATION);
+        List<SysOrganization> sysOrganizations = new ArrayList<>();
+        if (hmget == null || hmget.size() <= 0) {
+            Map<String, Object> map = new HashMap<>();
+            map.put("is_del", 0);
+            sysOrganizations = JSON.parseArray(JSON.toJSONString(sysOrganizationService.getListByMap(map).getData()), SysOrganization.class);
+            sysOrganizations.forEach(e -> {
+                redisUtils.hset(RedisConstant.ORGANIZATION, e.getId().toString(), e);
+            });
+
+        } else {
+            Set<Object> objects = hmget.keySet();
+            Iterator<Object> iterator = objects.iterator();
+            while (iterator.hasNext()) {
+                sysOrganizations.add((SysOrganization) hmget.get(iterator.next()));
+            }
+        }
+        return sysOrganizations;
+    }
+}
+
diff --git a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/UserInfoHeaderFilter.java b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/UserInfoHeaderFilter.java
index 287b8d5..79a5510 100644
--- a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/UserInfoHeaderFilter.java
+++ b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/java/com/kidgrow/zuul/filter/UserInfoHeaderFilter.java
@@ -1,6 +1,7 @@
 package com.kidgrow.zuul.filter;
 
 import cn.hutool.core.collection.CollectionUtil;
+import com.alibaba.fastjson.JSON;
 import com.kidgrow.common.constant.CommonConstant;
 import com.kidgrow.common.constant.SecurityConstants;
 import com.kidgrow.common.model.ResultBody;
@@ -20,15 +21,17 @@
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.net.URLEncoder;
 import java.util.List;
 
 import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.FORM_BODY_WRAPPER_FILTER_ORDER;
+import static org.springframework.cloud.netflix.zuul.filters.support.FilterConstants.PRE_DECORATION_FILTER_ORDER;
 
 /**
  * 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
  *
- * @Description: 将认证用户的相关信息放入header中, 后端服务可以直接读取使用<br>
+ * @Description: 将认证用户的相关信息放入header中, 后端服务可以直接读取使用     包含了----组织的拦截---<br>
  * @Project: <br>
  * @CreateDate: Created in 2020/2/21 10:12 <br>
  * @Author: <a href="4345453@kidgrow.com">liuke</a>
@@ -60,47 +63,34 @@
             RequestContext ctx = RequestContext.getCurrentContext();
             HttpServletRequest req = ctx.getRequest();
             UserAgent userAgent = UserAgent.parseUserAgentString(req.getHeader("User-Agent"));
-            String tenantId="";
+            String tenantId = "";
             //客户端模式只返回一个clientId
             if (principal instanceof SysUser) {
-                SysUser user = (SysUser)authentication.getPrincipal();
+                SysUser user = (SysUser) authentication.getPrincipal();
                 ctx.addZuulRequestHeader(SecurityConstants.USER_ID_HEADER, String.valueOf(user.getId()));
                 ctx.addZuulRequestHeader(SecurityConstants.USER_HEADER, user.getUsername());
                 ctx.addZuulRequestHeader(SecurityConstants.USER_REAL_NAME, "");//待完善
-                List<SysOrganization> organizations = (List<SysOrganization>)user.getOrganizations();
-                //如果有组织架构
-                if(organizations!=null && organizations.size()==2){
-                   if(organizations.get(0)!=null){
-                       ctx.addZuulRequestHeader(SecurityConstants.USER_ORG_ID_HEADER,String.valueOf(organizations.get(0).getId()));
-                       ctx.addZuulRequestHeader(SecurityConstants.USER_ORG_NAME_HEADER, URLEncoder.encode(organizations.get(0).getOrgName(),"UTF-8"));
-                       tenantId=String.valueOf(organizations.get(0).getId());
-                   }else{
-                        return ResultBody.failed("您的组织,已经被禁用,请联系管理员");
-                   }
-                   if(organizations.get(1)!=null){
-                       ctx.addZuulRequestHeader(SecurityConstants.USER_DEP_ID_HEADER,String.valueOf(organizations.get(1).getId()));
-                       ctx.addZuulRequestHeader(SecurityConstants.USER_DEP_NAME_HEADER,URLEncoder.encode(organizations.get(1).getOrgName(),"UTF-8"));
-                   }else {
-                       return ResultBody.failed("您组织部门或者科室,已经被禁用,请联系管理员");
-                   }
-                }
+                List<SysOrganization> organizations = (List<SysOrganization>) user.getOrganizations();
+                //如果没有有组织架构
+                //将组织数据 存到header 里面
+                ctx.addZuulRequestHeader(SecurityConstants.USER_ORGS_HEADER, JSON.toJSONString(organizations));
 //                log.error("用户ID写入Header成功,用户ID为:"+String.valueOf(user.getId()));
             }
 
 
-            OAuth2Authentication oauth2Authentication = (OAuth2Authentication)authentication;
+            OAuth2Authentication oauth2Authentication = (OAuth2Authentication) authentication;
             String clientId = oauth2Authentication.getOAuth2Request().getClientId();
 
             //保存租户id,租户id根据业务尽进行替换
-            switch (clientId){
+            switch (clientId) {
                 case "hospital":
-                    tenantId=tenantId;
+                    tenantId = tenantId;
                     break;
                 case "webApp":
-                    tenantId="webApp";
+                    tenantId = "webApp";
                     break;
                 default:
-                    tenantId=clientId;
+                    tenantId = clientId;
                     break;
             }
             ctx.addZuulRequestHeader(CommonConstant.USER_AGENT_BROWSER, userAgent.getBrowser().toString());
diff --git a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/resources/application.yml b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/resources/application.yml
index a55e0f0..6a4e638 100644
--- a/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/resources/application.yml
+++ b/kidgrow-springcloud/kidgrow-springcloud-zuul/src/main/resources/application.yml
@@ -1,6 +1,12 @@
 spring:
   application:
     name: zuul-server
+  #配置Redis
+  redis:
+    host: ${spring.redis.host}
+    port: ${spring.redis.port}
+    password: ${spring.redis.password}
+    timeout: ${spring.redis.timeout}
 server:
   tomcat:
     uri-encoding: UTF-8
@@ -222,6 +228,4 @@
   butler:
     auto-generate-from-zuul-routes: true
     generate-routes: user,file,log,codegenerator,auth
-    apiDocsPath: v2/api-docs
-
-
+    apiDocsPath: v2/api-docs
\ No newline at end of file
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/index.js b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/index.js
index 0362fed..439f445 100644
--- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/index.js
+++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/module/index.js
@@ -1,13 +1,13 @@
 //add by owen 修复 path 无法引用http://页面的问题 begin
-String.prototype.startWith = function(str) {
-	if (str == null || str == "" || this.length == 0
-			|| str.length > this.length)
-		return false;
-	if (this.substr(0, str.length) == str)
-		return true;
-	else
-		return false;
-	return true;
+String.prototype.startWith = function (str) {
+    if (str == null || str == "" || this.length == 0
+        || str.length > this.length)
+        return false;
+    if (this.substr(0, str.length) == str)
+        return true;
+    else
+        return false;
+    return true;
 }
 
 
@@ -18,9 +18,9 @@
         return;
     }
     if ($parent.hasClass('layui-tab-item')) {
-        $parent.css({'padding': '0', 'overflow-y': 'hidden'});
+        $parent.css({ 'padding': '0', 'overflow-y': 'hidden' });
     } else {
-        $parent.css({'width': '100%', 'height': '100%'});
+        $parent.css({ 'width': '100%', 'height': '100%' });
     }
 }
 //add by owen 修复 path 无法引用http://页面的问题 end
@@ -33,7 +33,7 @@
     var laytpl = layui.laytpl;
     var element = layui.element;
     var form = layui.form;
-    
+
     var index = {
         // 渲染左侧菜单栏
         initLeftNav: function () {
@@ -41,7 +41,7 @@
                 //data = data[1];
                 // console.log(data);
                 // debugger;
-                admin.putTempData("menus",data.data);
+                admin.putTempData("menus", data.data);
                 var menus = data.data;
                 // 判断权限
                 for (var i = menus.length - 1; i >= 0; i--) {
@@ -123,7 +123,7 @@
                             window.open(data.path);
                         } else {
                             //临时保存url
-                            data.path.startWith("http://") ?  admin.putTempData("params",data.path) : null ;
+                            data.path.startWith("http://") ? admin.putTempData("params", data.path) : null;
 
                             var menuId = data.url.substring(2);
                             //add by owen 修复 path 无法引用http://页面的问题
@@ -142,7 +142,7 @@
             var contentDom = '.layui-layout-admin .layui-body';
             admin.showLoading('.layui-layout-admin .layui-body');
             var flag;  // 选项卡是否添加
-            flag =   menuPath.startWith("http://") ? false : flag ;
+            flag = menuPath.startWith("http://") ? false : flag;
             // 判断是否开启了选项卡功能
             if (config.pageTabs) {
                 $('.layui-layout-admin .layui-body .layui-tab .layui-tab-title>li').each(function (index) {
@@ -153,8 +153,8 @@
                 if (!flag) {
                     element.tabAdd('admin-pagetabs', {
                         title: menuName,
-                      //add by owen 修复 path 无法引用http://页面的问题
-                        content:  menuPath.startWith("http://") ? '<div id="admin-iframe" style="width: 100%; height: 100%;"><iframe id="' + menuId + '" src="' + menuPath + '" marginwidth="0"  marginheight="0" width="100%" height="100%"  frameborder="0" onload="initIFrame()"></iframe> </div>'   :  '<div id="' + menuId + '"></div>' ,
+                        //add by owen 修复 path 无法引用http://页面的问题
+                        content: menuPath.startWith("http://") ? '<div id="admin-iframe" style="width: 100%; height: 100%;"><iframe id="' + menuId + '" src="' + menuPath + '" marginwidth="0"  marginheight="0" width="100%" height="100%"  frameborder="0" onload="initIFrame()"></iframe> </div>' : '<div id="' + menuId + '"></div>',
                         id: menuId
                     });
                 }
@@ -192,26 +192,39 @@
             layer.load(2);
             admin.req('api-user/users/current', {}, function (data) {
                 layer.closeAll('loading');
-                // console.log(data.code);
                 // debugger;
+                // console.log(data);
                 if (data && data.code === 0) {
                     let user = data.data;
-                    // console.log(user);
                     // debugger;
                     config.putUser(user);
-                    admin.putTempData("permissions",user.permissions);
+                    admin.putTempData("permissions", user.permissions);
                     success(user);
                 } else {
-                    layer.msg('获取用户失败', {icon: 2});
-                    config.removeToken();
-                    location.replace('login.html');
+                    if (data.code === 1000) {
+                        layer.msg(data.msg, { icon: 2, time: 4 * 1000 }, function () {
+                            //回调
+                            config.removeToken();
+                            location.replace('login.html');
+                        })
+
+                    } else {
+                        layer.msg('获取用户失败,请联系管理员', { icon: 2, time: 4 * 1000 }, function () {
+                            //回调
+                            config.removeToken();
+                            location.replace('login.html');
+                        })
+                    }
+
+
+
                 }
             }, 'GET');
         },
         //获取菜单
         getMenus: function () {
             admin.req('api-user/menus/current', {}, function (data) {
-                admin.putTempData("menus",data);
+                admin.putTempData("menus", data);
             }, 'GET');
         },
         // 页面元素绑定事件监听
@@ -221,8 +234,8 @@
                 layer.confirm('确定退出登录?', function () {
                     //通过认证中心 tuic
                     admin.req('api-uaa/oauth/remove/token', {}, function (data) {
-                            config.removeToken();
-                            location.replace('login.html');
+                        config.removeToken();
+                        location.replace('login.html');
                     }, 'POST');
                 });
             });
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/doctor.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/doctor.html
index 2b16ba4..ed18719 100644
--- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/doctor.html
+++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/doctor.html
@@ -15,7 +15,7 @@
                 <option value="false">试用</option>
             </select>
             <select id="hospitalName-seach" placeholder="选择一个应用" lay-filter="role_clients">
-                <option value="">-请选择-</option>
+                <option value="">-请选择医院-</option>
             </select>
             <input id="doctorTel" class="layui-input search-input" type="text" placeholder="按手机号..." />&emsp;
             <input id="doctorName" class="layui-input search-input" type="text" placeholder="按医生..." />&emsp;
@@ -40,8 +40,9 @@
 
 <!-- 表单弹窗 -->
 <script type="text/html" id="app-model">
-    <form id="app-form" lay-filter="app-form" class="layui-form model-form">
+    <form id="app-form" lay-filter="app-form" class="layui-form model-form"   >
         <input name="id" type="hidden"/>
+        <div style="display:flex">
         <div class="layui-form-item">
             <label class="layui-form-label">医院名称</label>
             <div class="layui-input-block">
@@ -60,6 +61,9 @@
                 </select>
             </div>
         </div>
+    </div>
+
+    <div style="display:flex">
         <div class="layui-form-item">
             <label class="layui-form-label">医生姓名</label>
             <div class="layui-input-block">
@@ -68,18 +72,13 @@
             </div>
         </div>
         <div class="layui-form-item">
-            <label class="layui-form-label">医生的头像</label>
-            <div class="layui-input-block" id="demo">
-                <button type="button" class="layui-btn" id="phonto">
-                    <i class="layui-icon">&#xe67c;</i>上传图片
-                  </button>
-                <input name="doctorLogo" id="doctorLogo-add"  type="hidden" class="layui-input" maxlength="20"/>
-                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
-                    预览图:
-                    <div class="layui-upload-list" id="demo2"></div>
-                </blockquote>
+            <label class="layui-form-label" >销售代表名称</label>
+            <div class="layui-input-block">
+                <input name="serverUserName"  type="text" class="layui-input" maxlength="15"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex">
         <div class="layui-form-item">
             <label class="layui-form-label">联系方式</label>
             <div class="layui-input-block">
@@ -92,6 +91,8 @@
                 <input name="doctorRank"  type="text" class="layui-input" maxlength="20"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex">
         <div class="layui-form-item">
             <label class="layui-form-label">其它联系方式</label>
             <div class="layui-input-block">
@@ -104,6 +105,8 @@
                 <input name="doctorEmail"  type="text" class="layui-input" maxlength="20"/>
             </div>
         </div>
+    </div>  
+    <div style="display:flex">  
         <div class="layui-form-item">
             <label class="layui-form-label">医生简介</label>
             <div class="layui-input-block">
@@ -117,6 +120,8 @@
                 <input name="isAnswer" id="isAnswer-fou" type="radio"  value="false" title="否" class="layui-input" maxlength="20"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex"> 
         <div class="layui-form-item">
             <label class="layui-form-label">是否签约医生</label>
             <div class="layui-input-block">
@@ -131,6 +136,7 @@
                 <input name="isTop" id="isTop-fou" type="radio"  value="false" title="否" class="layui-input" maxlength="20"/>
             </div>
         </div>
+    </div>
         <div class="layui-form-item">
             <label class="layui-form-label"> 医生状态</label>
             <div class="layui-input-block">
@@ -138,12 +144,20 @@
                 <input name="doctorState" id="doctorState-fou" type="radio"  value="false" title="否" class="layui-input" maxlength="20"/>
             </div>
         </div>
-        <div class="layui-form-item">
-            <label class="layui-form-label" >销售代表名称</label>
-            <div class="layui-input-block">
-                <input name="serverUserName"  type="text" class="layui-input" maxlength="15"/>
-            </div>
+        
+    <div class="layui-form-item">
+        <label class="layui-form-label">医生的头像</label>
+        <div class="layui-input-block" id="demo" >
+            <button type="button" class="layui-btn" id="phonto">
+                <i class="layui-icon">&#xe67c;</i>上传图片
+              </button>
+            <input name="doctorLogo" id="doctorLogo-add"  type="hidden" class="layui-input" maxlength="20"/>
+            <blockquote class="layui-elem-quote layui-quote-nm"  style="margin-top: 10px;  width:150px">
+                预览图:
+                <div class="layui-upload-list" id="demo2"></div>
+            </blockquote>
         </div>
+    </div>
         <div class="layui-form-item model-form-footer">
             <button class="layui-btn layui-btn-primary"  ew-event="closeDialog" type="button">取消</button>
             <button class="layui-btn" id="sure" lay-filter="user-form-submit" lay-submit>保存</button>
@@ -153,9 +167,10 @@
 
 <!-- 表单弹窗 添加-->
 <script type="text/html" id="app-model-add">
-   
+
     <form id="app-form-add" lay-filter="app-form-add" class="layui-form model-form">
         <input name="id" type="hidden"/>
+    <div style="display:flex"> 
         <div class="layui-form-item">
             <label class="layui-form-label">医院名称</label>
             <div class="layui-input-block">
@@ -172,6 +187,8 @@
                        lay-verify="required" required />
             </div>
         </div>
+    </div>
+    <div style="display:flex"> 
         <div class="layui-form-item">
             <label class="layui-form-label">科室</label>
             <div class="layui-input-block">
@@ -190,6 +207,8 @@
                 <input name="doctorRank" id='doctorRank' type="hidden" class="layui-input" maxlength="20"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex"> 
         <div class="layui-form-item">
             <label class="layui-form-label">联系电话</label>
             <div class="layui-input-block">
@@ -202,6 +221,8 @@
                 <input name="doctorOtherLink"  type="text" class="layui-input" maxlength="20"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex"> 
         <div class="layui-form-item">
             <label class="layui-form-label">医生的email</label>
             <div class="layui-input-block">
@@ -214,26 +235,27 @@
                 <input name="doctorAbout"  type="text" class="layui-input" maxlength="20"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex"> 
+        
         <div class="layui-form-item">
-            <label class="layui-form-label">医生的头像</label>
-            <div class="layui-input-block" id="demo">
-                <button type="button" class="layui-btn" id="phonto">
-                    <i class="layui-icon">&#xe67c;</i>上传图片
-                  </button>
-                <input name="doctorLogo" id="doctorLogo-add"  type="hidden" class="layui-input" maxlength="20"/>
-                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
-                    预览图:
-                    <div class="layui-upload-list" id="demo2"></div>
-                </blockquote>
+            <label class="layui-form-label" >销售代表名称</label>
+            <div class="layui-input-block">
+                <input name="serverUserName" id="serverUserName-add"   type="hidden" class="layui-input" maxlength="15"/>
+                <select  id="serverUserId-add" name="serverUserId" lay-filter="serverUserId-add"  placeholder="选择一个应用" lay-filter="role_clients">
+                    <option value="">-请选择-</option>
+                </select>
             </div>
         </div>
-    <div class="layui-form-item">
-        <label class="layui-form-label"> 是否置顶</label>
-        <div class="layui-input-block">
-            <input name="isTop" id="isTop-shi" type="radio" checked value="true" title="是" class="layui-input" maxlength="20"/>
-            <input name="isTop" id="isTop-fou" type="radio"  value="false" title="否" class="layui-input" maxlength="20"/>
+        <div class="layui-form-item">
+            <label class="layui-form-label"> 是否置顶</label>
+            <div class="layui-input-block">
+                <input name="isTop" id="isTop-shi" type="radio" checked value="true" title="是" class="layui-input" maxlength="20"/>
+                <input name="isTop" id="isTop-fou" type="radio"  value="false" title="否" class="layui-input" maxlength="20"/>
+            </div>
         </div>
     </div>
+    <div style="display:flex"> 
         <div class="layui-form-item">
             <label class="layui-form-label">是否医答</label>
             <div class="layui-input-block">
@@ -248,6 +270,8 @@
                 <input name="isSigning" id="isSigning-fou" type="radio"  value="false" title="否" class="layui-input" maxlength="20"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex"> 
          <div class="layui-form-item">
             <label class="layui-form-label"> 医生状态</label>
             <div class="layui-input-block">
@@ -261,6 +285,8 @@
                 <input name="username"  type="text" class="layui-input" maxlength="15"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex"> 
         <div class="layui-form-item">
             <label class="layui-form-label" >登录密码</label>
             <div class="layui-input-block">
@@ -273,15 +299,23 @@
                 <input name="passwordSure"  type="text" class="layui-input" maxlength="15"/>
             </div>
         </div>
+    </div>
+    <div style="display:flex"> 
         <div class="layui-form-item">
-            <label class="layui-form-label" >销售代表名称</label>
-            <div class="layui-input-block">
-                <input name="serverUserName" id="serverUserName-add"   type="hidden" class="layui-input" maxlength="15"/>
-                <select  id="serverUserId-add" name="serverUserId" lay-filter="serverUserId-add"  placeholder="选择一个应用" lay-filter="role_clients">
-                    <option value="">-请选择-</option>
-                </select>
+            <label class="layui-form-label">医生的头像</label>
+            <div class="layui-input-block" id="demo">
+                <button type="button" class="layui-btn" id="phonto">
+                    <i class="layui-icon">&#xe67c;</i>上传图片
+                  </button>
+                <input name="doctorLogo" id="doctorLogo-add"  type="hidden" class="layui-input" maxlength="20"/>
+                <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 10px;">
+                    预览图:
+                    <div class="layui-upload-list" id="demo2"></div>
+                </blockquote>
             </div>
         </div>
+    </div>
+    
         <div class="layui-form-item model-form-footer">
             <button class="layui-btn layui-btn-primary"  ew-event="closeDialog" type="button">取消</button>
             <button class="layui-btn" id="sure" lay-filter="user-form-submit" lay-submit>保存</button>
@@ -307,7 +341,7 @@
         //销售代表
         var user = "";
         //职称
-        var doctorRank="";
+        var doctorRank = "";
         // 获取应用列表
         // layer.load(2);
         admin.req('api-user/syshospital/findAll', JSON.stringify({ is_del: 0 }), function (data) {
@@ -484,13 +518,13 @@
             layer.open({
                 type: 1,
                 title: '新增',
-                area: '450px',
+                area: '600px',
                 offset: '120px',
                 content: $('#app-model-add').html(),
                 success: function () {
                     $('#app-form-add')[0].reset();
                     $('#app-form-add').attr('method', 'POST');
-                    $('.layui-layer-content').css('overflow','auto');
+                    $('.layui-layer-content').css('overflow', 'auto');
                     //将医院的数据保存到下拉表
                     let selected = false;
                     //获取职称的
@@ -548,7 +582,7 @@
             layer.open({
                 type: 1,
                 title: title,
-                area: '450px',
+                area: '650px',
                 offset: '120px',
                 content: $('#app-model').html(),
                 success: function () {
@@ -662,7 +696,7 @@
         //新增   点击职称的触发事件
         form.on('select(doctorRankId)', function (data) {
             //将部门名称赋值
-           
+
             $.each(doctorRank, function (index, item) {
                 if (item.id == data.value) {
                     console.log(12312312312)
@@ -689,7 +723,7 @@
                 if (0 === data.code) {
                     department = data.data;
                     $('#departmentId').empty();
-                    if(data.data.length>0){
+                    if (data.data.length > 0) {
                         $('#departmentName').val(data.data[0].departmentName);
                     }
                     $.each(data.data, function (index, item) {
diff --git a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/sysOrganization.html b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/sysOrganization.html
index 1f9bee4..32ef61f 100644
--- a/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/sysOrganization.html
+++ b/kidgrow-web/kidgrow-web-manager/src/main/resources/static/pages/opration/sysOrganization.html
@@ -132,7 +132,7 @@
                 page: false,
                 cols: [[
                     { type: 'numbers' },
-                    { field: 'orgName', align: 'right', title: '组织名称' },
+                    { field: 'orgName', minWidth: 200, title: '组织名称' },
                     {
                         field: 'orgAttr', align: 'right', title: '所属类型', templet: function (d) {
                             //节点属性(集团/公司/部门等,取值0,1,2,3,4)

--
Gitblit v1.8.0