浏览代码

艾迪康报告抽取到体检数据库

lighter 1 年之前
父节点
当前提交
863c8c66c8

+ 21 - 0
src/main/java/thyyxxk/webserver/controller/examinations/AdiconController.java

@@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import thyyxxk.webserver.entity.ResultVo;
 import thyyxxk.webserver.entity.examinations.adicon.AdiconInquiry;
+import thyyxxk.webserver.entity.examinations.adicon.ItemMatch;
 import thyyxxk.webserver.entity.examinations.adicon.ListTableItem;
 import thyyxxk.webserver.entity.examinations.adicon.ReportDetail;
 import thyyxxk.webserver.service.examinations.AdiconService;
@@ -50,4 +51,24 @@ public class AdiconController {
     public ResultVo<String> getByteReport(@RequestBody AdiconInquiry inquiry) throws Exception {
         return ResultVoUtil.success(adiconService.getByteReport(inquiry));
     }
+
+    @PostMapping("/getUnMatchedList")
+    public ResultVo<List<ItemMatch>> getUnMatchedList(@RequestBody List<ItemMatch> request) {
+        return ResultVoUtil.success(adiconService.getUnMatchedList(request));
+    }
+
+    @GetMapping("/getZdItems")
+    public ResultVo<List<ItemMatch>> getZdItems() {
+        return ResultVoUtil.success(adiconService.getZdItems());
+    }
+
+    @PostMapping("/executeMatch")
+    public ResultVo<List<ItemMatch>> executeMatch(@RequestBody List<ItemMatch> request) {
+        return ResultVoUtil.success(adiconService.executeMatch(request));
+    }
+
+    @PostMapping("/saveToTjResult")
+    public ResultVo<String> saveToTjResult(@RequestBody List<ReportDetail> request) {
+        return ResultVoUtil.success(adiconService.saveToTjResult(request));
+    }
 }

+ 56 - 0
src/main/java/thyyxxk/webserver/dao/adicon/AdiconDao.java

@@ -0,0 +1,56 @@
+package thyyxxk.webserver.dao.adicon;
+
+import org.apache.ibatis.annotations.Delete;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Select;
+import thyyxxk.webserver.entity.examinations.adicon.ItemMatch;
+import thyyxxk.webserver.entity.examinations.adicon.ReportDetail;
+
+import java.util.List;
+
+@Mapper
+public interface AdiconDao {
+
+    @Select("select CHECKITEMID as matchCode,CHECKITEMNAME as matchName from T_CHECKITEM \n" +
+            "where CHECKITEMNAME in (${statement})")
+    List<ItemMatch> selectAutoMatchableItems(String statement);
+
+    @Select("select item_code from t_checkitem_match where item_code in (${statement})")
+    List<String> selectMatchedItems(String statement);
+
+    @Select("select CHECKITEMID as itemCode,CHECKITEMNAME as itemName from T_CHECKITEM")
+    List<ItemMatch> selectZdItems();
+
+    @Insert({"<script>" +
+            "insert into t_checkitem_match (item_code,item_name,match_code,match_name) " +
+            "values " +
+            "<foreach collection='list' item='item' separator=','> " +
+            "(#{item.itemCode},#{item.itemName},#{item.matchCode},#{item.matchName})" +
+            "</foreach>" +
+            "</script>"})
+    void insertMatchItem(List<ItemMatch> list);
+
+    @Select("select count(1) from T_SINGLE_RESULT where SGLCHECKID=#{id} ")
+    int selectExistCount(String id);
+
+    @Delete("delete from T_SINGLE_RESULT where SGLCHECKID=#{id} ")
+    void deleteExistResult(String id);
+
+    @Select("select item_code,match_code from t_checkitem_match where item_code in (${statement})")
+    List<ItemMatch> selectMatchedItems2(String statement);
+
+    @Insert({"<script>" +
+            "insert into T_SINGLE_RESULT (SGLCHECKID,CHECKITEMID,ITEMRESULT,UNIT," +
+            "LOWCRITICAL,HIGHCRITICAL,CRITICALNAME,CREATEDATE,UPDATEDATE,ISABANDON," +
+            "REGISTDEPT,OPERATEDATE,MYROWID,HINT) " +
+            "values " +
+            "<foreach collection='list' item='item' separator=','> " +
+            "(#{item.adiconBarcode},#{item.itemCode},#{item.result},#{item.resultUnit}," +
+            "#{item.str4},#{item.str5},#{item.resultReference},#{item.receivedDate}," +
+            "#{item.reportDate},'0',#{item.department},getdate()," +
+            "#{item.str3},#{item.resultHint})" +
+            "</foreach>" +
+            "</script>"})
+    void insertNewResult(List<ReportDetail> list);
+}

+ 11 - 0
src/main/java/thyyxxk/webserver/entity/examinations/adicon/ItemMatch.java

@@ -0,0 +1,11 @@
+package thyyxxk.webserver.entity.examinations.adicon;
+
+import lombok.Data;
+
+@Data
+public class ItemMatch {
+    private String itemCode;
+    private String itemName;
+    private String matchCode;
+    private String matchName;
+}

+ 101 - 9
src/main/java/thyyxxk/webserver/service/examinations/AdiconService.java

@@ -2,6 +2,7 @@ package thyyxxk.webserver.service.examinations;
 
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.dynamic.datasource.annotation.DS;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.text.StringEscapeUtils;
 import org.dom4j.Document;
@@ -14,10 +15,8 @@ import org.springframework.http.HttpHeaders;
 import org.springframework.stereotype.Service;
 import org.springframework.web.client.RestTemplate;
 import thyyxxk.webserver.config.exception.BizException;
-import thyyxxk.webserver.entity.examinations.adicon.AdiconInquiry;
-import thyyxxk.webserver.entity.examinations.adicon.BarcodeType;
-import thyyxxk.webserver.entity.examinations.adicon.ListTableItem;
-import thyyxxk.webserver.entity.examinations.adicon.ReportDetail;
+import thyyxxk.webserver.dao.adicon.AdiconDao;
+import thyyxxk.webserver.entity.examinations.adicon.*;
 import thyyxxk.webserver.service.externalhttp.AdiconHttpSrvc;
 import thyyxxk.webserver.utils.FilterUtil;
 import thyyxxk.webserver.utils.StringUtil;
@@ -28,19 +27,19 @@ import javax.xml.bind.Unmarshaller;
 import java.io.StringReader;
 import java.net.URLEncoder;
 import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
 @Slf4j
 @Service
+@DS("adicon")
 public class AdiconService {
     private final AdiconHttpSrvc adiconHttpSrvc;
-
-    private static final String URL = "http://222.240.235.22/CSWebService/ADReportWebService.asmx";
+    private final AdiconDao dao;
 
     @Autowired
-    public AdiconService(AdiconHttpSrvc adiconHttpSrvc) {
+    public AdiconService(AdiconHttpSrvc adiconHttpSrvc, AdiconDao dao) {
         this.adiconHttpSrvc = adiconHttpSrvc;
+        this.dao = dao;
     }
 
     public String login(String type) throws Exception {
@@ -160,6 +159,99 @@ public class AdiconService {
         return xmlString.replaceAll("<\\?xml.*?\\?>", "");
     }
 
+    public List<ItemMatch> getUnMatchedList(List<ItemMatch> request) {
+        StringBuilder inCodeStatementBuilder = new StringBuilder();
+        for (ItemMatch item : request) {
+            inCodeStatementBuilder.append(",'").append(item.getItemCode()).append("'");
+        }
+        String inCodeStatement = inCodeStatementBuilder.substring(1);
+        List<String> matchedItems = dao.selectMatchedItems(inCodeStatement);
+        request.removeIf(item -> matchedItems.contains(item.getItemCode()));
+        if (request.isEmpty()) {
+            return request;
+        }
+        StringBuilder inNameStatementBuilder = new StringBuilder();
+        for (ItemMatch item : request) {
+            inNameStatementBuilder.append(",'").append(item.getItemName()).append("'");
+        }
+        String inNameStatement = inNameStatementBuilder.substring(1);
+        List<ItemMatch> autoMatchableItems = dao.selectAutoMatchableItems(inNameStatement);
+        if (!autoMatchableItems.isEmpty()) {
+            Map<String, String> autoMatchableMap = new HashMap<>();
+            for (ItemMatch item : autoMatchableItems) {
+                autoMatchableMap.put(item.getMatchName(), item.getMatchCode());
+            }
+            for (ItemMatch item : request) {
+                if (autoMatchableMap.containsKey(item.getItemName())) {
+                    item.setMatchName(item.getItemName());
+                    item.setMatchCode(autoMatchableMap.get(item.getItemName()));
+                }
+            }
+            executeMatch(request);
+            request.removeIf(item -> StringUtil.notBlank(item.getMatchCode()));
+        }
+        return request;
+    }
+
+    public List<ItemMatch> getZdItems() {
+        return dao.selectZdItems();
+    }
+
+    public List<ItemMatch> executeMatch(List<ItemMatch> request) {
+        List<ItemMatch> validList = new ArrayList<>();
+        for (ItemMatch item : request) {
+            if (StringUtil.notBlank(item.getMatchCode())) {
+                validList.add(item);
+            }
+        }
+        dao.insertMatchItem(validList);
+        request.removeIf(item -> StringUtil.notBlank(item.getMatchCode()));
+        return request;
+    }
+
+    public String saveToTjResult(List<ReportDetail> request) {
+        if (request.isEmpty()) {
+            throw new BizException("报告内容为空!");
+        }
+        int count = dao.selectExistCount(request.get(0).getAdiconBarcode());
+        if (count == request.size()) {
+            return "已存在相同的报告,请勿重复提取。";
+        }
+        StringBuilder inCodeStatementBuilder = new StringBuilder();
+        for (ReportDetail item : request) {
+            inCodeStatementBuilder.append(",'").append(item.getItemCode()).append("'");
+        }
+        String inCodeStatement = inCodeStatementBuilder.substring(1);
+        List<ItemMatch> matchedItems = dao.selectMatchedItems2(inCodeStatement);
+        if (matchedItems.isEmpty()) {
+            throw new BizException("有未匹配的检验项目,请刷新页面后重试。");
+        }
+        Map<String, String> map = new HashMap<>();
+        for (ItemMatch item : matchedItems) {
+            map.put(item.getItemCode(), item.getMatchCode());
+        }
+        for (ReportDetail item : request) {
+            if (null == map.get(item.getItemCode())) {
+                throw new BizException("有未匹配的检验项目,请刷新页面后重试。");
+            }
+            item.setItemCode(map.get(item.getItemCode()));
+            item.setStr3(UUID.randomUUID().toString());
+            if (StringUtil.notBlank(item.getResultReference())
+                    && item.getResultReference().contains("-")) {
+                String[] arr = item.getResultReference().split("-");
+                item.setStr4(arr[0]);
+                item.setStr5(arr[1]);
+            } else {
+                item.setStr4(null);
+                item.setStr5(null);
+            }
+        }
+        if (count > 0) {
+            dao.deleteExistResult(request.get(0).getAdiconBarcode());
+        }
+        dao.insertNewResult(request);
+        return "操作成功。";
+    }
 }
 
 

+ 5 - 0
src/main/resources/application-prod.yml

@@ -25,6 +25,11 @@ spring:
           username: "sa"
           password: "hnthxyyy"
           driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+        adicon:
+          url: "jdbc:sqlserver://172.16.32.100:1433;databaseName=CYYFCheckUPV5_HNTHYY"
+          username: "sa"
+          password: "*ThyyHis2018#"
+          driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
     druid:
       #type: com.alibaba.druid.pool.DruidDataSource
       #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时

+ 5 - 0
src/main/resources/application-show.yml

@@ -28,6 +28,11 @@ spring:
           username: "sa"
           password: "hnthxyyy"
           driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+        adicon:
+          url: "jdbc:sqlserver://172.16.32.100:1433;databaseName=CYYFCheckUPV5_HNTHYY"
+          username: "sa"
+          password: "*ThyyHis2018#"
+          driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
     druid:
       #type: com.alibaba.druid.pool.DruidDataSource
       #初始化时建立物理连接的个数。初始化发生在显示调用init方法,或者第一次getConnection时

+ 5 - 0
src/main/resources/application.yml

@@ -28,6 +28,11 @@ spring:
           username: "sa"
           password: "hnthxyyy"
           driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
+        adicon:
+          url: "jdbc:sqlserver://172.16.32.100:1433;databaseName=CYYFCheckUPV5_HNTHYY"
+          username: "sa"
+          password: "*ThyyHis2018#"
+          driver-class-name: "com.microsoft.sqlserver.jdbc.SQLServerDriver"
         dev:
           url: "jdbc:sqlserver://172.16.32.179:1433;databaseName=thxyhisdb"
           username: "sa"