From 8ed023cbf82991f7370d799b704e8410d11f55de Mon Sep 17 00:00:00 2001 From: tangw Date: Fri, 7 Nov 2025 18:50:15 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E7=A8=8B=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interfaceCommon/utils/CalcUtils.java | 114 ++++++++++++++++-- 1 file changed, 106 insertions(+), 8 deletions(-) diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CalcUtils.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CalcUtils.java index 8ed9e6c..3db6d36 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CalcUtils.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/CalcUtils.java @@ -1,14 +1,17 @@ package com.czlis.interfaceCommon.utils; +import com.czlis.common.core.domain.entity.lis.LabPat; +import com.czlis.common.core.domain.entity.lis.LabResult; +import com.czlis.common.core.domain.entity.lis.XmCalc; +import com.czlis.common.core.domain.entity.lis.XmInfo; import org.springframework.expression.Expression; import org.springframework.expression.ExpressionParser; import org.springframework.expression.spel.standard.SpelExpressionParser; import org.springframework.expression.spel.support.StandardEvaluationContext; -import java.util.HashMap; -import java.util.Map; -import java.util.Stack; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.stream.Collectors; public class CalcUtils { /** @@ -19,6 +22,14 @@ public class CalcUtils { * @return */ public static String getValueFromCalc(String CalcExpression, Map variableMap,String def) { + Map refmap=getValueFromCalcbase(CalcExpression,variableMap); + if("-1".equals(refmap.get("code")))return def; + return refmap.get("msg"); + } + public static Map getValueFromCalcbase(String CalcExpression, Map variableMap) { + Map refmap = new HashMap<>(); + refmap.put("code","0"); + refmap.put("msg",""); ExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(); variableMap=replaceAllSpecialKeys(variableMap); @@ -38,7 +49,7 @@ public class CalcUtils { // 安全转换为String if (result == null) { - return ""; // 空值返回空字符串(或根据业务返回null) + return refmap; // 空值返回空字符串(或根据业务返回null) } // 特殊处理数字类型,避免科学计数法(如1000000.0 → "1000000") @@ -46,18 +57,23 @@ public class CalcUtils { Number num = (Number) result; // 判断是否为整数(无小数部分) if (num.doubleValue() == Math.floor(num.doubleValue())) { - return String.valueOf(num.longValue()); + refmap.put("msg",String.valueOf(num.longValue())); + return refmap; } else { - return String.valueOf(num.doubleValue()); + refmap.put("msg",String.valueOf(num.doubleValue())); + return refmap; } } // 其他类型直接调用toString() - return result.toString(); + refmap.put("msg",result.toString()); + return refmap; } catch (Exception e) { //throw new RuntimeException("表达式计算失败: " + expression, e); - return def; + refmap.put("code","-1"); + refmap.put("msg",e.getMessage()); + return refmap; } } public static boolean getnumbervalue(String keyname) { @@ -381,6 +397,88 @@ public class CalcUtils { return str.matches(regex); } + /** + * 计算公式校验方法 + * @param CalcExpression 公式内容 + * @param Calctype 校验种类(1:计算项目,2:特定危急值,3:审核条件,4:其他PB公式) + * @return 返回值map->code=0成功code=-1失败,msg为失败原因 + */ + public static Map checkcalc(String CalcExpression,String Calctype) { + Map variables = new HashMap<>(); + String[] parameters = CalcUtils.getParameters(CalcExpression); + if("1".equals(Calctype)) { + for (String itemcode : parameters) { + if ("SEX".equals(itemcode)) { + variables.put("SEX", "1"); + } else if ("AGE".equals(itemcode)) { + variables.put("AGE", "25"); + } else { + variables.put(itemcode, "2.2"); + } + } + return getValueFromCalcbase(CalcExpression, variables); + } + if("2".equals(Calctype)) { + variables.put("CB", "1"); + variables.put("DEPT", "内科"); + variables.put("DIAG", "无"); + variables.put("YBZT", "无"); + variables.put("RESULT", "12.3"); + return getValueFromCalcbase(CalcExpression, variables); + } + if("3".equals(Calctype)) { + for (String itemcode : parameters) { + switch (itemcode) { + case "SEX": + variables.put(itemcode, "1"); + break; + case "AGE": + variables.put(itemcode,"1.1"); + break; + case "BRLY": + variables.put(itemcode, "1"); + break; + case "KSDH": + variables.put(itemcode, "111"); + break; + case "YBLX": + variables.put(itemcode, "血"); + break; + case "BZ": + variables.put(itemcode, "aaa"); + break; + case "ZD": + variables.put(itemcode, "aaa"); + break; + case "ANY_NUMER": + variables.put(itemcode, "1.1"); + break; + case "ANY_TEXT": + variables.put(itemcode, "aaa"); + break; + case "ANY_CRI": + variables.put(itemcode, "H"); + break; + case "ANY_REV": + variables.put(itemcode, "1"); + break; + case "ANY_JGBZ": + variables.put(itemcode, "H"); + break; + case "ANY_ID": + variables.put(itemcode, "WBC"); + break; + default: + variables.put(itemcode, "1.1"); + } + } + return getValueFromCalcbase(CalcExpression, variables); + } + Map refmap = new HashMap<>(); + refmap.put("code","0"); + refmap.put("msg",""); + return refmap; + } // 测试 public static void main(String[] args) { Map variables = new HashMap<>();