Browse Source

添加中间层,前端到后端的所有通讯都经过中间层。
中间层暂时主要负责对化验结果的预处理。

MarkHuang 6 years ago
parent
commit
4f15d287da

+ 12 - 3
aipt-service/src/main/java/com/diagbot/facade/ClinicalFacade.java

@@ -1,6 +1,10 @@
 package com.diagbot.facade;
 
+import com.diagbot.client.AIServiceClient;
+import com.diagbot.client.bean.Response;
+import com.diagbot.client.bean.ResponseData;
 import com.diagbot.dto.LisResult;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.RequestBody;
 import com.diagbot.vo.SearchVo;
@@ -17,18 +21,23 @@ import java.util.List;
  */
 @Component
 public class ClinicalFacade {
+
+    @Autowired
+    private AIServiceClient aiServiceClient;
+
     /**
      * 处理临床数据
      *
      * @param searchVo
-     * @return SearchVo
+     * @return ResponseData
      */
-    public SearchVo processClinicalData(@RequestBody SearchVo searchVo) {
+    public ResponseData processClinicalData(@RequestBody SearchVo searchVo) {
         SearchVo sData = searchVo;
 
         sData.setLisArr(processLis(sData.getLisArr()));
+        Response<ResponseData> res = aiServiceClient.bayesPageData(sData);
 
-        return sData;
+        return res.getData();
     }
 
     private List<LisResult> processLis(List<LisResult> lisArr) {

+ 23 - 23
aipt-service/src/main/java/com/diagbot/vo/SearchVo.java

@@ -17,48 +17,48 @@ import java.util.Map;
 @Getter
 @Setter
 public class SearchVo {
-    private String sex;
-    private int age;
+    private int length;
+
     private int age_start;
     private int age_end;
+    private int age;
+    private String sex;
+
+    // 搜索结果的贝叶斯阈值
+    private String threshold;
 
     private String symptom;
     private String vital;
     private String lis;
     private String pacs;
-    private String other;
-    private String featureType;
     private String diag;
-
-    private int length;
-
-
-    // 搜索结果的贝叶斯阈值
-    private String threshold;
-
-    private List<Feature> symptomFeatureList;
-    private List<Feature> lisFeatureList;
-    private List<Feature> pacsFeatureList;
-    private List<Feature> vitalFeatureList;
-    private List<Feature> symptompropertyFeatureList;
-
+    private String past;
+    private String other;
     private List<LisResult> lisArr;
-    private List<Feature> diagFeatureList;
-    private Map<String, Map<String, String>> inputs;
-
 
+    //特征类别
+    private String featureType;
     /*
-    private String past;
     //特征类别对","进行分割后数据
     private String[] featureTypes;
     //门诊 住院分类
     private String resourceType;
     //模型
-    private AlgorithmClassify algorithmClassify[];
+//    private AlgorithmClassify algorithmClassify[];
     //模型
     private String algorithmClassifyValue;
+    */
     //外部系统编码 用于返回映射数据,如果sysCode为空或null,则返回kl_standard_info标准名称
     private String sysCode;
-    */
+
+
+    private List<Feature> symptomFeatureList;
+    private List<Feature> lisFeatureList;
+    private List<Feature> pacsFeatureList;
+    private List<Feature> vitalFeatureList;
+    private List<Feature> symptompropertyFeatureList;
+
+    private List<Feature> diagFeatureList;
+    private Map<String, Map<String, String>> inputs;
 
 }

+ 2 - 9
aipt-service/src/main/java/com/diagbot/web/ClinicalController.java

@@ -2,8 +2,6 @@ package com.diagbot.web;
 
 
 import com.diagbot.annotation.SysLogger;
-import com.diagbot.client.AIServiceClient;
-import com.diagbot.client.bean.Response;
 import com.diagbot.client.bean.ResponseData;
 import com.diagbot.dto.RespDTO;
 import com.diagbot.facade.ClinicalFacade;
@@ -35,19 +33,14 @@ public class ClinicalController {
     @Autowired
     private ClinicalFacade clinicalFacade;
 
-    @Autowired
-    private AIServiceClient aiServiceClient;
-
     @ApiOperation(value = "临床数据处理", notes = "")
     @PostMapping("/processData")
     @SysLogger("processData")
     public RespDTO<ResponseData> processData(@Valid @RequestBody SearchVo searchVo) {
 
-        SearchVo sData = clinicalFacade.processClinicalData(searchVo);
-
-        Response<ResponseData> res = aiServiceClient.bayesPageData(sData);
+        ResponseData data = clinicalFacade.processClinicalData(searchVo);
 
-        return RespDTO.onSuc(res.getData());
+        return RespDTO.onSuc(data);
     }
 
 }

+ 20 - 0
icss-service/src/main/java/com/diagbot/client/AiptServiceClient.java

@@ -0,0 +1,20 @@
+package com.diagbot.client;
+
+import com.diagbot.client.bean.Response;
+import com.diagbot.client.bean.ResponseData;
+import com.diagbot.client.bean.SearchData;
+import com.diagbot.client.hystrix.AiptServiceHystrix;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * @Description:调用中间层服务
+ * @Author: Mark Huang
+ * @time: 2019/03/25 19:15
+ */
+@FeignClient(value = "aipt-service", fallback = AiptServiceHystrix.class)
+public interface AiptServiceClient {
+    @PostMapping(value = "/clinicaldata/processData")
+    Response<ResponseData> aiptData(@RequestBody SearchData searchData);
+}

+ 23 - 0
icss-service/src/main/java/com/diagbot/client/hystrix/AiptServiceHystrix.java

@@ -0,0 +1,23 @@
+package com.diagbot.client.hystrix;
+
+import com.diagbot.client.AiptServiceClient;
+import com.diagbot.client.bean.Response;
+import com.diagbot.client.bean.ResponseData;
+import com.diagbot.client.bean.SearchData;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Description:调用中间层服务
+ * @Author: Mark Huang
+ * @time: 2019/03/25 19:15
+ */
+@Component
+@Slf4j
+public class AiptServiceHystrix implements AiptServiceClient {
+    @Override
+    public Response<ResponseData> aiptData(SearchData searchData) {
+        log.error("【hystrix】调用{}异常", "aiptData");
+        return null;
+    }
+}

+ 42 - 15
icss-service/src/main/java/com/diagbot/facade/PushFacade.java

@@ -2,6 +2,7 @@ package com.diagbot.facade;
 
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.diagbot.client.AiptServiceClient;
 import com.diagbot.client.BigDataServiceClient;
 import com.diagbot.client.GraphServiceClient;
 import com.diagbot.client.TranServiceClient;
@@ -29,15 +30,9 @@ import com.diagbot.util.EntityUtil;
 import com.diagbot.util.FastJsonUtils;
 import com.diagbot.util.ListUtil;
 import com.diagbot.util.StringUtil;
-import com.diagbot.vo.EMRPushVO;
-import com.diagbot.vo.HosCodeVO;
-import com.diagbot.vo.LisKYJVO;
-import com.diagbot.vo.LisResult;
-import com.diagbot.vo.LisResultVO;
-import com.diagbot.vo.PushKYJVO;
-import com.diagbot.vo.PushVO;
-import com.diagbot.vo.QuestionVO;
+import com.diagbot.vo.*;
 import com.google.common.collect.Lists;
+import io.micrometer.core.instrument.search.Search;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
@@ -73,14 +68,16 @@ public class PushFacade {
     private LisMappingFacade lisMappingFacade;
     @Autowired
     private TranServiceClient tranServiceClient;
+    @Autowired
+    private AiptServiceClient aiptServiceClient;
 
     /**
-     * 推理接口
+     * 拼装数据
      *
      * @param pushVO
-     * @return
+     * @return SearchData
      */
-    public ResponseData pushAI(PushVO pushVO) {
+    public SearchData assembleData(PushVO pushVO) {
         SearchData searchData = new SearchData();
         searchData.setAge(pushVO.getAge());
         searchData.setSymptom(pushVO.getSymptom());
@@ -129,6 +126,17 @@ public class PushFacade {
         List<LisResult> lisResultList = BeanUtil.listCopyTo(pushVO.getLis(), LisResult.class);
         searchData.setLisArr(lisResultList);
 
+        return searchData;
+    }
+
+
+    /**
+     * 大数据接口
+     *
+     * @param searchData
+     * @return ResponseData
+     */
+    public ResponseData pushAI(SearchData searchData) {
         Response<ResponseData> res = bigDataServiceClient.bayesPageData(searchData);
         if (null == res || null == res.getData()) {
             throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "AI没有返回结果");
@@ -136,6 +144,20 @@ public class PushFacade {
         return res.getData();
     }
 
+    /**
+     * 中间层接口
+     *
+     * @param searchData
+     * @return ResponseData
+     */
+    public ResponseData pushAipt(SearchData searchData) {
+        Response<ResponseData> res = aiptServiceClient.aiptData(searchData);
+        if (null == res || null == res.getData()) {
+            throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "中间层没有返回结果");
+        }
+        return res.getData();
+    }
+
     /**
      * 推理接口
      *
@@ -144,7 +166,9 @@ public class PushFacade {
      */
     public PushDTO pushInner(PushVO pushVO, Integer mode) {
         PushDTO pushDTO = new PushDTO();
-        ResponseData data = pushAI(pushVO);
+        SearchData Data = assembleData(pushVO);
+//        ResponseData data = pushAI(searchData);
+        ResponseData data = pushAipt(Data);
 
         String featureType = pushVO.getFeatureType();
         String[] featureTypes = featureType.split(",|,");
@@ -323,7 +347,8 @@ public class PushFacade {
         }
         pushVO.setLis(lisResultVOList);
 
-        ResponseData responseData = pushAI(pushVO);
+        SearchData searchData = assembleData(pushVO);
+        ResponseData responseData = pushAI(searchData);
         PushKYJDTO pushKYJDTO = new PushKYJDTO();
         pushKYJDTO.setLabs(responseData.getLabs());
         pushKYJDTO.setDis(responseData.getDis());
@@ -494,7 +519,9 @@ public class PushFacade {
             }
             pushVO.setLis(lisResultVOList);
         }
-        ResponseData data = pushAI(pushVO);
+
+        SearchData searchData = assembleData(pushVO);
+        ResponseData data = pushAI(searchData);
         String featureType = pushVO.getFeatureType();
         String[] featureTypes = featureType.split(",|,");
         Set<String> featureTypeSet = new HashSet(Arrays.asList(featureTypes));
@@ -573,7 +600,7 @@ public class PushFacade {
                 }
             }
             //警惕
-            SearchData searchData = new SearchData();
+            searchData = new SearchData();
             searchData.setDiag(String.join(",", disNameList));
             Response<GdbResponse> graphRes = graphServiceClient.highRiskPageData(searchData);
             Map<String, String> graphResult = graphRes.getData().getResult();

+ 3 - 1
icss-service/src/main/java/com/diagbot/web/PushController.java

@@ -2,6 +2,7 @@ package com.diagbot.web;
 
 import com.diagbot.annotation.SysLogger;
 import com.diagbot.client.bean.ResponseData;
+import com.diagbot.client.bean.SearchData;
 import com.diagbot.dto.PushDTO;
 import com.diagbot.dto.PushKYJDTO;
 import com.diagbot.dto.RespDTO;
@@ -109,7 +110,8 @@ public class PushController {
     @PostMapping("/pushAI")
     @SysLogger("pushAI")
     public RespDTO<ResponseData> pushAI(@RequestBody @Valid PushVO pushVO) {
-        return RespDTO.onSuc(pushFacade.pushAI(pushVO));
+        SearchData searchData = pushFacade.assembleData(pushVO);
+        return RespDTO.onSuc(pushFacade.pushAI(searchData));
     }
 
     @ApiOperation(value = "推理接口(快易检)[by:zhaops]",