主程序

This commit is contained in:
tangw 2025-10-30 16:19:37 +08:00
parent 939533f043
commit 8789ba6b79
6 changed files with 2290 additions and 2234 deletions

View File

@ -53,7 +53,16 @@ public class SecurityUtils {
throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED); throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
} }
} }
/**
* 获取用户姓名
**/
public static String getNickName() {
try {
return getLoginUser().getUser().getNickName();
} catch (Exception e) {
throw new ServiceException("获取用户姓名异常", HttpStatus.UNAUTHORIZED);
}
}
/** /**
* 获取用户 * 获取用户
**/ **/

View File

@ -189,6 +189,7 @@ public class CommonUtil {
} }
//ComPat //ComPat
public List<ComPat> getComPat(String brdh,String yljg){ public List<ComPat> getComPat(String brdh,String yljg){
return comPatMapper.getComPat(brdh,yljg); return comPatMapper.getComPat(brdh,yljg);
} }
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)

View File

@ -0,0 +1,362 @@
package com.czlis.interfaceCommon.utils;
import com.czlis.common.core.domain.entity.SysLoginParam;
import com.czlis.common.core.domain.entity.lis.*;
import com.czlis.common.utils.*;
import com.czlis.common.utils.ip.IpUtils;
import com.czlis.interfaceCommon.constants.LabPatConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.stream.Collectors;
/**
* 工作站操作框架,放置一些基本方法和默认操作
*/
@Component
@Slf4j
public class LisWorkBase {
@Autowired
LoginConfigParamUtil loginConfigParamUtil;
@Autowired
CommonUtil commonUtil;
/**获取当前用户工号**/
String getusername(){return SecurityUtils.getUsername();}
/**获取当前用户姓名**/
String getnickname(){return SecurityUtils.getNickName();}
/**获取当前客户端电脑IP**/
String getIP(){
return IpUtils.getIpAddr();
}
/**获取当前会话循环次数**/
int getProblemId() {
return JsonParamUtils.getParameterToInt("problemId", 0);
}
/**
* 工作时间校验检验者审核者不允许相同 上班时间上午8点-12点下午2点到5点,周末不算
*
* @param labPat 病人信息
* @return 返回0通过, 返回1不允许相同
*/
int checkWorkTime(LabPat labPat) {
String yhdh = labPat.getYhdh();
String hdys = labPat.getHdys();
if (yhdh == null || yhdh.isEmpty()) return 0;
if (hdys == null || hdys.isEmpty()) return 0;
if (!yhdh.equals(hdys)) return 0;
String sb1 = commonUtil.getHISOPT("SHTIME1");
String sb2 = commonUtil.getHISOPT("SHTIME2");
String sb3 = commonUtil.getHISOPT("SHTIME3");
String sb4 = commonUtil.getHISOPT("SHTIME4");
if ((sb1 == null || sb1.isEmpty()) && (sb2 == null || sb2.isEmpty()) && (sb3 == null || sb3.isEmpty()) && (sb4 == null || sb4.isEmpty()))
return 0;
Date currenttime = DateUtils.getNowDate();
int weekDay = DateUtils.getWeekDay(currenttime);
//周末不算
if (weekDay == 6 || weekDay == 7) return 0;
int lt_now = Integer.parseInt(DateUtils.time(currenttime, "HH:mm").replace(":", ""));
if ((sb1 != null && !sb1.isEmpty()) && (sb2 != null && !sb2.isEmpty())) {
sb1 = sb1.replace(":", "");
sb2 = sb2.replace(":", "");
if (LisUtil.isTureNumber(sb1) && LisUtil.isTureNumber(sb2)) {
int nsb1 = Integer.parseInt(sb1);
int nsb2 = Integer.parseInt(sb2);
if (lt_now > nsb1 && lt_now < nsb2) return 1;
}
}
if ((sb3 != null && !sb3.isEmpty()) && (sb4 != null && !sb4.isEmpty())) {
sb3 = sb3.replace(":", "");
sb4 = sb4.replace(":", "");
if (LisUtil.isTureNumber(sb3) && LisUtil.isTureNumber(sb4)) {
int nsb3 = Integer.parseInt(sb3);
int nsb4 = Integer.parseInt(sb4);
if (lt_now > nsb3 && lt_now < nsb4) return 1;
}
}
return 0;
}
/**
* 检查报告是否计算危急值
* @param labPat 病人信息
* @return 返回
*/
boolean checknowjz(LabPat labPat) {
//危急值标识去除原则 nowjz = true 不能算做危急值
String brxm = labPat.getBrxm();
if (brxm != null) {
if (brxm.contains("质控") || brxm.contains("复查") || brxm.contains("QC") || brxm.contains("qc") || brxm.contains("软化水") || brxm.contains("锅炉水")) {
return true;
}
}
String brly = labPat.getBrly();
if (brly != null) brly = commonUtil.getComDictNameById("PT", brly);
if (brly != null) if (brly.contains("质控")) return true;
if (brly != null) if (brly.contains("复查")) return true;
String ksdh = labPat.getKsdh();
if (ksdh != null) ksdh = commonUtil.getComDictNameById("DP", ksdh);
if (ksdh != null) return ksdh.contains("检验科");
return false;
}
/**
* 查询明细是否有危急值标识
*
* @param labResultList 结果集合
* @return 返回
*/
boolean getAlarmFlag(List<LabResult> labResultList) {
boolean wjz = false;
List<LabResult> labResultList0 = labResultList.stream().filter(xm ->xm.getAlarm_flag() != null).filter(xm -> !xm.getAlarm_flag().trim().isEmpty()).collect(Collectors.toList());
if (!labResultList0.isEmpty()) {
wjz = true;
}
return wjz;
}
/**
* 操作记录日志
*
* @param jyrq 检验日期
* @param yq 仪器
* @param ybh 样本号
* @param yhdh 用户
* @param logtype 操作类型
* @param logdata 备注信息
*/
void setComLog(Date jyrq, String yq, String ybh, String yhdh, String logtype, String logdata) {
ComLog comLog = new ComLog();
comLog.setJyrq(jyrq);
comLog.setYq(yq);
comLog.setYbh(ybh);
comLog.setYhdh(yhdh);
comLog.setDnmc(getIP());
comLog.setRzbz(logtype);
comLog.setRznr(logdata);
comLog.setRzdt(new Date());
commonUtil.insertComLog(comLog);
}
/**写入病人信息历史记录**/
void setComPat(LabPat labPat) {
if(labPat==null) return;
String brdh = labPat.getBrdh();
String brxm=labPat.getBrxm();
if(brdh==null||brdh.isEmpty()) return;
if(brxm==null||brxm.isEmpty()) return;
String yljg = labPat.getYljg();
ComPat comPat = new ComPat();
comPat.setYljg(yljg);
comPat.setBrdh(brdh);
comPat.setBrxm(labPat.getBrxm());
comPat.setBrly(labPat.getBrly());
comPat.setKsdh(labPat.getKsdh());
if(labPat.getNl()!=null) {
int age = labPat.getNl();
String unit = labPat.getNldw();
Date sr = AgeUtils.getBirthDateByAge(age, unit);
comPat.setSr(sr);
}
comPat.setFb(labPat.getFb());
comPat.setMzh(labPat.getMzh());
comPat.setZd(labPat.getZd());
comPat.setCh(labPat.getCh());
comPat.setSjys(labPat.getSjys());
commonUtil.deleteComPat(brdh,yljg);
commonUtil.insertComPat(comPat);
}
/**
* 报告修改记录,撤回报告需要记录
*
* @param jyrq 检验日期
* @param yq 仪器
* @param ybh 样本号
* @param yhdh 用户
*/
void setpatLog(Date jyrq, String yq, String ybh, String yhdh) {
Date xgrq = new Date();
String ip = getIP();
commonUtil.insertLabPatlog(jyrq, yq, ybh, xgrq, yhdh, ip);
commonUtil.insertLabResultlog(jyrq, yq, ybh, xgrq, yhdh, ip);
}
/**
* 申请单操作记录
*
* @param sqh 申请
* @param zt 状态
* @param yhdh 用户
*/
void setlabReqsteplog(String sqh, String zt, String yhdh) {
int xh = commonUtil.getLabReqsteplogMax(sqh);
xh = xh + 1;
LabReqsteplog labReqsteplog = new LabReqsteplog();
labReqsteplog.setXh(xh);
labReqsteplog.setSqh(sqh);
labReqsteplog.setZt(zt);
labReqsteplog.setUserid(yhdh);
labReqsteplog.setChangedate(new Date());
String ip = getIP();
labReqsteplog.setComip(ip);
commonUtil.insertLabReqsteplog(labReqsteplog);
}
/**
* 获取自动记忆字段修改值
*
* @param loginConfigParam 当前登录客户端信息
* @param yq 仪器
* @return 返回
*/
List<LabInputcol> getLabInputcol(SysLoginParam loginConfigParam, String yq) {
String Current_instrid = loginConfigParam.getCurrent_instrid();
List<LabInputcol> labInputcolList = loginConfigParam.getCurrent_labInputcol();
if (!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;
}
/**
* 自动输入模板输入结果
* @param yq 仪器
* @param ybh 样本号
* @return 返回
*/
List<LabInputmdl> chkautoinput(String yq, String ybh){
List<LabInputmdl> labInputmdlList;
if("1".equals(commonUtil.getHISOPT("zdsr"))){
labInputmdlList=commonUtil.getLabInputmdlzdsr(yq);
}else{
if(LisUtil.isNumber(ybh)) {
labInputmdlList = commonUtil.getLabInputmdlzdsrybh(yq, ybh);
}else{
labInputmdlList=new ArrayList<>();
}
}
return labInputmdlList;
}
/**
* 自动输入模板输入结果
* @param jyrq 检验日期
* @param yq 仪器
* @param ybh 样本号
* @param labResultList 结果集合
* @param mbmc 模板名称
* @param savefalg 是否保存到数据库,空样本不存数据库,有样本存数据库
* @return 返回
*/
public List<LabResult> batchinput(Date jyrq, String yq, String ybh,List<LabResult> labResultList,String mbmc,boolean savefalg){
List<LabInputmdlDetail> labInputmdlDetailList=commonUtil.getLabInputmdlDetail(yq,mbmc);
if(labInputmdlDetailList.isEmpty()) return labResultList;
for(LabInputmdlDetail labInputmdlDetail:labInputmdlDetailList){
List<LabResult> findone=labResultList.stream().filter(s->s.getXmdh().equals(labInputmdlDetail.getXmdh())).collect(Collectors.toList());
if(findone.isEmpty()){
LabResult labResult=new LabResult();
labResult.setJyrq(jyrq);
labResult.setYq(yq);
labResult.setYbh(ybh);
labResult.setXmdh(labInputmdlDetail.getXmdh());
labResult.setCsjg(labInputmdlDetail.getMrz());
labResult.setXmmc(labInputmdlDetail.getXmmc());
if(!savefalg)labResult.setChangeflag(2);
else {
labResult.setChangeflag(1);
commonUtil.updateLabResult(labResult);
}
labResultList.add(labResult);
}
}
return labResultList;
}
/**创建空样本记录**/
public LabPat loaddefault(LabPat labPat) {
// Date jyrq = labPat.getJyrq();
String yq = labPat.getYq();
String ybh = labPat.getYbh();
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<LabInputcol> labInputcolList = loginConfigParam.getCurrent_labInputcol();
if (!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<LabInputcol> labInputcolList0 = labInputcolList.stream().filter(labInputcol0 -> labInputcol0.getMrz() != null && !labInputcol0.getMrz().isEmpty()).collect(Collectors.toList());
String mrz = null;
for (LabInputcol labInputcol : labInputcolList0) {
if (!"!".equals(labInputcol.getZdmc())) {
String zdmc = labInputcol.getZdmc();
switch (zdmc) {
case "dysj":
case "cyrq":
case "sqsj":
case "nl":
break;
case "yhdh":
String yhdh0 = labPat.getYhdh();
if (yhdh0 == null || yhdh0.isEmpty()) {
mrz = labInputcol.getMrz();
if (mrz != null && !mrz.isEmpty()) {
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);
}
}
}
break;
case "hdys":
String hdys0 = labPat.getYhdh();
if (hdys0 == null || hdys0.isEmpty()) {
String sybh = loginConfigParam.getCurrent_hdys_sybh();
String eybh = loginConfigParam.getCurrent_hdys_eybh();
if (!"".equals(sybh) && !"".equals(eybh)) {
if (LisUtil.isStringBetween(ybh, sybh, eybh)) {
labPat.setHdys(mrz);
}
} else {
labPat.setHdys(mrz);
}
}
break;
default:
String value = (String) EntityUtils.getItem(labPat, zdmc);
if (value == null || value.isEmpty()) {
mrz = labInputcol.getMrz();
if (mrz != null && !mrz.isEmpty()) {
EntityUtils.setItem(labPat, zdmc, mrz);
}
}
}
}
}
String yhdh = SecurityUtils.getLoginUser().getUsername();
if (labPat.getYhdh() == null || labPat.getYhdh().isEmpty())
labPat.setYhdh(SecurityUtils.getLoginUser().getUsername());
labPat.setLastuser(yhdh);
labPat.setLastdt(ldt_now);
Integer shcs = labPat.getShcs();
if (shcs == null) labPat.setShcs(0);
if (labPat.getJgbz() == null) labPat.setJgbz(LabPatConstants.DEFAULT);
return labPat;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,720 @@
package com.czlis.interfaceCommon.utils;
import com.czlis.common.core.domain.Result;
import com.czlis.common.core.domain.entity.lis.*;
import com.czlis.interfaceCommon.constants.ComLogConstants;
import com.czlis.interfaceCommon.constants.LabPatConstants;
import com.czlis.interfaceCommon.constants.LabReqmainConstants;
import com.czlis.interfaceCommon.constants.LisinterfaceNameConstants;
import com.czlis.interfaceCommon.pojo.inter.SetReport;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
@Component
@Slf4j
public class LisWorkconfirm extends LisWorkcom{
@Autowired
CheckResultUtils checkResultUtils;
/**
* 初步审核
*
* @param jyrq
* @param yq
* @param ybh
* @param hdys
* @return
*/
public Result confirm1(Date jyrq, String yq, String ybh, String hdys, int problemId) {
if (hdys == null || hdys.isEmpty()) return new Result("-1", "审核者为空,无法审核!");
LabPat labPat = commonUtil.getLabPatOne(jyrq, yq, ybh);
labPat.setHdys(hdys);
List<LabResult> labResultList = commonUtil.getLabResultList(jyrq, yq, ybh);
if (problemId < 3) {
//1,审核权限校验
if (!commonUtil.getUserPower(yq, hdys, 20)) {
return new Result("-1", "当前核对者无权对本仪器报告审核!");
}
//2:数据合法性校验
Result result0 = beforeconfirm(labPat, labResultList, 1, problemId);
if (!"0".equals(result0.getCode())) return result0;
}
if (problemId < 3) problemId = 3;
if (problemId < 4) {
//3:数据完整保存
labResultList = saveallresult(labPat, labResultList);
boolean wjz = getAlarmFlag(labResultList);
//同步主表危急值标识
String alarmflag = labPat.getAlarmflag();
if (("1".equals(alarmflag) && !wjz)) {
labPat.setAlarmflag("");
commonUtil.updateLabPat(labPat);
} else if (("".equals(alarmflag) || alarmflag == null) && wjz) {
labPat.setAlarmflag("1");
commonUtil.updateLabPat(labPat);
}
if (wjz) {
return new Result("4", getAlarmMsg(labResultList), 4);
}
}
if (problemId < 5) problemId = 5;
if (problemId < 6) {
//医学审核条件判断
Result result = chksample(labPat, labResultList, problemId);
if (!"0".equals(result.getCode())) return result;
}
if (problemId < 6) problemId = 6;
if (problemId < 99) {
//高级医学审核条件判断
Result result = chksamplenew(labPat, labResultList, problemId);
if ("99".equals(result.getCode())) {
labPat.setBz(result.getMsg());
result.setCode("0");
}
if (!"0".equals(result.getCode())) return result;
}
if (problemId < 99) problemId = 99;
//5:数据状态修改,异步上传接口作业创建
Result result1 = afterconfirm1(labPat, problemId);
if (!"0".equals(result1.getCode())) return result1;
setComLog(jyrq, yq, ybh, hdys, ComLogConstants.LG_CK1, "");
// String sqh=labPat.getSqh();
// if(sqh!=null){
// setlabReqsteplog(sqh,SampleStatusConstants.CONFIRM,hdys);
// }
return new Result("0", "审核成功!");
}
/**
* 审核报告单全流程
*
* @param jyrq
* @param yq
* @param ybh
* @param hdys
* @return
*/
public Result confirm(Date jyrq, String yq, String ybh, String hdys, int problemId) {
if (hdys == null || hdys.isEmpty()) return new Result("-1", "审核者为空,无法审核!");
LabPat labPat = commonUtil.getLabPatOne(jyrq, yq, ybh);
labPat.setHdys(hdys);
List<LabResult> labResultList = commonUtil.getLabResultList(jyrq, yq, ybh);
if (problemId < 3) {
//1,审核权限校验
if (!commonUtil.getUserPower(yq, hdys, 20)) {
return new Result("-1", "当前核对者无权对本仪器报告审核!");
}
//2:数据合法性校验
Result result0 = beforeconfirm(labPat, labResultList, 2, problemId);
if (!"0".equals(result0.getCode())) return result0;
}
if (problemId < 3) problemId = 3;
if (problemId < 4) {
//3:数据完整保存
labResultList = saveallresult(labPat, labResultList);
boolean wjz = getAlarmFlag(labResultList);
//同步主表危急值标识
String alarmflag = labPat.getAlarmflag();
if (("1".equals(alarmflag) && !wjz)) {
labPat.setAlarmflag("");
commonUtil.updateLabPat(labPat);
} else if (("".equals(alarmflag) || alarmflag == null) && wjz) {
labPat.setAlarmflag("1");
commonUtil.updateLabPat(labPat);
}
if (wjz) {
return new Result("4", getAlarmMsg(labResultList), 4);
}
}
if (problemId < 5) problemId = 5;
if (problemId < 6) {
//医学审核条件判断
Result result = chksample(labPat, labResultList, problemId);
if (!"0".equals(result.getCode())) return result;
}
if (problemId < 6) problemId = 6;
if (problemId < 99) {
//高级医学审核条件判断
Result result = chksamplenew(labPat, labResultList, problemId);
if ("99".equals(result.getCode())) {
labPat.setBz(result.getMsg());
result.setCode("0");
}
if (!"0".equals(result.getCode())) return result;
}
if (problemId < 99) problemId = 99;
//4:CA请求业务的处理
//Result result=addCA(jyrq, yq, ybh, hdys);
//if("0".equals(result.getCode()))return result;
//5:数据状态修改,异步上传接口作业创建
Result result1 = afterconfirm(labPat, problemId);
if (!"0".equals(result1.getCode())) return result1;
setComLog(jyrq, yq, ybh, hdys, ComLogConstants.LG_CK, "");
String sqh = labPat.getSqh();
if (sqh != null) {
setlabReqsteplog(sqh, LabReqmainConstants.CONFIRM, hdys);
}
return new Result("0", "审核成功!");
}
/**
* 审核前校验数据完整性,审核业务和初审业务都可使用
*
* @param labPat
* @param labResultList
* @param checktype
* @param problemId
* @return
*/
private Result beforeconfirm(LabPat labPat, List<LabResult> labResultList, Integer checktype, Integer problemId) {
if (labPat == null) return new Result("-1", "病人信息为空禁止审核!");
Date jyrq = labPat.getJyrq();
String yq = labPat.getYq();
String ybh = labPat.getYbh();
String jgbz = labPat.getJgbz();
if ("2".equals(jgbz)) return new Result("1", "报告已审核!");
if ("5".equals(jgbz)) return new Result("-1", "已锁定报告禁止审核!");
if (!"1".equals(jgbz) && checktype == 2) {
String f_check1 = commonUtil.getComOptValue(yq, "f_check1");
if ("1".equals(f_check1)) return new Result("-1", "审核前必须先初审!");
}
if (checktype == 2) {
if (checkWorkTime(labPat) == 1) return new Result("-1", "核对医生不允许与检验医生相同!");
}
String limit_brly = commonUtil.getHISOPT("limit_brly");
String brly = labPat.getBrly();
if ("1".equals(limit_brly) && (brly == null || brly.isEmpty()))
return new Result("-1", "病人类型为空,禁止审核!");
String limit_yblx = commonUtil.getHISOPT("limit_yblx");
String yblx = labPat.getYblx();
if ("1".equals(limit_yblx) && (yblx == null || yblx.isEmpty()))
return new Result("-1", "样本类型为空,禁止审核!");
String limit_brxm = commonUtil.getHISOPT("limit_brxm");
String brxm = labPat.getBrxm();
if ("1".equals(limit_brxm) && (brxm == null || brxm.isEmpty()))
return new Result("-1", "病人姓名为空,禁止审核!");
if ((brxm == null || brxm.isEmpty()) && problemId < 1) new Result("5", "姓名为空,你确定要审核吗?", 1);
String limit_ksdh = commonUtil.getHISOPT("limit_ksdh");
String ksdh = labPat.getKsdh();
if ("1".equals(limit_ksdh) && (ksdh == null || ksdh.isEmpty()))
return new Result("-1", "科室单位为空,禁止审核!");
String limit_patno = commonUtil.getHISOPT("limit_patno");
String brdh = labPat.getBrdh();
String brlyname = commonUtil.getComDictNameById("PT", brly);
if ("1".equals(limit_patno) && (brdh == null || brdh.isEmpty())) {
if (!"质控".equals(brlyname)) return new Result("-1", "病历号不能为空,禁止审核!");
}
String limit_brpatno = commonUtil.getHISOPT("limit_brpatno");
if ("1".equals(limit_brpatno) && (brdh == null || brdh.isEmpty())) {
if ("1".equals(brly) || "3".equals(brly)) return new Result("-1", "门诊住院的病历号不能为空,禁止审核!");
}
String yqdl = commonUtil.getYqdl(yq);
if (labResultList == null || labResultList.isEmpty()) return new Result("-1", "结果为空禁止审核!");
for (LabResult labResult : labResultList) {
String csjg = labResult.getCsjg();
if ("未做".equals(csjg)) {
return new Result("-1", "还有结果为“未做”的项目,不可审核!");
}
if (csjg != null) {
if (csjg.contains("ERR")) return new Result("-1", "有结果错误,不可审核!");
if (csjg.contains("需稀释")) return new Result("-1", "有结果需稀释,不可审核!");
if (csjg.contains("需复做")) return new Result("-1", "有结果需复做,不可审核!");
}
}
if (problemId < 2) {
//多做结果判断
String otherresultmsg = commonUtil.getComOptValue(yq, "otherresultmsg");
if ("1".equals(otherresultmsg)) {
if (!"细菌仪".equals(yqdl)) {
int nullcount = lisWorkUtilsMapper.checkresultsqxmdh(jyrq, yq, ybh, labPat.getSqh());
if (nullcount > 0) return new Result("5", "结果有多做的项目,是否审核?", 2);
}
}
}
String limit_jgwxh4 = commonUtil.getHISOPT("limit_jgwxh4");
if ("1".equals(limit_jgwxh4)) {
int wxh = lisWorkUtilsMapper.checkresultwxh(jyrq, yq, ybh);
if (wxh > 0) return new Result("-1", "有结果为****禁止审核!");
}
String sqh = labPat.getSqh();
if (sqh != null && !sqh.isEmpty()) {
if (!"质控".equals(brlyname)) {
if ("1".equals(commonUtil.getHISOPT("sp_dublereport"))) {
LabPat labPat0 = lisWorkUtilsMapper.checkdublereport(sqh, ybh);
if (labPat0 != null) {
String yqmc = commonUtil.getYqmc(yq);
String msg = "该申请单已经发过结果了,禁止审核!" + LisUtil.LINE_SEPARATOR + "日期:" + commonUtil.getDateString(jyrq) + ",仪器:" + yqmc + ",样本号:" + ybh;
return new Result("-1", msg);
}
} else if ("1".equals(commonUtil.getHISOPT("sp_yqdublereport"))) {
LabPat labPat0 = lisWorkUtilsMapper.checkyqdublereport(sqh, yq, ybh);
if (labPat0 != null) {
String yqmc = commonUtil.getYqmc(yq);
String msg = "该申请单已经发过结果了,禁止审核!" + LisUtil.LINE_SEPARATOR + "日期:" + commonUtil.getDateString(jyrq) + ",仪器:" + yqmc + ",样本号:" + ybh;
return new Result("-1", msg);
}
}
}
}
String Userid = labPat.getHdys();
if (Userid == null || Userid.isEmpty()) {
Userid = getusername();
}
//初审不需要调用接口
if (checktype == 1) return new Result("0", "保存成功!");
//调用his报告接口,检查外部接口对审核前的定制需求
SetReport setReport = new SetReport();
setReport.setIp(getIP());
setReport.setJyrq(DateFormatUtils.format(jyrq, "yyyy-MM-dd"));
setReport.setYbh(ybh);
setReport.setUserid(Userid);
setReport.setYq(yq.trim());
setReport.setStatus(LisinterfaceNameConstants.REPORTSTART);
if (!"细菌仪".equals(yqdl)) {
if (!"1".equals(commonUtil.getHISOPT("wswcbbgbl"))) {
String ls_cbbgyq = commonUtil.getComOptValue(yq, "cbbgyq");
if (ls_cbbgyq != null && !ls_cbbgyq.isEmpty()) {
String ls_ejbgyq = "EJBG" + ls_cbbgyq;
ls_cbbgyq = "CBBG" + ls_cbbgyq;
int count = commonUtil.getCountByKey(jyrq, ls_cbbgyq, ybh);
if (count > 0) {
setReport.setYq(ls_cbbgyq);
setReport.setStatus(LisinterfaceNameConstants.REPORTCANCAL);
Result result = lisInterfaceUtil.invokeLisInterface(LisinterfaceNameConstants.SETREPORT, setReport);
}
count = commonUtil.getCountByKey(jyrq, ls_ejbgyq, ybh);
if (count > 0) {
setReport.setYq(ls_ejbgyq);
setReport.setStatus(LisinterfaceNameConstants.REPORTCANCAL);
Result result = lisInterfaceUtil.invokeLisInterface(LisinterfaceNameConstants.SETREPORT, setReport);
}
}
}
}
setReport.setYq(yq.trim());
setReport.setStatus(LisinterfaceNameConstants.REPORTSTART);
Result result = lisInterfaceUtil.invokeLisInterface(LisinterfaceNameConstants.SETREPORT, setReport);
if (result.getCode().equals("5")) {
if (problemId < 3) {
return new Result(result.getCode(), result.getMsg(), 3);
}
return new Result("0", "保存成功!");
}
if (!result.getCode().equals("0")) return result;
checkxpywrgjz(labPat);
return new Result("0", "保存成功!");
}
/**
* 医学审核条件判断
*
* @param labPat
* @param problemId
* @return
*/
private Result chksample(LabPat labPat, List<LabResult> labResultList, Integer problemId) {
//医学审核条件判断
if (problemId < 6) {
String checkvalue = checkResultUtils.chksample(labPat, labResultList);
if (checkvalue != null && !checkvalue.isEmpty()) {
return new Result("5", checkvalue, 6);
}
}
return new Result("0", "保存成功!");
}
/**
* 高级医学审核条件判断
*
* @param labPat
* @param problemId
* @return
*/
private Result chksamplenew(LabPat labPat, List<LabResult> labResultList, Integer problemId) {
//医学审核条件判断
Boolean setbz = false;
String bz = labPat.getBz();
int startid = 6;
//医学审核条件判断(新规则),预留99个递归ID
if (problemId < startid) problemId = startid;
if (problemId < 99) {
int xh = problemId - startid;
Map<String, Object> chksamplenewvalue = checkResultUtils.chksamplenew(labPat, labResultList, xh);
String chkCode = (String) chksamplenewvalue.get("code");
String chkMsg = (String) chksamplenewvalue.get("msg");
bz = (String) chksamplenewvalue.get("bz");
labPat.setBz(bz);
xh = (Integer) chksamplenewvalue.get("xh");
setbz = (Boolean) chksamplenewvalue.get("setbz");
problemId = startid + xh;
if ("5".equals(chkCode)) {
if (setbz) {
commonUtil.updateLabPat(labPat);
}
return new Result("5", chkMsg, problemId);
}
if (!"0".equals(chkCode)) return new Result(chkCode, chkMsg, problemId);
}
if (setbz) {
commonUtil.updateLabPat(labPat);
return new Result("99", bz);
}
return new Result("0", "保存成功!");
}
/**
* 审核后步骤,在审核过程中,必须完成审核前校验通过,结果计算值填充,参考值结果标志危急值标志填写完成,最后使用此方法修改状态
*
* @param labPat
* @param problemId
* @return
*/
private Result afterconfirm(LabPat labPat, Integer problemId) {
Date jyrq = labPat.getJyrq();
String yq = labPat.getYq();
String ybh = labPat.getYbh();
String hdys = labPat.getHdys();
String yqdl = commonUtil.getYqdl(yq);
String itemvs = commonUtil.getHISOPT("itemvs");
Result ret = new Result("0", "保存成功!");
if ("1".equals(itemvs)) {
if (!"细菌仪".equals(yqdl)) {
String nullcount = lisWorkUtilsMapper.checkresultnosqxmdh(jyrq, yq, ybh);
if (!"".equals(nullcount) && nullcount != null)
ret = new Result("3", "警告!" + LisUtil.LINE_SEPARATOR + " 报告项目未对应申请项目,请进(收费项目报告项目对照)菜单维护对照:" + LisUtil.LINE_SEPARATOR + nullcount);
}
}
Date Confirmdt = new Date();
labPat.setConfirmdt(Confirmdt);
labPat.setConfirmer(hdys);
labPat.setLastdt(Confirmdt);
labPat.setLastuser(hdys);
Date dysj = labPat.getDysj();
if (dysj == null) dysj = Confirmdt;
if (commonUtil.getDateString(dysj).equals(commonUtil.getCurrentDate())) dysj = Confirmdt;
Date jysj = labPat.getSqsj();
if (jysj.after(dysj)) jysj = dysj;
labPat.setDysj(dysj);
String sqh = labPat.getSqh();
LabReqmain labReqmain = commonUtil.getLabReqmainOne(sqh);
if (labReqmain != null) {
String zt = labReqmain.getZt();
if (LabReqmainConstants.CANCAL.equals(zt)) return new Result("-1", "申请单已作废禁止审核!");
labReqmain.setYqdh(yq);
labReqmain.setSjsj(jysj);
labReqmain.setConfirmer(hdys);
labReqmain.setConfirmtime(Confirmdt);
labReqmain = checklabReqmainTAT(labReqmain);
if (!LabReqmainConstants.CANCAL.equals(zt)) labReqmain.setZt(LabReqmainConstants.CONFIRM);
commonUtil.updateLabReqmain(labReqmain);
Date cysj = labReqmain.getCysj();
if (cysj != null) labPat.setCyrq(cysj);
}
//调用his报告接口,完成报告同时调用外部接口任务
SetReport setReport = new SetReport();
setReport.setIp(getIP());
setReport.setJyrq(DateFormatUtils.format(jyrq, "yyyy-MM-dd"));
setReport.setYq(yq.trim());
setReport.setYbh(ybh);
setReport.setUserid(hdys);
setReport.setStatus(LisinterfaceNameConstants.REPORTEND);
Result result = lisInterfaceUtil.invokeLisInterface(LisinterfaceNameConstants.SETREPORT, setReport);
if (result.getCode().equals("5")) {
if (problemId < 100) {
return new Result(result.getCode(), result.getMsg(), 100);
}
return ret;
}
if (!result.getCode().equals("0")) return result;
//最后完成
String finish = labPat.getFinish();
if (!"细菌仪".equals(yqdl) && finish != null) labPat.setFinish("1");
labPat.setJgbz(LabPatConstants.CONFIRM);
Integer shcs = labPat.getShcs();
if (shcs == null) shcs = 0;
shcs = shcs + 1;
labPat.setShcs(shcs);
commonUtil.updateLabPat(labPat);
return ret;
}
/**
* 初步审核状态修改
*
* @param labPat
* @param problemId
* @return
*/
private Result afterconfirm1(LabPat labPat, Integer problemId) {
Date jyrq = labPat.getJyrq();
String yq = labPat.getYq();
String ybh = labPat.getYbh();
String hdys = labPat.getHdys();
String yqdl = commonUtil.getYqdl(yq);
String itemvs = commonUtil.getHISOPT("itemvs");
Result ret = new Result("0", "保存成功!");
if ("1".equals(itemvs)) {
if (!"细菌仪".equals(yqdl)) {
String nullcount = lisWorkUtilsMapper.checkresultnosqxmdh(jyrq, yq, ybh);
if (!"".equals(nullcount) && nullcount != null)
ret = new Result("3", "警告!" + LisUtil.LINE_SEPARATOR + " 报告项目未对应申请项目,请进(收费项目报告项目对照)菜单维护对照:" + LisUtil.LINE_SEPARATOR + nullcount);
}
}
Date Confirmdt = new Date();
labPat.setLastdt(Confirmdt);
labPat.setLastuser(hdys);
String finish = labPat.getFinish();
if (!"细菌仪".equals(yqdl) && finish != null) labPat.setFinish("1");
labPat.setJgbz(LabPatConstants.PRELIM);
commonUtil.updateLabPat(labPat);
return ret;
}
/**
* 申请单表校验TAT时间顺序,恢复时间倒置的时间轴
*
* @param labReqmain
* @return
*/
private LabReqmain checklabReqmainTAT(LabReqmain labReqmain) {
if (labReqmain != null) {
Date confirmtime = labReqmain.getConfirmtime();
Date jysj = labReqmain.getSjsj();
String sqh = labReqmain.getSqh();
Date zxsj = labReqmain.getZxsj();
Date cysj = labReqmain.getCysj();
Date bbsjsj = labReqmain.getBbsjsj();
Date jssj = labReqmain.getJssj();
Date sjsj = labReqmain.getSjsj();
if (sjsj == null&&jysj !=null) sjsj =new Date(jysj.getTime());
if (sjsj !=null&&sjsj.after(confirmtime)&&jysj !=null) sjsj =new Date(jysj.getTime());
if (jssj == null&&sjsj !=null) jssj =new Date(sjsj.getTime());
if (jssj !=null&&jssj.after(confirmtime)&&sjsj !=null) jssj = new Date(sjsj.getTime());
if (bbsjsj != null) {
if (jysj !=null&&bbsjsj.after(jssj) && jysj.after(bbsjsj)) jssj = new Date(jysj.getTime());
}
if (cysj != null&&jysj !=null) {
if (cysj.after(jssj) && jysj.after(cysj)) jssj =new Date(jysj.getTime());
}
if (jysj !=null&&jssj.after(sjsj)) sjsj =new Date(jysj.getTime());
List<LabReqsteplog> labReqsteplog = commonUtil.getLabReqsteplog(sqh);
if (jssj !=null&&bbsjsj != null && bbsjsj.after(jssj)) {
Date sj = new Date(jssj.getTime());
Date finalSj = new Date(jssj.getTime());
Optional<LabReqsteplog> maxTimeEntity = labReqsteplog.stream()
.filter(entity -> "13".equals(entity.getZt()))
.filter(entity -> entity.getChangedate().before(finalSj))
.max(Comparator.comparing(LabReqsteplog::getChangedate));
if (maxTimeEntity.isPresent()) {
sj = maxTimeEntity.get().getChangedate();
}
bbsjsj = new Date(sj.getTime());
labReqmain.setBbsjsj(bbsjsj);
} else {
if(jssj !=null) bbsjsj = new Date(jssj.getTime());
}
if (bbsjsj != null && cysj != null && cysj.after(bbsjsj)) {
Date sj = new Date(bbsjsj.getTime());
Date finalSj = sj;
Optional<LabReqsteplog> maxTimeEntity = labReqsteplog.stream()
.filter(entity -> "12".equals(entity.getZt()))
.filter(entity -> entity.getChangedate().before(finalSj))
.max(Comparator.comparing(LabReqsteplog::getChangedate));
if (maxTimeEntity.isPresent()) {
sj = maxTimeEntity.get().getChangedate();
}
cysj =new Date(sj.getTime());
labReqmain.setCysj(cysj);
}
if (bbsjsj != null && cysj != null && zxsj.after(cysj) && bbsjsj.after(zxsj)) {
Date finalSj = new Date(bbsjsj.getTime());
Optional<LabReqsteplog> maxTimeEntity = labReqsteplog.stream()
.filter(entity -> "12".equals(entity.getZt()))
.filter(entity -> entity.getChangedate().before(finalSj))
.max(Comparator.comparing(LabReqsteplog::getChangedate));
if (maxTimeEntity.isPresent()) {
cysj = maxTimeEntity.get().getChangedate();
} else cysj = new Date(zxsj.getTime());
labReqmain.setCysj(cysj);
} else {
if(bbsjsj != null ) cysj =new Date(bbsjsj.getTime());
}
if (cysj != null && zxsj != null && zxsj.after(cysj)) {
Date sj = new Date(cysj.getTime());
Date finalSj = sj;
Optional<LabReqsteplog> maxTimeEntity = labReqsteplog.stream()
.filter(entity -> "11".equals(entity.getZt()))
.filter(entity -> entity.getChangedate().before(finalSj))
.max(Comparator.comparing(LabReqsteplog::getChangedate));
if (maxTimeEntity.isPresent()) {
sj = maxTimeEntity.get().getChangedate();
}
zxsj = new Date(sj.getTime());
labReqmain.setZxsj(zxsj);
}
if (sjsj != null)labReqmain.setSjsj(sjsj);
}
return labReqmain;
}
/**
* 解除审核原因登记
*
* @param jyrq
* @param yq
* @param ybh
* @param hdys
* @return
*/
public Result unconfirmlog(Date jyrq, String yq, String ybh, String hdys, String reason) {
if ("".equals(reason)) {
return new Result("-1", "没写原因,解除失败!");
}
LisPatlog lisPatlog = new LisPatlog();
lisPatlog.setYq(yq);
lisPatlog.setYbh(ybh);
lisPatlog.setXgyhdh(hdys);
lisPatlog.setJyrq(jyrq);
lisPatlog.setXgrq(new Date());
lisPatlog.setBz1(reason);
commonUtil.insertLisPatlog(lisPatlog);
return new Result("0", "写召回原因成功!");
}
/**
* 撤销审核报告单全流程
*
* @param jyrq
* @param yq
* @param ybh
* @param yhdh
* @return
*/
public Result unconfirm(Date jyrq, String yq, String ybh, String yhdh) {
if (yhdh == null || yhdh.isEmpty()) return new Result("1", "操作者为空,无法解除审核!");
int problemId = getProblemId();
LabPat labPat = commonUtil.getLabPatOne(jyrq, yq, ybh);
if (problemId < 3) {
//1,解除审核权限校验
if (!commonUtil.getUserPower(yq, yhdh, 10)) return new Result("-1", "当前操作者无权对本仪器报告解除审核!");
//2:数据合法性校验
String jgbz = labPat.getJgbz();
if (!"2".equals(jgbz)) return new Result("1", "报告未审核,不需解除!");
}
if (problemId < 3) problemId = 3;
if (problemId < 4) {
String unconfirmlog = commonUtil.getComOptValue(yq, "unconfirmlog");
if ("1".equals(unconfirmlog)) {
return new Result("4", "请填写解除审核原因!", 4);
}
}
if (problemId < 4) problemId = 4;
//调用his报告接口,完成报告同时调用外部接口任务
if (problemId < 5) {
SetReport setReport = new SetReport();
setReport.setIp(getIP());
setReport.setJyrq(DateFormatUtils.format(jyrq, "yyyy-MM-dd"));
setReport.setYq(yq.trim());
setReport.setYbh(ybh);
setReport.setUserid(yhdh);
setReport.setStatus(LisinterfaceNameConstants.REPORTCANCAL);
Result result = lisInterfaceUtil.invokeLisInterface(LisinterfaceNameConstants.SETREPORT, setReport);
if (result.getCode().equals("5")) {
if (problemId < 5) {
return new Result(result.getCode(), result.getMsg(), 5);
}
}
if (!result.getCode().equals("0")) return result;
}
if (problemId < 5) problemId = 5;
String sqh = labPat.getSqh();
LabReqmain labReqmain = commonUtil.getLabReqmainOne(sqh);
if (labReqmain != null) {
String zt = labReqmain.getZt();
if (!LabReqmainConstants.CANCAL.equals(zt)) {
labReqmain.setConfirmer("");
labReqmain.setConfirmtime(null);
if (LabReqmainConstants.CONFIRM.equals(zt)) {
labReqmain.setZt(LabReqmainConstants.SIGNFOR);
labReqmain.setConfirmer("");
labReqmain.setConfirmtime(null);
commonUtil.updateLabReqmain(labReqmain);
}
}
}
String msg = "取消成功!";
String sp_rebackreport = commonUtil.getHISOPT("sp_rebackreport");
if ("1".equals(sp_rebackreport)) {
if ("1".equals(labPat.getDybz())) {
msg = msg + LisUtil.LINE_SEPARATOR + "此报告为已打印报告,注意考虑是否追回";
}
LabPatwarning labPatwarning = commonUtil.getLabPatwarning(jyrq, yq, ybh);
if (labPatwarning != null) {
if (problemId < 6) {
Date tzsj = labPatwarning.getTzsj();
long sjc = LisUtil.relativeMinute(tzsj);
if (sjc > 10) {
return new Result("4", "此报告已发布危急值结果,并且时间超过10分钟了!" + LisUtil.LINE_SEPARATOR + "请输入撤回报告组长代号和密码", 6);
}
}
//权限不足,撤回报告失败组长权限单独接口校验
if (problemId == 6) {
int ll_qxz = lisWorkUtilsMapper.getQXZ(yhdh);
if (ll_qxz <= 0) {
return new Result("-1", "权限不足,撤回报告失败!");
}
}
commonUtil.deleteLabPatwarning(jyrq, yq, ybh);
commonUtil.deleteLabResultwarning(jyrq, yq, ybh);
}
}
commonUtil.deleteLabReqreportPdffile(jyrq, yq, ybh);
labPat.setFslx("");
labPat.setJgbz(LabPatConstants.DEFAULT);
commonUtil.updateLabPat(labPat);
String logdata = commonUtil.getLisPatlogbz(jyrq, yq, ybh);
setComLog(jyrq, yq, ybh, yhdh, ComLogConstants.LG_UCK, logdata);
setpatLog(jyrq, yq, ybh, yhdh);
if (sqh != null) {
setlabReqsteplog(sqh, LabReqmainConstants.START, yhdh);
}
if (!"取消成功!".equals(msg)) return new Result("3", msg);
return new Result("0", msg);
}
public Result unconfirm1(Date jyrq, String yq, String ybh, String yhdh) {
if (yhdh == null || yhdh.isEmpty()) return new Result("1", "操作者为空,无法解除审核!");
int problemId = getProblemId();
LabPat labPat = commonUtil.getLabPatOne(jyrq, yq, ybh);
if (problemId < 3) {
//1,解除审核权限校验
if (!commonUtil.getUserPower(yq, yhdh, 10)) return new Result("-1", "当前操作者无权对本仪器报告解除审核!");
//2:数据合法性校验
String jgbz = labPat.getJgbz();
if ("2".equals(jgbz)) return new Result("1", "报告已审核,不能解除初审!");
if (!"1".equals(jgbz)) return new Result("1", "报告未初审,不能解除初审!");
}
// if (problemId < 3) problemId = 3;
// if (problemId < 4) problemId = 4;
if (problemId < 5) problemId = 5;
labPat.setFslx("");
labPat.setJgbz(LabPatConstants.DEFAULT);
commonUtil.updateLabPat(labPat);
setComLog(jyrq, yq, ybh, yhdh, ComLogConstants.LG_UCK1, "");
return new Result("0", "取消成功!");
}
}