diff --git a/lis-common/src/main/java/com/czlis/common/core/domain/entity/SysLoginParam.java b/lis-common/src/main/java/com/czlis/common/core/domain/entity/SysLoginParam.java index 93529f5..bb45076 100644 --- a/lis-common/src/main/java/com/czlis/common/core/domain/entity/SysLoginParam.java +++ b/lis-common/src/main/java/com/czlis/common/core/domain/entity/SysLoginParam.java @@ -1,17 +1,22 @@ package com.czlis.common.core.domain.entity; +import com.czlis.common.core.domain.entity.lis.LabInputcol; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.util.List; + /** - * 登录配置类 + * 登录系统产生的临床性全局参数 + * 除登录用户属性本身基本参数外的都放到此处存放 + * 支持动态变更,该登录用户的所有会话都共享此处变量 */ @Data @AllArgsConstructor @NoArgsConstructor public class SysLoginParam { - + //1.全局参数 /** * 登录的医疗机构 */ @@ -20,10 +25,16 @@ public class SysLoginParam { * 客户端唯一标识 */ private String localid; + //2.标本录入场景 /** - * 默认仪器 + * 记忆当前仪器,自动记忆参数在当前仪器与记忆仪器不同时,清除自动记忆临床参数 */ - private String default_instr; - - + private String current_instrid; + /**保存自动记忆的字段实时值**/ + private List current_labInputcol; + //单独处理临时自动记忆字段 + private String current_hdys_sybh; + private String current_hdys_eybh; + private String current_yhdh_sybh; + private String current_yhdh_eybh; } diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/EntityUtils.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/EntityUtils.java new file mode 100644 index 0000000..3b859f3 --- /dev/null +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/EntityUtils.java @@ -0,0 +1,204 @@ +package com.czlis.interfaceCommon.utils; + +import java.lang.reflect.Method; +import java.util.Date; + +/** + * 实体类操作工具类 + * 提供动态设置和获取字段值的公共方法 + */ +public class EntityUtils { + /** + * 动态设置对象的字段值 + * @param entity 实体对象 + * @param fieldName 字段名 + * @param value 要设置的值 + */ + public static void setItem(Object entity, String fieldName, Object value) { + if (entity == null) { + System.out.println("错误:实体对象为空"); + return; + } + if (fieldName == null || fieldName.trim().isEmpty()) { + System.out.println("错误:字段名为空"); + return; + } + + try { + // 构建setter方法名 + String methodName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); + + // 处理值类型 + Class valueClass = value != null ? value.getClass() : null; + + // 处理基本类型包装类 + if (valueClass == Integer.class) { + valueClass = int.class; + } else if (valueClass == Boolean.class) { + valueClass = boolean.class; + } else if (valueClass == Long.class) { + valueClass = long.class; + } else if (valueClass == Double.class) { + valueClass = double.class; + } + + // 获取并调用方法 + Method method = entity.getClass().getMethod(methodName, valueClass); + method.invoke(entity, value); + } catch (NoSuchMethodException e) { + System.out.println("未找到set方法:" + fieldName); + } catch (Exception e) { + System.out.println("设置字段值出错,字段名:" + fieldName + ",错误信息:" + e.getMessage()); + } + } + /** + * 动态获取对象的字段值 + * @param entity 实体对象 + * @param fieldName 字段名 + * @return 字段值(需要根据实际类型强转) + */ + public static Object getItem(Object entity, String fieldName) { + if (entity == null) { + System.out.println("错误:实体对象为空"); + return null; + } + if (fieldName == null || fieldName.trim().isEmpty()) { + System.out.println("错误:字段名为空"); + return null; + } + + try { + // 构建getter方法名 + String methodName = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); + + // 对于boolean类型,getter方法可能以is开头 + if (!hasMethod(entity.getClass(), methodName)) { + methodName = "is" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1); + } + + // 调用getter方法并返回结果 + Method method = entity.getClass().getMethod(methodName); + return method.invoke(entity); + } catch (NoSuchMethodException e) { + System.out.println("未找到get方法:" + fieldName); + } catch (Exception e) { + System.out.println("获取字段值出错,字段名:" + fieldName + ",错误信息:" + e.getMessage()); + } + return null; + } + /** + * 获取字符串类型字段值 + */ + public static String getItemString(Object entity, String fieldName) { + Object value = getItem(entity, fieldName); + return value != null ? value.toString() : null; + } + /** + * 获取整数类型字段值 + */ + public static Integer getItemInteger(Object entity, String fieldName) { + Object value = getItem(entity, fieldName); + if (value == null) { + return null; + } + + try { + if (value instanceof Number) { + return ((Number) value).intValue(); + } else if (value instanceof String) { + return Integer.parseInt((String) value); + } + } catch (NumberFormatException e) { + System.out.println("字段" + fieldName + "转换为Integer失败:" + e.getMessage()); + } + return null; + } + /** + * 获取长整数类型字段值 + */ + public static Long getItemLong(Object entity, String fieldName) { + Object value = getItem(entity, fieldName); + if (value == null) { + return null; + } + + try { + if (value instanceof Number) { + return ((Number) value).longValue(); + } else if (value instanceof String) { + return Long.parseLong((String) value); + } + } catch (NumberFormatException e) { + System.out.println("字段" + fieldName + "转换为Long失败:" + e.getMessage()); + } + return null; + } + /** + * 获取双精度浮点类型字段值 + */ + public static Double getItemDouble(Object entity, String fieldName) { + Object value = getItem(entity, fieldName); + if (value == null) { + return null; + } + + try { + if (value instanceof Number) { + return ((Number) value).doubleValue(); + } else if (value instanceof String) { + return Double.parseDouble((String) value); + } + } catch (NumberFormatException e) { + System.out.println("字段" + fieldName + "转换为Double失败:" + e.getMessage()); + } + return null; + } + /** + * 获取日期类型字段值 + */ + public static Date getItemDate(Object entity, String fieldName) { + Object value = getItem(entity, fieldName); + if (value == null) { + return null; + } + + if (value instanceof Date) { + return (Date) value; + } else { + System.out.println("字段" + fieldName + "不是有效的Date类型"); + return null; + } + } + /** + * 获取布尔类型字段值 + */ + public static Boolean getItemBoolean(Object entity, String fieldName) { + Object value = getItem(entity, fieldName); + if (value == null) { + return null; + } + + if (value instanceof Boolean) { + return (Boolean) value; + } else if (value instanceof String) { + return Boolean.parseBoolean((String) value); + } else if (value instanceof Number) { + // 数字0为false,其他为true + return ((Number) value).intValue() != 0; + } + + System.out.println("字段" + fieldName + "转换为Boolean失败"); + return null; + } + /** + * 检查类是否有指定方法 + */ + private static boolean hasMethod(Class clazz, String methodName) { + try { + clazz.getMethod(methodName); + return true; + } catch (NoSuchMethodException e) { + return false; + } + } +} diff --git a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/LisUtil.java b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/LisUtil.java index 0b93596..0d99ae8 100644 --- a/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/LisUtil.java +++ b/lis-interfaceCommon/src/main/java/com/czlis/interfaceCommon/utils/LisUtil.java @@ -502,4 +502,15 @@ public class LisUtil { } System.out.println("PDF合并完成,输出路径:" + outputFilePath); } + /** + * 判断目标字符串是否在两个字符串之间(按字典顺序) + * @param target 目标字符串 + * @param start 起始字符串 + * @param end 结束字符串 + * @return 如果target在start和end之间(包含边界),返回true,否则返回false + */ + public static boolean isStringBetween(String target, String start, String end) { + // 检查目标字符串是否大于等于start且小于等于end + return target.compareTo(start) >= 0 && target.compareTo(end) <= 0; + } } diff --git a/liswork/src/main/java/com/czlis/liswork/service/impl/LisWorkOperServiceImpl.java b/liswork/src/main/java/com/czlis/liswork/service/impl/LisWorkOperServiceImpl.java index 0ade783..cc78d7d 100644 --- a/liswork/src/main/java/com/czlis/liswork/service/impl/LisWorkOperServiceImpl.java +++ b/liswork/src/main/java/com/czlis/liswork/service/impl/LisWorkOperServiceImpl.java @@ -124,6 +124,7 @@ public class LisWorkOperServiceImpl implements LisWorkOperService { return new Result("0", "保存成功"); } + /** * 修改病人信息 * @param jyrq @@ -140,6 +141,17 @@ public class LisWorkOperServiceImpl implements LisWorkOperService { if("5".equals(jgbz)) return new Result("-1", "结果已锁定禁止修改!"); if("1".equals(jgbz)) return new Result("-1", "结果已初审禁止修改!"); commonUtil.updateLabPatByColumn(jyrq,yq,ybh,column,value); + //对于开启自动记忆的字段,保存修改值 + SysLoginParam loginConfigParam = loginConfigParamUtil.getLoginConfigParam(); + List labInputcolList=getLabInputcol(loginConfigParam,yq); + Optional collect0 = labInputcolList.stream().filter(labInputcol0 -> column.equals(labInputcol0.getZdmc())).findFirst(); + if (collect0.isPresent()) { + String zdjy=collect0.get().getZdjy(); + if("1".equals(zdjy)){ + collect0.ifPresent(labR -> labR.setMrz(value)); + loginConfigParam.setCurrent_labInputcol(labInputcolList); + } + } Boolean setcalc=false; List xmCalcList=null; switch(column){ @@ -336,24 +348,69 @@ public class LisWorkOperServiceImpl implements LisWorkOperService { */ @Override public Result loaddefault(Date jyrq, String yq, String ybh) { - LabPat labPat=new LabPat(); - labPat.setSqsj(commonUtil.getCurrentTime()); - String yljg=commonUtil.getLabInstr(yq).getYljg(); - SysLoginParam loginConfigParam = loginConfigParamUtil.getLoginConfigParam(); - // loginConfigParam.getLoginYLJG(); - labPat.setYljg(yljg); - List labInputcolList= commonUtil.getLabInputcol(yq); - for (LabInputcol labInputcol : labInputcolList) { -// if(!"!".equals(labInputcol)){ -// String zdmc=labInputcol.getZdmc(); -// switch(zdmc){ -// case "": -// break; -// default: -// } -// } + LabPat labPat=commonUtil.getLabPatOne(jyrq, yq, ybh); + Date ldt_now=commonUtil.getCurrentTime(); + if(labPat.getSqsj()==null) labPat.setSqsj(ldt_now); + if(labPat.getYljg()==null) labPat.setYljg(commonUtil.getLabInstr(yq).getYljg()); + SysLoginParam loginConfigParam = loginConfigParamUtil.getLoginConfigParam(); + String Current_instrid=loginConfigParam.getCurrent_instrid(); + List labInputcolList=loginConfigParam.getCurrent_labInputcol(); + if(Current_instrid==null||!yq.equals(Current_instrid)){ + loginConfigParam.setCurrent_yhdh_sybh(""); + loginConfigParam.setCurrent_yhdh_eybh(""); + loginConfigParam.setCurrent_hdys_sybh(""); + loginConfigParam.setCurrent_hdys_eybh(""); + labInputcolList= commonUtil.getLabInputcol(yq); + loginConfigParam.setCurrent_labInputcol(labInputcolList); + } + List labInputcolList0=labInputcolList.stream().filter(labInputcol0->labInputcol0.getMrz()!=null&&"".equals(labInputcol0.getMrz())).collect(Collectors.toList()); + String mrz=null; + for (LabInputcol labInputcol : labInputcolList0) { + if(!"!".equals(labInputcol)){ + String zdmc=labInputcol.getZdmc(); + switch(zdmc){ + case "dysj": + case "cyrq": + case "sqsj": + case "nl": + case "yhdh": + mrz=labInputcol.getMrz(); + if(mrz!=null&&"".equals(mrz)) { + String sybh= loginConfigParam.getCurrent_yhdh_sybh(); + String eybh= loginConfigParam.getCurrent_yhdh_eybh(); + if("".equals(sybh)&&"".equals(eybh)&&sybh!=null&&eybh!=null) { + if (LisUtil.isStringBetween(ybh, sybh, eybh)) { + labPat.setYhdh(mrz); + } + }else{ + labPat.setYhdh(mrz); + } + } + case "hdys": + String sybh= loginConfigParam.getCurrent_hdys_sybh(); + String eybh= loginConfigParam.getCurrent_hdys_eybh(); + if("".equals(sybh)&&"".equals(eybh)&&sybh!=null&&eybh!=null) { + if (LisUtil.isStringBetween(ybh, sybh, eybh)) { + labPat.setHdys(mrz); + } + }else{ + labPat.setHdys(mrz); + } + break; + default: + mrz=labInputcol.getMrz(); + if(mrz!=null&&"".equals(mrz)) { + EntityUtils.setItem(labPat, zdmc, mrz); + } + } + } } - return new Result("0", "审核成功!",labPat); + String yhdh=SecurityUtils.getLoginUser().getUsername(); + if(labPat.getYhdh()==null||"".equals(labPat.getYhdh())) labPat.setYhdh(SecurityUtils.getLoginUser().getUsername()); + labPat.setLastuser(yhdh); + labPat.setLastdt(ldt_now); + if(labPat.getJgbz()==null)labPat.setJgbz(ReportStatusConstants.DEFAULT); + return new Result("0", "样本初始化成功!",labPat); } public void updateLabReqmainZT(String userId, String sqh) { Map map = new HashMap<>(); @@ -1873,4 +1930,24 @@ public class LisWorkOperServiceImpl implements LisWorkOperService { } return new Result("0", "登记成功"); } + + /** + * 获取自动记忆字段修改值 + * @param loginConfigParam + * @param yq + * @return + */ + public List getLabInputcol(SysLoginParam loginConfigParam,String yq){ + String Current_instrid=loginConfigParam.getCurrent_instrid(); + List labInputcolList=loginConfigParam.getCurrent_labInputcol(); + if(Current_instrid==null||!yq.equals(Current_instrid)) { + loginConfigParam.setCurrent_yhdh_sybh(""); + loginConfigParam.setCurrent_yhdh_eybh(""); + loginConfigParam.setCurrent_hdys_sybh(""); + loginConfigParam.setCurrent_hdys_eybh(""); + labInputcolList = commonUtil.getLabInputcol(yq); + loginConfigParam.setCurrent_labInputcol(labInputcolList); + } + return labInputcolList; + } }