在“Cache死循环检测和申明式事务”里面介绍了申明式事务的实现。在实际使用中考虑到对老的兼容性,使用托管事务更实用,这次用实际代码展示写法的差异。
老事务写法很大的精力是在失败回滚事务后,用变量标记来防止后面做其他的增删改操作,或者接着执行后续逻辑直到报错。该复杂度随业务复杂和调整变得复杂
托管模式之后需要回滚直接抛出异常,方法就返回了,不用担心接着往下执行的问题。多个方法之间调用也不用来回用变量协调了,任意方法抛异常后就结束方法,回滚事务了
手工计费和退费采用托管模式示例
Class LIS.WS.BLL.DHCMicManualAccount Extends %RegisteredObject
{
/// Creator: zlz
/// CreatDate: 20200604
/// Description:: 插入HIS医嘱代理,用来和HIS.DHCOrderItem的SaveOrdItem无缝对接
/// Table:
/// Input: Labno:检验号,Param参数内容XML格式
/// Param.P0
/// Param.P1
/// Output: 无
/// Return:
/// Others: w ##Class(LIS.WS.BLL.DHCMicManualAccount).SaveOrdItemProxy("","<Data><P0>468</P0><P1></P1><P2>^742||270@1</P2><P3></P3></Data>","81^9^^12^1")
ClassMethod SaveOrdItemProxy(Labno As %String, Param As %String(MAXLEN=32767), Sessions As %String, Output RetValue As %String(MAXLEN=32767)) As %String [ SqlProc ]
{
q ##Class(LIS.WS.DHCLISServiceBase).DeclarativeTrans("LIS.WS.BLL.DHCMicManualAccount","SaveOrdItem",Labno, Param, "", "", "", "", "", "", "", "", "", "", "", "", Sessions,.RetValue)
}
/// Creator: zlz
/// CreatDate: 20200604
/// Description:: 停止HIS医嘱代理,用来和HIS.DHCOrderItem的StopOrdItem无缝对接
/// Table:
/// Input: Labno:检验号,Param参数内容XML格式
/// Param.P0
/// Param.P1
/// Output: 无
/// Return:
/// Others: w ##Class(LIS.WS.BLL.DHCMicManualAccount).StopOrdItemProxy("","<Data><P0>468</P0><P1></P1><P2>^742||270@1</P2><P3></P3></Data>","81^9^^12^1")
ClassMethod StopOrdItemProxy(Labno As %String, Param As %String(MAXLEN=32767), Sessions As %String, Output RetValue As %String(MAXLEN=32767)) As %String [ SqlProc ]
{
q ##Class(LIS.WS.DHCLISServiceBase).DeclarativeTrans("LIS.WS.BLL.DHCMicManualAccount","StopOrdItem",Labno, Param, "", "", "", "", "", "", "", "", "", "", "", "", Sessions,.RetValue)
}
/// Creator: zlz
/// CreatDate: 20200604
/// Description:: 插入HIS医嘱
/// Table:
/// Input: Labno:检验号,Param参数内容XML格式
/// Param.P0
/// Param.P1
/// Output: 无
/// Return:
/// Others: w ##Class(LIS.WS.BLL.DHCMicManualAccount).SaveOrdItem("","<Data><P0>468</P0><P1></P1><P2>^742||270@1</P2><P3></P3></Data>","81^9^^12^1")
ClassMethod SaveOrdItem(Labno As %String, Param As %String(MAXLEN=32767), P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RetValue As %String(MAXLEN=32767)) As %String
{
s ^TMPLIS("SaveOrdItem")=$lb(Labno,Param,Sessions)
s Labno=$g(Labno),Param=$g(Param),Sessions=$g(Sessions)
s WorkGroupDR=$p(Sessions,"^",2)
s UserDR=$p(Sessions,"^",1)
s HospitalDR=$p(Sessions,"^",5)
s HOSDR="LIS@"_HospitalDR
s HospitalCode=$lg($g(^dbo.BTHospitalD(HospitalDR)),2)
s WebNamespace=##Class(OTH.SYSParameter).GetWebNamespace()
s CurNamespace=$ZUTIL(5)
s Usercode=$lg($g(^dbo.SYSUserD(UserDR)),2)
s Usercode=$zcvt(Usercode,"U")
i '$l(Usercode) throw ##class(%Exception.General).%New("事务委托","D",,"-1^LIS用户不存在")
//判断HIS用户
s UserID=$o(^[WebNamespace]SSU("SSUSR",0,"SSUSR_Initials",Usercode,""))
i '$l(UserID) throw ##class(%Exception.General).%New("事务委托","D",,"-1^HIS用户不存在")
//用户的类别:医生
s RetValue=##Class(HIS.DHCOrderItem).GetUserType(UserID,WebNamespace)
i RetValue="" throw ##class(%Exception.General).%New("事务委托","D",,"-1^医护人员类型定义有误")
//默认登录科室
s Loc=$p(^[WebNamespace]SSU("SSUSR",UserID),"^",4)
i '$l(Loc) throw ##class(%Exception.General).%New("事务委托","D",,"-1^用户"_Usercode_"在HIS端未维护默认科室!")
s (P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14)=""
s reader = ##class(%XML.Reader).%New()
d reader.OpenString(Param)
d reader.Correlate("Data","LIS.WS.Model.InputParameter")
s err=""
s RetValue=1
While (reader.Next(.obj,.sc)) {
If ($SYSTEM.Status.IsOK(sc))
{
//标本主键
s VisitNumberDR=$tr(obj.P0,$c(0))
//就诊号
s AdmNo=$tr(obj.P1,$c(0))
//^0002313@1^0342342@2 0002313为医嘱Code,1为医嘱数量
s OrdItmList=$tr(obj.P2,$c(0))
//插入类型 MIC
s OptFlag=$tr(obj.P3,$c(0))
//报告主键
s ReportDR=$tr(obj.P4,$c(0))
//处理空值
i ReportDR="null" s ReportDR=""
//IP地址
s IP=$tr(obj.P5,$c(0))
//标本数据
s RPVisitNumberData=$g(^dbo.RPVisitNumberD(VisitNumberDR))
//登记号
s RegNo=$lg(RPVisitNumberData,3)
//没传就诊号就从标本表取
i '$l(AdmNo) s AdmNo=$lg(RPVisitNumberData,5)
i '$l(AdmNo) throw ##class(%Exception.General).%New("事务委托","D",,"-1^就诊信息不存在")
//得到患者状态,出院那些就不计费
s ret=##class(HIS.DHCCommon).GetCurrentDischargeStatus(AdmNo)
i ret'=0 throw ##class(%Exception.General).%New("事务委托","D",,ret)
//目标医生
s TargetDoc=$p($g(^[WebNamespace]SSU("SSUSR",UserID)),"^",14)
b ;OrdItmList
s retList=##Class(Interface.Common.DHCOrderItem).SaveOrderItem(AdmNo,OrdItmList,Usercode,"",HospitalCode)
i retList=0 throw ##class(%Exception.General).%New("事务委托","D",,"-1^医嘱插入失败!"_" 调用接口:##Class(Interface.Common.DHCOrderItem).SaveOrderItem("_AdmNo_","_OrdItmList_","_Usercode_","_Loc_","_HospitalCode_")")
i retList=100 throw ##class(%Exception.General).%New("事务委托","D",,"-1^医嘱插入失败!"_" 调用接口:##Class(Interface.Common.DHCOrderItem).SaveOrderItem("_AdmNo_","_OrdItmList_","_Usercode_","_Loc_","_HospitalCode_")")
//s Ret="7787||1*46518||348*V*^7795||1*46518||349*V*^"
//标本操作记录
s TransDateTime=##Class(LISSP.BLL.DHCCommonInterface).TransDateTime()
s CurDate=$p(TransDateTime,"^",1),CurTime=$p(TransDateTime,"^",2)
s OperateDate=CurDate
s OperateTime=CurTime
i retList["*" d
.s RetValue = 0
.//循环解析返回的串插入日志
.f k=1:1:$l(OrdItmList,"^") d
..s HisOrderRet = $p(retList,"^",k)
..s OrderItemDR=$p(HisOrderRet,"*",1)
..s OperateNotes=$p(HisOrderRet,"*",2)
..s Quantity=+$p($p(OrdItmList,"^",k),"@",2)
..s OrderItemCode=$p($p(OrdItmList,"^",k),"@",1)
..//手工计费
..s OperateTypeCode="98"
..s RejectTypeDR=""
..s WorkGroupMachineDR=""
..d ##Class(Interface.Common.DHCOrderItem).ExecuteHISOrder(AdmNo,OrderItemDR,Usercode)
..s Price=+##Class(Interface.Common.DHCOrderItem).GetOrderPrice("","",OrderItemCode,+$h,"","","","",HospitalCode)
..s RetValue=##Class(LISSP.BLL.DHCRPVisitNumberRecord).SaveRecord(VisitNumberDR,OperateDate,OperateTime+k,UserDR,OperateNotes,OperateTypeCode,WorkGroupMachineDR,RejectTypeDR,"",IP)
..i RetValue'=1 throw ##class(%Exception.General).%New("事务委托","D",,"标本操作记录插入失败:"_RetValue)
..s RetValue=##Class(HIS.DHCOrderItem).SaveRecord(VisitNumberDR,OperateDate,OperateTime+k,UserDR,OrderItemDR,Quantity,Price,OperateTypeCode,WorkGroupDR,OperateNotes,"",ReportDR,OrderItemCode)
..i RetValue'=1 throw ##class(%Exception.General).%New("事务委托","D",,"手工医嘱记录插入失败:"_RetValue)
.i RetValue=1 s RetValue=0
}
}
i $system.Status.IsError(sc) throw ##class(%Exception.General).%New("事务委托","D",,"-1^参数错误:")
i RetValue'=0 throw ##class(%Exception.General).%New("事务委托","D",,RetValue)
s RetValue=1
q RetValue
}
/// Creator: zlz
/// CreatDate: 20200604
/// Description:: 停止HIS医嘱
/// Table:
/// Input: Labno:检验号^员工ID是否取HIS医嘱对应的,Param参数内容XML格式
/// Param.P0
/// Param.P1
/// Output: 无
/// Return:
/// Others: w ##Class(LIS.WS.BLL.DHCMicManualAccount).StopOrdItem("","<Data><P0>468</P0><P1></P1><P2>^742||270@1</P2><P3></P3></Data>","81^9^^12^1")
ClassMethod StopOrdItem(Labno As %String, Param As %String(MAXLEN=32767), P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RetValue As %String(MAXLEN=32767)) As %String
{
s Labno=$g(Labno),Param=$g(Param),Sessions=$g(Sessions)
s WorkGroupDR=$p(Sessions,"^",2)
s UserDR=$p(Sessions,"^",1)
s ISHISUseID=$p(Labno,"^",2)
s Labno=$p(Labno,"^",1)
s WebNamespace=##Class(OTH.SYSParameter).GetWebNamespace()
s CurNamespace=$ZUTIL(5)
s Usercode=""
if (ISHISUseID'=1)
{
s Usercode=$lg($g(^dbo.SYSUserD(UserDR)),2)
s Usercode=$zcvt(Usercode,"U")
i '$l(Usercode) throw ##class(%Exception.General).%New("事务委托","D",,"-1^LIS用户不存在")
//判断HIS用户
s UserID=$o(^[WebNamespace]SSU("SSUSR",0,"SSUSR_Initials",Usercode,""))
i '$l(UserID) throw ##class(%Exception.General).%New("事务委托","D",,"-1^HIS用户不存在")
//用户的类别:医生
s RetValue=##Class(HIS.DHCOrderItem).GetUserType(UserID,WebNamespace)
i RetValue="" throw ##class(%Exception.General).%New("事务委托","D",,"-1^医护人员类型定义有误")
}
s (P0,P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13,P14)=""
s reader = ##class(%XML.Reader).%New()
d reader.OpenString(Param)
d reader.Correlate("Data","LIS.WS.Model.InputParameter")
s err="",RetValue=1
While (reader.Next(.obj,.sc)) {
If ($SYSTEM.Status.IsOK(sc))
{
//标本主键
s VisitNumberDR=$tr(obj.P0,$c(0))
//就诊号
s AdmNo=$tr(obj.P1,$c(0))
//^24||110^24||111 医嘱RowID列表
s OrdItmList=$tr(obj.P2,$c(0))
//操作类型 MIC
s OptFlag=$tr(obj.P3,$c(0))
//价格列表
s priceList=$tr(obj.P4,$c(0))
//数量列表
s ordqtyList=$tr(obj.P5,$c(0))
//费用id列表
s costitemList=$tr(obj.P6,$c(0))
//IP地址
s IP=$tr(obj.P7,$c(0))
s RPVisitNumberData=$g(^dbo.RPVisitNumberD(VisitNumberDR))
//登记号
s RegNo=$lg(RPVisitNumberData,3)
//就诊类型
s AdmissionTypeDR=$lg(RPVisitNumberData,4)
s AdmCode=""
i $l(AdmissionTypeDR) s AdmCode=$lg($g(^dbo.BTAdmissionTypeD(AdmissionTypeDR)),2)
//没传就诊号就从标本表取
i '$l(AdmNo) s AdmNo=$lg(RPVisitNumberData,5)
i '$l(AdmNo) throw ##class(%Exception.General).%New("事务委托","D",,"-1^就诊信息不存在")
//得到患者状态,出院那些就不计费
s ret=##class(HIS.DHCCommon).GetCurrentDischargeStatus(AdmNo)
i ret'=0 throw ##class(%Exception.General).%New("事务委托","D",,ret)
s patType=$p($g(^[WebNamespace]PAADM(+AdmNo)),"^",2)
s OrdItemStr=""
//循环停止医嘱
f k=1:1:$l(OrdItmList,"^") d
.//得到医嘱的RowID
.s OrdRowId=$p(OrdItmList,"^",k)
.i $l(OrdRowId) d
..i (ISHISUseID=1) d
...s tmpOrdItmId=$p(OrdRowId,"||",1)
...s tmpOrderChild=$p(OrdRowId,"||",2)
...s tmpUserID=$p($g(^[WebNamespace]OEORD(tmpOrdItmId,"I",tmpOrderChild,8)),"^",12)
...i $l(tmpUserID) d
....s UserData = $g(^[WebNamespace]SSU("SSUSR",tmpUserID))
....s Usercode = $tr($p(UserData,"^",1)," ")
....s Usercode=$zcvt(Usercode,"U")
..i '$l(Usercode) throw ##class(%Exception.General).%New("事务委托","D",,"-1^获取HIS医嘱对应用户Code为空。")
..s ret=##Class(Interface.Common.DHCOrderItem).StopOrderItem(AdmNo,OrdRowId,AdmCode,Usercode)
..i ret'=0 throw ##class(%Exception.General).%New("事务委托","D",,ret_"^医嘱停止错误。")
.//标本操作记录
.s TransDateTime=##Class(LISSP.BLL.DHCCommonInterface).TransDateTime()
.s CurDate=$p(TransDateTime,"^",1),CurTime=$p(TransDateTime,"^",2)
.s OperateDate=CurDate
.s OperateTime=CurTime
//循环给检验插入记录
f k=1:1:$l(OrdItmList,"^") d
.s OrdRowId=$p(OrdItmList,"^",k)
.s Price=$p(priceList,"^",k)
.s Quantity=-$p(ordqtyList,"^",k)
.s costitem=$p(costitemList,"^",k)
.s OrderItemCode=$p($p(OrdItmList,"^",k),"@",1)
.i $l(OrdRowId) d
..s OperateNotes=OrdRowId
..//计费
..s OperateTypeCode="99"
..s RejectTypeDR=""
..s WorkGroupMachineDR=""
..s ret=##Class(LISSP.BLL.DHCRPVisitNumberRecord).SaveRecord(VisitNumberDR,OperateDate,OperateTime+k,UserDR,OperateNotes,OperateTypeCode,WorkGroupMachineDR,RejectTypeDR,"",IP)
..s RetValue=##Class(HIS.DHCOrderItem).SaveRecord(VisitNumberDR,OperateDate,OperateTime+k,UserDR,costitem,Quantity,Price,OperateTypeCode,WorkGroupDR,OperateNotes,"","",OrderItemCode)
..i ret'=1 throw ##class(%Exception.General).%New("事务委托","D",,"标本操作记录插入失败:"_ret)
}
}
i $system.Status.IsError(sc) throw ##class(%Exception.General).%New("事务委托","D",,"-1^参数错误:")
i $l(err) throw ##class(%Exception.General).%New("事务委托","D",,"-1^"_err)
s RetValue=1
q RetValue
}
}
微生物报告保存,避免了原来写法设置回滚后标志变量的复杂度
/// 此类为微生物报告界面和微生物院感报告界面的共同保存审核逻辑,在不违反约定的前提下可修复bug
/// 不恰当的修改会引起两个界面保存和初审、审核方面的问题
Class LIS.WS.BLL.DHCRPMicReportSave Extends %RegisteredObject
{
/// ReportDR:报告主键
/// ResultStr:结果串
/// 一个项目的结果依次为:结果,文本结果,扩展结果,其他结果,异常标识,参考范围,结果说明,序号,项目主键,单位,传输日期,传输时间,传输仪器,药敏信息串,耐药机制串
/// 药敏子串结构:抗生素,MIC结果,MM结果,药敏结果,检查类型,提示类型,提示内容,仪器药敏,抗生素分类,是否上报,抗生素专家规则
/// 耐药机制子串结构:耐药机制项目,结果,序号
/// Oper:操作S:保存,E:仅初审,A:仅审核,SE:保存后初审,SA:保存后审核
/// w ##Class(LIS.WS.BLL.DHCRPMicReportSave).SaveReportResultMTHD("170","170$RES$215$RES$阳性$RES$$RES$$RES$A$RES$阴性$RES$$RES$415$RES$415$RES$$RES$2020-03-24$RES$15:36:22$RES$$RES$$RES$$RES$$RES$$RES$$TS$170$RES$226$RES$检出革兰阴性双球菌$RES$$RES$$RES$A$RES$$RES$$RES$441$RES$441$RES$$RES$2020-03-24$RES$15:36:22$RES$$RES$$RES$$RES$$RES$$RES$$TS$170$RES$1$RES$1$RES$$RES$$RES$$RES$$RES$$RES$455$RES$460$RES$$RES$2020-03-24$RES$15:36:22$RES$$RES$$RES$$RES$$RES$$RES$$TS$170$RES$237$RES$无细菌生长$RES$$RES$$RES$$RES$$RES$$RES$460$RES$455$RES$$RES$2020-03-24$RES$15:36:22$RES$$RES$$RES$$RES$$RES$$RES$$TS$170$RES$1738$RES$铜绿假单胞菌$RES$$RES$$RES$$RES$$RES$;药敏结果参考该病人本月1号结果。$RES$$RES$440$RES$$RES$$RES$$RES$$RES$;曲霉菌属:对氟康唑(FCA)和5-氟胞嘧啶(5FC)天然耐药! 黄曲霉和土曲霉对两性霉素B(AMB)也常耐药!$RES$$RES$$RES$208$SEN$11$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$31$SEN$11$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$181$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$258$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$293$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$112$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$384$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$244$SEN$11$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$491$SEN$11$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$12$SEN$11$SEN$$SEN$2$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$326$SEN$11$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$616$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$285$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$336$SEN$11$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$279$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$346$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$236$SEN$11$SEN$$SEN$3$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$137$SEN$11$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$$SEN$1$SEN$$ANT$$RES$1$RSS$92$RSS$0$RST$2$RSS$92$RSS$1$RST$3$RSS$160$RSS$2$RST$$TS$","S","","","0","::1","1","","","","","","","113^2^0^16^1")
ClassMethod SaveReportResultMTHD(ReportDR, ResultStr As %String(MAXLEN=32767), Oper, EntryUserDR, AuthUserDR, MICEntryDrect, ClientIp, AuthAsk, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
//s ^TMP("zlzmic")=$lb(ReportDR,ResultStr,Oper,EntryUserDR, AuthUserDR, MICEntryDrect, ClientIp, AuthAsk, P8, P9, P10, P11, P12, P13, Sessions)
s ReportDR=$g(ReportDR)
s ResultStr=$g(ResultStr)
s Oper=$g(Oper)
s EntryUserDR=$g(EntryUserDR)
s AuthUserDR=$g(AuthUserDR)
//是否保存直接初审
s MICEntryDrect=$g(MICEntryDrect)
//客户端IP
s ClientIp=$g(ClientIp)
i '$l(ClientIp) s ClientIp=$ZU(67,15,$j)
//审核是否检测询问消息
s AuthAsk=$g(AuthAsk)
s Sessions=$g(Sessions)
s RowCount=$g(RowCount)
s UserID=$p(Sessions,"^",1)
//没传初审用户和审核用户就默认当前用户
i '$l(EntryUserDR) s EntryUserDR=UserID
i '$l(AuthUserDR) s AuthUserDR=UserID
//报告数据
s ReportData=$g(^dbo.RPVisitNumberReportD(ReportDR))
s VisitNumberDR=$lg(ReportData,2)
//标本数据
s VisitNumberData=$g(^dbo.RPVisitNumberD(VisitNumberDR))
//标本类型
s SpecimenDR=$lg(VisitNumberData,56)
//工作小组
s WorkGroupMachineDR=$lg(ReportData,4)
//工作组
s WorkGroupDR=$lg($g(^dbo.BTWorkGroupMachineD(WorkGroupMachineDR)),4)
s RetMsg=""
s CheackMsg=""
//询问用户点是后传入AuthAsk为0,绕开检测消息
i (Oper["A"),(AuthAsk'="0") d
.//检测询问的消息-2为询问消息
.s CheackMsg=##Class(LIS.WS.BLL.DHCMicAuthRule).CheackAuthMsgMTHD(ReportDR)
i $l(CheackMsg) q "-2^"_CheackMsg
//事务托管进行保存报告和审核逻辑
s RetMsg=##Class(LIS.WS.DHCLISServiceBase).DeclarativeTrans("LIS.WS.BLL.DHCRPMicReportSave","SaveReportResultTrans",ReportDR,ResultStr,Oper,EntryUserDR,AuthUserDR,MICEntryDrect,ClientIp,AuthAsk,P8, P9, P10, P11, P12, P13, Sessions,.RowCount)
i $l(RetMsg) q RetMsg
//状态
s ReportStatus=$lg($g(^dbo.RPVisitNumberReportD(ReportDR)),22)
//善后开始*********************************************************************************
//保存审核等的善后操作,清除仪器结果保存操作日志
d ##class(LIS.WS.BLL.DHCRPMicNumberReport).ClearMachineResultMTHD(ReportDR,WorkGroupMachineDR,"")
//插入标本操作记录
s OperateUserDR=UserID
s (OperateDate,OperateTime,OperateTypeCode,OperateNotes,RejectTypeDR)=""
//初审核
i ReportStatus="2" s OperateTypeCode="11",OperateUserDR=EntryUserDR,OperateNotes="初审报告"
//审核
i ReportStatus="3" s OperateTypeCode="7",OperateUserDR=AuthUserDR,OperateNotes="审核报告"
//保存结果日志
i Oper="S" d
.s RetVal=##Class(LISSP.BLL.DHCRPVisitNumberRecord).SaveRecord(VisitNumberDR,OperateDate,OperateTime,OperateUserDR,"保存结果","31",WorkGroupMachineDR,RejectTypeDR,"",ClientIp)
//初审和审核的操作日志
i $l(OperateTypeCode) d
.s RetVal=##Class(LISSP.BLL.DHCRPVisitNumberRecord).SaveRecord(VisitNumberDR,OperateDate,OperateTime,OperateUserDR,OperateNotes,OperateTypeCode,WorkGroupMachineDR,RejectTypeDR,"",ClientIp)
//审核
//i Oper["A" d
//.s RetMsg=##Class(CA.DataDeal).GetReportInfoMTHD(ReportDR,"","","","","","","","","","","","","",Sessions)
//善后结束*********************************************************************************
//约定-1^错误消息 -2^询问消息
q RetMsg
}
/// 保存报告结果委托事务部分
ClassMethod SaveReportResultTrans(ReportDR, ResultStr As %String(MAXLEN=32767), Oper, EntryUserDR, AuthUserDR, MICEntryDrect, ClientIp, AuthAsk, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
s ReportDR=$g(ReportDR)
s ResultStr=$g(ResultStr)
s Oper=$g(Oper)
s EntryUserDR=$g(EntryUserDR)
s AuthUserDR=$g(AuthUserDR)
//是否保存直接初审
s MICEntryDrect=$g(MICEntryDrect)
//客户端IP
s ClientIp=$g(ClientIp)
//审核是否检测询问消息
s AuthAsk=$g(AuthAsk)
s Sessions=$g(Sessions)
s RowCount=$g(RowCount)
s UserID=$p(Sessions,"^",1)
//没传初审用户和审核用户就默认当前用户
i '$l(EntryUserDR) s EntryUserDR=UserID
i '$l(AuthUserDR) s AuthUserDR=UserID
//约定的分隔符
//多个项目之间的分割
s TestCodeDeli="$TS$"
//报告数据
s ReportData=$g(^dbo.RPVisitNumberReportD(ReportDR))
s VisitNumberDR=$lg(ReportData,2)
//标本数据
s VisitNumberData=$g(^dbo.RPVisitNumberD(VisitNumberDR))
//标本类型
s SpecimenDR=$lg(VisitNumberData,56)
//工作小组
s WorkGroupMachineDR=$lg(ReportData,4)
//状态
s Status=$lg(ReportData,22)
//工作组
s WorkGroupDR=$lg($g(^dbo.BTWorkGroupMachineD(WorkGroupMachineDR)),4)
//是否有多耐
s HasMultiRes=0
//标识是否有结果
s HasReportRes=0
//保存结果开始*********************************************************************************
//包含保存操作就保存
i Oper["S" d
.f t=1:1:$l(ResultStr,TestCodeDeli) d
..//取一个项目的结果串
..s CurTSRes=$p(ResultStr,TestCodeDeli,t)
..//没内容退出
..i '$l(CurTSRes) q
..//保存报告项目结果数据
..d ..SaveReportResult(ReportDR,CurTSRes,VisitNumberDR,WorkGroupMachineDR,SpecimenDR,Oper,ClientIp,UserID,.HasReportRes)
//没有保存的结果判断
i Oper["A",HasReportRes=0 d
.THROW ##class(%Exception.General).%New("事务委托","D",,"-1^没有保存的结果!可能操作速度太快")
//保存图片
d ##class(LIS.WS.BLL.DHCRPMicNumberReport).SaveReportImage(ReportDR)
//保存结果结束*********************************************************************************
//执行报告执行器代码
i Oper["S" d ##Class(LIS.WS.BLL.DHCReportActuator).Execute(ReportDR)
//存保存者信息
i Oper="S" d
.s ReportObj=##Class(dbo.RPVisitNumberReport).%OpenId(ReportDR)
.s ReportObj.SaveDate=$zd($h,8)
.s ReportObj.SaveTime=$p($h,",",2)
.s ReportObj.SaveUserDR=UserID
.s sc=ReportObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告状态失败:"_$SYSTEM.Status.GetErrorText(sc))
//初审开始*********************************************************************************
//初审
i Oper["E" d
.i ((Status'="1")&&(Status'="2")&&(Status'="5")&&(Status'="4")) d
..THROW ##class(%Exception.General).%New("事务委托","D",,"-1^非登记或取消或复查状态不能初审!")
.s ReportObj=##Class(dbo.RPVisitNumberReport).%OpenId(ReportDR)
.//保存直接初审模式就设置第一次初审者和初审时间
.i (MICEntryDrect'="1")||('$l(ReportObj.EntryUserDR)) d
..s ReportObj.EntryDate=$zd($h,8)
..s ReportObj.EntryTime=$p($h,",",2)
..s ReportObj.EntryUserDR=EntryUserDR
.s ReportObj.Status=2
.s sc=ReportObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告状态失败:"_$SYSTEM.Status.GetErrorText(sc))
//初审结束*********************************************************************************
//审核开始*********************************************************************************
//审核
i Oper["A" d
.i ((Status'="1")&&(Status'="2")&&(Status'="5")&&(Status'="4")) d
..THROW ##class(%Exception.General).%New("事务委托","D",,"-1^非登记或取消或复查状态不能审核!")
.s ReportObj=##Class(dbo.RPVisitNumberReport).%OpenId(ReportDR)
.s HasRes=0
.i $d(^dbo.RPVisitNumberReportResultI("IndexReportItem",ReportDR)) d
..s TestCodeDR="" f s TestCodeDR=$o(^dbo.RPVisitNumberReportResultI("IndexReportItem",ReportDR,TestCodeDR)) q:(TestCodeDR="")||($l(RetMsg)) d
...s ReportResultDR=$o(^dbo.RPVisitNumberReportResultI("IndexReportItem",ReportDR,TestCodeDR,""))
...s TextRes=$lg($g(^dbo.RPVisitNumberReportResultD(ReportResultDR)),5)
...i $l(TextRes) s HasRes=1
....//仅仅审核更新结果的审核时间
....i Oper="A" d
.....s ReportResultObj=##Class(dbo.RPVisitNumberReportResult).%OpenId(ReportResultDR)
.....s ReportResultObj.AuthDate=$zd($h,8)
.....s ReportResultObj.AuthTime=$p($h,",",2)
.....s sc=ReportResultObj.%Save()
.....i ('$SYSTEM.Status.IsOK(sc)) d
......THROW ##class(%Exception.General).%New("事务委托","D",,"-1^更新报告结果时间失败:"_$SYSTEM.Status.GetErrorText(sc))
.i $l(ReportObj.MajorConclusion) s HasRes=1
.i HasRes=0 d
..THROW ##class(%Exception.General).%New("事务委托","D",,"-1^报告没结果且没报告评价不能审核!")
.s CheckMsg=##Class(LIS.WS.BLL.DHCRPMicNumberReport).CheckReportMTHD(ReportDR,EntryUserDR,AuthUserDR)
.//检测消息不通过直接返回
.i CheckMsg["-1^" s RetMsg=CheckMsg TROLLBACK q
.s ReportObj.AuthDate=$zd($h,8)
.s ReportObj.AuthTime=$p($h,",",2)
.//直接审核设置初审信息
.i '$l(ReportObj.EntryUserDR) d
..s ReportObj.EntryDate=$zd($h,8)
..s ReportObj.EntryTime=$p($h,",",2)
..s ReportObj.EntryUserDR=EntryUserDR
.s ReportObj.AuthUserDR=AuthUserDR
.s ReportObj.Status=3
.s sc=ReportObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告状态失败:"_$SYSTEM.Status.GetErrorText(sc))
.//设置菌使用次数
.d ##Class(LIS.WS.BLL.DHCRPMicNumberReport).SetOrganismNumMTHD(ReportDR)
.//发送审核消息记录
.s ret=##Class(LISSP.BLL.DHCOTMsgStock).InsertMsg("","",UserID,"HISAuthorise","",ReportDR)
.//发送多耐消息
.i HasMultiRes=1 d
..s ret=##Class(LISSP.BLL.DHCOTMsgStock).InsertMsg("","",UserID,"MultipleResistant","出现多耐菌!",ReportDR)
//审核结束*********************************************************************************
q ""
}
/// 保存报告结果数据
/// ReportDR:报告主键
/// CurTSRes:当前项目结果串
/// VisitNumberDR:标本主键
/// WorkGroupMachineDR:工作小组
/// HasReportRes:是否有结果
/// d ##Class(LIS.WS.BLL.DHCRPMicReportSave).SaveReportResult()
ClassMethod SaveReportResult(ReportDR, CurTSRes, VisitNumberDR, WorkGroupMachineDR, SpecimenDR, Oper, ClientIp, UserID, Output HasReportRes)
{
//一个项目结果的分割
s ResultDeli="$RES$"
//项目结果的所属报告
s ResReportDR=$p(CurTSRes,ResultDeli,1)
i ResReportDR'=ReportDR d
.THROW ##class(%Exception.General).%New("事务委托","D",,"-1^未加载完成报告和结果不一致!")
//标本数据
s VisitNumberData=$g(^dbo.RPVisitNumberD(VisitNumberDR))
//项目结果
s Result=$p(CurTSRes,ResultDeli,2)
//文本结果
s TextRes=$p(CurTSRes,ResultDeli,3)
//有结果
i $l(TextRes) s HasReportRes=1
//额外结果
s ExtraRes=$p(CurTSRes,ResultDeli,4)
//其他结果
s OtherRes=$p(CurTSRes,ResultDeli,5)
//异常标识
s AbFlag=$p(CurTSRes,ResultDeli,6)
//参考范围
s RefRanges=$p(CurTSRes,ResultDeli,7)
//结果说明
s ResNoes=$p(CurTSRes,ResultDeli,8)
//序号
s Sequence=$p(CurTSRes,ResultDeli,9)
//项目主键
s TestCodeDR=$p(CurTSRes,ResultDeli,10)
//单位
s Unit=$p(CurTSRes,ResultDeli,11)
//传输日期
s AssayDate=$p(CurTSRes,ResultDeli,12)
s AssayDate=$tr(AssayDate,"-","")
i '$l(AssayDate) s AssayDate=$zd($h,8)
//传输时间
s AssayTime=$p(CurTSRes,ResultDeli,13)
i '$l(AssayTime) s AssayTime=$p($h,",",2)
e s AssayTime=$zth(AssayTime)
//传输仪器
s MachineParameterDR=$p(CurTSRes,ResultDeli,14)
//专家规则
s ExpertRule=$p(CurTSRes,ResultDeli,15)
//多耐
s MultipleResistant=$p(CurTSRes,ResultDeli,16)
//多耐子结果
s MultipleResChild=$p(CurTSRes,ResultDeli,17)
//所有抗生素串
s AllAntStr=$p(CurTSRes,ResultDeli,18)
//所有耐药机制串
s AllRstStr=$p(CurTSRes,ResultDeli,19)
s ReportResultObj=""
i $d(^dbo.RPVisitNumberReportResultI("IndexReportItem",ReportDR,TestCodeDR)) d
.s ReportResultDR=$o(^dbo.RPVisitNumberReportResultI("IndexReportItem",ReportDR,TestCodeDR,""))
.s ReportResultObj=##Class(dbo.RPVisitNumberReportResult).%OpenId(ReportResultDR)
e d
.s ReportResultObj=##Class(dbo.RPVisitNumberReportResult).%New()
//结果变化了存结果修改日志
i (ReportResultObj.Result'=Result)||(ReportResultObj.TextRes'=TextRes)||(ReportResultObj.ExtraRes'=ExtraRes) d
.//写结果修改日志
.d ..SaveResModifyLog(VisitNumberDR,WorkGroupMachineDR,TestCodeDR,Result,TextRes,ExtraRes,OtherRes,ResNoes,AbFlag,ClientIp,UserID,Unit,ReportResultObj.Result,ReportResultObj.TextRes,ReportResultObj.ExtraRes)
s ReportResultObj.AbFlag=AbFlag
s ReportResultObj.AdmNo=$lg(VisitNumberData,5)
s ReportResultObj.AssayDate=AssayDate
s ReportResultObj.AssayTime=AssayTime
//保存并审核时保存结果里的审核日期
i Oper="SA" d
.s ReportResultObj.AuthDate=$zd($h,8)
.s ReportResultObj.AuthTime=$p($h,",",2)
s ReportResultObj.ExtraRes=ExtraRes
s ReportResultObj.MachineParameterDR=MachineParameterDR
s ReportResultObj.MultipleResChild=""
s ReportResultObj.MultipleResistant=""
s ReportResultObj.OtherRes=OtherRes
s ReportResultObj.RefRanges=RefRanges
s ReportResultObj.RegNo=$lg(VisitNumberData,3)
s ReportResultObj.ResNoes=ResNoes
s ReportResultObj.Result=Result
s ReportResultObj.Sequence=Sequence
s ReportResultObj.TestCodeDR=TestCodeDR
s ReportResultObj.TextRes=TextRes
s ReportResultObj.Unit=Unit
s ReportResultObj.VisitNumberReportDR=ResReportDR
s ReportResultObj.ExpertRule=ExpertRule
s ReportResultObj.MultipleResistant=MultipleResistant
s ReportResultObj.MultipleResChild=MultipleResChild
i $l(MultipleResistant) s HasMultiRes=1
i $l(MultipleResChild) s HasMultiRes=1
//结果补全医嘱信息
i '$l(ReportResultObj.TestSetDR) d
.s TestSetDR="" f s TestSetDR=$o(^dbo.RPVisitNumberTestSetI("IndexWGMachineDR",VisitNumberDR,WorkGroupMachineDR,TestSetDR)) q:TestSetDR="" d
..i $d(^dbo.BTTestSetLayoutI("IndexMaster",TestSetDR,WorkGroupDR,TestCodeDR)) d
...s TSRowID=$o(^dbo.RPVisitNumberTestSetI("IndexWGMachineDR",VisitNumberDR,WorkGroupMachineDR,TestSetDR,""))
...s ReportResultObj.TestSetDR=TestSetDR
...s ReportResultObj.RPVisitNumberTestSetDR=TSRowID
//定性参考范围判断扩展结果
s IsCheckText=$lg($g(^dbo.BTTestCodeD(TestCodeDR)),28)
i $d(^dbo.BTTestCodeJudgeRangesI("IndexMasterTC",TestCodeDR)),$ISVALIDNUM(TextRes),IsCheckText="1" d
.s OrderNo="" f s OrderNo=$o(^dbo.BTTestCodeJudgeRangesI("IndexMasterTC",TestCodeDR,OrderNo)) q:OrderNo="" d
..s JudgeRowID="" f s JudgeRowID=$o(^dbo.BTTestCodeJudgeRangesI("IndexMasterTC",TestCodeDR,OrderNo,JudgeRowID)) q:JudgeRowID="" d
...s JudgeMachineParameterDR=$lg($g(^dbo.BTTestCodeJudgeRangesD(JudgeRowID)),4)
...i $l(JudgeMachineParameterDR),(MachineParameterDR'=JudgeMachineParameterDR) q
...s JudgeValueLow=$lg($g(^dbo.BTTestCodeJudgeRangesD(JudgeRowID)),5)
...s JudgeValueHigh=$lg($g(^dbo.BTTestCodeJudgeRangesD(JudgeRowID)),6)
...s JudgeResult=$lg($g(^dbo.BTTestCodeJudgeRangesD(JudgeRowID)),7)
...s JudgeAbFlag=$lg($g(^dbo.BTTestCodeJudgeRangesD(JudgeRowID)),9)
...i (TextRes>=JudgeValueLow)&&(TextRes<=JudgeValueHigh) d
....s ReportResultObj.ExtraRes=JudgeResult
....s ReportResultObj.AbFlag=JudgeAbFlag
//定性参考范围判断扩展结果
s sc=ReportResultObj.%Save()
i ('$SYSTEM.Status.IsOK(sc)) d
.THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告结果失败:"_$SYSTEM.Status.GetErrorText(sc))
//存药敏和耐药机制结果
e d
.//保存药敏结果数据
.d ..SaveReportResSen(ReportDR,ReportResultObj.RowID,ReportResultObj.Result,AllAntStr,SpecimenDR)
.//保存耐药机制结果
.d ..SaveReportResRst(ReportDR,ReportResultObj.RowID,AllRstStr)
}
/// 保存报告结果的药敏结果
/// ReportDR:报告主键
/// ReportResultDR:报告结果主键
/// OrgDR:细菌主键
/// AllAntStr:抗生素结果串
/// d ##Class(LIS.WS.BLL.DHCRPMicReportSave).SaveReportResSen()
ClassMethod SaveReportResSen(ReportDR, ReportResultDR, OrgDR, AllAntStr, SpecimenDR)
{
//一个项目的抗生素分割
s AntDeli="$ANT$"
//一个抗生素的折点分割
s SenDeli="$SEN$"
//清除之前的药敏结果
&sql(delete from dbo.RP_VisitNumberReportResSen where VisitNumberReportResultDR=:ReportResultDR)
i $l(AllAntStr) d
.s repid=$i(^CacheTemp)
.//细菌组
.s OrganismGroupDR=""
.//细菌科
.s OrganismFamilyDR=""
.//有菌取细菌组关系
.i $l(OrgDR),$d(^dbo.BTOrganismD(OrgDR)) d
..s OrganismGroupDR=$lg($g(^dbo.BTOrganismD(OrgDR)),9)
..i $l(OrganismGroupDR) s OrganismFamilyDR=$lg($g(^dbo.BTOrganismGroupD(OrganismGroupDR)),6)
..//获取折点数据
..d ##Class(LIS.WS.BLL.DHCRPMicNumberReport).GetMICAntSen(OrgDR,"",repid,SpecimenDR)
.//循环保存药敏结果
.f a=1:1:$l(AllAntStr,AntDeli) d
..s OneAntRes=$p(AllAntStr,AntDeli,a)
..//没内容退出
..i '$l(OneAntRes) q
..//抗生素
..s AntibioticDR=$p(OneAntRes,SenDeli,1)
..//MIC值
..s MIC=$p(OneAntRes,SenDeli,2)
..//MM值
..s MM=$p(OneAntRes,SenDeli,3)
..//药敏结果
..s Result=$p(OneAntRes,SenDeli,4)
..//检查类型
..s CheckType=$p(OneAntRes,SenDeli,5)
..//提示类型
..s PromptType=$p(OneAntRes,SenDeli,6)
..//提示
..s Prompt=$p(OneAntRes,SenDeli,7)
..//仪器药敏
..s MachSensitivityDR=$p(OneAntRes,SenDeli,8)
..//抗生素类别
..s AntibioticsClassDR=$p(OneAntRes,SenDeli,9)
..//是否上报
..s IsReport=$p(OneAntRes,SenDeli,10)
..//抗生素专家规则
..s ExpertRuleID=$p(OneAntRes,SenDeli,11)
..s HasFindLink=0
..//尝试取菌上维护的类别
..i ('$l(AntibioticsClassDR)),$d(^dbo.BTOrganismAntI("IndexMaster",OrgDR)) d
...s HasFindLink=1
...i $d(^dbo.BTOrganismAntI("IndexMaster",OrgDR,AntibioticDR)) d
....s OrgAntDR=$o(^dbo.BTOrganismAntI("IndexMaster",OrgDR,AntibioticDR,""))
....s AntibioticsClassDR=$lg($g(^dbo.BTOrganismAntD(OrgAntDR)),8)
..//取细菌组上维护的类别
..i (HasFindLink=0),('$l(AntibioticsClassDR)),$l(OrganismGroupDR) d
...i $d(^dbo.BTOrganismGroupAntI("IndexMaster",OrganismGroupDR)) d
....s HasFindLink=1
...i $d(^dbo.BTOrganismGroupAntI("IndexMaster",OrganismGroupDR,AntibioticDR)) d
....s OrgGrAntDR=$o(^dbo.BTOrganismGroupAntI("IndexMaster",OrganismGroupDR,AntibioticDR,""))
....s AntibioticsClassDR=$lg($g(^dbo.BTOrganismGroupAntD(OrgGrAntDR)),8)
..//取菌科上维护的类别
..i (HasFindLink=0),('$l(AntibioticsClassDR)),$l(OrganismFamilyDR) d
...i $d(^dbo.BTOrganismFamilyAntI("IndexMaster",OrganismFamilyDR,AntibioticDR)) d
....s OrgFamilyAntDR=$o(^dbo.BTOrganismFamilyAntI("IndexMaster",OrganismFamilyDR,AntibioticDR,""))
....s AntibioticsClassDR=$lg($g(^dbo.BTOrganismFamilyAntD(OrgFamilyAntDR)),8)
..//试验方法
..s SenMethod=""
..//试验值
..s SenValue=""
..i $l(MM) d
...s SenMethod="1"
...s SenValue=MM
..e d
...s SenMethod="2"
...s SenValue=MIC
..s RepResSenObj=""
..//有数据就打开更新,否则新增
..i $d(^dbo.RPVisitNumberReportResSenI("IndexAntibiocs",ReportResultDR,AntibioticDR)) d
...s RepResSenDR=$o(^dbo.RPVisitNumberReportResSenI("IndexAntibiocs",ReportResultDR,AntibioticDR,""))
...s RepResSenObj=##Class(dbo.RPVisitNumberReportResSen).%OpenId(RepResSenDR)
..e d
...s RepResSenObj=##Class(dbo.RPVisitNumberReportResSen).%New()
..s RepResSenObj.AntibioticsClassDR=AntibioticsClassDR
..s RepResSenObj.AntibioticsDR=AntibioticDR
..s RepResSenObj.CheckType=CheckType
..s RepResSenObj.MachSensitivityDR=MachSensitivityDR
..s RepResSenObj.Prompt=Prompt
..s RepResSenObj.PromptType=PromptType
..s RepResSenObj.SenMethod=SenMethod
..s RepResSenObj.SensitivityDR=Result
..s RepResSenObj.SenValue=SenValue
..s RepResSenObj.Sequence=a
..s RepResSenObj.IRanges=""
..s RepResSenObj.SRanges=""
..s RepResSenObj.RRanges=""
..s RepResSenObj.SDDRanges=""
..s RepResSenObj.Reported=IsReport
..s RepResSenObj.ExpertRuleID=ExpertRuleID
..//审核时候把专家规则的RowID和文本存起来,防止打印编号
..i $l(ExpertRuleID),Oper["A" d
...d ..SaveReportExpert(ReportDR,ExpertRuleID)
..//得到当前抗生素折点数据
..s CurAntSenData=$g(^TMP("GetMICAntSen",repid,AntibioticDR,SenMethod))
..i $l(CurAntSenData) d
...s RepResSenObj.IRanges=$lg(CurAntSenData,1)
...s RepResSenObj.SRanges=$lg(CurAntSenData,2)
...s RepResSenObj.RRanges=$lg(CurAntSenData,3)
...s RepResSenObj.SDDRanges=$lg(CurAntSenData,4)
..s RepResSenObj.VisitNumberReportResultDR=ReportResultDR
..s sc=RepResSenObj.%Save()
..i ('$SYSTEM.Status.IsOK(sc)) d
...k ^TMP("GetMICAntSen",repid)
...THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告药敏结果失败:"_$SYSTEM.Status.GetErrorText(sc))
.//删除折点数据
.k ^TMP("GetMICAntSen",repid)
q ""
}
/// 保存报告结果的药敏结果
/// 报告主键
/// 专家规则ID
/// d ##Class(LIS.WS.BLL.DHCRPMicReportSave).SaveReportResRst()
ClassMethod SaveReportResRst(ReportDR, ReportResultDR, AllRstStr)
{
//结果里的耐药机制分割符
s RstDeli="$RST$"
//结果里的耐药机制里的结果分割符
s RstResDeli = "$RSS$"
//清除之前的耐药机制结果
&sql(delete from dbo.RP_VisitNumberRepResRst where VisitNumberReportResultDR=:ReportResultDR)
//循环保存耐药机制结果
i $l(AllRstStr) d
.//循环保存耐药机制结果
.f r=1:1:$l(AllRstStr,RstDeli) d
..s OneRstRes=$p(AllRstStr,RstDeli,r)
..//没内容退出
..i '$l(OneRstRes) q
..//耐药机制项目主键
..s ResistanceItemDR=$p(OneRstRes,RstResDeli,1)
..//耐药机制结果
..s Result=$p(OneRstRes,RstResDeli,2)
..//序号
..s Sequence=$p(OneRstRes,RstResDeli,3)
..i $d(^dbo.RPVisitNumberRepResRstI("IndexDataMaster",ReportResultDR,ResistanceItemDR)) d
...s RepResRstDR=$o(^dbo.RPVisitNumberRepResRstI("IndexDataMaster",ReportResultDR,ResistanceItemDR,""))
...s RepResRstObj=##Class(dbo.RPVisitNumberRepResRst).%OpenId(RepResRstDR)
..e d
...s RepResRstObj=##Class(dbo.RPVisitNumberRepResRst).%New()
..s RepResRstObj.ResistanceItemDR=ResistanceItemDR
..s RepResRstObj.Result=Result
..s RepResRstObj.Sequence=Sequence
..s RepResRstObj.VisitNumberReportResultDR=ReportResultDR
..s sc=RepResRstObj.%Save()
..i ('$SYSTEM.Status.IsOK(sc)) d
...THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告耐药机制结果失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
/// 保存报告专家规则
/// 报告主键
/// 专家规则ID
/// d ##Class(LIS.WS.BLL.DHCRPMicReportSave).SaveReportExpert()
ClassMethod SaveReportExpert(ReportDR, ExpertID)
{
s ReportDR=$g(ReportDR)
s ExpertID=$g(ExpertID)
f i=1:1:$l(ExpertID,"^") d
.s OneExpertID=$p(ExpertID,"^",i)
.i '$l(OneExpertID) q
.s CName=$lg($g(^dbo.BTExpertRuleD(OneExpertID)),3)
.s SaveObj=""
.i $d(^dbo.RPVisitNumberReportExpertI("IndexVisitNumberReportDR",ReportDR,ExpertID)) d
..s RepExpertRowID=$o(^dbo.RPVisitNumberReportExpertI("IndexVisitNumberReportDR",ReportDR,ExpertID,""))
..s SaveObj=##Class(dbo.RPVisitNumberReportExpert).%OpenId(RepExpertRowID)
.e d
..s SaveObj=##Class(dbo.RPVisitNumberReportExpert).%New()
.s SaveObj.ExpertRule=CName
.s SaveObj.ExpertRuleID=OneExpertID
.s SaveObj.VisitNumberReportDR=ReportDR
.s sc=VisitNumberModifyObj.%Save()
.i '($SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告专家规则失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
/// 保存结果修改日志
/// d ##Class(LIS.WS.BLL.DHCRPMicReportSave).SaveResModifyLog()
ClassMethod SaveResModifyLog(VisitNumberDR, WorkGroupMachineDR, TestCodeDR, ModifiedResult, ModifiedTextResult, ModifiedExtraRes, ModifiedOtherRes, ModifiedResNoes, AbFlag, ClientIp, UserID, Unit, PreResult, PreTextResult, PreExtraRes)
{
s VisitNumberModifyObj = ##Class(dbo.RPVisitnumberResModifyLog).%New()
s VisitNumberModifyObj.VisitnumberDR = VisitNumberDR
s VisitNumberModifyObj.WorkGroupMachineDR = WorkGroupMachineDR
s VisitNumberModifyObj.TestCodeDR = TestCodeDR
s VisitNumberModifyObj.ModifiedResult = ModifiedResult
s VisitNumberModifyObj.ModifiedTextResult = ModifiedTextResult
s VisitNumberModifyObj.ModifiedExtraRes = ModifiedExtraRes
s VisitNumberModifyObj.ModifiedOtherRes = ModifiedOtherRes
s VisitNumberModifyObj.ModifiedResNoes = ModifiedResNoes
s VisitNumberModifyObj.AbFlag = AbFlag
s VisitNumberModifyObj.ModifyClinetIp = ClientIp
s VisitNumberModifyObj.ModifyDate = $zd($h,8)
s VisitNumberModifyObj.ModifyTime = $p($h,",",2)
s VisitNumberModifyObj.ModifyUserDR = UserID
s VisitNumberModifyObj.Unit = Unit
s VisitNumberModifyObj.PreResult=PreResult
s VisitNumberModifyObj.PreTextResult=PreTextResult
s VisitNumberModifyObj.PreExtraRes=PreExtraRes
s sc=VisitNumberModifyObj.%Save()
If ($SYSTEM.Status.IsOK(sc)) {s RetVal=1}
Else {s RetVal=$SYSTEM.Status.GetErrorText(sc) Quit}
}
/// 委托事务的保存报告日志
ClassMethod SaveReportResLogTrans(ReportDR, P1, P2, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
s ReportDR=$g(ReportDR)
s Sessions=$g(Sessions)
s UserID=$p(Sessions,"^",1)
i $d(^dbo.RPVisitNumberReportResultI("IndexReportItem",ReportDR)) d
.s TestCodeDR="" f s TestCodeDR=$o(^dbo.RPVisitNumberReportResultI("IndexReportItem",ReportDR,TestCodeDR)) q:TestCodeDR="" d
..s ResultFormat=$lg($g(^dbo.BTTestCodeD(TestCodeDR)),9)
..i ResultFormat'="M" q
..s RepResultDR="" f s RepResultDR=$o(^dbo.RPVisitNumberReportResultI("IndexReportItem",ReportDR,TestCodeDR,RepResultDR)) q:RepResultDR="" d
...s TextRes=$lg($g(^dbo.RPVisitNumberReportResultD(RepResultDR)),5)
...//有结果就备份日志
...i $l(TextRes) d
....s RepResObj=##Class(dbo.RPVisitNumberReportResult).%OpenId(RepResultDR)
....s RepResLogObj=##Class(dbo.RPVisitNumberReportResLog).%New()
....s RepResLogObj.AbFlag=RepResObj.AbFlag
....s RepResLogObj.AccessionNo=""
....s RepResLogObj.AdmNo=RepResObj.AdmNo
....s RepResLogObj.AssayDate=RepResObj.AssayDate
....s RepResLogObj.AssayNo=""
....s RepResLogObj.AssayStatus=RepResObj.AssayStatus
....s RepResLogObj.AssayTime=RepResObj.AssayTime
....s RepResLogObj.AuthDate=$zd($h,8)
....s RepResLogObj.AuthTime=$p($h,",",2)
....s RepResLogObj.AuthUserDR=UserID
....s RepResLogObj.DilCode=RepResObj.DilCode
....s RepResLogObj.ExpertRule=RepResObj.ExpertRule
....s RepResLogObj.ExtraRes=RepResObj.ExtraRes
....s RepResLogObj.IsMandatory=RepResObj.IsMandatory
....s RepResLogObj.IsNotAllowPrint=RepResObj.IsNotAllowPrint
....s RepResLogObj.IsReport=RepResObj.IsReport
....s RepResLogObj.MachineParameterDR=RepResObj.MachineParameterDR
....s RepResLogObj.MethodDR=RepResObj.MethodDR
....s RepResLogObj.MultipleResChild=RepResObj.MultipleResChild
....s RepResLogObj.MultipleResistant=RepResObj.MultipleResistant
....s RepResLogObj.OperateType=RepResObj.OperateType
....s RepResLogObj.OperateUserDR=RepResObj.OperateUserDR
....s RepResLogObj.OtherRes=RepResObj.OtherRes
....s RepResLogObj.OthTestSetIDs=RepResObj.OthTestSetIDs
....s RepResLogObj.PrintSeq=RepResObj.PrintSeq
....s RepResLogObj.ReAssayNum=RepResObj.ReAssayNum
....s RepResLogObj.ReAssayNumber=RepResObj.ReAssayNumber
....s RepResLogObj.RefRanges=RepResObj.RefRanges
....s RepResLogObj.RegNo=RepResObj.RegNo
....s RepResLogObj.ResClass=RepResObj.ResClass
....s RepResLogObj.ResNoes=RepResObj.ResNoes
....s RepResLogObj.Result=RepResObj.Result
....s RepResLogObj.RPVisitNumberTestSetDR=RepResObj.RPVisitNumberTestSetDR
....s RepResLogObj.Sequence=RepResObj.Sequence
....s RepResLogObj.TestCodeDR=RepResObj.TestCodeDR
....s RepResLogObj.TestSetDR=RepResObj.TestSetDR
....s RepResLogObj.TextRes=RepResObj.TextRes
....s RepResLogObj.TransmitDate=$zd($h,8)
....s RepResLogObj.Unit=RepResObj.Unit
....s RepResLogObj.VisitNumberReportDR=RepResObj.VisitNumberReportDR
....s RepResLogObj.WorkGroupMachineDR=""
....s sc=RepResLogObj.%Save()
....i ('$SYSTEM.Status.IsOK(sc)) d
.....THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告结果日志失败:"_$SYSTEM.Status.GetErrorText(sc))
....i $d(^dbo.RPVisitNumberReportResSenI("IndexAntibiocs",RepResultDR)) d
.....s AntibioticsDR="" f s AntibioticsDR=$o(^dbo.RPVisitNumberReportResSenI("IndexAntibiocs",RepResultDR,AntibioticsDR)) q:AntibioticsDR="" d
......s RepSenDR=$o(^dbo.RPVisitNumberReportResSenI("IndexAntibiocs",RepResultDR,AntibioticsDR,""))
......s RepSenObj=##Class(dbo.RPVisitNumberReportResSen).%OpenId(RepSenDR)
......s RepSenLogObj=##Class(dbo.RPVisitNumberReportResSenLog).%New()
......s RepSenLogObj.AntibioticsClassDR=RepSenObj.AntibioticsClassDR
......s RepSenLogObj.AntibioticsDR=RepSenObj.AntibioticsDR
......s RepSenLogObj.CheckType=RepSenObj.CheckType
......s RepSenLogObj.ExpertRuleID=RepSenObj.ExpertRuleID
......s RepSenLogObj.IRanges=RepSenObj.IRanges
......s RepSenLogObj.MachSensitivityDR=RepSenObj.MachSensitivityDR
......s RepSenLogObj.Prompt=RepSenObj.Prompt
......s RepSenLogObj.PromptType=RepSenObj.PromptType
......s RepSenLogObj.Reported=RepSenObj.Reported
......s RepSenLogObj.RRanges=RepSenObj.RRanges
......s RepSenLogObj.SDDRanges=RepSenObj.SDDRanges
......s RepSenLogObj.SenMethod=RepSenObj.SenMethod
......s RepSenLogObj.SensitivityDR=RepSenObj.SensitivityDR
......s RepSenLogObj.SenValue=RepSenObj.SenValue
......s RepSenLogObj.Sequence=RepSenObj.Sequence
......s RepSenLogObj.SRanges=RepSenObj.SRanges
......s RepSenLogObj.VisitNumberReportResLogDR=RepResLogObj.RowID
......s sc=RepSenLogObj.%Save()
......i ('$SYSTEM.Status.IsOK(sc)) d
.......THROW ##class(%Exception.General).%New("事务委托","D",,"-1^保存报告结果药敏日志失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
}