主业务添加代码

This commit is contained in:
tangw 2025-08-15 19:57:36 +08:00
parent 9a2de7f386
commit dfc791c3ab
12 changed files with 485 additions and 30 deletions

View File

@ -73,9 +73,11 @@ public class LabPat extends BaseEntity {
private String wyh; private String wyh;
private Integer shcs; private Integer shcs;
private String lstd; private String lstd;
private String slzq;
private String checker;
private String autojgbz;
private String faultman;
private String fault;
private String faults;
private Date faultdt;
} }

View File

@ -37,4 +37,6 @@ public class LabResult extends BaseEntity {
private String redoFlag; private String redoFlag;
private String sqxmdh; private String sqxmdh;
private String xmmc; private String xmmc;
private String ygzd;
private String ygzq;
} }

View File

@ -0,0 +1,66 @@
package com.czlis.common.core.domain.entity.lis;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class XmInfo {
private String yq;
private String xmdh;
private String xmmc;
private String zhbdh;
private String bgdh;
private Double cksx;
private Double ckxx;
private String dyckz;
private String dylx;
private Integer dyxh;
private String zjf;
private String xmlb;
private Double xs;
private Integer xsws;
private String mrz;
private Double jg;
private Double cb;
private String dw;
private String jsxm;
private String jsgs;
private String zkxm;
private Double sjx;
private Double xjx;
private String ygxb;
private String ygnl;
private String ygbb;
private String lcyy;
private String jgbz;
private Integer jgjg;
private Double jgz;
private String csff;
private String yymc;
private Integer fzdyxh;
private String clinicref;
private Double llimit;
private Double hlimit;
private Double xsbs;
private Double redoxx;
private Double redosx;
private String qcuselog;
private String qcusepos;
private String itemclass;
private String whocode;
private String germflag;
private Double qccv;
private String qcvs;
private String knowledge;
private String ygzq;
private String ygzd;
private String uflag;
private String val2;
private Integer id;
private String val1;
private String germclass;
}

View File

@ -1,32 +1,33 @@
package com.czlis.common.core.domain.entity.lis; package com.czlis.common.core.domain.entity.lis;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
public class XmRef { public class XmRef {
private Integer xmid;
private String xmdh; private String yq;
private Integer xh; private String xmdh;
private String xb; private Integer xh;
private BigDecimal nl1; private String xb;
private BigDecimal nl2; private Double nl1;
private String bblx; private Double nl2;
private BigDecimal cksx; private String bblx;
private BigDecimal ckxx; private Double cksx;
private String dyck; private Double ckxx;
private String nldw; private String dyck;
private BigDecimal redoxx; private String nldw;
private BigDecimal redosx; private Double redoxx;
private BigDecimal alterxx; private Double redosx;
private BigDecimal altersx; private Double alterxx;
private String slzq; private Double altersx;
private String zd; private String slzq;
private String instrid; private String zd;
private String yq;
} }

View File

@ -0,0 +1,11 @@
package com.czlis.interfaceCommon.mapper;
import com.czlis.common.core.domain.entity.lis.XmInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface XmInfoMapper {
List<XmInfo> getXmInfoList(String yq);
XmInfo getXmInfo(@Param("yq")String yq, @Param("xmdh")String xmdh);
}

View File

@ -0,0 +1,13 @@
package com.czlis.interfaceCommon.mapper;
import com.czlis.common.core.domain.entity.lis.XmRef;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface XmRefMapper {
List<XmRef> getXmRefList(String yq);
XmRef getXmRef(@Param("yq")String yq, @Param("xmdh")String xmdh);
XmRef getXmRefValue(Map<String,Object> map);
}

View File

@ -34,6 +34,10 @@ public class CommonUtil {
ComUsrMapper comUsrMapper; ComUsrMapper comUsrMapper;
@Autowired @Autowired
ComUsrpowerMapper comUsrpowerMapper; ComUsrpowerMapper comUsrpowerMapper;
@Autowired
XmInfoMapper xmInfoMapper;
@Autowired
XmRefMapper xmRefMapper;
//====检验主表操作方法集合=== //====检验主表操作方法集合===
public LabPat getLabPatOne(Date jyrq, String yq, String ybh){ public LabPat getLabPatOne(Date jyrq, String yq, String ybh){
@ -65,9 +69,12 @@ public class CommonUtil {
public int delLabResult(LabResult labResult) {return labResultMapper.delLabResult(labResult);} public int delLabResult(LabResult labResult) {return labResultMapper.delLabResult(labResult);}
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public int updateLabResult(LabResult labResult) {return labResultMapper.updateLabResult(labResult);} public int updateLabResult(LabResult labResult) {return labResultMapper.updateLabResult(labResult);}
//=====项目字典查询=========
public List<XmInfo> getXmInfoList(String yq) {return xmInfoMapper.getXmInfoList(yq);}
public XmInfo getXmInfo(String yq,String xmdh) {return xmInfoMapper.getXmInfo(yq,xmdh);}
public List<XmRef> getXmRefList(String yq) {return xmRefMapper.getXmRefList(yq);}
public XmRef getXmRef(String yq,String xmdh) {return xmRefMapper.getXmRef(yq,xmdh);}
public XmRef getXmRefValue(Map<String,Object> map) {return xmRefMapper.getXmRefValue(map);}
//服务器时间方法 //服务器时间方法
public Date getCurrentTime(){return commonMapper.getCurrentTime();} public Date getCurrentTime(){return commonMapper.getCurrentTime();}
public String getCurrentDate(){return DateFormatUtils.format(commonMapper.getCurrentTime(), "yyyy-MM-dd");} public String getCurrentDate(){return DateFormatUtils.format(commonMapper.getCurrentTime(), "yyyy-MM-dd");}

View File

@ -68,4 +68,139 @@ public class LisUtil {
return result.toString(); return result.toString();
} }
/**
* 使用正则表达式判断字符串是否为数字
* 支持:整数(123)、小数(123.45)、正负号(-123、+45.6)
*/
public static boolean isNumber(String str) {
if (str == null || str.trim().isEmpty()) {
return false;
}
// 正则表达式:匹配正负整数、正负小数
String regex = "^[+-]?([0-9]+(\\.[0-9]*)?|\\.[0-9]+)$";
return str.matches(regex);
}
/**
* 使用正则表达式判断字符串是否为数字
* 支持:整数(123)、小数(123.45),不包括带正负号的情况
*/
public static boolean isTureNumber(String str) {
if (str == null || str.trim().isEmpty()) {
return false;
}
// 正则表达式:仅匹配正整数、正小数(不包含正负号)
// 说明:
// ^[0-9]+(\.[0-9]*)?$ 匹配整数(如123)或带整数部分的小数(如123.45)
// |\.([0-9]+)$ 匹配纯小数(如.67)
String regex = "^[0-9]+(\\.[0-9]*)?|\\.[0-9]+$";
return str.matches(regex);
}
/**
* 将包含比较运算符的字符串转换为特定格式的数值字符串
* 不支持的格式或非数字内容将返回原值
* @param input 输入字符串,如">=123", ">123", "<=123", "<123"
* @return 转换后的字符串或原值
*/
public static String getOverNumber(String input) {
// 输入为空时返回原值
if (input == null || input.trim().isEmpty()) {
return input;
}
// 定义支持的运算符,按长度排序以便正确识别(先长后短)
String[] operators = {">=", "<=", ">", "<"};
String operator = null;
String numberPart = null;
// 识别运算符和数字部分
for (String op : operators) {
if (input.startsWith(op)) {
operator = op;
numberPart = input.substring(op.length());
break;
}
}
// 未识别到支持的运算符,返回原值
if (operator == null) {
return input;
}
// 尝试将数字部分转换为double
double number;
try {
number = Double.parseDouble(numberPart);
} catch (NumberFormatException e) {
// 数字部分格式不正确,返回原值
return input;
}
// 根据运算符进行转换
switch (operator) {
case ">=":
case ">":
return String.format("%.4f", number + 0.0001);
case "<=":
case "<":
return String.format("%.4f", number - 0.0001);
default:
return input;
}
}
/**
* 保留指定小数位数
* 支持比较符号(<=、>=、<、>)和负号(-)同时存在的情况
* @param input 输入字符串,如"123.1234"、">123.252"、"<=123.252"、"-45.67"、">=-89.01"
* @param decimalPlaces 要保留的小数位数,需为非负整数
* @return 格式化后的字符串,无法处理时返回原值
*/
public static String round(String input, int decimalPlaces) {
// 处理空输入或无效小数位数
if (input == null || input.trim().isEmpty() || decimalPlaces < 0) {
return input;
}
// 定义比较运算符前缀(按长度排序,确保正确识别)
String[] comparisonPrefixes = {"<=", ">=", "<", ">"};
String comparisonPrefix = "";
String remainingPart = input;
// 提取比较运算符前缀
for (String prefix : comparisonPrefixes) {
if (remainingPart.startsWith(prefix)) {
comparisonPrefix = prefix;
remainingPart = remainingPart.substring(prefix.length());
break;
}
}
// 尝试解析剩余部分为数字
try {
// 解析数字(包含可能的负号)
double number = Double.parseDouble(remainingPart);
// 创建格式化模式(整数部分至少1位,小数部分固定位数)
StringBuilder formatPattern = new StringBuilder();
formatPattern.append("0");
if (decimalPlaces > 0) {
formatPattern.append(".");
// 循环添加指定数量的0
for (int i = 0; i < decimalPlaces; i++) {
formatPattern.append("0");
}
}
// 格式化数字并拼接比较前缀
String formattedNumber = String.format(
"%s%s",
comparisonPrefix,
String.format(formatPattern.toString(), number)
);
return formattedNumber;
} catch (NumberFormatException e) {
// 数字部分无法解析时返回原值
return input;
}
}
} }

View File

@ -22,7 +22,7 @@
<select id="getLabResultList" parameterType="com.czlis.common.core.domain.entity.lis.LabResult" resultType="com.czlis.common.core.domain.entity.lis.LabResult"> <select id="getLabResultList" parameterType="com.czlis.common.core.domain.entity.lis.LabResult" resultType="com.czlis.common.core.domain.entity.lis.LabResult">
select select
lab_result.jyrq, lab_result.yq, lab_result.ybh, lab_result.xmdh, wyh, csjg, od, cutoff, lab_result.jgbz, bz1, bz2, yhdh, instrid, operdt, lab_result.jyrq, lab_result.yq, lab_result.ybh, lab_result.xmdh, wyh, csjg, od, cutoff, lab_result.jgbz, bz1, bz2, yhdh, instrid, operdt,
operna, refs, flag, lab_result.dw, result_flag, alarm_flag, redo_flag, sqxmdh, redo_text,xm_info.xmmc operna, refs, flag, lab_result.dw, result_flag, alarm_flag, redo_flag, sqxmdh, redo_text,xm_info.xmmc,xm_info.ygzq,xm_info.ygzd
,textresult ,textresult
from lab_result join xm_info on xm_info.yq=lab_result.yq and xm_info.xmdh=lab_result.xmdh from lab_result join xm_info on xm_info.yq=lab_result.yq and xm_info.xmdh=lab_result.xmdh
<where> <where>

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czlis.interfaceCommon.mapper.XmInfoMapper">
<select id="getXmInfoList" resultType="com.czlis.common.core.domain.entity.lis.XmInfo">
select * from xm_info where yq=#{yq}
</select>
<select id="getXmInfo" resultType="com.czlis.common.core.domain.entity.lis.XmInfo">
select * from xm_info where yq = #{yq} and xmdh = #{xmdh}
</select>
</mapper>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czlis.interfaceCommon.mapper.XmRefMapper">
<select id="getXmRefList" resultType="com.czlis.common.core.domain.entity.lis.XmRef">
select * from xm_ref where yq=#{yq}
</select>
<select id="getXmRef" resultType="com.czlis.common.core.domain.entity.lis.XmRef">
select * from xm_ref where yq = #{yq} and xmdh = #{xmdh}
</select>
<select id="getXmRefValue" resultType="com.czlis.common.core.domain.entity.lis.XmRef">
select TOP 1 * from xm_ref
<where>
<if test="yq != null and yq != ''">
and yq = #{yq}
</if>
<if test="xmdh != null and xmdh != ''">
and xmdh = #{xmdh}
</if>
<if test="bbtype != null and bbtype != ''">
and bblx = #{bbtype}
</if>
<if test="sex != null and sex != ''">
and xb = #{sex}
</if>
<if test="age != null and age != 0">
and nl2 >= #{age} and #{age}>=nl1
</if>
<if test="zd != null ">
and (isnull(zd,'') = #{zd} or (isnull(zd,'') != #{zd} and isnull(zd,'')=''))
</if>
<if test="slzq != null ">
and (isnull(slzq,'') = #{slzq} or (isnull(slzq,'') != #{slzq} and isnull(slzq,'')=''))
</if>
</where>
</select>
</mapper>

View File

@ -381,8 +381,172 @@ public class LisWorkOperServiceImpl implements LisWorkOperService {
* @return 返回值0正常,1有危急值明细存在 * @return 返回值0正常,1有危急值明细存在
*/ */
private int saverefs(Date jyrq, String yq, String ybh,LabPat labPat){ private int saverefs(Date jyrq, String yq, String ybh,LabPat labPat){
String yqdl=lisWorkOperMapper.selectYqdl(yq);
boolean lb_setbj=true,lb_wjz=false;
if(!"细菌仪".equals(yqdl)) {
Map<String, Object> map = new HashMap<>();
map.put("jyrq", jyrq);
map.put("yq", yq);
map.put("ybh", ybh);
map.put("settype", "1");
map.put("retcode", "");
map.put("retmsg", "");
lisWorkOperMapper.sp_setrefs(map);
String retCode = String.valueOf(map.get("retcode"));
String retMsg = String.valueOf(map.get("retmsg"));
log.info("调用存储过程{}返回值:{},{}", "sp_setrefs", retCode, retMsg);
if (retCode == null || "".equals(retCode) || "-1".equals(retCode)) lb_setbj=false;
List<LabResult> labResultList=commonUtil.getLabResultList(jyrq, yq, ybh);
for (LabResult labResult : labResultList) {
String csjg=labResult.getCsjg();
boolean lb_nummode=LisUtil.isTureNumber(csjg);
String ygzq = labResult.getYgzq();
String ygzd = labResult.getYgzd();
//当结果为数值并且与周期诊断无关,计算存储过程保存成功后,只进行危急值判断
if(lb_nummode && lb_setbj && !"Y".equals(ygzd) && !"Y".equals(ygzq)){
int wjz=alarmcondition(jyrq, yq, ybh, labPat,labResult);
if(wjz==1)lb_wjz=true;
}else {
int wjz = setrefs(jyrq, yq, ybh, labPat, labResult);
if (wjz == 1) lb_wjz = true;
}
}
if(lb_wjz){
//危急值处理过程
}
}
return 0; return 0;
} }
/**
* 明细结果计算参考值异常标志危急值标志并更新
* @param jyrq
* @param yq
* @param ybh
* @param labPat
* @param labResult
* @return
*/
private int setrefs(Date jyrq, String yq, String ybh,LabPat labPat,LabResult labResult){
String resultflag="M",wjzflag="";
int wjz=0;
String xmdh=labResult.getXmdh();
String csjg=labResult.getCsjg();
if (csjg == null || csjg.trim().isEmpty()) return 0;
String csjgnew=LisUtil.getOverNumber(csjg.trim());
boolean lb_nummode=LisUtil.isNumber(csjgnew);
//当结果为数值时计算上下限
if(lb_nummode) {
XmInfo xmInfo = commonUtil.getXmInfo(yq, xmdh);
String dw = xmInfo.getDw();
String refs = xmInfo.getDyckz();
Double ckxx = xmInfo.getCkxx();
Double cksx = xmInfo.getCksx();
Double llimit=xmInfo.getLlimit();
Double hlimit=xmInfo.getHlimit();
String ygxb = xmInfo.getYgxb();
String ygnl = xmInfo.getYgnl();
String ygbb = xmInfo.getYgbb();
String ygzq = xmInfo.getYgzq();
String ygzd = xmInfo.getYgzd();
String sex = "";
if ("Y".equals(ygxb)) {
sex = labPat.getBrxb().trim();
if (sex == null) sex = "";
}
String yblx = "";
if ("Y".equals(ygbb)) {
yblx = labPat.getYblx();
String bb = commonUtil.getComDictIdByName("BT", yblx);
if (bb != null && !bb.trim().isEmpty()) yblx = bb;
}
String zd = "";
if ("Y".equals(ygzd)) {
zd = labPat.getZd();
String icd10 = commonUtil.getComDictIdByName("ICD10", zd);
if (icd10 != null && !icd10.trim().isEmpty()) zd = icd10;
}
String slzq = "";
if ("Y".equals(ygzq)) {
slzq = labPat.getSlzq();
String zq = commonUtil.getComDictIdByName("SLZQ", slzq);
if (zq != null && !zq.trim().isEmpty()) slzq = zq;
}
double age = 0;
if ("Y".equals(ygnl)) {
age = AgeUtils.getDecimalAge(AgeUtils.getBirthDateByAge(labPat.getNl(), labPat.getNldw()));
}
XmRef xmRef = new XmRef();
if ("Y".equals(ygxb) || "Y".equals(ygbb) || "Y".equals(ygnl) || "Y".equals(ygzd) || "Y".equals(ygzq)) {
Map<String, Object> map = new HashMap<>();
map.put("yq", yblx);
map.put("xmdh", sex);
map.put("bbtype", yblx);
map.put("sex", sex);
map.put("age", age);
map.put("zd", zd);
map.put("slzq", slzq);
xmRef = commonUtil.getXmRefValue(map);
}
if(xmRef !=null){
ckxx=xmRef.getCkxx();
cksx=xmRef.getCksx();
refs=xmRef.getDyck();
Double alterxx=xmRef.getAlterxx();
Double altersx=xmRef.getAltersx();
if(alterxx != null)llimit=alterxx;
if(altersx != null)hlimit=altersx;
}
if(lb_nummode){
//数值型结果判断
Double csjgnum = Double.valueOf(csjgnew);
if(ckxx != null)if(csjgnum<ckxx)resultflag="L";
if(cksx != null)if(csjgnum>cksx)resultflag="H";
int wjzf=alarmcondition(jyrq, yq, ybh, labPat,labResult);
if(wjzf==-1) {
if(llimit != null)if(csjgnum<llimit)wjzflag="L";
if(hlimit != null)if(csjgnum>hlimit)wjzflag="H";
}else if(wjzf==1) {
wjzflag=resultflag;
}
if(!"".equals(wjzflag))wjz=1;
}else{
//文字型结果判断
String jgbzold=labResult.getJgbz();
String lmtflag ="";//commonUtil.getitemlmtflag(yq,xmdh,csjg);
if("P".equals(jgbzold) && (csjg.indexOf("阳")>=0 || csjg.indexOf("+")>=0 || csjg.indexOf(":")>=0 ) && (lmtflag == null || lmtflag.trim().isEmpty())) lmtflag="P";
resultflag=lmtflag;
if("J".equals(lmtflag))wjzflag="H";
int wjzf=alarmcondition(jyrq, yq, ybh, labPat,labResult);
if(wjzf==1) {
wjzflag="H";
}
}
//小数保留位数计算
Integer xsws= xmInfo.getXsws();
if(xsws>=0) csjg=LisUtil.round(csjg,xsws);
labResult.setCsjg(csjg);
labResult.setDw(dw);
labResult.setRefs(refs);
labResult.setResultFlag(resultflag);
labResult.setJgbz(resultflag);
labResult.setAlarmFlag(wjzflag);
commonUtil.updateLabResult(labResult);
}
return wjz;
}
/**
*特定条件危急值判断
* @param jyrq
* @param yq
* @param ybh
* @param labPat
* @param labResult
* @return
*/
private int alarmcondition(Date jyrq, String yq, String ybh,LabPat labPat,LabResult labResult){
return 0;
}
} }