Pārlūkot izejas kodu

1.长兴新需求:手麻系统时间相关规则开发

hujing 5 gadi atpakaļ
vecāks
revīzija
e6f82f42aa

+ 130 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0729.java

@@ -0,0 +1,130 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 术后首次病程手术开始时间与手麻系统记录不一致
+ * @author: 胡敬
+ * @time: 2020/5/12 10:23
+ */
+@Component
+public class OPE0729 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        //        if (isOperativePatient) {
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (operationDocs == null || operationDocs.size() == 0
+                || anesthesiaRelatedDocs == null || anesthesiaRelatedDocs.size() == 0) {
+            return;
+        }
+
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            String anesOperationName = anesthesiaStructureMap.get("手术名称");
+            String anesOperationStartDateStr = anesthesiaStructureMap.get("手术开始时间");
+            if (StringUtil.isBlank(anesOperationName)) {
+                continue;
+            }
+            anesOperationName = StringUtil.removeBlank(anesOperationName);
+            if (StringUtil.isBlank(anesOperationStartDateStr)) {
+                continue;
+            }
+            Date anesOperationStartDate = StringUtil.parseDateTime(anesOperationStartDateStr);
+            if (anesOperationStartDate == null) {
+                continue;
+            }
+            Map<String, Date> startEndDate = getStartEndDate(operationDocs, anesOperationName);
+            if (startEndDate.get("手术开始时间") != null) {
+                Date operationStartDate = startEndDate.get("手术开始时间");
+                if (!operationStartDate.equals(anesOperationStartDate)) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+    //    }
+
+    /**
+     * 获取手术开始时间和结束时间
+     *
+     * @param operationDocs
+     * @param anesOperationName
+     * @return
+     */
+    private Map<String, Date> getStartEndDate(List<OperationDoc> operationDocs, String anesOperationName) {
+        Map<String, Date> startEndDateMap = new HashMap<>();
+        Date startDate = null, endDate = null;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+            if (operationDiscussionDoc == null) {
+                continue;
+            }
+            Map<String, String> operationStructureMap = operationDiscussionDoc.getStructureMap();
+            String operationName = operationStructureMap.get("手术名称");
+            String operationStartDateStr = operationStructureMap.get("手术开始时间");
+            String operationEndDateStr = operationStructureMap.get("手术结束时间");
+            if (StringUtil.isBlank(operationName)) {
+                continue;
+            }
+            operationName = StringUtil.removeBlank(operationName);
+            if (withInOneDay(operationStartDateStr, operationEndDateStr)) {
+                if (anesOperationName.contains(operationName)) {
+                    Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+                    if (startDate == null || operationStartDate.before(startDate)) {
+                        startDate = operationStartDate;
+                    }
+                    Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
+                    if (endDate == null || operationEndDate.after(endDate)) {
+                        endDate = operationEndDate;
+                    }
+                }
+            }
+        }
+        if (startDate != null) {
+            startEndDateMap.put("手术开始时间", startDate);
+        }
+        if (endDate != null) {
+            startEndDateMap.put("手术结束时间", endDate);
+        }
+        return startEndDateMap;
+    }
+
+    /**
+     * 确认手术开始时间->手术结束时间是否为24小时内
+     *
+     * @param firstDateStr
+     * @param secondDateStr
+     * @return
+     */
+    private boolean withInOneDay(String firstDateStr, String secondDateStr) {
+        if (StringUtil.isBlank(firstDateStr) && StringUtil.isBlank(secondDateStr)) {
+            return false;
+        }
+        Date firstDate = StringUtil.parseDateTime(firstDateStr);
+        Date secondDate = StringUtil.parseDateTime(secondDateStr);
+        if (firstDate == null || secondDate == null) {
+            return false;
+        }
+        return firstDate.before(secondDate) && !CatalogueUtil.compareTime(firstDate, secondDate, 24 * 60L);
+    }
+
+}

+ 130 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0730.java

@@ -0,0 +1,130 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 术后首次病程手术结束时间与手麻系统记录不一致
+ * @author: 胡敬
+ * @time: 2020/5/12 10:23
+ */
+@Component
+public class OPE0730 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        //        if (isOperativePatient) {
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (operationDocs == null || operationDocs.size() == 0
+                || anesthesiaRelatedDocs == null || anesthesiaRelatedDocs.size() == 0) {
+            return;
+        }
+
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            String anesOperationName = anesthesiaStructureMap.get("手术名称");
+            String anesOperationEndDateStr = anesthesiaStructureMap.get("手术结束时间");
+            if (StringUtil.isBlank(anesOperationName)) {
+                continue;
+            }
+            anesOperationName = StringUtil.removeBlank(anesOperationName);
+            if (StringUtil.isBlank(anesOperationEndDateStr)) {
+                continue;
+            }
+            Date anesOperationEndDate = StringUtil.parseDateTime(anesOperationEndDateStr);
+            if (anesOperationEndDate == null) {
+                continue;
+            }
+            Map<String, Date> startEndDate = getStartEndDate(operationDocs, anesOperationName);
+            if (startEndDate.get("手术结束时间") != null) {
+                Date operationEndDate = startEndDate.get("手术结束时间");
+                if (!operationEndDate.equals(anesOperationEndDate)) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+    //    }
+
+    /**
+     * 获取手术开始时间和结束时间
+     *
+     * @param operationDocs
+     * @param anesOperationName
+     * @return
+     */
+    private Map<String, Date> getStartEndDate(List<OperationDoc> operationDocs, String anesOperationName) {
+        Map<String, Date> startEndDateMap = new HashMap<>();
+        Date startDate = null, endDate = null;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+            if (operationDiscussionDoc == null) {
+                continue;
+            }
+            Map<String, String> operationStructureMap = operationDiscussionDoc.getStructureMap();
+            String operationName = operationStructureMap.get("手术名称");
+            String operationStartDateStr = operationStructureMap.get("手术开始时间");
+            String operationEndDateStr = operationStructureMap.get("手术结束时间");
+            if (StringUtil.isBlank(operationName)) {
+                continue;
+            }
+            operationName = StringUtil.removeBlank(operationName);
+            if (withInOneDay(operationStartDateStr, operationEndDateStr)) {
+                if (anesOperationName.contains(operationName)) {
+                    Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+                    if (startDate == null || operationStartDate.before(startDate)) {
+                        startDate = operationStartDate;
+                    }
+                    Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
+                    if (endDate == null || operationEndDate.after(endDate)) {
+                        endDate = operationEndDate;
+                    }
+                }
+            }
+        }
+        if (startDate != null) {
+            startEndDateMap.put("手术开始时间", startDate);
+        }
+        if (endDate != null) {
+            startEndDateMap.put("手术结束时间", endDate);
+        }
+        return startEndDateMap;
+    }
+
+    /**
+     * 确认手术开始时间->手术结束时间是否为24小时内
+     *
+     * @param firstDateStr
+     * @param secondDateStr
+     * @return
+     */
+    private boolean withInOneDay(String firstDateStr, String secondDateStr) {
+        if (StringUtil.isBlank(firstDateStr) && StringUtil.isBlank(secondDateStr)) {
+            return false;
+        }
+        Date firstDate = StringUtil.parseDateTime(firstDateStr);
+        Date secondDate = StringUtil.parseDateTime(secondDateStr);
+        if (firstDate == null || secondDate == null) {
+            return false;
+        }
+        return firstDate.before(secondDate) && !CatalogueUtil.compareTime(firstDate, secondDate, 24 * 60L);
+    }
+
+}

+ 130 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0741.java

@@ -0,0 +1,130 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description: 手术记录手术结束时间与手麻系统记录不一致
+ * @author: 胡敬
+ * @time: 2020/5/11 16:32
+ */
+@Component
+public class OPE0741 extends QCCatalogue {
+
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        //        boolean isOperativePatient = true;//是手术患者(暂时默认是)
+        //        if (isOperativePatient) {
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        List<AnesthesiaRelatedDoc> anesthesiaRelatedDocs = inputInfo.getAnesthesiaRelatedDocs();
+        if (operationDocs == null || operationDocs.size() == 0
+                || anesthesiaRelatedDocs == null || anesthesiaRelatedDocs.size() == 0) {
+            return;
+        }
+
+        for (AnesthesiaRelatedDoc anesthesiaRelatedDoc : anesthesiaRelatedDocs) {
+            Map<String, String> anesthesiaStructureMap = anesthesiaRelatedDoc.getStructureMap();
+            String anesOperationName = anesthesiaStructureMap.get("手术名称");
+            String anesOperationEndDateStr = anesthesiaStructureMap.get("手术结束时间");
+            if (StringUtil.isBlank(anesOperationName)) {
+                continue;
+            }
+            anesOperationName = StringUtil.removeBlank(anesOperationName);
+            if (StringUtil.isBlank(anesOperationEndDateStr)) {
+                continue;
+            }
+            Date anesOperationEndDate = StringUtil.parseDateTime(anesOperationEndDateStr);
+            if (anesOperationEndDate == null) {
+                continue;
+            }
+            Map<String, Date> startEndDate = getStartEndDate(operationDocs, anesOperationName);
+            if (startEndDate.get("手术结束时间") != null) {
+                Date operationEndDate = startEndDate.get("手术结束时间");
+                if (!operationEndDate.equals(anesOperationEndDate)) {
+                    status.set("-1");
+                    return;
+                }
+            }
+        }
+    }
+    //    }
+
+    /**
+     * 获取手术开始时间和结束时间
+     *
+     * @param operationDocs
+     * @param anesOperationName
+     * @return
+     */
+    private Map<String, Date> getStartEndDate(List<OperationDoc> operationDocs, String anesOperationName) {
+        Map<String, Date> startEndDateMap = new HashMap<>();
+        Date startDate = null, endDate = null;
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+            if (operationRecordDoc == null) {
+                continue;
+            }
+            Map<String, String> operationStructureMap = operationRecordDoc.getStructureMap();
+            String operationName = operationStructureMap.get("手术名称");
+            String operationStartDateStr = operationStructureMap.get("手术开始时间");
+            String operationEndDateStr = operationStructureMap.get("手术结束时间");
+            if (StringUtil.isBlank(operationName)) {
+                continue;
+            }
+            operationName = StringUtil.removeBlank(operationName);
+            if (withInOneDay(operationStartDateStr, operationEndDateStr)) {
+                if (anesOperationName.contains(operationName)) {
+                    Date operationStartDate = StringUtil.parseDateTime(operationStartDateStr);
+                    if (startDate == null || operationStartDate.before(startDate)) {
+                        startDate = operationStartDate;
+                    }
+                    Date operationEndDate = StringUtil.parseDateTime(operationEndDateStr);
+                    if (endDate == null || operationEndDate.after(endDate)) {
+                        endDate = operationEndDate;
+                    }
+                }
+            }
+        }
+        if (startDate != null) {
+            startEndDateMap.put("手术开始时间", startDate);
+        }
+        if (endDate != null) {
+            startEndDateMap.put("手术结束时间", endDate);
+        }
+        return startEndDateMap;
+    }
+
+    /**
+     * 确认手术开始时间->手术结束时间是否为24小时内
+     *
+     * @param firstDateStr
+     * @param secondDateStr
+     * @return
+     */
+    private boolean withInOneDay(String firstDateStr, String secondDateStr) {
+        if (StringUtil.isBlank(firstDateStr) && StringUtil.isBlank(secondDateStr)) {
+            return false;
+        }
+        Date firstDate = StringUtil.parseDateTime(firstDateStr);
+        Date secondDate = StringUtil.parseDateTime(secondDateStr);
+        if (firstDate == null || secondDate == null) {
+            return false;
+        }
+        return firstDate.before(secondDate) && !CatalogueUtil.compareTime(firstDate, secondDate, 24 * 60L);
+    }
+
+}

+ 40 - 0
trans/src/main/java/com/lantone/qc/trans/changx/ChangxAnesthesiaRelatedDocTrans.java

@@ -0,0 +1,40 @@
+package com.lantone.qc.trans.changx;
+
+import com.google.common.collect.Lists;
+import com.lantone.qc.pub.model.doc.AnesthesiaRelatedDoc;
+import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.FastJsonUtils;
+import com.lantone.qc.trans.ModelDocTrans;
+import com.lantone.qc.trans.comsis.OrdinaryAssistant;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @Description:
+ * @Author: HUJING
+ * @Date: 2020/5/11 16:23
+ */
+public class ChangxAnesthesiaRelatedDocTrans extends ModelDocTrans {
+    @Override
+    public List<AnesthesiaRelatedDoc> extract(MedrecVo medrecVo) {
+        List<AnesthesiaRelatedDoc> retList = Lists.newArrayList();
+        List<String> contents = (List) medrecVo.getContent().get("content");
+        contents.forEach(content -> {
+            retList.add(getAnesthesiaRelatedDoc((Map) FastJsonUtils.getJsonToMap(content)));
+        });
+        return retList;
+    }
+
+    private AnesthesiaRelatedDoc getAnesthesiaRelatedDoc(Map<String, String> content) {
+        Map<String, String> structureMap = OrdinaryAssistant.mapKeyContrast(content, keyContrasts);
+        AnesthesiaRelatedDoc anesthesiaRelatedDoc = new AnesthesiaRelatedDoc();
+        anesthesiaRelatedDoc.setStructureMap(structureMap);
+        anesthesiaRelatedDoc.setPageData((Map) content);
+        return anesthesiaRelatedDoc;
+    }
+
+    private List<String> keyContrasts = Lists.newArrayList(
+            "组织手术名称=手术名称"
+    );
+}

+ 4 - 0
trans/src/main/java/com/lantone/qc/trans/changx/ChangxDocTrans.java

@@ -69,6 +69,10 @@ public class ChangxDocTrans extends DocTrans {
                 ChangxDoctorAdviceDocTrans doctorAdviceDocTrans = new ChangxDoctorAdviceDocTrans();
                 inputInfo.setDoctorAdviceDocs(doctorAdviceDocTrans.extract(i));
             }
+            if (i.getTitle().equals("手术麻醉信息")) {
+                ChangxAnesthesiaRelatedDocTrans changxAnesthesiaRelatedDocTrans = new ChangxAnesthesiaRelatedDocTrans();
+                inputInfo.setAnesthesiaRelatedDocs(changxAnesthesiaRelatedDocTrans.extract(i));
+            }
             //            if (i.getTitle().equals("值班交接制度")) {
             //                ChangxDutyShiftSystemDocTrans dutyShiftSystemDocTrans = new ChangxDutyShiftSystemDocTrans();
             //                inputInfo.setDutyShiftSystemDocs(dutyShiftSystemDocTrans.extract(i));