wangfeng 4 سال پیش
والد
کامیت
aff6c77d94
32فایلهای تغییر یافته به همراه1698 افزوده شده و 0 حذف شده
  1. 239 0
      src/main/java/com/diagbot/aop/TokenAuthAspect.java
  2. 2 0
      src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  3. 2 0
      src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  4. 58 0
      src/main/java/com/diagbot/dto/HospitalInfoDTO.java
  5. 20 0
      src/main/java/com/diagbot/dto/PermissionDTO.java
  6. 31 0
      src/main/java/com/diagbot/dto/TokenHospitaDTO.java
  7. 41 0
      src/main/java/com/diagbot/dto/TokenPermissionDTO.java
  8. 212 0
      src/main/java/com/diagbot/entity/HospitalInfo.java
  9. 186 0
      src/main/java/com/diagbot/entity/TokenHospital.java
  10. 171 0
      src/main/java/com/diagbot/entity/TokenPermission.java
  11. 45 0
      src/main/java/com/diagbot/facade/HospitalInfoFacade.java
  12. 70 0
      src/main/java/com/diagbot/facade/TokenHospitalFacade.java
  13. 108 0
      src/main/java/com/diagbot/facade/TokenPermissionFacade.java
  14. 16 0
      src/main/java/com/diagbot/mapper/HospitalInfoMapper.java
  15. 16 0
      src/main/java/com/diagbot/mapper/TokenHospitalMapper.java
  16. 21 0
      src/main/java/com/diagbot/mapper/TokenPermissionMapper.java
  17. 16 0
      src/main/java/com/diagbot/service/HospitalInfoService.java
  18. 16 0
      src/main/java/com/diagbot/service/TokenHospitalService.java
  19. 22 0
      src/main/java/com/diagbot/service/TokenPermissionService.java
  20. 20 0
      src/main/java/com/diagbot/service/impl/HospitalInfoServiceImpl.java
  21. 20 0
      src/main/java/com/diagbot/service/impl/TokenHospitalServiceImpl.java
  22. 28 0
      src/main/java/com/diagbot/service/impl/TokenPermissionServiceImpl.java
  23. 18 0
      src/main/java/com/diagbot/vo/HospitalCheckVO.java
  24. 27 0
      src/main/java/com/diagbot/vo/HospitalInfoVO.java
  25. 15 0
      src/main/java/com/diagbot/vo/TokenHospitalVO.java
  26. 21 0
      src/main/java/com/diagbot/vo/TokenPermissionVO.java
  27. 59 0
      src/main/java/com/diagbot/web/HospitalInfoController.java
  28. 53 0
      src/main/java/com/diagbot/web/TokenHospitalController.java
  29. 54 0
      src/main/java/com/diagbot/web/TokenPermissionController.java
  30. 23 0
      src/main/resources/mapper/HospitalInfoMapper.xml
  31. 21 0
      src/main/resources/mapper/TokenHospitalMapper.xml
  32. 47 0
      src/main/resources/mapper/TokenPermissionMapper.xml

+ 239 - 0
src/main/java/com/diagbot/aop/TokenAuthAspect.java

@@ -1,22 +1,46 @@
 package com.diagbot.aop;
 
 import com.diagbot.annotation.TokenAuth;
+import com.diagbot.dto.PermissionDTO;
 import com.diagbot.exception.CommonErrorCode;
 import com.diagbot.exception.CommonException;
+import com.diagbot.facade.HospitalInfoFacade;
+import com.diagbot.facade.TokenHospitalFacade;
+import com.diagbot.facade.TokenPermissionFacade;
+import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
+import com.diagbot.util.SysJwtUtil;
+import com.diagbot.vo.HospitalCheckVO;
+import com.diagbot.vo.TokenPermissionVO;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
 import org.aspectj.lang.annotation.Pointcut;
 import org.aspectj.lang.reflect.MethodSignature;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.core.DefaultParameterNameDiscoverer;
+import org.springframework.core.ParameterNameDiscoverer;
+import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 import org.springframework.stereotype.Component;
 import org.springframework.web.context.request.RequestAttributes;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
+import java.lang.reflect.Field;
+import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
 /**
  * @Description:
@@ -26,8 +50,20 @@ import java.lang.reflect.Method;
 @Aspect
 @Component
 @ConditionalOnProperty(prefix = "tokenAuth", value = { "enable" }, havingValue = "true")
+@Slf4j
 public class TokenAuthAspect {
 
+    private static HospitalInfoFacade hospitalInfoFacade;
+    private static TokenHospitalFacade tokenHospitalFacade;
+    private static TokenPermissionFacade tokenPermissionFacade;
+
+    @Autowired
+    public void TokenAuthAspect(HospitalInfoFacade hospitalInfoFacade,TokenHospitalFacade tokenHospitalFacade,TokenPermissionFacade tokenPermissionFacade) {
+        TokenAuthAspect.hospitalInfoFacade = hospitalInfoFacade;
+        TokenAuthAspect.tokenHospitalFacade = tokenHospitalFacade;
+        TokenAuthAspect.tokenPermissionFacade = tokenPermissionFacade;
+    }
+
     //切所有Controller
     @Pointcut("execution(* com.diagbot.web..*.*(..))")
     public void pointcutController() {
@@ -53,7 +89,210 @@ public class TokenAuthAspect {
             throw new CommonException(CommonErrorCode.PARAM_IS_NULL, "请传入token!");
         }
         //todo 期限和医院有效性验证
+        long hospitalId = Long.parseLong(SysJwtUtil.getHospId(token));
+        HospitalCheckVO hospitalCheckVO = new HospitalCheckVO();
+        hospitalCheckVO.setHospitalId(hospitalId);
+        if (!hospitalInfoFacade.checkHospital(hospitalCheckVO)){
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "该医院不存在!");
+        }
+        if(!tokenHospitalFacade.checkTokenHospitals(token)){
+            throw new CommonException(CommonErrorCode.NOT_EXISTS, "已超过有效期");
+        }
         //todo 权限拦截
+        //todo 远程获取权限验证权限
+        //验证权限
+        String uri = request.getRequestURI();
+        log.info(uri);
+        TokenPermissionVO permissionVO = new TokenPermissionVO();
+        permissionVO.setTokenId(1L);//TODO
+        PermissionDTO permissionDTO = tokenPermissionFacade.getPermission(permissionVO);
+        Map<String, List<Map<String, Set<String>>>> hasParamMap = new HashMap<>();
+        Map<String, List<Map<String, Set<String>>>> noParamMap = new HashMap<>();
+        if (permissionDTO.getPermissionMap() != null) {
+            hasParamMap = permissionDTO.getPermissionMap().get("hasParam");
+            noParamMap = permissionDTO.getPermissionMap().get("noParam");
+        }
+
+        //todo 验证是否在无参数的Map
+        Boolean noParam = false;
+        if (noParamMap != null) {
+            if (noParamMap.containsKey(uri)) {
+                noParam = true;
+            }
+        }
+        //todo 验证是否在有参数的Map
+        Boolean hasParam = false;
+        List<Map<String, Set<String>>> perParamList = Lists.newLinkedList();
+        if (hasParamMap != null) {
+            if (hasParamMap.containsKey(uri)) {
+                hasParam = true;
+                perParamList = hasParamMap.get(uri);
+            }
+        }
+
+        if (!noParam && !hasParam) {
+            throw new CommonException(CommonErrorCode.NO_PERMISSION);
+        }
+        //todo 验证参数
+        Object[] args = joinPoint.getArgs();
+        if (args == null) {
+            throw new CommonException(CommonErrorCode.NO_PERMISSION);
+        }
+
+        Map<String, Object> paramMap = new HashMap<>();
+        paramMap = getFieldsName(joinPoint);
+        //todo 利用paramMap获取结果
+        try {
+            if (!noParam && hasParam && ListUtil.isNotEmpty(perParamList)) {
+
+                for (Map.Entry<String, Object> entry : paramMap.entrySet()) {
+                    if (entry.getValue() == null) {
+                        continue;
+                    }
+                    Field[] fields = getAllFields(entry.getValue());
+                    Boolean hasPermission = true;
+                    for (Map<String, Set<String>> perParamMap : perParamList) {
+                        if (perParamMap == null || perParamMap.size() == 0) {
+                            continue;
+                        }
+                        //验证单条paramKey是否所有参数都满足,包含关系
+                        for (Map.Entry<String, Set<String>> paramEntry : perParamMap.entrySet()) {
+                            for (int i = 0; i < fields.length; i++) {
+                                String fieldName = fields[i].getName();
+                                if (!paramEntry.getKey().equals(fieldName)) {
+                                    continue;
+                                }
+                                Set<String> paramValueSet = paramEntry.getValue();
+                                if (paramValueSet == null || paramValueSet.size() == 0) {
+                                    continue;
+                                }
+                                String getter = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
+                                String type = fields[i].getGenericType().toString();
+                                Class clazz = entry.getValue().getClass();
+                                Method methods = clazz.getMethod(getter, new Class[]{});
+                                Object obj = methods.invoke(entry.getValue(), new Object[]{});
+                                if (type.equals("class java.lang.String")
+                                        || type.equals("class java.lang.Integer")
+                                        || type.equals("class java.lang.Long")) {
+                                    String value = obj.toString();
+                                    String[] valueArr = value.split(",|,");
+                                    Set<String> valueSet = new HashSet<>(Arrays.asList(valueArr));
+                                    if (paramValueSet.containsAll(valueSet)) {
+                                        hasPermission = true;
+                                        break;
+                                    } else {
+                                        hasPermission = false;
+                                    }
+                                } else if (type.equals("class java.lang.Boolean")) {
+                                    Boolean value = (Boolean) obj;
+                                    Iterator<String> it = paramEntry.getValue().iterator();
+                                    while (it.hasNext()) {
+                                        it.next().toLowerCase();
+                                    }
+                                    if (paramEntry.getValue().contains(value.toString().toLowerCase())) {
+                                        hasPermission = true;
+                                    } else {
+                                        hasPermission = false;
+                                    }
+                                }
+                                if (!hasPermission) {
+                                    break;
+                                }
+                            }
+                            //当前组合中有一个参数不满足,则整条都不满足
+                            if (!hasPermission) {
+                                break;
+                            }
+                        }
+                        //有一条完整的参数验证通过,则结束循环
+                        if (hasPermission) {
+                            break;
+                        }
+                    }
+                    //遍历所有参数组合之后,没有一条满足,则说明没有权限
+                    if (!hasPermission) {
+                        throw new CommonException(CommonErrorCode.NO_PERMISSION);
+                    }
+                }
+            }
+        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
+            throw new CommonException(CommonErrorCode.FAIL, e.getMessage());
+        }
+
+    }
+    public static Field[] getAllFields(Object object) {
+        Class clazz = object.getClass();
+        List<Field> fieldList = new ArrayList<>();
+        while (clazz != null) {
+            fieldList.addAll(new ArrayList<>(Arrays.asList(clazz.getDeclaredFields())));
+            clazz = clazz.getSuperclass();
+        }
+        Field[] fields = new Field[fieldList.size()];
+        fieldList.toArray(fields);
+        return fields;
+    }
+
+    private static Map getFieldsName(JoinPoint joinPoint) {
+        try {
+            String classType = joinPoint.getTarget().getClass().getName();
+            String methodName = joinPoint.getSignature().getName();
+            // 参数值
+            Object[] args = joinPoint.getArgs();
+            Class<?>[] classes = new Class[args.length];
+            for (int k = 0; k < args.length; k++) {
+                if (!args[k].getClass().isPrimitive()) {
+                    // 获取的是封装类型而不是基础类型
+                    String result = args[k].getClass().getName();
+                    Class s = map.get(result);
+                    classes[k] = s == null ? args[k].getClass() : s;
+                }
+            }
+            ParameterNameDiscoverer pnd = new DefaultParameterNameDiscoverer();
+            // 获取指定的方法,第二个参数可以不传,但是为了防止有重载的现象,还是需要传入参数的类型
+            Method method = Class.forName(classType).getMethod(methodName, classes);
+            // 参数名
+            String[] parameterNames = pnd.getParameterNames(method);
+            // 通过map封装参数和参数值
+            HashMap<String, Object> paramMap = new HashMap();
+            for (int i = 0; i < parameterNames.length; i++) {
+                paramMap.put(parameterNames[i], args[i]);
+            }
+            return paramMap;
+        } catch (ClassNotFoundException e) {
+            return null;
+        } catch (NoSuchMethodException e) {
+            return null;
+        }
 
     }
+    private static HashMap<String, Class> map = new HashMap<String, Class>() {
+        {
+            put("java.lang.Integer", int.class);
+            put("java.lang.Double", double.class);
+            put("java.lang.Float", float.class);
+            put("java.lang.Long", long.class);
+            put("java.lang.Short", short.class);
+            put("java.lang.Boolean", boolean.class);
+            put("java.lang.Char", char.class);
+        }
+    };
+
+    private static Boolean matchPermitAllUrl(HttpServletRequest request, List<String> ignoreUrl) {
+        if (ListUtil.isNotEmpty(ignoreUrl)) {
+            for (String url : ignoreUrl) {
+                if (matchers(url, request)) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private static Boolean matchers(String url, HttpServletRequest request) {
+        AntPathRequestMatcher matcher = new AntPathRequestMatcher(url);
+        if (matcher.matches(request)) {
+            return true;
+        }
+        return false;
+    }
 }

+ 2 - 0
src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -48,6 +48,8 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/sys/mr/getMr").permitAll()
                 .antMatchers("/sys/sysPlan/getSysPlanInfoDatas").permitAll()
                 .antMatchers("/sys/mrqc/analyze_run").permitAll()
+                .antMatchers("/sys/tokenPermission/delPermission").permitAll()
+                        .antMatchers("/sys/tokenPermission/getPermission").permitAll()
                 .antMatchers("/**").authenticated();
 //                .antMatchers("/**").permitAll();
     }

+ 2 - 0
src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -91,6 +91,8 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/sys/mr/getMr", request)
                 || matchers("/sys/sysPlan/getSysPlanInfoDatas", request)
                 || matchers("/sys/mrqc/analyze_run", request)
+                || matchers("/sys/tokenPermission/delPermission", request)
+                || matchers("/sys/tokenPermission/getPermission", request)
                 || matchers("/", request)) {
             return true;
         }

+ 58 - 0
src/main/java/com/diagbot/dto/HospitalInfoDTO.java

@@ -0,0 +1,58 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 11:09
+ */
+@Getter
+@Setter
+public class HospitalInfoDTO {
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 医院编码
+     */
+    private String code;
+
+    /**
+     * 医院名称
+     */
+    private String name;
+
+    /**
+     * 医院地址
+     */
+    private String address;
+
+    /**
+     * 医院名称拼音
+     */
+    private String spell;
+
+    /**
+     * 是否对接(0-不对接,1-对接)
+     */
+    private Integer connect;
+
+    /**
+     * 化验导入方式
+     */
+    private Integer importWayLis;
+
+    /**
+     * 辅检导入方式
+     */
+    private Integer importWayPacs;
+    /**
+     * 备注
+     */
+    private String remark;
+}
+

+ 20 - 0
src/main/java/com/diagbot/dto/PermissionDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 16:08
+ */
+@Getter
+@Setter
+public class PermissionDTO {
+    private Map<String, Map<String, List<Map<String, Set<String>>>>> permissionMap;
+    private List<TokenPermissionDTO> tokenPermission;
+}

+ 31 - 0
src/main/java/com/diagbot/dto/TokenHospitaDTO.java

@@ -0,0 +1,31 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 13:44
+ */
+@Setter
+@Getter
+public class TokenHospitaDTO {
+
+    private Long id;
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    private String appidToken;
+
+    private Date startTime;
+
+    private Date endTime;
+
+    private Integer validDays;
+
+}

+ 41 - 0
src/main/java/com/diagbot/dto/TokenPermissionDTO.java

@@ -0,0 +1,41 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 15:16
+ */
+@Setter
+@Getter
+public class TokenPermissionDTO {
+    private Long id;
+
+    private Long tokenId;
+
+    /**
+     * 系统资源id
+     */
+    private Long permissionId;
+
+    /**
+     * 特殊处理参数
+     */
+    private String paramKey;
+
+    /**
+     * 特殊处理参数值
+     */
+    private String paramValue;
+
+    private String name;
+    private String code;
+    private String permissionUrl;
+    private String descritpion;
+    private String method;
+    private Integer type;
+}

+ 212 - 0
src/main/java/com/diagbot/entity/HospitalInfo.java

@@ -0,0 +1,212 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 医院信息表
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+@TableName("tran_hospital_info")
+public class HospitalInfo implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院编码
+     */
+    private String code;
+
+    /**
+     * 医院名称
+     */
+    private String name;
+
+    /**
+     * 医院地址
+     */
+    private String address;
+
+    /**
+     * 医院名称拼音
+     */
+    private String spell;
+
+    /**
+     * 状态:0.禁用1.启用
+     */
+    private Integer status;
+
+    /**
+     * 排序号
+     */
+    private Integer orderNo;
+
+    /**
+     * 是否对接(0-不对接,1-对接)
+     */
+    private Integer connect;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+    public String getAddress() {
+        return address;
+    }
+
+    public void setAddress(String address) {
+        this.address = address;
+    }
+    public String getSpell() {
+        return spell;
+    }
+
+    public void setSpell(String spell) {
+        this.spell = spell;
+    }
+    public Integer getStatus() {
+        return status;
+    }
+
+    public void setStatus(Integer status) {
+        this.status = status;
+    }
+    public Integer getOrderNo() {
+        return orderNo;
+    }
+
+    public void setOrderNo(Integer orderNo) {
+        this.orderNo = orderNo;
+    }
+    public Integer getConnect() {
+        return connect;
+    }
+
+    public void setConnect(Integer connect) {
+        this.connect = connect;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "HospitalInfo{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", code=" + code +
+            ", name=" + name +
+            ", address=" + address +
+            ", spell=" + spell +
+            ", status=" + status +
+            ", orderNo=" + orderNo +
+            ", connect=" + connect +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 186 - 0
src/main/java/com/diagbot/entity/TokenHospital.java

@@ -0,0 +1,186 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户-机构表映射表
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+@TableName("sys_token_hospital")
+public class TokenHospital implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+    /**
+     * 医院ID
+     */
+    private Long hospitalId;
+
+    /**
+     * token
+     */
+    private String appidToken;
+
+    /**
+     * 有效开始时间
+     */
+    private Date startTime;
+
+    /**
+     * 有效结束时间
+     */
+    private Date endTime;
+
+    /**
+     * 有效天数
+     */
+    private Integer validDays;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getHospitalId() {
+        return hospitalId;
+    }
+
+    public void setHospitalId(Long hospitalId) {
+        this.hospitalId = hospitalId;
+    }
+    public String getAppidToken() {
+        return appidToken;
+    }
+
+    public void setAppidToken(String appidToken) {
+        this.appidToken = appidToken;
+    }
+    public Date getStartTime() {
+        return startTime;
+    }
+
+    public void setStartTime(Date startTime) {
+        this.startTime = startTime;
+    }
+    public Date getEndTime() {
+        return endTime;
+    }
+
+    public void setEndTime(Date endTime) {
+        this.endTime = endTime;
+    }
+    public Integer getValidDays() {
+        return validDays;
+    }
+
+    public void setValidDays(Integer validDays) {
+        this.validDays = validDays;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "TokenHospital{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", hospitalId=" + hospitalId +
+            ", appidToken=" + appidToken +
+            ", startTime=" + startTime +
+            ", endTime=" + endTime +
+            ", validDays=" + validDays +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 171 - 0
src/main/java/com/diagbot/entity/TokenPermission.java

@@ -0,0 +1,171 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.time.LocalDateTime;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+@TableName("sys_token_permission")
+public class TokenPermission implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 资源ID
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 是否删除,N:未删除,Y:删除
+     */
+    private String isDeleted;
+
+    /**
+     * 记录创建时间
+     */
+    private Date gmtCreate;
+
+    /**
+     * 记录修改时间,如果时间是1970年则表示纪录未修改
+     */
+    private Date gmtModified;
+
+    /**
+     * 创建人,0表示无创建人值
+     */
+    private String creator;
+
+    /**
+     * 修改人,如果为0则表示纪录未修改
+     */
+    private String modifier;
+
+
+    private Long tokenId;
+
+    /**
+     * 系统资源id
+     */
+    private Long permissionId;
+
+    /**
+     * 特殊处理参数
+     */
+    private String paramKey;
+
+    /**
+     * 特殊处理参数值
+     */
+    private String paramValue;
+
+    /**
+     * 备注
+     */
+    private String remark;
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+    public String getIsDeleted() {
+        return isDeleted;
+    }
+
+    public void setIsDeleted(String isDeleted) {
+        this.isDeleted = isDeleted;
+    }
+    public Date getGmtCreate() {
+        return gmtCreate;
+    }
+
+    public void setGmtCreate(Date gmtCreate) {
+        this.gmtCreate = gmtCreate;
+    }
+    public Date getGmtModified() {
+        return gmtModified;
+    }
+
+    public void setGmtModified(Date gmtModified) {
+        this.gmtModified = gmtModified;
+    }
+    public String getCreator() {
+        return creator;
+    }
+
+    public void setCreator(String creator) {
+        this.creator = creator;
+    }
+    public String getModifier() {
+        return modifier;
+    }
+
+    public void setModifier(String modifier) {
+        this.modifier = modifier;
+    }
+    public Long getTokenId() {
+        return tokenId;
+    }
+
+    public void setTokenId(Long tokenId) {
+        this.tokenId = tokenId;
+    }
+    public Long getPermissionId() {
+        return permissionId;
+    }
+
+    public void setPermissionId(Long permissionId) {
+        this.permissionId = permissionId;
+    }
+    public String getParamKey() {
+        return paramKey;
+    }
+
+    public void setParamKey(String paramKey) {
+        this.paramKey = paramKey;
+    }
+    public String getParamValue() {
+        return paramValue;
+    }
+
+    public void setParamValue(String paramValue) {
+        this.paramValue = paramValue;
+    }
+    public String getRemark() {
+        return remark;
+    }
+
+    public void setRemark(String remark) {
+        this.remark = remark;
+    }
+
+    @Override
+    public String toString() {
+        return "TokenPermission{" +
+            "id=" + id +
+            ", isDeleted=" + isDeleted +
+            ", gmtCreate=" + gmtCreate +
+            ", gmtModified=" + gmtModified +
+            ", creator=" + creator +
+            ", modifier=" + modifier +
+            ", tokenId=" + tokenId +
+            ", permissionId=" + permissionId +
+            ", paramKey=" + paramKey +
+            ", paramValue=" + paramValue +
+            ", remark=" + remark +
+        "}";
+    }
+}

+ 45 - 0
src/main/java/com/diagbot/facade/HospitalInfoFacade.java

@@ -0,0 +1,45 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.HospitalInfoDTO;
+import com.diagbot.entity.HospitalInfo;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.service.impl.HospitalInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.vo.HospitalCheckVO;
+import com.diagbot.vo.HospitalInfoVO;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 11:08
+ */
+@Component
+public class HospitalInfoFacade extends HospitalInfoServiceImpl {
+
+    /**
+     *
+     * @param hospitalInfoVO
+     * @return
+     */
+    public HospitalInfoDTO getHospitalInfo(HospitalInfoVO hospitalInfoVO) {
+        QueryWrapper<HospitalInfo> queryWrapper = new QueryWrapper<HospitalInfo>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("code", hospitalInfoVO.getCode());
+        HospitalInfo datas = this.getOne(queryWrapper, false);
+        HospitalInfoDTO data = new HospitalInfoDTO();
+        BeanUtil.copyProperties(datas, data);
+        return data;
+    }
+
+    public Boolean checkHospital(HospitalCheckVO hospitalCheckVO) {
+        QueryWrapper<HospitalInfo> queryWrapper = new QueryWrapper<HospitalInfo>();
+        queryWrapper.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("id", hospitalCheckVO.getHospitalId());
+        if (this.count(queryWrapper) > 0) {
+            return true;
+        }
+        return false;
+    }
+}

+ 70 - 0
src/main/java/com/diagbot/facade/TokenHospitalFacade.java

@@ -0,0 +1,70 @@
+package com.diagbot.facade;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.dto.TokenHospitaDTO;
+import com.diagbot.entity.TokenHospital;
+import com.diagbot.enums.IsDeleteEnum;
+import com.diagbot.enums.StatusEnum;
+import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.exception.CommonException;
+import com.diagbot.service.impl.TokenHospitalServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.util.SysJwtUtil;
+import com.diagbot.vo.TokenHospitalVO;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 13:43
+ */
+@Component
+public class TokenHospitalFacade extends TokenHospitalServiceImpl {
+
+
+    /**
+     * @param tokenHospitalVO
+     * @return
+     */
+    public TokenHospitaDTO getTokenHospitals(TokenHospitalVO tokenHospitalVO) {
+        TokenHospitaDTO tokenHospitaDTO = new TokenHospitaDTO();
+        QueryWrapper<TokenHospital> tokenHospitalQuery = new QueryWrapper<>();
+        tokenHospitalQuery.eq("is_deleted", IsDeleteEnum.N.getKey())
+                .eq("appid_token", tokenHospitalVO.getAppidyToken());
+        TokenHospital tokenHospital = getOne(tokenHospitalQuery, false);
+        BeanUtil.copyProperties(tokenHospital, tokenHospitaDTO);
+        return tokenHospitaDTO;
+    }
+
+    /**
+     * @param token
+     * @return
+     */
+    public Boolean checkTokenHospitals(String token) {
+        Date date = new Date();
+        boolean res = true;
+        //根据token获取用户id
+        TokenHospitalVO tokenHospitalVO = new TokenHospitalVO();
+        tokenHospitalVO.setAppidyToken(token);
+        TokenHospitaDTO tokenHospitals = getTokenHospitals(tokenHospitalVO);
+        int validDays = tokenHospitals.getValidDays();
+        Date startTime = tokenHospitals.getStartTime();
+        Date endTime = tokenHospitals.getEndTime();
+        if (validDays < 0) {
+            return res = false;
+            //throw new CommonException(CommonErrorCode.NOT_EXISTS, "已超过有效期");
+        }
+        if (date.getTime() > startTime.getTime() ? false : true) {
+            return res = false;
+            //throw new CommonException(CommonErrorCode.NOT_EXISTS, "已超过有效期");
+        }
+        if (date.getTime() < endTime.getTime() ? false : true) {
+            return res = false;
+            // throw new CommonException(CommonErrorCode.NOT_EXISTS, "已超过有效期");
+        }
+        return res;
+    }
+}

+ 108 - 0
src/main/java/com/diagbot/facade/TokenPermissionFacade.java

@@ -0,0 +1,108 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.PermissionDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.TokenPermissionDTO;
+import com.diagbot.service.impl.TokenPermissionServiceImpl;
+import com.diagbot.util.EntityUtil;
+import com.diagbot.util.ListUtil;
+import com.diagbot.util.RespDTOUtil;
+import com.diagbot.util.StringUtil;
+import com.diagbot.vo.TokenPermissionVO;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 15:01
+ */
+@Component
+@Slf4j
+public class TokenPermissionFacade extends TokenPermissionServiceImpl {
+    private static final String PERMISSIONCACHE = "permissionCache";
+
+    @Cacheable(value = PERMISSIONCACHE, key = "'permission:hc_' + #tokenPermissionVO.tokenId + '_st_' + #tokenPermissionVO.type")
+    public PermissionDTO getPermission(TokenPermissionVO tokenPermissionVO) {
+            List<TokenPermissionDTO> hosPermissionDTOS =getTokenPermission(tokenPermissionVO);;
+
+            PermissionDTO permissionDTO = new PermissionDTO();
+            permissionDTO.setTokenPermission(hosPermissionDTOS);
+
+            Map<String, Map<String, List<Map<String, Set<String>>>>> permissionMap = new HashMap<>();
+            if (ListUtil.isNotEmpty(hosPermissionDTOS)) {
+                //带参数的接口缓存
+                List<TokenPermissionDTO> hasParamList = hosPermissionDTOS.stream()
+                        .filter(hosPermissionDTO -> StringUtil.isNotBlank(hosPermissionDTO.getParamKey()))
+                        .collect(Collectors.toList());
+                Map<String, List<Map<String, Set<String>>>> hasParamMap = new HashMap<>();
+                if (ListUtil.isNotEmpty(hasParamList)) {
+                    Map<String, List<TokenPermissionDTO>> hosPermissionDTOMap
+                            = EntityUtil.makeEntityListMap(hasParamList, "permissionUrl");
+                    for (Map.Entry<String, List<TokenPermissionDTO>> entry : hosPermissionDTOMap.entrySet()) {
+                        List<Map<String, Set<String>>> paramList = Lists.newLinkedList();
+                        if (ListUtil.isNotEmpty(entry.getValue())) {
+                            for (TokenPermissionDTO hosPermissionDTO : entry.getValue()) {
+                                Map<String, Set<String>> paramMap = new HashMap<>();
+                                if (StringUtil.isBlank(hosPermissionDTO.getParamValue())) {
+                                    continue;
+                                }
+                                String paramKey = hosPermissionDTO.getParamKey();
+                                String paramValue = hosPermissionDTO.getParamValue();
+                                String[] paramKeyArr = paramKey.trim().split(",|,");
+                                String[] paramValueArr = paramValue.trim().split(";|;");
+                                if (paramKeyArr.length != paramValueArr.length) {
+                                    continue;
+                                }
+                                for (int i = 0; i < paramKeyArr.length; i++) {
+                                    Set<String> paramValueSet
+                                            = new HashSet<>(Arrays.asList(paramValueArr[i].split(",|,")));
+                                    paramMap.put(paramKeyArr[i], paramValueSet);
+                                }
+                                paramList.add(paramMap);
+                            }
+                            hasParamMap.put(entry.getKey(), paramList);
+                        }
+                    }
+                }
+                permissionMap.put("hasParam", hasParamMap);
+                //不带参数的接口缓存
+                List<TokenPermissionDTO> noParamList = hosPermissionDTOS.stream()
+                        .filter(hosPermissionDTO -> StringUtil.isBlank(hosPermissionDTO.getParamKey()))
+                        .collect(Collectors.toList());
+                Map<String, List<Map<String, Set<String>>>> noParamMap = new HashMap<>();
+                if (ListUtil.isNotEmpty(noParamList)) {
+                    Map<String, List<TokenPermissionDTO>> hosPermissionDTOMap
+                            = EntityUtil.makeEntityListMap(noParamList, "permissionUrl");
+                    for (Map.Entry<String, List<TokenPermissionDTO>> entry : hosPermissionDTOMap.entrySet()) {
+                        noParamMap.put(entry.getKey(), null);
+                    }
+                }
+                permissionMap.put("noParam", noParamMap);
+            }
+            permissionDTO.setPermissionMap(permissionMap);
+            return permissionDTO;
+        }
+    /**
+     * 清理权限所有缓存
+     *
+     * @return
+     */
+    @CacheEvict(cacheNames = PERMISSIONCACHE, allEntries = true)
+    public Boolean delPermission() {
+        log.info("清理服务权限缓存成功");
+        return true;
+    }
+    }
+

+ 16 - 0
src/main/java/com/diagbot/mapper/HospitalInfoMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.HospitalInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 医院信息表 Mapper 接口
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+public interface HospitalInfoMapper extends BaseMapper<HospitalInfo> {
+
+}

+ 16 - 0
src/main/java/com/diagbot/mapper/TokenHospitalMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.TokenHospital;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 用户-机构表映射表 Mapper 接口
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+public interface TokenHospitalMapper extends BaseMapper<TokenHospital> {
+
+}

+ 21 - 0
src/main/java/com/diagbot/mapper/TokenPermissionMapper.java

@@ -0,0 +1,21 @@
+package com.diagbot.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.diagbot.dto.TokenPermissionDTO;
+import com.diagbot.entity.TokenPermission;
+import com.diagbot.vo.TokenPermissionVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+public interface TokenPermissionMapper extends BaseMapper<TokenPermission> {
+
+    List<TokenPermissionDTO> getTokenPermission(TokenPermissionVO tokenPermissionVO);
+}

+ 16 - 0
src/main/java/com/diagbot/service/HospitalInfoService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.HospitalInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 医院信息表 服务类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+public interface HospitalInfoService extends IService<HospitalInfo> {
+
+}

+ 16 - 0
src/main/java/com/diagbot/service/TokenHospitalService.java

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.TokenHospital;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 用户-机构表映射表 服务类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+public interface TokenHospitalService extends IService<TokenHospital> {
+
+}

+ 22 - 0
src/main/java/com/diagbot/service/TokenPermissionService.java

@@ -0,0 +1,22 @@
+package com.diagbot.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.diagbot.dto.TokenPermissionDTO;
+import com.diagbot.entity.TokenPermission;
+import com.diagbot.vo.TokenPermissionVO;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+public interface TokenPermissionService extends IService<TokenPermission> {
+
+    public List<TokenPermissionDTO> getTokenPermission(TokenPermissionVO tokenPermissionVO);
+
+}

+ 20 - 0
src/main/java/com/diagbot/service/impl/HospitalInfoServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.HospitalInfo;
+import com.diagbot.mapper.HospitalInfoMapper;
+import com.diagbot.service.HospitalInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 医院信息表 服务实现类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+@Service
+public class HospitalInfoServiceImpl extends ServiceImpl<HospitalInfoMapper, HospitalInfo> implements HospitalInfoService {
+
+}

+ 20 - 0
src/main/java/com/diagbot/service/impl/TokenHospitalServiceImpl.java

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.TokenHospital;
+import com.diagbot.mapper.TokenHospitalMapper;
+import com.diagbot.service.TokenHospitalService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户-机构表映射表 服务实现类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+@Service
+public class TokenHospitalServiceImpl extends ServiceImpl<TokenHospitalMapper, TokenHospital> implements TokenHospitalService {
+
+}

+ 28 - 0
src/main/java/com/diagbot/service/impl/TokenPermissionServiceImpl.java

@@ -0,0 +1,28 @@
+package com.diagbot.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.diagbot.dto.TokenPermissionDTO;
+import com.diagbot.entity.TokenPermission;
+import com.diagbot.mapper.TokenPermissionMapper;
+import com.diagbot.service.TokenPermissionService;
+import com.diagbot.vo.TokenPermissionVO;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+@Service
+public class TokenPermissionServiceImpl extends ServiceImpl<TokenPermissionMapper, TokenPermission> implements TokenPermissionService {
+
+    @Override
+    public List<TokenPermissionDTO> getTokenPermission(TokenPermissionVO tokenPermissionVO) {
+        return baseMapper.getTokenPermission(tokenPermissionVO);
+    }
+}

+ 18 - 0
src/main/java/com/diagbot/vo/HospitalCheckVO.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 11:11
+ */
+@Setter
+@Getter
+public class HospitalCheckVO {
+    @NotNull(message = "请输入医院Id")
+    private Long hospitalId;
+}

+ 27 - 0
src/main/java/com/diagbot/vo/HospitalInfoVO.java

@@ -0,0 +1,27 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 11:10
+ */
+@Getter
+@Setter
+public class HospitalInfoVO {
+
+    /**
+     * 主键
+     */
+    private Long id;
+
+    /**
+     * 医院编码
+     */
+    @NotNull(message = "请输入医院编码")
+    private String code;
+}

+ 15 - 0
src/main/java/com/diagbot/vo/TokenHospitalVO.java

@@ -0,0 +1,15 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 13:46
+ */
+@Setter
+@Getter
+public class TokenHospitalVO {
+    private String appidyToken;
+}

+ 21 - 0
src/main/java/com/diagbot/vo/TokenPermissionVO.java

@@ -0,0 +1,21 @@
+package com.diagbot.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author wangfeng
+ * @Description:
+ * @date 2020-07-29 15:22
+ */
+@Setter
+@Getter
+public class TokenPermissionVO {
+    @NotNull(message = "请输入tokenId")
+    private Long tokenId;
+    @ApiModelProperty(hidden = true)
+    private int type = 1;
+}

+ 59 - 0
src/main/java/com/diagbot/web/HospitalInfoController.java

@@ -0,0 +1,59 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.HospitalInfoDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.HospitalInfoFacade;
+import com.diagbot.vo.HospitalCheckVO;
+import com.diagbot.vo.HospitalInfoVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+
+/**
+ * <p>
+ * 医院信息表 前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+@RestController
+@RequestMapping("/sys/hospitalInfo")
+@Api(value = "医院信息API", tags = { "医院信息API" })
+@SuppressWarnings("unchecked")
+@ApiIgnore
+public class HospitalInfoController {
+
+    @Autowired
+    private HospitalInfoFacade hospitalInfoFacade;
+
+    @ApiOperation(value = "医院信息——根据医院编码获取医院信息[by:wangfeng]",
+            notes = "id: 医院id<br>" +
+                    "code:医院编码<br>")
+    @PostMapping("/getHospitalInfo")
+    @SysLogger("getHospitalInfo")
+    public RespDTO<HospitalInfoDTO> getHospitalInfo(@RequestBody @Valid HospitalInfoVO hospitalInfoVO) {
+        HospitalInfoDTO data = hospitalInfoFacade.getHospitalInfo(hospitalInfoVO);
+        return RespDTO.onSuc(data);
+    }
+
+
+    @ApiOperation(value = "医院信息——验证医院信息[by:wangfeng]",
+            notes = "hospitalCode:医院编码<br>")
+    @PostMapping("/checkHospital")
+    @SysLogger("checkHospital")
+    public RespDTO<Boolean> checkHospital(@RequestBody @Valid HospitalCheckVO hospitalCheckVO) {
+        return RespDTO.onSuc(hospitalInfoFacade.checkHospital(hospitalCheckVO));
+    }
+}

+ 53 - 0
src/main/java/com/diagbot/web/TokenHospitalController.java

@@ -0,0 +1,53 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.HospitalInfoDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.TokenHospitaDTO;
+import com.diagbot.facade.HospitalInfoFacade;
+import com.diagbot.facade.TokenHospitalFacade;
+import com.diagbot.vo.HospitalInfoVO;
+import com.diagbot.vo.TokenHospitalVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.validation.Valid;
+
+/**
+ * <p>
+ * 用户-机构表映射表 前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+@RestController
+@RequestMapping("/sys/tokenHospital")
+@Api(value = "医院token信息API", tags = { "医院token信息API" })
+@SuppressWarnings("unchecked")
+@ApiIgnore
+public class TokenHospitalController {
+
+    @Autowired
+    private TokenHospitalFacade tokenHospitalFacade;
+
+    @ApiOperation(value = "根据用户id和医院id获取医院token信息[by:wangfeng]",
+            notes = "userId: 医院id<br>" +
+                    "HospitalId:医院id<br>")
+    @PostMapping("/getTokenHospital")
+    @SysLogger("getTokenHospital")
+    public RespDTO<TokenHospitaDTO> getTokenHospital(@RequestBody @Valid TokenHospitalVO tokenHospitalVO) {
+        TokenHospitaDTO data = tokenHospitalFacade.getTokenHospitals(tokenHospitalVO);
+        return RespDTO.onSuc(data);
+    }
+
+}

+ 54 - 0
src/main/java/com/diagbot/web/TokenPermissionController.java

@@ -0,0 +1,54 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.PermissionDTO;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.TokenPermissionDTO;
+import com.diagbot.facade.TokenPermissionFacade;
+import com.diagbot.vo.TokenPermissionVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author wangfeng
+ * @since 2020-07-29
+ */
+
+@RestController
+@RequestMapping("/sys/tokenPermission")
+@Api(value = "医院接口对应相关API", tags = { "医院接口对应相关API" })
+public class TokenPermissionController {
+    @Autowired
+    private TokenPermissionFacade tokenPermissionFacade;
+
+    @ApiOperation(value = "清空权限缓存[by:wangfeng]",
+            notes = "")
+    @PostMapping("/delPermission")
+    @SysLogger("delPermission")
+    public RespDTO<Boolean> delPermission() {
+        return RespDTO.onSuc(tokenPermissionFacade.delPermission());
+    }
+
+    @ApiOperation(value = "获取权限缓存[by:wangfeng]",
+            notes = "")
+    @PostMapping("/getPermission")
+    @SysLogger("getPermission")
+    public RespDTO<PermissionDTO> getPermission(@RequestBody TokenPermissionVO tokenPermissionVO) {
+        return RespDTO.onSuc(tokenPermissionFacade.getPermission(tokenPermissionVO));
+    }
+
+}

+ 23 - 0
src/main/resources/mapper/HospitalInfoMapper.xml

@@ -0,0 +1,23 @@
+<?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.diagbot.mapper.HospitalInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.HospitalInfo">
+        <id column="id" property="id" />
+        <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="code" property="code" />
+        <result column="name" property="name" />
+        <result column="address" property="address" />
+        <result column="spell" property="spell" />
+        <result column="status" property="status" />
+        <result column="order_no" property="orderNo" />
+        <result column="connect" property="connect" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 21 - 0
src/main/resources/mapper/TokenHospitalMapper.xml

@@ -0,0 +1,21 @@
+<?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.diagbot.mapper.TokenHospitalMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.TokenHospital">
+        <id column="id" property="id" />
+        <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="hospital_id" property="hospitalId" />
+        <result column="appid_token" property="appidToken" />
+        <result column="start_time" property="startTime" />
+        <result column="end_time" property="endTime" />
+        <result column="valid_days" property="validDays" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 47 - 0
src/main/resources/mapper/TokenPermissionMapper.xml

@@ -0,0 +1,47 @@
+<?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.diagbot.mapper.TokenPermissionMapper">
+
+    <!-- 通用查询映射结果 -->
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.TokenPermission">
+        <id column="id" property="id" />
+        <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="token_id" property="tokenId" />
+        <result column="permission_id" property="permissionId" />
+        <result column="param_key" property="paramKey" />
+        <result column="param_value" property="paramValue" />
+        <result column="remark" property="remark" />
+    </resultMap>
+    <select id="getTokenPermission" resultType="com.diagbot.dto.TokenPermissionDTO">
+        SELECT
+        t.id,
+        t.token_id,
+        t.permission_id,
+        t.param_key,
+        t.param_value,
+        p.name,
+        p.code,
+        p.permissionUrl,
+        p.descritpion,
+        p.method,
+        p.type
+        FROM
+        sys_permission p,
+        sys_token_permission t
+        WHERE p.is_deleted = "N"
+        AND t.is_deleted = "N"
+        AND p.id = t.permission_id
+        <if test="type !=null">
+            AND p.type = #{type}
+        </if>
+        <if test="tokenId!=null">
+            AND token_id = #{tokenId}
+        </if>
+    </select>
+
+</mapper>