|
@@ -1,12 +1,11 @@
|
|
|
package com.lantone.qc.kernel.catalogue.crisisvaluereport;
|
|
|
|
|
|
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.CrisisInfoDoc;
|
|
|
import com.lantone.qc.pub.model.doc.CrisisValueReportDoc;
|
|
|
-import com.lantone.qc.pub.util.DateUtil;
|
|
|
-import com.lantone.qc.pub.util.ListUtil;
|
|
|
import com.lantone.qc.pub.util.StringUtil;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.stereotype.Component;
|
|
@@ -34,65 +33,69 @@ public class CRI0382 extends QCCatalogue {
|
|
|
//有结构化信息但无危急值文书,如果报告时间都未超过6小时 允许无文书
|
|
|
boolean isOutTime = false;
|
|
|
Date currentDate = new Date();
|
|
|
- int timeCha = 21600000;
|
|
|
- String[] dateFormats = new String[]{"yyyy年MM月dd日HH时mm分", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm"};
|
|
|
- String[] dateFormats2 = new String[]{"yyyy年MM月dd日HH时mm分", "yyyy-MM-dd HH:mm"};
|
|
|
for (CrisisInfoDoc crisisInfoDoc : crisisInfoDocs) {
|
|
|
String reptTime = crisisInfoDoc.getStructureMap().get("报告时间");
|
|
|
if (StringUtils.isNotEmpty(reptTime)) {
|
|
|
- if (currentDate.getTime() - StringUtil.parseDateTime(reptTime, dateFormats).getTime() > timeCha) {
|
|
|
+ if (CatalogueUtil.compareTime(StringUtil.parseDateTime(reptTime), currentDate, 6 * 60L)) {
|
|
|
isOutTime = true;
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
- };
|
|
|
- if (isOutTime == false) { //所有文书都未超过6小时,规则直接通过
|
|
|
+ }
|
|
|
+ if (!isOutTime) { //所有文书都未超过6小时,规则直接通过
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
List<CrisisValueReportDoc> crisisValueReportDocs = inputInfo.getCrisisValueReportDocs();
|
|
|
//如果有危急值结构化数据 但无文书则直接提醒无危急值报告
|
|
|
if (crisisValueReportDocs == null || crisisValueReportDocs.size() == 0) {
|
|
|
- status.set("-1");
|
|
|
return;
|
|
|
}
|
|
|
List<String> findCrisises = new ArrayList<>();
|
|
|
- List<String> allCrisises = new ArrayList<>();
|
|
|
- crisisInfoDocs.forEach(crisisInfoDoc -> {
|
|
|
- String reptTime = crisisInfoDoc.getStructureMap().get("报告时间");
|
|
|
+ for (CrisisInfoDoc crisisInfoDoc : crisisInfoDocs) {
|
|
|
+ String reptTimeStr = crisisInfoDoc.getStructureMap().get("报告时间");
|
|
|
String crisisName = crisisInfoDoc.getStructureMap().get("危急值名称");
|
|
|
- crisisName = crisisName ==null? "":crisisName.split("\\[|\\(|\\(")[0];
|
|
|
- allCrisises.add(reptTime);
|
|
|
- if (StringUtils.isNotEmpty(reptTime)) {
|
|
|
+ String crisisValue = crisisInfoDoc.getStructureMap().get("危急结果值");
|
|
|
+ crisisName = crisisName == null ? "" : crisisName.split("\\[|\\(|\\(")[0];
|
|
|
+ if (StringUtil.isBlank(reptTimeStr)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Date reptTime = StringUtil.parseDateTime(reptTimeStr);//报告时间
|
|
|
+ if (StringUtils.isNotEmpty(reptTimeStr)) {
|
|
|
//当前时间和报告时间未超过6小时,规则通过
|
|
|
- if (currentDate.getTime() - StringUtil.parseDateTime(reptTime, dateFormats).getTime() < timeCha) {
|
|
|
- findCrisises.add(reptTime);
|
|
|
- } else {
|
|
|
- for (CrisisValueReportDoc crisisValueReportDoc : crisisValueReportDocs) {
|
|
|
- String recordTimeStr = crisisValueReportDoc.getStructureMap().get("记录时间");
|
|
|
- String docReptContent = crisisValueReportDoc.getStructureMap().get("危急值记录内容");
|
|
|
- if ((StringUtil.parseDateTime(recordTimeStr, dateFormats2).getTime() - StringUtil.parseDateTime(reptTime, dateFormats2).getTime()) >= 0
|
|
|
- && (StringUtil.parseDateTime(recordTimeStr, dateFormats).getTime() - StringUtil.parseDateTime(reptTime, dateFormats).getTime()) < timeCha
|
|
|
- && docReptContent.contains(crisisName)) {
|
|
|
- findCrisises.add(reptTime);
|
|
|
- break;
|
|
|
- }
|
|
|
+ if (!CatalogueUtil.compareTime(reptTime, currentDate, 6 * 60L)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ int crisisMatchSum = 0;
|
|
|
+ for (CrisisValueReportDoc crisisValueReportDoc : crisisValueReportDocs) {
|
|
|
+ String recordTimeStr = crisisValueReportDoc.getStructureMap().get("记录时间");
|
|
|
+ String docReptContent = crisisValueReportDoc.getStructureMap().get("危急值记录内容");
|
|
|
+ if (StringUtil.isBlank(recordTimeStr)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ Date recordTime = StringUtil.parseDateTime(recordTimeStr);//记录时间
|
|
|
+ if (!docReptContent.contains(crisisName)) { //危急值报告内容不包含危急值内容,跳过
|
|
|
+ crisisMatchSum++;
|
|
|
+ continue;
|
|
|
}
|
|
|
+ if (recordTime.before(reptTime)) {//记录时间比报告早,跳过
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (docReptContent.contains(crisisValue) && CatalogueUtil.compareTime(recordTime, reptTime, 6 * 60L)) {//报告时间和记录时间超过6小时,存该报告时间
|
|
|
+ findCrisises.add(crisisName + ":" + crisisValue + "->" + reptTimeStr);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (crisisMatchSum == crisisValueReportDocs.size()) {//该条危急值记录没有报告
|
|
|
+ findCrisises.add(crisisName + ":" + crisisValue + "->" + reptTimeStr);
|
|
|
}
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
|
|
|
- if(findCrisises.size() != allCrisises.size()) {
|
|
|
+ if (findCrisises.size() > 0) {
|
|
|
status.set("-1");
|
|
|
- allCrisises.forEach(reptTime -> {
|
|
|
- if (!findCrisises.contains(reptTime)) {
|
|
|
- if (StringUtils.isEmpty(info.get())) {
|
|
|
- info.set(reptTime);
|
|
|
- } else {
|
|
|
- info.set(info.get() + ", " + reptTime);
|
|
|
- }
|
|
|
- }
|
|
|
- });
|
|
|
+ info.set(findCrisises.toString().replaceAll("[\\[\\]]", ""));
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|