Browse Source

Merge branch 'master' into 122run

gaodm 5 years ago
parent
commit
84e3ba9e60
45 changed files with 963 additions and 143 deletions
  1. 2 2
      config-server/src/main/resources/shared/gateway-service-dev.yml
  2. 2 2
      config-server/src/main/resources/shared/gateway-service-local.yml
  3. 2 2
      config-server/src/main/resources/shared/gateway-service-pre.yml
  4. 2 2
      config-server/src/main/resources/shared/gateway-service-pro.yml
  5. 2 2
      config-server/src/main/resources/shared/gateway-service-test.yml
  6. 4 0
      config-server/src/main/resources/shared/ltkg-service-dev.yml
  7. 5 1
      config-server/src/main/resources/shared/ltkg-service-local.yml
  8. 4 0
      config-server/src/main/resources/shared/ltkg-service-pre.yml
  9. 4 0
      config-server/src/main/resources/shared/ltkg-service-pro.yml
  10. 4 0
      config-server/src/main/resources/shared/ltkg-service-test.yml
  11. 6 0
      diagbotman-service/pom.xml
  12. 1 1
      diagbotman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java
  13. 1 0
      diagbotman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java
  14. 23 0
      diagbotman-service/src/main/java/com/diagbot/dto/ServiceFiltersDTO.java
  15. 50 0
      diagbotman-service/src/main/java/com/diagbot/entity/IpEntity.java
  16. 95 0
      diagbotman-service/src/main/java/com/diagbot/entity/OptInfo.java
  17. 4 4
      diagbotman-service/src/main/java/com/diagbot/entity/ServiceFilter.java
  18. 41 0
      diagbotman-service/src/main/java/com/diagbot/facade/OptInfoFacade.java
  19. 11 3
      diagbotman-service/src/main/java/com/diagbot/facade/ServiceFilterFacade.java
  20. 16 0
      diagbotman-service/src/main/java/com/diagbot/mapper/OptInfoMapper.java
  21. 16 0
      diagbotman-service/src/main/java/com/diagbot/service/OptInfoService.java
  22. 1 1
      diagbotman-service/src/main/java/com/diagbot/service/ServiceFilterService.java
  23. 20 0
      diagbotman-service/src/main/java/com/diagbot/service/impl/OptInfoServiceImpl.java
  24. 2 3
      diagbotman-service/src/main/java/com/diagbot/service/impl/ServiceFilterServiceImpl.java
  25. 106 0
      diagbotman-service/src/main/java/com/diagbot/util/IPUtil.java
  26. 35 0
      diagbotman-service/src/main/java/com/diagbot/vo/OptInfoVO.java
  27. 42 0
      diagbotman-service/src/main/java/com/diagbot/web/OptInfoController.java
  28. 3 3
      diagbotman-service/src/main/java/com/diagbot/web/ServiceFilterController.java
  29. BIN
      diagbotman-service/src/main/resources/ip2region.db
  30. 22 0
      diagbotman-service/src/main/resources/mapper/OptInfoMapper.xml
  31. 1 1
      diagbotman-service/src/main/resources/mapper/ServiceFilterMapper.xml
  32. 34 0
      docs/031.20200325记录产品操作记录/init_diagbotman.sql
  33. 20 0
      gateway-service/src/main/java/com/diagbot/dto/ServiceFilterDTO.java
  34. 23 0
      gateway-service/src/main/java/com/diagbot/dto/ServiceFiltersDTO.java
  35. 22 22
      gateway-service/src/main/java/com/diagbot/entity/HasPermissionDTO.java
  36. 55 0
      gateway-service/src/main/java/com/diagbot/facade/ServiceFilterFacade.java
  37. 111 93
      gateway-service/src/main/java/com/diagbot/filter/GlobalGatewayFilter.java
  38. 33 0
      gateway-service/src/main/java/com/diagbot/web/CacheController.java
  39. 19 0
      ltkg-service/src/main/java/com/diagbot/client/NLPServiceClient.java
  40. 23 0
      ltkg-service/src/main/java/com/diagbot/client/hystrix/NLPServiceHystrix.java
  41. 21 0
      ltkg-service/src/main/java/com/diagbot/facade/NlpFacade.java
  42. 18 0
      ltkg-service/src/main/java/com/diagbot/vo/NlpContent.java
  43. 17 0
      ltkg-service/src/main/java/com/diagbot/vo/NlpVO.java
  44. 39 0
      ltkg-service/src/main/java/com/diagbot/web/NlpController.java
  45. 1 1
      user-service/src/main/resources/mapper/MenuMapper.xml

+ 2 - 2
config-server/src/main/resources/shared/gateway-service-dev.yml

@@ -209,6 +209,6 @@ spring:
 server:
   port: 5050
 
+#网关是否验证产品线接口权限
 lantone:
-  product: triagett,143;icsstt,2
-
+  gateway-valid: true

+ 2 - 2
config-server/src/main/resources/shared/gateway-service-local.yml

@@ -209,6 +209,6 @@ spring:
 server:
   port: 5050
 
+#网关是否验证产品线接口权限
 lantone:
-  product: triage33,1;icsstt,2
-
+  gateway-valid: false

+ 2 - 2
config-server/src/main/resources/shared/gateway-service-pre.yml

@@ -212,6 +212,6 @@ spring:
 server:
   port: 5050
 
+#网关是否验证产品线接口权限
 lantone:
-  product: triagett,143;icsstt,2
-
+  gateway-valid: true

+ 2 - 2
config-server/src/main/resources/shared/gateway-service-pro.yml

@@ -209,6 +209,6 @@ spring:
 server:
   port: 5050
 
+#网关是否验证产品线接口权限
 lantone:
-  product: triagett,143;icsstt,2
-
+  gateway-valid: true

+ 2 - 2
config-server/src/main/resources/shared/gateway-service-test.yml

@@ -202,6 +202,6 @@ spring:
 server:
   port: 5050
 
+#网关是否验证产品线接口权限
 lantone:
-  product: triage33,1;icssyz,147
-
+  gateway-valid: true

+ 4 - 0
config-server/src/main/resources/shared/ltkg-service-dev.yml

@@ -47,3 +47,7 @@ spring:
 mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
+
+nlprel:
+  server:
+    address: http://192.168.3.150:3456

+ 5 - 1
config-server/src/main/resources/shared/ltkg-service-local.yml

@@ -46,4 +46,8 @@ spring:
 #mybatis
 mybatis:
   type-aliases-package: com.diagbot.entity
-  mapper-locations: classpath:mapper/**/*.xml
+  mapper-locations: classpath:mapper/**/*.xml
+
+nlprel:
+  server:
+    address: http://192.168.3.150:3456

+ 4 - 0
config-server/src/main/resources/shared/ltkg-service-pre.yml

@@ -47,3 +47,7 @@ spring:
 mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
+
+nlprel:
+  server:
+    address: http://192.168.3.150:3456

+ 4 - 0
config-server/src/main/resources/shared/ltkg-service-pro.yml

@@ -47,3 +47,7 @@ spring:
 mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
+
+nlprel:
+  server:
+    address: http://192.168.3.150:3456

+ 4 - 0
config-server/src/main/resources/shared/ltkg-service-test.yml

@@ -47,3 +47,7 @@ spring:
 mybatis:
   type-aliases-package: com.diagbot.entity
   mapper-locations: classpath:mapper/**/*.xml
+
+nlprel:
+  server:
+    address: http://192.168.3.150:3456

+ 6 - 0
diagbotman-service/pom.xml

@@ -164,6 +164,12 @@
             <groupId>org.apache.poi</groupId>
             <artifactId>poi-ooxml</artifactId>
         </dependency>
+
+        <dependency>
+            <groupId>org.lionsoul</groupId>
+            <artifactId>ip2region</artifactId>
+            <version>1.7.2</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 1 - 1
diagbotman-service/src/main/java/com/diagbot/config/ResourceServerConfigurer.java

@@ -31,11 +31,11 @@ public class ResourceServerConfigurer extends ResourceServerConfigurerAdapter {
                 .antMatchers("/productOrder/getInformationAvailableAll").permitAll()
                 .antMatchers("/productOrder/getUserWaitingRenewal").permitAll()
                 .antMatchers("/productOrder/getOrderByUserToAudit").permitAll()
+                .antMatchers("/optInfo/save").permitAll()
                 .antMatchers("/**").authenticated();
         //        .antMatchers("/**").permitAll();
     }
 
-
     @Override
     public void configure(ResourceServerSecurityConfigurer resources) throws Exception {
         log.info("Configuring ResourceServerSecurityConfigurer ");

+ 1 - 0
diagbotman-service/src/main/java/com/diagbot/config/security/UrlAccessDecisionManager.java

@@ -95,6 +95,7 @@ public class UrlAccessDecisionManager implements AccessDecisionManager {
                 || matchers("/productOrder/getInformationAvailableAll", request)
                 || matchers("/productOrder/getUserWaitingRenewal", request)
                 || matchers("/productOrder/getOrderByUserToAudit", request)
+                || matchers("/optInfo/save", request)
                 || matchers("/", request)) {
             return true;
         }

+ 23 - 0
diagbotman-service/src/main/java/com/diagbot/dto/ServiceFiltersDTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/25 13:06
+ */
+@Getter
+@Setter
+public class ServiceFiltersDTO {
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * api前缀
+     */
+    private String name;
+}

+ 50 - 0
diagbotman-service/src/main/java/com/diagbot/entity/IpEntity.java

@@ -0,0 +1,50 @@
+package com.diagbot.entity;
+
+import lombok.Data;
+
+/**
+ * @description: ip基础类
+ * @author: zhoutg
+ * @time: 2020/3/25 9:39
+ */
+@Data
+public class IpEntity {
+
+    /**
+     * 国家
+     */
+    private String country;
+
+    /**
+     * 区域
+     */
+    private String area;
+
+    /**
+     * 省份
+     */
+    private String province;
+
+    /**
+     * 城市
+     */
+    private String city;
+
+    /**
+     * 运营商
+     */
+    private String operator;
+
+    public IpEntity() {
+    }
+
+    public IpEntity(String country, String area, String province, String city, String operator) {
+        this.country = country;
+        this.area = area;
+        this.province = province;
+        this.city = city;
+        this.operator = operator;
+    }
+
+
+}

+ 95 - 0
diagbotman-service/src/main/java/com/diagbot/entity/OptInfo.java

@@ -0,0 +1,95 @@
+package com.diagbot.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 产品操作记录表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-25
+ */
+@TableName("diag_opt_info")
+@Data
+public class OptInfo 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;
+
+    /**
+     * 访问者的IP
+     */
+    private String ip;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 联系人
+     */
+    private String linkman;
+
+    /**
+     * 国家
+     */
+    private String country;
+
+    /**
+     * 省份
+     */
+    private String province;
+
+    /**
+     * 城市
+     */
+    private String city;
+
+    /**
+     * 备注
+     */
+    private String remark;
+}

+ 4 - 4
diagbotman-service/src/main/java/com/diagbot/entity/ServiceFilter.java

@@ -50,14 +50,14 @@ public class ServiceFilter implements Serializable {
     private String modifier;
 
     /**
-     * 名称
+     * 产品id
      */
-    private String name;
+    private Long productId;
 
     /**
-     * 产品id
+     * api前缀
      */
-    private Long productId;
+    private String name;
 
     /**
      * 备注

+ 41 - 0
diagbotman-service/src/main/java/com/diagbot/facade/OptInfoFacade.java

@@ -0,0 +1,41 @@
+package com.diagbot.facade;
+
+import com.diagbot.entity.IpEntity;
+import com.diagbot.entity.OptInfo;
+import com.diagbot.service.impl.OptInfoServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.DateUtil;
+import com.diagbot.util.HttpUtils;
+import com.diagbot.util.IPUtil;
+import com.diagbot.util.UserUtils;
+import com.diagbot.vo.OptInfoVO;
+import org.springframework.stereotype.Component;
+
+import java.util.Date;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2018/10/12 15:31
+ */
+@Component
+public class OptInfoFacade extends OptInfoServiceImpl {
+
+    public Boolean saveFac(OptInfoVO optInfoVO) {
+        String ip = HttpUtils.getIpAddress();
+        IpEntity ipEntity = IPUtil.getCityInfoWithEntity(ip);
+        // 赋值
+        OptInfo optInfo = new OptInfo();
+        BeanUtil.copyProperties(optInfoVO, optInfo);
+        optInfo.setCreator(UserUtils.getCurrentPrincipleID());
+        optInfo.setModifier(UserUtils.getCurrentPrincipleID());
+        optInfo.setIp(ip);
+        optInfo.setCountry(ipEntity.getCountry());
+        optInfo.setProvince(ipEntity.getProvince());
+        optInfo.setCity(ipEntity.getCity());
+        Date date = DateUtil.now();
+        optInfo.setGmtCreate(date);
+        optInfo.setGmtModified(date);
+        return this.save(optInfo);
+    }
+}

+ 11 - 3
diagbotman-service/src/main/java/com/diagbot/facade/ServiceFilterFacade.java

@@ -1,10 +1,13 @@
 package com.diagbot.facade;
 
-import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.ServiceFiltersDTO;
 import com.diagbot.entity.ServiceFilter;
 import com.diagbot.service.impl.ServiceFilterServiceImpl;
+import com.diagbot.util.BeanUtil;
+import com.diagbot.util.ListUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -20,7 +23,12 @@ public class ServiceFilterFacade extends ServiceFilterServiceImpl {
      *
      * @return 服务列表
      */
-    public RespDTO<List<ServiceFilter>> getServiceFilter() {
-        return this.getAll();
+    public List<ServiceFiltersDTO> getServiceFilter() {
+        List<ServiceFiltersDTO> res = new ArrayList<>();
+        List<ServiceFilter> list = this.getAll();
+        if (ListUtil.isNotEmpty(list)) {
+            res = BeanUtil.listCopyTo(list, ServiceFiltersDTO.class);
+        }
+        return res;
     }
 }

+ 16 - 0
diagbotman-service/src/main/java/com/diagbot/mapper/OptInfoMapper.java

@@ -0,0 +1,16 @@
+package com.diagbot.mapper;
+
+import com.diagbot.entity.OptInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 产品操作记录表 Mapper 接口
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-25
+ */
+public interface OptInfoMapper extends BaseMapper<OptInfo> {
+
+}

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

@@ -0,0 +1,16 @@
+package com.diagbot.service;
+
+import com.diagbot.entity.OptInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 产品操作记录表 服务类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-25
+ */
+public interface OptInfoService extends IService<OptInfo> {
+
+}

+ 1 - 1
diagbotman-service/src/main/java/com/diagbot/service/ServiceFilterService.java

@@ -18,5 +18,5 @@ public interface ServiceFilterService extends IService<ServiceFilter> {
      * @Author: ztg
      * @Date: 2018/9/18 14:57
      */
-    public RespDTO<List<ServiceFilter>> getAll();
+    public List<ServiceFilter> getAll();
 }

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

@@ -0,0 +1,20 @@
+package com.diagbot.service.impl;
+
+import com.diagbot.entity.OptInfo;
+import com.diagbot.mapper.OptInfoMapper;
+import com.diagbot.service.OptInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 产品操作记录表 服务实现类
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-25
+ */
+@Service
+public class OptInfoServiceImpl extends ServiceImpl<OptInfoMapper, OptInfo> implements OptInfoService {
+
+}

+ 2 - 3
diagbotman-service/src/main/java/com/diagbot/service/impl/ServiceFilterServiceImpl.java

@@ -24,9 +24,8 @@ public class ServiceFilterServiceImpl extends ServiceImpl<ServiceFilterMapper, S
      * @return
      */
     @Override
-    public RespDTO<List<ServiceFilter>> getAll() {
-        List<ServiceFilter> list = baseMapper.getAll();
-        return RespDTO.onSuc(list);
+    public List<ServiceFilter> getAll() {
+        return baseMapper.getAll();
     }
 
 

+ 106 - 0
diagbotman-service/src/main/java/com/diagbot/util/IPUtil.java

@@ -0,0 +1,106 @@
+package com.diagbot.util;
+
+import com.diagbot.entity.IpEntity;
+import org.lionsoul.ip2region.DataBlock;
+import org.lionsoul.ip2region.DbConfig;
+import org.lionsoul.ip2region.DbSearcher;
+import org.lionsoul.ip2region.Util;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
+import org.springframework.util.FileCopyUtils;
+
+import java.io.InputStream;
+import java.lang.reflect.Method;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/24 18:29
+ */
+public class IPUtil {
+
+    private static DbSearcher searcher;
+
+    /**
+     *  获取DbSearcher
+     * @return
+     */
+    public static DbSearcher getInstance () {
+        if (searcher != null) {
+            return searcher;
+        }
+        try {
+            DbConfig config = new DbConfig();
+            Resource resource = new ClassPathResource("ip2region.db"); // 远程获取资源文件
+            InputStream inputStream = resource.getInputStream();
+            searcher = new DbSearcher(config, FileCopyUtils.copyToByteArray(inputStream));
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("获取DbSearcher错误");
+        }
+        return searcher;
+    }
+
+
+    //国家,区域,省份,城市,运营商
+    public  static String getCityInfo(String ip) {
+        //查询算法
+        int algorithm = DbSearcher.MEMORY_ALGORITYM;
+         //DbSearcher.BTREE_ALGORITHM; //B-tree
+        //DbSearcher.BINARY_ALGORITHM //Binary
+        //DbSearcher.MEMORY_ALGORITYM //Memory
+        try {
+            // 初始化
+            getInstance();
+
+            //define the method
+            Method method = null;
+            switch (algorithm) {
+                case DbSearcher.BTREE_ALGORITHM:
+                    method = searcher.getClass().getMethod("btreeSearch", String.class);
+                    break;
+                case DbSearcher.BINARY_ALGORITHM:
+                    method = searcher.getClass().getMethod("binarySearch", String.class);
+                    break;
+                case DbSearcher.MEMORY_ALGORITYM:
+                    method = searcher.getClass().getMethod("memorySearch", String.class);
+                    break;
+            }
+
+            DataBlock dataBlock = null;
+            if (Util.isIpAddress(ip) == false) {
+                System.out.println("Error: Invalid ip address");
+            }
+
+            dataBlock = (DataBlock) method.invoke(searcher, ip);
+
+            return dataBlock.getRegion();
+
+        } catch (Exception e) {
+            e.printStackTrace();
+            System.out.println("Ip解析错误");
+        }
+        return null;
+    }
+
+
+    /**
+     * 返回ip实体类
+     *
+     * @param ip
+     * @return ip实体类
+     */
+    public static IpEntity getCityInfoWithEntity(String ip) {
+        String ipStr = getCityInfo(ip);
+        String[] arr = ipStr.split("\\|");
+        if (arr != null && arr.length == 5) {
+            return new IpEntity(arr[0], arr[1], arr[2], arr[3], arr[4]);
+        }
+        return new IpEntity();
+    }
+
+    public static void main(String[] args) {
+        System.out.println(getCityInfo("223.93.170.82"));
+        System.out.println(getCityInfo("223.93.170.82"));
+    }
+}

+ 35 - 0
diagbotman-service/src/main/java/com/diagbot/vo/OptInfoVO.java

@@ -0,0 +1,35 @@
+package com.diagbot.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 产品操作记录表
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-25
+ */
+@Data
+public class OptInfoVO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * 用户名
+     */
+    private String username;
+
+    /**
+     * 联系人
+     */
+    private String linkman;
+
+}

+ 42 - 0
diagbotman-service/src/main/java/com/diagbot/web/OptInfoController.java

@@ -0,0 +1,42 @@
+package com.diagbot.web;
+
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.OptInfoFacade;
+import com.diagbot.vo.OptInfoVO;
+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.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 产品操作记录表 前端控制器
+ * </p>
+ *
+ * @author zhoutg
+ * @since 2020-03-25
+ */
+@RestController
+@RequestMapping("/optInfo")
+@Api(value = "产品操作记录API", tags = { "产品操作记录API" })
+public class OptInfoController {
+
+    @Autowired
+    OptInfoFacade optInfoFacade;
+
+    @ApiOperation(value = "保存记录[by:zhoutg]",
+            notes = "productId:产品id<br>" +
+                    "username:用户名<br>" +
+                    "linkman:联系人<br>")
+    @PostMapping("/save")
+    @SysLogger("save")
+    public RespDTO<Boolean> save(@RequestBody OptInfoVO optInfoVO) {
+        return RespDTO.onSuc(optInfoFacade.saveFac(optInfoVO));
+    }
+
+}

+ 3 - 3
diagbotman-service/src/main/java/com/diagbot/web/ServiceFilterController.java

@@ -1,7 +1,7 @@
 package com.diagbot.web;
 
 import com.diagbot.dto.RespDTO;
-import com.diagbot.entity.ServiceFilter;
+import com.diagbot.dto.ServiceFiltersDTO;
 import com.diagbot.facade.ServiceFilterFacade;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -30,8 +30,8 @@ public class ServiceFilterController {
     @ApiOperation(value = "获取需要appkey和secret的服务信息[by:zhoutg]",
             notes = "接口未用,直接从配置项中读取服务")
     @ApiIgnore
-    public RespDTO<List<ServiceFilter>> getServiceFilter() {
-        return serviceFilterFacade.getAll();
+    public RespDTO<List<ServiceFiltersDTO>> getServiceFilter() {
+        return RespDTO.onSuc(serviceFilterFacade.getServiceFilter());
     }
 
 

BIN
diagbotman-service/src/main/resources/ip2region.db


+ 22 - 0
diagbotman-service/src/main/resources/mapper/OptInfoMapper.xml

@@ -0,0 +1,22 @@
+<?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.OptInfoMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.diagbot.entity.OptInfo">
+        <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="ip" property="ip" />
+        <result column="product_id" property="productId" />
+        <result column="user_id" property="userId" />
+        <result column="country" property="country" />
+        <result column="province" property="province" />
+        <result column="city" property="city" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+</mapper>

+ 1 - 1
diagbotman-service/src/main/resources/mapper/ServiceFilterMapper.xml

@@ -11,8 +11,8 @@
         <result column="gmt_modified" property="gmtModified"/>
         <result column="creator" property="creator"/>
         <result column="modifier" property="modifier"/>
-        <result column="name" property="name"/>
         <result column="product_id" property="productId"/>
+        <result column="name" property="name"/>
         <result column="remark" property="remark"/>
     </resultMap>
 

+ 34 - 0
docs/031.20200325记录产品操作记录/init_diagbotman.sql

@@ -0,0 +1,34 @@
+use `sys-diagbotman`;
+
+DROP TABLE IF EXISTS `diag_opt_info`;
+CREATE TABLE `diag_opt_info` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `ip` varchar(100) NOT NULL DEFAULT '' COMMENT '访问者的IP',
+  `product_id` bigint(20) NOT NULL COMMENT '产品id',
+  `username` varchar(255) NOT NULL DEFAULT '' COMMENT '用户名',
+  `linkman` varchar(255) NOT NULL DEFAULT '' COMMENT '联系人',
+  `country` varchar(50) NOT NULL DEFAULT '' COMMENT '国家',
+  `province` varchar(50) NOT NULL DEFAULT '' COMMENT '省份',
+  `city` varchar(50) NOT NULL DEFAULT '' COMMENT '城市',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='产品操作记录表';
+
+DROP TABLE IF EXISTS `diag_service_filter`;
+CREATE TABLE `diag_service_filter` (
+  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
+  `is_deleted` char(1) NOT NULL DEFAULT 'N' COMMENT '是否删除,N:未删除,Y:删除',
+  `gmt_create` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录创建时间',
+  `gmt_modified` datetime NOT NULL DEFAULT '1970-01-01 12:00:00' COMMENT '记录修改时间,如果时间是1970年则表示纪录未修改',
+  `creator` varchar(20) NOT NULL DEFAULT '0' COMMENT '创建人,0表示无创建人值',
+  `modifier` varchar(20) NOT NULL DEFAULT '0' COMMENT '修改人,如果为0则表示纪录未修改',
+  `product_id` bigint(20) NOT NULL DEFAULT 0 COMMENT '产品id',
+  `name` varchar(20) NOT NULL DEFAULT '' COMMENT 'api前缀',
+  `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '备注',
+  PRIMARY KEY (`id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='产品网关过滤(需要使用appkey和secret的url地址)';

+ 20 - 0
gateway-service/src/main/java/com/diagbot/dto/ServiceFilterDTO.java

@@ -0,0 +1,20 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/25 13:06
+ */
+@Getter
+@Setter
+public class ServiceFilterDTO implements Serializable {
+    private Set<String> apiMap;
+    private Map<Long, String> productMap;
+}

+ 23 - 0
gateway-service/src/main/java/com/diagbot/dto/ServiceFiltersDTO.java

@@ -0,0 +1,23 @@
+package com.diagbot.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: gaodm
+ * @time: 2020/3/25 13:06
+ */
+@Getter
+@Setter
+public class ServiceFiltersDTO {
+    /**
+     * 产品id
+     */
+    private Long productId;
+
+    /**
+     * api前缀
+     */
+    private String name;
+}

+ 22 - 22
gateway-service/src/main/java/com/diagbot/entity/HasPermissionDTO.java

@@ -1,22 +1,22 @@
-//package com.diagbot.entity;
-//
-//import lombok.Getter;
-//import lombok.Setter;
-//
-//import java.io.Serializable;
-//
-///**
-// * @Description: 是否有权限返回类
-// * @Author: ztg
-// * @Date: 2018/9/20 10:32
-// */
-//
-//@Getter
-//@Setter
-//public class HasPermissionDTO implements Serializable {
-//
-//    private static final long serialVersionUID = 1L;
-//
-//    private Boolean hasPermission ;//标志
-//    private String userId;         //用户ID
-//}
+package com.diagbot.entity;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+ * @Description: 是否有权限返回类
+ * @Author: ztg
+ * @Date: 2018/9/20 10:32
+ */
+
+@Getter
+@Setter
+public class HasPermissionDTO implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    private Boolean hasPermission ;//标志
+    private String userId;         //用户ID
+}

+ 55 - 0
gateway-service/src/main/java/com/diagbot/facade/ServiceFilterFacade.java

@@ -0,0 +1,55 @@
+package com.diagbot.facade;
+
+import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.ServiceFilterDTO;
+import com.diagbot.dto.ServiceFiltersDTO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.HttpMethod;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 产品服务过滤
+ * @Author: ztg
+ * @Date: 2018/9/18 14:45
+ */
+@Component
+@Slf4j
+public class ServiceFilterFacade {
+    private static final String SERVICEFILTER = "ServiceFilter";
+
+    @Autowired
+    private RestTemplate restTemplate;
+
+    /**
+     * 获取需要appkey和secret的服务,未用
+     *
+     * @return 服务列表
+     */
+    @Cacheable(value = SERVICEFILTER, key = "'ServiceFilter'")
+    public ServiceFilterDTO getServiceFilter() {
+        ServiceFilterDTO serviceFilterDTO = new ServiceFilterDTO();
+        ResponseEntity<RespDTO<List<ServiceFiltersDTO>>> respDTOResponseEntity
+                = restTemplate.exchange("http://diagbotman-service/service_filter/getAll", HttpMethod.POST,
+                null, new ParameterizedTypeReference<RespDTO<List<ServiceFiltersDTO>>>() {
+                });
+        RespDTO<List<ServiceFiltersDTO>> resFilter = respDTOResponseEntity.getBody();
+        if (resFilter != null && RespDTO.TRUE_CODE.equals(resFilter.code)) {
+            Set<String> apiMap = resFilter.data.stream().distinct().map(ServiceFiltersDTO::getName).collect(Collectors.toSet());
+            Map<Long, String> productMap = resFilter.data.stream().collect(Collectors.toMap(ServiceFiltersDTO::getProductId, ServiceFiltersDTO::getName));
+            serviceFilterDTO.setApiMap(apiMap);
+            serviceFilterDTO.setProductMap(productMap);
+            log.info("读取了拦截产品线缓存!");
+        }
+        return serviceFilterDTO;
+    }
+}

+ 111 - 93
gateway-service/src/main/java/com/diagbot/filter/GlobalGatewayFilter.java

@@ -4,13 +4,17 @@ package com.diagbot.filter;
 
 import com.diagbot.biz.log.entity.SysLog;
 import com.diagbot.dto.RespDTO;
+import com.diagbot.dto.ServiceFilterDTO;
+import com.diagbot.entity.HasPermissionDTO;
 import com.diagbot.entity.ServiceFilter;
 import com.diagbot.entity.ServiceToken;
 import com.diagbot.enums.SysTypeEnum;
 import com.diagbot.exception.CommonErrorCode;
+import com.diagbot.facade.ServiceFilterFacade;
 import com.diagbot.rabbit.MySender;
 import com.diagbot.util.EnDecodeUtil;
 import com.diagbot.util.GsonUtil;
+import com.diagbot.util.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
@@ -19,8 +23,12 @@ import org.springframework.cloud.gateway.filter.GatewayFilterChain;
 import org.springframework.cloud.gateway.filter.GlobalFilter;
 import org.springframework.cloud.gateway.support.ServerWebExchangeUtils;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpMethod;
 import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
 import org.springframework.http.server.reactive.ServerHttpRequest;
 import org.springframework.web.client.RestTemplate;
 import org.springframework.web.server.ServerWebExchange;
@@ -32,12 +40,9 @@ import java.nio.charset.StandardCharsets;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.Map;
 
-//import com.diagbot.entity.HasPermissionDTO;
-
 /**
  * @Description: 全局过滤器
  * @author: gaodm
@@ -52,8 +57,8 @@ public class GlobalGatewayFilter implements GlobalFilter {
     private static Boolean IS_GENERATE = false;
     private static Map<String, Long> SERVICE_FILTER = new HashMap<>();
 
-    @Value("${lantone.product}")
-    private String lantonePrduct;
+    @Value("${lantone.gateway-valid}")
+    private Boolean gatewayValid;
 
     //    @Autowired
     //    DiagbotmanServiceClient diagbotmanServiceClient;
@@ -61,98 +66,108 @@ public class GlobalGatewayFilter implements GlobalFilter {
     private MySender mySender;
     @Autowired
     private RestTemplate restTemplate;
+    @Autowired
+    private ServiceFilterFacade serviceFilterFacade;
 
 
     @Override
+    @SuppressWarnings("unchecked")
     public Mono<Void> filter(ServerWebExchange serverWebExchange, GatewayFilterChain gatewayFilterChain) {
         log.info("check token and url permission....");
-        LinkedHashSet requiredAttribute
-                = serverWebExchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
-        ServerHttpRequest request = serverWebExchange.getRequest();
-        String requestUri = request.getPath().pathWithinApplication().value();
-        String serviceName = "";
-        if (requiredAttribute != null) {
-            Iterator<URI> iterator = requiredAttribute.iterator();
-            while (iterator.hasNext()) {
-                URI next = iterator.next();
-                if (next.getPath().startsWith(GATE_WAY_PREFIX)) {
-                    requestUri = next.getPath().substring(GATE_WAY_PREFIX.length());
-                    serviceName = requestUri.substring(requestUri.indexOf('/') + 1,
-                            requestUri.indexOf('/', 2));
+
+        //网关验证产品线接口权限
+        if (gatewayValid) {
+            LinkedHashSet requiredAttribute
+                    = serverWebExchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR);
+            ServerHttpRequest request = serverWebExchange.getRequest();
+            String requestUri = request.getPath().pathWithinApplication().value();
+            String serviceName = "";
+            if (requiredAttribute != null) {
+                Iterator<URI> iterator = requiredAttribute.iterator();
+                while (iterator.hasNext()) {
+                    URI next = iterator.next();
+                    if (next.getPath().startsWith(GATE_WAY_PREFIX)) {
+                        requestUri = next.getPath().substring(GATE_WAY_PREFIX.length());
+                        serviceName = requestUri.substring(requestUri.indexOf('/') + 1,
+                                requestUri.indexOf('/', 2));
+                    }
                 }
             }
-        }
-        //        log.info("APIURL:{}", requestUri);
-        //        log.info("SERVICENAME:{}", serviceName);
-
-        //        if(!IS_GENERATE) {
-        //            RespDTO<List<ServiceFilter>> filter = diagbotmanServiceClient.getAll();
-        //            if (filter != null){
-        //                List<ServiceFilter> list =  filter.data;
-        //                if (ListUtil.isNotEmpty(list)){
-        //                    for(ServiceFilter bean : list) {
-        //                        SERVICE_FILTER.put(bean.getName(), bean.getProductId());
-        //                    }
-        //                    IS_GENERATE = true;
-        //                }
-        //            }
-        //        }
-
-        Map<String, Long> serviceFilters = this.dealServiceFilter();
-        if (serviceFilters.get(serviceName) != null) {
-            String appkey = request.getHeaders().getFirst("appKeyId");
-            String secret = request.getHeaders().getFirst("appKeySecret");
-            String securityCode = request.getHeaders().getFirst("securityCode"); //防伪码
+
+            ServiceFilterDTO serviceFilterDTO = new ServiceFilterDTO();
             try {
-                String encodeTime = EnDecodeUtil.decode(securityCode);
-                Long time = Long.parseLong(encodeTime);
-                Long curTime = new Date().getTime();
-                // 防伪码主要是为了防止别人窃取url地址后直接长期使用,这边设了失效,目前暂定为24小时
-                // 前端实时获取当前时间跟系统时间作比较,如果时差超出24小时将会抛异常
-                if ((curTime - time) > 1000 * 3600 * 24) {
+                serviceFilterDTO = serviceFilterFacade.getServiceFilter();
+            } catch (Exception e) {
+                RespDTO respDTO = new RespDTO();
+                respDTO.code = CommonErrorCode.RPC_ERROR.getCode();
+                respDTO.msg = CommonErrorCode.RPC_ERROR.getMsg();
+                return getVoidMono(serverWebExchange, respDTO);
+            }
+            if (serviceFilterDTO.getApiMap().contains(serviceName)) {
+                String productIdStr = request.getHeaders().getFirst("productId");
+                if (StringUtil.isBlank(productIdStr)) {
+                    RespDTO respDTO = new RespDTO();
+                    respDTO.code = CommonErrorCode.PARAM_IS_NULL.getCode();
+                    respDTO.msg = "请传入产品ID";
+                    return getVoidMono(serverWebExchange, respDTO);
+                }
+                Long productId = Long.valueOf(productIdStr);
+                if (!serviceName.equals(serviceFilterDTO.getProductMap().get(productId))) {
+                    RespDTO respDTO = new RespDTO();
+                    respDTO.code = CommonErrorCode.NOPERMISSION_ERROR.getCode();
+                    respDTO.msg = CommonErrorCode.NOPERMISSION_ERROR.getMsg();
+                    return getVoidMono(serverWebExchange, respDTO);
+                }
+                String appkey = request.getHeaders().getFirst("appKeyId");
+                String secret = request.getHeaders().getFirst("appKeySecret");
+                String securityCode = request.getHeaders().getFirst("securityCode"); //防伪码
+                try {
+                    String encodeTime = EnDecodeUtil.decode(securityCode);
+                    Long time = Long.parseLong(encodeTime);
+                    Long curTime = new Date().getTime();
+                    // 防伪码主要是为了防止别人窃取url地址后直接长期使用,这边设了失效,目前暂定为24小时
+                    // 前端实时获取当前时间跟系统时间作比较,如果时差超出24小时将会抛异常
+                    if ((curTime - time) > 1000 * 3600 * 24) {
+                        RespDTO respDTO = new RespDTO();
+                        respDTO.code = CommonErrorCode.SECURITYCODE_ERROR.getCode();
+                        respDTO.msg = CommonErrorCode.SECURITYCODE_ERROR.getMsg();
+                        return getVoidMono(serverWebExchange, respDTO);
+                    }
+                } catch (Exception e) {
                     RespDTO respDTO = new RespDTO();
                     respDTO.code = CommonErrorCode.SECURITYCODE_ERROR.getCode();
                     respDTO.msg = CommonErrorCode.SECURITYCODE_ERROR.getMsg();
                     return getVoidMono(serverWebExchange, respDTO);
                 }
-            } catch (Exception e) {
-                RespDTO respDTO = new RespDTO();
-                respDTO.code = CommonErrorCode.SECURITYCODE_ERROR.getCode();
-                respDTO.msg = CommonErrorCode.SECURITYCODE_ERROR.getMsg();
-                return getVoidMono(serverWebExchange, respDTO);
-            }
-            Long productId = serviceFilters.get(serviceName);
-            //获取appkey,secret对应的权限信息
-            ServiceToken st = new ServiceToken();
-            st.setAppkey(appkey);
-            st.setSecret(secret);
-            st.setProductId(productId);
-            //            RespDTO<HasPermissionDTO> res = diagbotmanServiceClient.hasPermission(st);
-            RespDTO<LinkedHashMap> res = hasPermission(st);
-            if (res == null || !RespDTO.TRUE_CODE.equals(res.code)) {
-                return getVoidMono(serverWebExchange, res);
-            }
+                //获取appkey,secret对应的权限信息
+                ServiceToken st = new ServiceToken();
+                st.setAppkey(appkey);
+                st.setSecret(secret);
+                st.setProductId(productId);
+                //权限验证
+                RespDTO<HasPermissionDTO> res = hasPermission(st);
+                if (res == null || !RespDTO.TRUE_CODE.equals(res.code)) {
+                    return getVoidMono(serverWebExchange, res);
+                }
 
-            //记录日志
-            SysLog sysLog = new SysLog();
-            sysLog.setGmtCreate(new Date());
-            sysLog.setIp(request.getRemoteAddress().toString());
-            sysLog.setMethod(requestUri);
-            ServiceFilter serviceFilter = new ServiceFilter();
-            serviceFilter.setServiceName(serviceName);
-            serviceFilter.setProductId(productId);
-            sysLog.setOperation(GsonUtil.toJson(serviceFilter));
-            sysLog.setParams(requestUri);
-            sysLog.setSysType(SysTypeEnum.APPKEY.getKey());
-            LinkedHashMap<String, String> map = res.data;
-            sysLog.setUsername(map.get("userId"));
-            mySender.outputLogSend(sysLog);
+                //记录日志
+                SysLog sysLog = new SysLog();
+                sysLog.setGmtCreate(new Date());
+                sysLog.setIp(request.getRemoteAddress().toString());
+                sysLog.setMethod(requestUri);
+                ServiceFilter serviceFilter = new ServiceFilter();
+                serviceFilter.setServiceName(serviceName);
+                serviceFilter.setProductId(productId);
+                sysLog.setOperation(GsonUtil.toJson(serviceFilter));
+                sysLog.setParams(requestUri);
+                sysLog.setSysType(SysTypeEnum.APPKEY.getKey());
+                sysLog.setUsername(res.data.getUserId());
+                mySender.outputLogSend(sysLog);
 
+            }
         }
 
         ServerHttpRequest.Builder builder = serverWebExchange.getRequest().mutate();
-        //        builder.header("Authorization", "Authorization Bearer token");
-        //        gatewayFilterChain.filter(serverWebExchange.mutate().request(builder.build()).build());
         return gatewayFilterChain.filter(serverWebExchange.mutate().request(builder.build()).build());
     }
 
@@ -175,21 +190,24 @@ public class GlobalGatewayFilter implements GlobalFilter {
      *
      * @return 过滤的列表
      */
-    private Map<String, Long> dealServiceFilter() {
-        Map<String, Long> serviceFilters = new HashMap<>();
-        String[] set = lantonePrduct.split(";");
-        for (String s : set) {
-            String[] d = s.split(",");
-            serviceFilters.put(d[0], Long.valueOf(d[1]));
-        }
-        return serviceFilters;
-    }
-
-    public RespDTO<LinkedHashMap> hasPermission(ServiceToken st) {
+    //    private Map<String, Long> dealServiceFilter() {
+    //        Map<String, Long> serviceFilters = new HashMap<>();
+    //        String[] set = lantonePrduct.split(";");
+    //        for (String s : set) {
+    //            String[] d = s.split(",");
+    //            serviceFilters.put(d[0], Long.valueOf(d[1]));
+    //        }
+    //        return serviceFilters;
+    //    }
+    public RespDTO<HasPermissionDTO> hasPermission(ServiceToken st) {
         try {
-            RespDTO<LinkedHashMap> res
-                    = restTemplate.postForObject("http://diagbotman-service/serviceToken/hasPermission", st, RespDTO.class);
-            return res;
+            ResponseEntity<RespDTO<HasPermissionDTO>> respDTOResponseEntity
+                    = restTemplate.exchange("http://diagbotman-service/serviceToken/hasPermission",
+                    HttpMethod.POST,
+                    new HttpEntity<ServiceToken>(st),
+                    new ParameterizedTypeReference<RespDTO<HasPermissionDTO>>() {
+                    });
+            return respDTOResponseEntity.getBody();
         } catch (Exception ex) {
             return hasPermissionFallback(st);
         }

+ 33 - 0
gateway-service/src/main/java/com/diagbot/web/CacheController.java

@@ -0,0 +1,33 @@
+package com.diagbot.web;
+
+import com.diagbot.dto.RespDTO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @Description: 清理缓存控制层
+ * @Author:gaodm
+ * @time: 2019/5/22 15:07
+ */
+@RestController
+@RequestMapping("/cache")
+@Api(value = "缓存相关API", tags = { "缓存相关API" })
+@SuppressWarnings("unchecked")
+@Slf4j
+public class CacheController {
+    private static final String SERVICEFILTER = "ServiceFilter";
+
+    @ApiOperation(value = "清空缓存[by:gaodm]",
+            notes = "")
+    @GetMapping("/clear")
+    @CacheEvict(cacheNames = SERVICEFILTER, allEntries = true)
+    public RespDTO<Boolean> clearCache() {
+        log.info("清理了拦截产品线缓存!");
+        return RespDTO.onSuc(true);
+    }
+}

+ 19 - 0
ltkg-service/src/main/java/com/diagbot/client/NLPServiceClient.java

@@ -0,0 +1,19 @@
+package com.diagbot.client;
+
+import com.diagbot.client.hystrix.NLPServiceHystrix;
+import com.diagbot.vo.NlpVO;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @Description:调用NLP对接层服务
+ * @Author:zhoutg
+ * @time: 2019/4/2 15:31
+ */
+@FeignClient(name = "NLPREL", url = "${nlprel.server.address}", fallback = NLPServiceHystrix.class)
+public interface NLPServiceClient {
+
+    @PostMapping(value = "/api/mr_info_ex/entity_predict")
+    String getNlp(@RequestBody NlpVO nlpVO);
+}

+ 23 - 0
ltkg-service/src/main/java/com/diagbot/client/hystrix/NLPServiceHystrix.java

@@ -0,0 +1,23 @@
+package com.diagbot.client.hystrix;
+
+import com.diagbot.client.NLPServiceClient;
+import com.diagbot.vo.NlpVO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @Description:调用NLP对接层服务
+ * @Author:zhoutg
+ * @time: 2019/4/2 15:36
+ */
+@Component
+@Slf4j
+public class NLPServiceHystrix implements NLPServiceClient {
+
+    @Override
+    public String getNlp(NlpVO nlpVO) {
+        log.error("【hystrix】调用{}异常", "getNlp");
+        return null;
+    }
+}

+ 21 - 0
ltkg-service/src/main/java/com/diagbot/facade/NlpFacade.java

@@ -0,0 +1,21 @@
+package com.diagbot.facade;
+
+import com.diagbot.client.NLPServiceClient;
+import com.diagbot.vo.NlpVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description: NLP实体识别和关系抽取API业务层
+ * @author: zhoutg
+ * @time: 2018/8/6 9:11
+ */
+@Component
+public class NlpFacade {
+    @Autowired
+    NLPServiceClient nlpServiceClient;
+
+    public String getNlp(NlpVO nlpVO) {
+        return nlpServiceClient.getNlp(nlpVO);
+    }
+}

+ 18 - 0
ltkg-service/src/main/java/com/diagbot/vo/NlpContent.java

@@ -0,0 +1,18 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/3/16 9:47
+ */
+@Getter
+@Setter
+public class NlpContent {
+    private String medical_text_type;
+    private String content;
+    private String title;
+    private String detail_title;
+}

+ 17 - 0
ltkg-service/src/main/java/com/diagbot/vo/NlpVO.java

@@ -0,0 +1,17 @@
+package com.diagbot.vo;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+/**
+ * @Description:
+ * @author: zhoutg
+ * @time: 2020/3/16 9:47
+ */
+@Getter
+@Setter
+public class NlpVO {
+    private List<NlpContent> data;
+}

+ 39 - 0
ltkg-service/src/main/java/com/diagbot/web/NlpController.java

@@ -0,0 +1,39 @@
+package com.diagbot.web;
+
+import com.diagbot.annotation.SysLogger;
+import com.diagbot.dto.RespDTO;
+import com.diagbot.facade.NlpFacade;
+import com.diagbot.vo.NlpVO;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+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.web.bind.annotation.RestController;
+
+/**
+ * @Description: nlp控制层
+ * @author: zhoutg
+ * @time: 2018/8/30 10:12
+ */
+@RestController
+@RequestMapping("/nlp")
+@Api(value = "NLP实体识别和关系抽取API", tags = { "NLP实体识别和关系抽取API" })
+@SuppressWarnings("unchecked")
+@Slf4j
+public class NlpController {
+
+    @Autowired
+    private NlpFacade nlpFacade;
+
+    @ApiOperation(value = "获取实体识别和关系抽取结果[zhoutg]", notes = "")
+    @PostMapping("/getNlp")
+    @SysLogger("getNlp")
+    public RespDTO<String> getNlp(@RequestBody NlpVO nlpVO) {
+        return RespDTO.onSuc(nlpFacade.getNlp(nlpVO));
+    }
+
+}
+

+ 1 - 1
user-service/src/main/resources/mapper/MenuMapper.xml

@@ -18,7 +18,7 @@
     </resultMap>
 
     <select id="getByRole" resultMap="BaseResultMap">
-        select a.* from sys_menu a, sys_role_menu b, sys_user_role c
+        select distinct a.* from sys_menu a, sys_role_menu b, sys_user_role c
         where a.id = b.menu_id and b.role_id and b.role_id = c.role_id and c.user_id = #{userId}
         and a.is_deleted = 'N' and b.is_deleted = 'N' and c.is_deleted = 'N'
         ORDER BY a.parent_id , a.order_no