|
@@ -7,8 +7,10 @@ import com.diagbot.client.StandConvertServiceClient;
|
|
|
import com.diagbot.dto.IndicationDTO;
|
|
|
import com.diagbot.dto.StandConvertCrfBatchDTO;
|
|
|
import com.diagbot.dto.StandConvertCrfDTO;
|
|
|
+import com.diagbot.enums.RedisEnum;
|
|
|
import com.diagbot.exception.CommonErrorCode;
|
|
|
import com.diagbot.exception.CommonException;
|
|
|
+import com.diagbot.util.BeanUtil;
|
|
|
import com.diagbot.util.ExcelUtils;
|
|
|
import com.diagbot.util.ListUtil;
|
|
|
import com.diagbot.util.RedisUtil;
|
|
@@ -17,8 +19,10 @@ import com.diagbot.vo.Drug;
|
|
|
import com.diagbot.vo.IndicationPushVO;
|
|
|
import com.diagbot.vo.ItemExt;
|
|
|
import com.diagbot.vo.StandConvertCrfVO;
|
|
|
+import com.diagbot.vo.TestAllVO;
|
|
|
import com.diagbot.vo.TestIndicationVO;
|
|
|
import com.diagbot.vo.TestLineVO;
|
|
|
+import io.github.lvyahui8.spring.facade.DataFacade;
|
|
|
import org.apache.commons.fileupload.FileItem;
|
|
|
import org.apache.commons.fileupload.FileItemFactory;
|
|
|
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
|
|
@@ -35,6 +39,10 @@ import java.util.ArrayList;
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.concurrent.Callable;
|
|
|
+import java.util.concurrent.ExecutorService;
|
|
|
+import java.util.concurrent.Executors;
|
|
|
+import java.util.concurrent.Future;
|
|
|
|
|
|
/**
|
|
|
* @Description: 测试facade
|
|
@@ -50,6 +58,8 @@ public class TestFacade {
|
|
|
StandConvertServiceClient standConvertServiceClient;
|
|
|
@Autowired
|
|
|
RedisUtil redisUtil;
|
|
|
+ @Autowired
|
|
|
+ CacheFacade cacheFacade;
|
|
|
|
|
|
/**
|
|
|
* 开单项数据测试
|
|
@@ -102,99 +112,129 @@ public class TestFacade {
|
|
|
operationOrder.add(operationItem);
|
|
|
indicationPushVO.setOperationOrder(operationOrder);
|
|
|
break;
|
|
|
+ case "药品通用名称":
|
|
|
+ List<Drug> drugOrder = new ArrayList<>();
|
|
|
+ Drug drug = new Drug();
|
|
|
+ drug.setName(bean.getStandName());
|
|
|
+ drug.setUniqueName(bean.getStandName());
|
|
|
+ drugOrder.add(drug);
|
|
|
+ indicationPushVO.setDrugOrder(drugOrder);
|
|
|
+ break;
|
|
|
default:
|
|
|
continue;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ indicationPushVO.setMsg(bean.getNeoName());
|
|
|
+
|
|
|
if (StringUtil.isNotEmpty(bean.getNeoType())) {
|
|
|
switch (bean.getNeoType()) {
|
|
|
- // case "1": // 性别
|
|
|
- // if ("男性".equals(bean.getNeoName())) {
|
|
|
- // indicationPushVO.setSex(1);
|
|
|
- // } else if ("女性".equals(bean.getNeoName())) {
|
|
|
- // indicationPushVO.setSex(2);
|
|
|
- // }
|
|
|
- // break;
|
|
|
- // case "2": // 化验, 示例:血小板计数,<,50,10^9/L
|
|
|
- // String lisStr = bean.getNeoName();
|
|
|
- // String[] lisArr = lisStr.split(",");
|
|
|
- //
|
|
|
- // List<Lis> lisList = new ArrayList<>();
|
|
|
- // Lis lisBean = new Lis();
|
|
|
- // lisBean.setUniqueName(lisArr[0]);
|
|
|
- // lisBean.setName(lisArr[0]);
|
|
|
- // lisBean.setDetailName(lisArr[0]);
|
|
|
- // lisBean.setValue(getValue(lisArr));
|
|
|
- // lisList.add(lisBean);
|
|
|
- // indicationPushVO.setLis(lisList);
|
|
|
- // break;
|
|
|
- // case "3": // 临床表现
|
|
|
- // indicationPushVO.setChief(bean.getNeoName());
|
|
|
- // break;
|
|
|
+ case "1": // 性别
|
|
|
+ if ("男性".equals(bean.getNeoName())) {
|
|
|
+ indicationPushVO.setSex(1);
|
|
|
+ } else if ("女性".equals(bean.getNeoName())) {
|
|
|
+ indicationPushVO.setSex(2);
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "2": // 化验, 示例:血小板计数,<,50,10^9/L
|
|
|
+ String lisStr = bean.getNeoName();
|
|
|
+ String[] lisArr = lisStr.split(",");
|
|
|
+
|
|
|
+ List<Lis> lisList = new ArrayList<>();
|
|
|
+ Lis lisBean = new Lis();
|
|
|
+ lisBean.setUniqueName(lisArr[0]);
|
|
|
+ lisBean.setName(lisArr[0]);
|
|
|
+ lisBean.setDetailName(lisArr[0]);
|
|
|
+ lisBean.setValue(getValue(lisArr));
|
|
|
+ lisList.add(lisBean);
|
|
|
+ indicationPushVO.setLis(lisList);
|
|
|
+ break;
|
|
|
+ case "3": // 临床表现
|
|
|
+ indicationPushVO.setChief(bean.getNeoName());
|
|
|
+ break;
|
|
|
case "4": //辅助检查描述
|
|
|
indicationPushVO.setSymptom("B超:提示" + bean.getNeoName());
|
|
|
break;
|
|
|
- // case "5": // 诊断
|
|
|
- // List<Item> diag = new ArrayList<>();
|
|
|
- // Item diagItem = new Item();
|
|
|
- // diagItem.setName(bean.getNeoName());
|
|
|
- // diagItem.setUniqueName(bean.getNeoName());
|
|
|
- // diag.add(diagItem);
|
|
|
- // indicationPushVO.setDiag(diag);
|
|
|
- // break;
|
|
|
- // case "6": // 服用药品
|
|
|
- // StringBuffer symptom = new StringBuffer("发病来,神志清,精神可,胃纳一般,睡眠可,二便无殊。一直服用");
|
|
|
- // symptom.append(bean.getNeoName()).append("。");
|
|
|
- // indicationPushVO.setSymptom(symptom.toString());
|
|
|
- // break;
|
|
|
- // case "7" : // 药品过敏原
|
|
|
- // StringBuffer pastStr = new StringBuffer("");
|
|
|
- // if ("药品通用名称".equals(bean.getDrugType())) {
|
|
|
- // pastStr.append("有“").append(bean.getNeoName()).append("”过敏。");
|
|
|
- // indicationPushVO.setPasts(pastStr.toString());
|
|
|
- // } else if ("药品类别".equals(bean.getDrugType())) {
|
|
|
- // List<String> drugList = (List<String>)redisUtil.get("药品分类_" + bean.getNeoName());
|
|
|
- // if (ListUtil.isNotEmpty(drugList)) {
|
|
|
- // for (String s : drugList) {
|
|
|
- // pastStr = new StringBuffer("");
|
|
|
- // IndicationPushVO indicationPushCopy = new IndicationPushVO();
|
|
|
- // BeanUtil.copyProperties(indicationPushVO, indicationPushCopy);
|
|
|
- // pastStr.append("有“").append(s).append("”过敏。");
|
|
|
- // indicationPushCopy.setPasts(pastStr.toString());
|
|
|
- // indicationPushCopy.setMsg("过敏药品【" + s + "】");
|
|
|
- // indicationPushVOList.add(indicationPushCopy);
|
|
|
- // }
|
|
|
- // }
|
|
|
- // continue;
|
|
|
- // }
|
|
|
- // break;
|
|
|
- // case "12": // 体征
|
|
|
- // StringBuffer sbVital = new StringBuffer();
|
|
|
- // String[] vitalArr = bean.getNeoName().split(",");
|
|
|
- // if (vitalArr.length > 1) {
|
|
|
- // if ("收缩压".equals(vitalArr[0]) || "舒张压".equals(vitalArr[0])) {
|
|
|
- // if ("收缩压".equals(vitalArr[0])) {
|
|
|
- // sbVital.append("血压");
|
|
|
- // sbVital.append(getValue(vitalArr) + "/100mmHg");
|
|
|
- // indicationPushVO.setVital(sbVital.toString());
|
|
|
- // } else if ("舒张压".equals(vitalArr[0])) {
|
|
|
- // sbVital.append("血压");
|
|
|
- // sbVital.append("100/" + getValue(vitalArr) + "mmHg");
|
|
|
- // indicationPushVO.setVital(sbVital.toString());
|
|
|
- // }
|
|
|
- // } else {
|
|
|
- // // 其他数值类型
|
|
|
- // sbVital.append(vitalArr[0]);
|
|
|
- // sbVital.append(getValue(vitalArr));
|
|
|
- // sbVital.append(vitalArr[3]);
|
|
|
- // indicationPushVO.setVital(sbVital.toString());
|
|
|
- // }
|
|
|
- // } else {
|
|
|
- // sbVital.append(vitalArr[0]);
|
|
|
- // indicationPushVO.setVital(sbVital.toString());
|
|
|
- // }
|
|
|
- // break;
|
|
|
+ case "5": // 诊断
|
|
|
+ List<Item> diag = new ArrayList<>();
|
|
|
+ Item diagItem = new Item();
|
|
|
+ diagItem.setName(bean.getNeoName());
|
|
|
+ diagItem.setUniqueName(bean.getNeoName());
|
|
|
+ diag.add(diagItem);
|
|
|
+ indicationPushVO.setDiag(diag);
|
|
|
+ break;
|
|
|
+ case "6": // 服用药品
|
|
|
+ StringBuffer symptom = new StringBuffer("发病来,神志清,精神可,胃纳一般,睡眠可,二便无殊。一直服用");
|
|
|
+ symptom.append(bean.getNeoName()).append("。");
|
|
|
+ indicationPushVO.setSymptom(symptom.toString());
|
|
|
+ break;
|
|
|
+ case "10": // 禁忌人群
|
|
|
+ if ("妊娠".equals(bean.getNeoName())) {
|
|
|
+ List<Item> groupList = new ArrayList<>();
|
|
|
+ Item group = new Item();
|
|
|
+ group.setName(bean.getNeoName());
|
|
|
+ group.setUniqueName(bean.getNeoName());
|
|
|
+ groupList.add(group);
|
|
|
+ indicationPushVO.setDiag(groupList);
|
|
|
+ } else {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ case "7" : // 药品过敏原
|
|
|
+ StringBuffer pastStr = new StringBuffer("");
|
|
|
+ if ("药品通用名称".equals(bean.getDrugType())) {
|
|
|
+ pastStr.append("有“").append(bean.getNeoName()).append("”过敏。");
|
|
|
+ indicationPushVO.setPasts(pastStr.toString());
|
|
|
+ } else if ("药品类别".equals(bean.getDrugType())) {
|
|
|
+ List<String> drugList = (List<String>)redisUtil.get(RedisEnum.drugType.getName() + bean.getNeoName());
|
|
|
+ if (ListUtil.isNotEmpty(drugList)) {
|
|
|
+ if (testLineVO.isGetOne()) {
|
|
|
+ pastStr.append("有“").append(drugList.get(getRandomNum(drugList.size()))).append("”过敏。");
|
|
|
+ indicationPushVO.setPasts(pastStr.toString());
|
|
|
+ } else {
|
|
|
+ for (String s : drugList) {
|
|
|
+ pastStr = new StringBuffer("");
|
|
|
+ IndicationPushVO indicationPushCopy = new IndicationPushVO();
|
|
|
+ BeanUtil.copyProperties(indicationPushVO, indicationPushCopy);
|
|
|
+ pastStr.append("有“").append(s).append("”过敏。");
|
|
|
+ indicationPushCopy.setPasts(pastStr.toString());
|
|
|
+ indicationPushCopy.setMsg("过敏药品【" + s + "】");
|
|
|
+ indicationPushVOList.add(indicationPushCopy);
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "12": // 体征
|
|
|
+ StringBuffer sbVital = new StringBuffer();
|
|
|
+ String[] vitalArr = bean.getNeoName().split(",");
|
|
|
+ if (vitalArr.length > 1) {
|
|
|
+ if ("收缩压".equals(vitalArr[0]) || "舒张压".equals(vitalArr[0])) {
|
|
|
+ if ("收缩压".equals(vitalArr[0])) {
|
|
|
+ sbVital.append("血压");
|
|
|
+ sbVital.append(getValue(vitalArr) + "/100mmHg");
|
|
|
+ indicationPushVO.setVital(sbVital.toString());
|
|
|
+ } else if ("舒张压".equals(vitalArr[0])) {
|
|
|
+ sbVital.append("血压");
|
|
|
+ sbVital.append("100/" + getValue(vitalArr) + "mmHg");
|
|
|
+ indicationPushVO.setVital(sbVital.toString());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 其他数值类型
|
|
|
+ sbVital.append(vitalArr[0]);
|
|
|
+ sbVital.append(getValue(vitalArr));
|
|
|
+ sbVital.append(vitalArr[3]);
|
|
|
+ indicationPushVO.setVital(sbVital.toString());
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ sbVital.append(vitalArr[0]);
|
|
|
+ indicationPushVO.setVital(sbVital.toString());
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ case "14": // 年龄
|
|
|
+ String[] splitAge = bean.getNeoName().split(",");
|
|
|
+ indicationPushVO.setAge((int) getValueNum(splitAge));
|
|
|
+ break;
|
|
|
default:
|
|
|
continue;
|
|
|
}
|
|
@@ -202,7 +242,8 @@ public class TestFacade {
|
|
|
indicationPushVOList.add(indicationPushVO);
|
|
|
}
|
|
|
|
|
|
- Map<String, Object> map = getDebugMap(indicationPushVOList, "2", start);
|
|
|
+ // Map<String, Object> map = getDebugMap(indicationPushVOList, "2", start);
|
|
|
+ Map<String, Object> map = getDebugMapMulti(indicationPushVOList, "2", start);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
@@ -287,7 +328,7 @@ public class TestFacade {
|
|
|
continue;
|
|
|
}
|
|
|
// 3,4是高危手术
|
|
|
- if ("0".equals(bean.getOperationLevel()) || "1".equals(bean.getOperationLevel()) || "2".equals(bean.getOperationLevel())) {
|
|
|
+ if (StringUtil.isBlank(bean.getOperationLevel()) || "0".equals(bean.getOperationLevel()) || "1".equals(bean.getOperationLevel()) || "2".equals(bean.getOperationLevel())) {
|
|
|
continue;
|
|
|
}
|
|
|
IndicationPushVO indicationPushVO = new IndicationPushVO();
|
|
@@ -299,10 +340,11 @@ public class TestFacade {
|
|
|
item.setName(bean.getOperationName());
|
|
|
operationOrder.add(item);
|
|
|
indicationPushVO.setOperationOrder(operationOrder);
|
|
|
+ indicationPushVO.setMsg(bean.getOperationName());
|
|
|
indicationPushVOList.add(indicationPushVO);
|
|
|
}
|
|
|
|
|
|
- Map<String, Object> map = getDebugMap(indicationPushVOList, "3", start);
|
|
|
+ Map<String, Object> map = getDebugMapMulti(indicationPushVOList, "3", start);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
@@ -490,17 +532,18 @@ public class TestFacade {
|
|
|
IndicationPushVO indicationPushVO = new IndicationPushVO();
|
|
|
indicationPushVO.setRuleType("3");
|
|
|
indicationPushVO.setIdNum(bean.getIdNum());
|
|
|
- List<Drug> drug = new ArrayList<>();
|
|
|
+ List<Drug> drugOrder = new ArrayList<>();
|
|
|
Drug item = new Drug();
|
|
|
item.setUniqueName(bean.getDrugHighRisk());
|
|
|
item.setName(bean.getDrugHighRisk());
|
|
|
item.setForm(bean.getDrugForm());
|
|
|
- drug.add(item);
|
|
|
- indicationPushVO.setDrug(drug);
|
|
|
+ drugOrder.add(item);
|
|
|
+ indicationPushVO.setDrugOrder(drugOrder);
|
|
|
+ indicationPushVO.setMsg(bean.getDrugHighRisk() + bean.getDrugForm());
|
|
|
indicationPushVOList.add(indicationPushVO);
|
|
|
}
|
|
|
|
|
|
- Map<String, Object> map = getDebugMap(indicationPushVOList, "3", start);
|
|
|
+ Map<String, Object> map = getDebugMapMulti(indicationPushVOList, "3", start);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
@@ -546,6 +589,7 @@ public class TestFacade {
|
|
|
lisDetail.add(lisDetailBean);
|
|
|
}
|
|
|
indicationPushVO.setLis(lisDetail);
|
|
|
+ indicationPushVO.setMsg(bean.getCriticalLis());
|
|
|
|
|
|
indicationPushVOList.add(indicationPushVO);
|
|
|
}
|
|
@@ -577,6 +621,7 @@ public class TestFacade {
|
|
|
pacs.setResult(bean.getRuleText());
|
|
|
pacsList.add(pacs);
|
|
|
indicationPushVO.setPacs(pacsList);
|
|
|
+ indicationPushVO.setMsg(bean.getRuleText());
|
|
|
indicationPushVO.setIdNum(bean.getIdNum());
|
|
|
|
|
|
indicationPushVOList.add(indicationPushVO);
|
|
@@ -608,9 +653,9 @@ public class TestFacade {
|
|
|
* @return
|
|
|
*/
|
|
|
public double getValueNum(String[] arr) {
|
|
|
- if ("<".equals(arr[1]) || "≤".equals(arr[1])) {
|
|
|
+ if ("<".equals(arr[1]) || "<".equals(arr[1]) || "≤".equals(arr[1])) {
|
|
|
return Double.parseDouble(arr[2]) - 1;
|
|
|
- } else if (">".equals(arr[1]) || "≥".equals(arr[1])) {
|
|
|
+ } else if (">".equals(arr[1]) || "≥".equals(arr[1]) || ">".equals(arr[1])) {
|
|
|
return Double.parseDouble(arr[2]) + 1;
|
|
|
}
|
|
|
return 0.0;
|
|
@@ -685,12 +730,12 @@ public class TestFacade {
|
|
|
operation.add(item);
|
|
|
}
|
|
|
indicationPushVO.setOperation(operation);*/
|
|
|
- //年龄
|
|
|
+ //年龄
|
|
|
IndicationPushVO indicationPushVOAge = new IndicationPushVO();
|
|
|
String[] split = bean.getAgeAll().split(",");
|
|
|
setname(indicationPushVOAge,bean);
|
|
|
indicationPushVOAge.setAge((int) getValueNum(split));
|
|
|
- indicationPushVOAge.setMsg("年龄:"+operationNameMsg);
|
|
|
+ indicationPushVOAge.setMsg("年龄:"+(int) getValueNum(split)+operationNameMsg);
|
|
|
indicationPushVOAge.setRuleType("3");
|
|
|
indicationPushVOAge.setIdNum(bean.getIdNum());
|
|
|
indicationPushVOList.add(indicationPushVOAge);
|
|
@@ -698,14 +743,19 @@ public class TestFacade {
|
|
|
//体格
|
|
|
String physique = bean.getPhysique();
|
|
|
String[] physiqueStrArray = physique.split(",");
|
|
|
- for (String str : physiqueStrArray) {
|
|
|
+ for (int i = 0;i<physiqueStrArray.length;i++) {
|
|
|
+ String str = physiqueStrArray[i];
|
|
|
+ if(testLineVO.isGetOne()){
|
|
|
+ int sum = getRandomNum(physiqueStrArray.length);
|
|
|
+ str =physiqueStrArray[sum];
|
|
|
+ }
|
|
|
IndicationPushVO indphysiquePushVO = new IndicationPushVO();
|
|
|
setname(indphysiquePushVO,bean);
|
|
|
StringBuffer sbVital = new StringBuffer();
|
|
|
String[] vitalArr = str.split(",");
|
|
|
if (vitalArr.length > 1) {
|
|
|
- if ("收缩压".equals(vitalArr[0]) || "舒张压".equals(vitalArr[0])) {
|
|
|
- if ("收缩压".equals(vitalArr[0])) {
|
|
|
+ if ("收缩压".equals(vitalArr[0].trim()) || "舒张压".equals(vitalArr[0].trim())) {
|
|
|
+ if ("收缩压".equals(vitalArr[0].trim())) {
|
|
|
sbVital.append("血压");
|
|
|
sbVital.append(getValue(vitalArr) + "/100mmHg");
|
|
|
indphysiquePushVO.setIdNum(bean.getIdNum());
|
|
@@ -742,13 +792,21 @@ public class TestFacade {
|
|
|
indphysiquePushVO.setVital(sbVital.toString());
|
|
|
indicationPushVOList.add(indphysiquePushVO);
|
|
|
}
|
|
|
-
|
|
|
+ if(testLineVO.isGetOne()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//化验
|
|
|
String lisAll = bean.getLisAll();
|
|
|
String[] physiquelisAll = lisAll.split(",");
|
|
|
- for (String str : physiquelisAll) {
|
|
|
+ for (int i = 0;i<physiquelisAll.length;i++) {
|
|
|
+
|
|
|
+ String str = physiquelisAll[i];
|
|
|
+ if(testLineVO.isGetOne()){
|
|
|
+ int sum = getRandomNum(physiquelisAll.length);
|
|
|
+ str =physiquelisAll[sum];
|
|
|
+ }
|
|
|
IndicationPushVO indicationPushVOlisList = new IndicationPushVO();
|
|
|
setname(indicationPushVOlisList,bean);
|
|
|
List<Lis> lisList = new ArrayList<>();
|
|
@@ -757,30 +815,33 @@ public class TestFacade {
|
|
|
String[] strArray = str.split(",");
|
|
|
if(strArray.length>2) {
|
|
|
Lis lisBean = new Lis();
|
|
|
- lisBean.setUniqueName(strArray[0]);
|
|
|
- lisBean.setName(strArray[0]);
|
|
|
- lisBean.setDetailName(strArray[0]);
|
|
|
+ lisBean.setUniqueName(strArray[0].trim());
|
|
|
+ lisBean.setName(strArray[0].trim());
|
|
|
+ lisBean.setDetailName(strArray[0].trim());
|
|
|
lisBean.setValue(getValue(strArray));
|
|
|
lisList.add(lisBean);
|
|
|
indicationPushVOlisList.setIdNum(bean.getIdNum());
|
|
|
indicationPushVOlisList.setRuleType("3");
|
|
|
- indicationPushVOlisList.setMsg("化验" + strArray[0] + "==" + operationNameMsg);
|
|
|
+ indicationPushVOlisList.setMsg("化验" + strArray[0].trim() + "==" + operationNameMsg);
|
|
|
indicationPushVOlisList.setLis(lisList);
|
|
|
indicationPushVOList.add(indicationPushVOlisList);
|
|
|
}else {
|
|
|
Lis lisBean = new Lis();
|
|
|
- lisBean.setUniqueName(strArray[0]);
|
|
|
+ lisBean.setUniqueName(strArray[0].trim());
|
|
|
lisBean.setName(strArray[0]);
|
|
|
- lisBean.setDetailName(strArray[0]);
|
|
|
- lisBean.setOtherValue(strArray[1]);
|
|
|
+ lisBean.setDetailName(strArray[0].trim());
|
|
|
+ lisBean.setOtherValue(strArray[1].trim());
|
|
|
lisList.add(lisBean);
|
|
|
indicationPushVOlisList.setIdNum(bean.getIdNum());
|
|
|
indicationPushVOlisList.setRuleType("3");
|
|
|
- indicationPushVOlisList.setMsg("化验:" + strArray[0] + "==" + operationNameMsg);
|
|
|
+ indicationPushVOlisList.setMsg("化验:" + strArray[0].trim() + "==" + operationNameMsg);
|
|
|
indicationPushVOlisList.setLis(lisList);
|
|
|
indicationPushVOList.add(indicationPushVOlisList);
|
|
|
}
|
|
|
}
|
|
|
+ if(testLineVO.isGetOne()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//辅检
|
|
@@ -788,14 +849,20 @@ public class TestFacade {
|
|
|
String[] physiquepacsAll = pacsAll.split(",");
|
|
|
//indicationPushVO.setSymptom(pacsAll);
|
|
|
|
|
|
- for (String pacsStr : physiquepacsAll) {
|
|
|
+ for (int i = 0;i<physiquepacsAll.length;i++) {
|
|
|
+
|
|
|
+ String pacsStr = physiquepacsAll[i];
|
|
|
+ if(testLineVO.isGetOne()){
|
|
|
+ int sum = getRandomNum(physiquepacsAll.length);
|
|
|
+ pacsStr =physiquepacsAll[sum];
|
|
|
+ }
|
|
|
IndicationPushVO indicationPushVOpacs = new IndicationPushVO();
|
|
|
setname(indicationPushVOpacs,bean);
|
|
|
List<Pacs> pacs = new ArrayList<>();
|
|
|
Pacs pacs1 = new Pacs();
|
|
|
pacs1.setUniqueName("腹部CT");
|
|
|
pacs1.setName("腹部CT");
|
|
|
- pacs1.setResult(pacsStr);
|
|
|
+ pacs1.setResult(pacsStr.trim());
|
|
|
pacs.add(pacs1);
|
|
|
indicationPushVOpacs.setIdNum(bean.getIdNum());
|
|
|
indicationPushVOpacs.setRuleType("3");
|
|
@@ -803,32 +870,44 @@ public class TestFacade {
|
|
|
indicationPushVOpacs.setPacs(pacs);
|
|
|
indicationPushVOpacs.setSymptom(pacsAll);
|
|
|
indicationPushVOList.add(indicationPushVOpacs);
|
|
|
+ if(testLineVO.isGetOne()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//诊断"腹部CT"
|
|
|
String disease = bean.getDisease();
|
|
|
String[] physiquedisease = disease.split(",");
|
|
|
|
|
|
- for (String diseaseStr : physiquedisease) {
|
|
|
+ for (int i = 0;i<physiquedisease.length;i++) {
|
|
|
+
|
|
|
+ String diseaseStr = physiquedisease[i];
|
|
|
+ if(testLineVO.isGetOne()){
|
|
|
+ int sum = getRandomNum(physiquelisAll.length);
|
|
|
+ diseaseStr =physiquedisease[sum];
|
|
|
+ }
|
|
|
IndicationPushVO indicationPushVOpacs = new IndicationPushVO();
|
|
|
setname(indicationPushVOpacs,bean);
|
|
|
List<Item> diag = new ArrayList<>();
|
|
|
Item item = new Item();
|
|
|
- item.setUniqueName(diseaseStr);
|
|
|
- item.setName(diseaseStr);
|
|
|
+ item.setUniqueName(diseaseStr.trim());
|
|
|
+ item.setName(diseaseStr.trim());
|
|
|
diag.add(item);
|
|
|
indicationPushVOpacs.setMsg("诊断:"+diseaseStr+"=="+operationNameMsg);
|
|
|
indicationPushVOpacs.setDiag(diag);
|
|
|
indicationPushVOpacs.setIdNum(bean.getIdNum());
|
|
|
indicationPushVOpacs.setRuleType("3");
|
|
|
indicationPushVOList.add(indicationPushVOpacs);
|
|
|
+ if(testLineVO.isGetOne()){
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
//List<Item> operationOrder = new ArrayList<>();
|
|
|
// setname(indicationPushVO,bean);
|
|
|
// indicationPushVOList.add(indicationPushVO);
|
|
|
}
|
|
|
|
|
|
- Map<String, Object> map = getDebugMap(indicationPushVOList, "3", start);
|
|
|
+ Map<String, Object> map = getDebugMapMulti(indicationPushVOList, "3", start);
|
|
|
return map;
|
|
|
}
|
|
|
|
|
@@ -881,12 +960,66 @@ public class TestFacade {
|
|
|
}
|
|
|
map.put("总条数", indicationPushVOList.size() + "条");
|
|
|
map.put("出错条数", msg.size() + "条");
|
|
|
- map.put("出错信息", msg);
|
|
|
- map.put("程序报错", errMsg);
|
|
|
+ if (ListUtil.isNotEmpty(msg)) {
|
|
|
+ map.put("出错信息", msg);
|
|
|
+ }
|
|
|
+ if (ListUtil.isNotEmpty(errMsg)) {
|
|
|
+ map.put("程序报错", errMsg);
|
|
|
+ }
|
|
|
map.put("执行时间", (System.currentTimeMillis() - start) / 1000.0 + "秒");
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 多线程执行
|
|
|
+ *
|
|
|
+ * @param indicationPushVOList
|
|
|
+ * @param start
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public Map getDebugMapMulti(List<IndicationPushVO> indicationPushVOList, String ruleType, long start) {
|
|
|
+ Map<String, Object> map = new LinkedHashMap<>();
|
|
|
+ List<String> errMsg = new ArrayList<>();
|
|
|
+ try {
|
|
|
+ int threadNum = 8; // 推荐的总线程数 = cpu个数 * 每个cpu的核数
|
|
|
+ List<List<IndicationPushVO>> threadData = divideByCopies(indicationPushVOList, threadNum);
|
|
|
+ List<Future<Map>> list = new ArrayList<>();
|
|
|
+
|
|
|
+ ExecutorService executor = Executors.newFixedThreadPool(threadNum);
|
|
|
+ for (int i = 0; i < threadNum; i++) {
|
|
|
+ final int index = i; // 这一行代码很重要,如果使用成员变量,下面会报错
|
|
|
+ Future<Map> future = executor.submit(new Callable<Map>() {
|
|
|
+ @Override
|
|
|
+ public Map call() {
|
|
|
+ List<IndicationPushVO> data = threadData.get(index);
|
|
|
+ return getDebugMap(data, ruleType, start);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ list.add(future);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 拼接返回数据
|
|
|
+ for (int i = 0; i < list.size(); i++) {
|
|
|
+ Future<Map> future = list.get(i);
|
|
|
+ while(!future.isDone()); // 这一行代码很重要
|
|
|
+ List<String> obj = (List<String>)future.get().get("出错信息");
|
|
|
+ if (ListUtil.isNotEmpty(obj)) {
|
|
|
+ errMsg.addAll(obj);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ map.put("总条数", indicationPushVOList.size() + "条");
|
|
|
+ map.put("出错条数", errMsg.size() + "条");
|
|
|
+ if (ListUtil.isNotEmpty(errMsg)) {
|
|
|
+ map.put("出错信息", errMsg);
|
|
|
+ }
|
|
|
+ Long t2 = System.currentTimeMillis();
|
|
|
+ map.put("执行时间", (t2 - start) / 1000.0 + "秒");
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "多线程执行高风险手术复杂情况失败:" + e.getMessage());
|
|
|
+ }
|
|
|
+ return map;
|
|
|
+ }
|
|
|
+
|
|
|
public void setname(IndicationPushVO indicationPushVO, TestIndicationVO bean) {
|
|
|
List<Item> operationOrder = new ArrayList<>();
|
|
|
Item item = new Item();
|
|
@@ -896,29 +1029,44 @@ public class TestFacade {
|
|
|
indicationPushVO.setOperationOrder(operationOrder);
|
|
|
}
|
|
|
|
|
|
- public Map testAll() {
|
|
|
+ public Map testAll(TestAllVO testAllVO) {
|
|
|
+ if (StringUtil.isBlank(testAllVO.getPath())) {
|
|
|
+ throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "参数为空,未填写【文件所在路径】");
|
|
|
+ }
|
|
|
+ long start = System.currentTimeMillis();
|
|
|
+ String path = testAllVO.getPath();
|
|
|
Map<String, Object> map = new LinkedHashMap<>();
|
|
|
- String picPathLis ="D:\\newSVN\\2020新版CDSS\\05.其他资料\\数据\\【危急值_化验】.xlsx";
|
|
|
- String picPathPacs ="D:\\newSVN\\2020新版CDSS\\05.其他资料\\数据\\【危急值_辅检】.xls";
|
|
|
- MultipartFile file = null;
|
|
|
+ Map<String, Object> paramMap = new LinkedHashMap<>();
|
|
|
+ Map<String, String> mapPath = new LinkedHashMap<>();
|
|
|
+ mapPath.put("【危急值_化验】", path + File.separator + "【危急值_化验】.xlsx");
|
|
|
+ mapPath.put("【危急值_辅检】", path + File.separator + "【危急值_辅检】.xls");
|
|
|
+ mapPath.put("【其他值提醒_化验】", path + File.separator + "【其他值提醒_化验】.xlsx");
|
|
|
+ mapPath.put("【其他值提醒_辅检】", path + File.separator + "【其他值提醒_辅检】.xlsx");
|
|
|
+ mapPath.put("【其他值提醒_输血】", path + File.separator + "【其他值提醒_输血】.xlsx");
|
|
|
+ mapPath.put("【高危药品】", path + File.separator + "【高危药品】.xlsx");
|
|
|
+ mapPath.put("【高危手术】", path + File.separator + "【高危手术】.xlsx");
|
|
|
+ mapPath.put("【开单合理性】", path + File.separator + "【开单合理性】.xlsx");
|
|
|
+ mapPath.put("【开单合理性_输血】", path + File.separator + "【开单合理性_输血】.xlsx");
|
|
|
+ paramMap.put("mapPath", mapPath);
|
|
|
|
|
|
- file = getMulFileByPath(picPathLis);
|
|
|
- Map<String, Object> criticalMapLis = importCriticalLisExcel(file, new TestLineVO());
|
|
|
- map.put("【危急值_化验】",criticalMapLis);
|
|
|
+ try {
|
|
|
+ map = DataFacade.get("testAll", paramMap, Map.class);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ throw new CommonException(CommonErrorCode.SERVER_IS_ERROR, "提醒类服务出错" + e.getMessage());
|
|
|
+ }
|
|
|
|
|
|
- file = getMulFileByPath(picPathPacs);
|
|
|
- Map<String, Object> criticalMapPacs = importCriticalPacsExcel(file, new TestLineVO());
|
|
|
- map.put("【危急值_辅检】",criticalMapPacs);
|
|
|
+ map.put("总耗时", (System.currentTimeMillis() - start) / 1000.0 + "秒");
|
|
|
return map;
|
|
|
}
|
|
|
|
|
|
- private MultipartFile getMulFileByPath(String picPath) {
|
|
|
+ public MultipartFile getMulFileByPath(String picPath) {
|
|
|
FileItem fileItem = createFileItem(picPath);
|
|
|
MultipartFile mfile = new CommonsMultipartFile(fileItem);
|
|
|
return mfile;
|
|
|
}
|
|
|
|
|
|
- private FileItem createFileItem(String filePath) {
|
|
|
+ public FileItem createFileItem(String filePath) {
|
|
|
FileItemFactory factory = new DiskFileItemFactory(16, null);
|
|
|
String textFieldName = "textField";
|
|
|
int num = filePath.lastIndexOf(".");
|
|
@@ -946,4 +1094,36 @@ public class TestFacade {
|
|
|
}
|
|
|
return item;
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 随机获取0—size之间的一个数值
|
|
|
+ * @param size
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public int getRandomNum(int size) {
|
|
|
+ return (int)(Math.random() * size);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 将列表按列表总长度划分
|
|
|
+ *
|
|
|
+ * @param originList 数据
|
|
|
+ * @param num 份数
|
|
|
+ * @param <T>
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public <T> List<List<T>> divideByCopies(List<T> originList, int num) {
|
|
|
+ List<List<T>> list = new ArrayList<>();
|
|
|
+ if (ListUtil.isEmpty(originList) || num < 0) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < num; i++) {
|
|
|
+ list.add(new ArrayList<T>());
|
|
|
+ }
|
|
|
+ for (int i = 0; i < originList.size(); i++) {
|
|
|
+ list.get(i % num).add(originList.get(i));
|
|
|
+ }
|
|
|
+
|
|
|
+ return list;
|
|
|
+ }
|
|
|
}
|