对检验的上线,实施和开发的大部分时间都用在做基础数据和联设备对通道这些。对相同的仪器每次都有做项目数据,对通道那些我一直深有感触,一直在构思怎么减少仪器对通道这些做数据的工作量。奈何以前只是浅显的使用M,最开始几年用cache都是主要用C#加sql操作数据库。最近对M感悟深入了可以实现此目标了。
首先需要知道的是M里的move命令,把GLOBAL拷贝到一个新节点。然后知道怎么查出所有的表。再结合拼串的模式访问GLOBAL。这样就能用上面技术快速把一个库的所有基础数据表构造得到一个Std的GLOBAL。然后基于这个Std实现逻辑做大颗粒度的数据导入功能。
按下面代码得到和正式数据同结构的Std数据,这就是咱们的标准数据
/// 把当前库(数据标准的库)的基础数据生成标准数据globle,然后把生成的globle当基准数据供界面选择要哪些仪器或者医嘱的数据
/// w
ClassMethod MakeStdGloble()
{
w !,"是否用当前库数据生成标准数据(Y/N)?"
r *R
w !,"R:",$C(R)
s R=$zcvt($C(R),"U")
i R'="Y" q
//删除老数据
k ^LisDboStd
s rset = ##class(%ResultSet).%New()
d rset.Prepare("select TABLE_NAME from information_schema.TABLES WHERE TABLE_SCHEMA='dbo' and TABLE_TYPE ='BASE TABLE'")
s exeret=rset.Execute()
s colCount=rset.GetColumnCount()
s dealNum=0
While(rset.Next())
{
s colField=rset.GetColumnName(1)
s ColValue=rset.GetDataByName(colField)
//替换下划线
s tableName=$tr(ColValue,"_")
s MaxRowID=0
i $d(@("^dbo."_tableName_"D")) d
.s MaxRowID=(@("^dbo."_tableName_"D"))
//大于20000的不认为是基础数据
i (MaxRowID>20000) continue
//大数据表
i (MaxRowID>2000) d
.zw MaxRowID
.zw tableName
x ("m ^LisDboStd("""_tableName_"D"")=^dbo."_tableName_"D")
x ("m ^LisDboStd("""_tableName_"I"")=^dbo."_tableName_"I")
}
q "构造完成,请导出:^LisDboStd"
}
然后基于Std结构实现拷贝导入的逻辑
ClassMethod InportMachDataMTHD(RowIDS As %String(MAXLEN=99999999), WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
s RowIDS=$g(RowIDS)
s WGMDR=$g(WGMDR)
s NewCode=$g(NewCode)
q ##Class(LIS.WS.DHCLISServiceBase).DeclarativeTrans("OTH.DHCStdData","InportMachDataDo",RowIDS, WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions)
}
ClassMethod InportTestSetDataMTHD(RowIDS As %String(MAXLEN=99999999), WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
s RowIDS=$g(RowIDS)
s WGMDR=$g(WGMDR)
s NewCode=$g(NewCode)
q ##Class(LIS.WS.DHCLISServiceBase).DeclarativeTrans("OTH.DHCStdData","InportTestSetDataDo",RowIDS, WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions)
q ""
}
ClassMethod TryCopyIDPTestCodePak(Sessions)
{
s FCode="" f s FCode=$o(^LisDboStd("BTIDPTestCodePakI","IndexCode",FCode)) q:FCode="" d
.s RowID="" f s RowID=$o(^LisDboStd("BTIDPTestCodePakI","IndexCode",FCode,RowID)) q:RowID="" d
..d ..TryCopyOneIDPTestCodePak(RowID,"",Sessions)
q ""
}
ClassMethod InportMachDataDo(RowIDS As %String(MAXLEN=99999999), WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
s RowIDS=$g(RowIDS)
s WGMDR=$g(WGMDR)
s NewCode=$g(NewCode)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s RetMsg=""
f i=1:1:$l(RowIDS,"^") d
.s RowID=$p(RowIDS,"^",i)
.s RowData=$g(^LisDboStd("BTMIMachineParameterD",RowID))
.s Code=$lg(RowData,2)
.i $l(NewCode) s Code=NewCode
.s CodeI=##Class(LIS.Util.Common).IndexData(Code)
.i $d(^dbo.BTMIMachineParameterI("IndexCode",HospitalDR,CodeI)) d q
..s RetMsg="当前库已经有代码为:"_Code_"的仪器数据。"
.s WorkGroupMachineDR=$lg(RowData,6)
.s NewWGMDR=WGMDR
.i '$l(NewWGMDR) d
..
..s NewWGMDR=..TryCopyWGM(WorkGroupMachineDR,"",Sessions)
.
.s NewMiObj=##Class(dbo.BTMIMachineParameter).%New()
.s NewMiObj.Code=Code
.s NewMiObj.CName=$lg(RowData,3)
.s NewMiObj.HospitalDR=HospitalDR
.s NewMiObj.LName=$lg(RowData,5)
.s NewMiObj.WorkGroupMachineDR=NewWGMDR
.s RoomDR=$lg(RowData,7)
.i $l(RoomDR) d
..s RoomDR=..TryCopyRoom(RoomDR,"",Sessions)
.s NewMiObj.RoomDR=RoomDR
.s NewMiObj.RegisterDeviceDR=""
.s NewMiObj.IPAddress=$lg(RowData,9)
.s NewMiObj.PortNo=$lg(RowData,10)
.s NewMiObj.CommDirection=$lg(RowData,11)
.s NewMiObj.DelimiterForTests=$lg(RowData,12)
.s NewMiObj.DelimiterForResults=$lg(RowData,13)
.s NewMiObj.DelimiterForAnt=$lg(RowData,14)
.s NewMiObj.DelimiterForSen=$lg(RowData,15)
.s NewMiObj.IFProgram=$lg(RowData,16)
.s NewMiObj.ComPort=$lg(RowData,17)
.s NewMiObj.BaudRate=$lg(RowData,18)
.s NewMiObj.DataBits=$lg(RowData,19)
.s NewMiObj.StopBits=$lg(RowData,20)
.s NewMiObj.Parity=$lg(RowData,21)
.s NewMiObj.DeviceCode=$lg(RowData,22)
.s NewMiObj.Sequence=$lg(RowData,23)
.s NewMiObj.Active=$lg(RowData,24)
.s NewMiObj.IsStart=$lg(RowData,25)
.s NewMiObj.OpMessage=$lg(RowData,26)
.s NewMiObj.JobID=$lg(RowData,27)
.s NewMiObj.Serialnumber=$lg(RowData,28)
.s NewMiObj.LicenseKey=""
.s NewMiObj.ViewQcMap=$lg(RowData,30)
.s NewMiObj.IsSendPanic=$lg(RowData,31)
.s NewMiObj.AutoAcceptUserDR=""
.s NewMiObj.AutoEntryUserDR=""
.s NewMiObj.AutoAuthUserDR=""
.s NewMiObj.IsChgTranEpis=$lg(RowData,35)
.s NewMiObj.LinkWGMachines=""
.s NewMiObj.StartWebService=""
.s NewMiObj.LastStartIP=""
.s NewMiObj.AutoSendMidReport=$lg(RowData,39)
.s NewMiObj.IsAllowScanedTC=$lg(RowData,40)
.s sc=NewMiObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器失败:"_$SYSTEM.Status.GetErrorText(sc))
.
.d ..TryCopyMIMachineTestCode(RowID,NewMiObj.RowID,Sessions)
.
.d ..TryCopyMIMachineTestCodeTrans(RowID,NewMiObj.RowID,Sessions)
.
.d ..TryCopyMIMachineMicroSens(RowID,NewMiObj.RowID,Sessions)
.
.d ..TryCopyMIMachineMicroBugs(RowID,NewMiObj.RowID,Sessions)
.
.d ..TryCopyMIMachineMicroAntiBio(RowID,NewMiObj.RowID,Sessions)
q RetMsg
}
ClassMethod InportTestSetDataDo(RowIDS As %String(MAXLEN=99999999), WGMDR, NewCode, P3, P4, P5, P6, P7, P8, P9, P10, P11, P12, P13, Sessions, Output RowCount As %String) As %String
{
s RowIDS=$g(RowIDS)
s WGMDR=$g(WGMDR)
s NewCode=$g(NewCode)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
f i=1:1:$l(RowIDS,"^") d
.s RowID=$p(RowIDS,"^",i)
.s RowData=$g(^LisDboStd("BTTestSetD",RowID))
.s Code=$lg(RowData,2)
.i $l(NewCode) s Code=NewCode
.s CodeI=##Class(LIS.Util.Common).IndexData(Code)
.i $d(^dbo.BTTestSetI("IndexCode",HospitalDR,CodeI)) d q
..s RetMsg="当前库已经有代码为:"_Code_"的医嘱数据。"
.s WorkGroupMachineDR=$lg(RowData,13)
.i '$l(WorkGroupMachineDR) s WorkGroupMachineDR=$o(^LisDboStd("BTTestSetWorkGroupMachineI","IndexMaster",RowID,""))
.s NewWGMDR=WGMDR
.i ('$l(NewWGMDR)),$l(WorkGroupMachineDR) d
..
..s NewWGMDR=..TryCopyWGM(WorkGroupMachineDR,"",Sessions)
.
.i '$l(NewWGMDR) q
.s SpeciesDR=$lg(RowData,8)
.i $l(SpeciesDR) d
..
..s SpeciesDR=..TryCopySpecies(SpeciesDR,"",Sessions)
.s SpecimenDR=$lg(RowData,10)
.i $l(SpecimenDR) d
..
..s SpecimenDR=..TryCopySpecimen(SpecimenDR,"",Sessions)
.s ContainerDR=$lg(RowData,11)
.i $l(ContainerDR) d
..
..s ContainerDR=..TryCopyContainer(ContainerDR,"",Sessions)
.s CostItemDR=$lg(RowData,14)
.i $l(CostItemDR) d
..
..s CostItemDR=..TryCopyCostItem(CostItemDR,"",Sessions)
.
.s NewTestSetObj=##Class(dbo.BTTestSet).%New()
.s NewTestSetObj.Code=Code
.s NewTestSetObj.CName=$lg(RowData,3)
.s NewTestSetObj.HospitalDR=HospitalDR
.s NewTestSetObj.EName=$lg(RowData,5)
.s NewTestSetObj.Description=$lg(RowData,6)
.s NewTestSetObj.HISCode=$lg(RowData,7)
.s NewTestSetObj.SpeciesDR=SpeciesDR
.s NewTestSetObj.Urgent=$lg(RowData,9)
.s NewTestSetObj.SpecimenDR=SpecimenDR
.s NewTestSetObj.ContainerDR=ContainerDR
.s NewTestSetObj.MergeType=$lg(RowData,12)
.s NewTestSetObj.WorkGroupMachineDR=NewWGMDR
.s NewTestSetObj.CostItemDR=CostItemDR
.s NewTestSetObj.Sequence=$lg(RowData,17)
.s NewTestSetObj.Active=$lg(RowData,18)
.s NewTestSetObj.ReportType=$lg(RowData,19)
.s NewTestSetObj.LinkStr=$lg(RowData,20)
.s NewTestSetObj.LinkType=$lg(RowData,21)
.s NewTestSetObj.WorkGroupDR=WGDR
.s NewTestSetObj.ExtraFlag=$lg(RowData,23)
.s NewTestSetObj.ReportRemark=$lg(RowData,24)
.s NewTestSetObj.MICDefDrugRule=$lg(RowData,25)
.s NewTestSetObj.PositiveAlarn=$lg(RowData,26)
.s NewTestSetObj.WorkRatio=$lg(RowData,27)
.s NewTestSetObj.ReportShowType=$lg(RowData,28)
.s NewTestSetObj.ReceivableFee=$lg(RowData,29)
.s NewTestSetObj.TestContent=$lg(RowData,30)
.s NewTestSetObj.TestMethod=$lg(RowData,31)
.s NewTestSetObj.TestConclusion=$lg(RowData,32)
.s NewTestSetObj.CollectPrompt=$lg(RowData,33)
.s NewTestSetObj.ReportPrompt=$lg(RowData,34)
.s NewTestSetObj.EpisRuleName=$lg(RowData,36)
.s sc=NewTestSetObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝医嘱失败:"_$SYSTEM.Status.GetErrorText(sc))
.
.d ..TryCopyTestSetOtherData(RowID,NewTestSetObj.RowID,NewWGMDR,Sessions)
q ""
}
ClassMethod TryCopyMIMachineMicroAntiBio(StdMi, Mi, Sessions)
{
s StdMi=$g(StdMi)
s Mi=$g(Mi)
s Sessions=$g(Sessions)
s StdAntibioticsDR="" f s StdAntibioticsDR=$o(^LisDboStd("BTMIMachineMicroAntiBioI","IndexMaster",StdMi,StdAntibioticsDR)) q:StdAntibioticsDR="" d
.s MachineAntiBiotic="" f s MachineAntiBiotic=$o(^LisDboStd("BTMIMachineMicroAntiBioI","IndexMaster",StdMi,StdAntibioticsDR,MachineAntiBiotic)) q:MachineAntiBiotic="" d
..s RowID="" f s RowID=$o(^LisDboStd("BTMIMachineMicroAntiBioI","IndexMaster",StdMi,StdAntibioticsDR,MachineAntiBiotic,RowID)) q:RowID="" d
...s RowData=$g(^LisDboStd("BTMIMachineMicroAntiBioD",RowID))
...
...s AntibioticsDR=..TryCopyAntibiotics(StdAntibioticsDR,"",Sessions)
...i '$d(^dbo.BTMIMachineMicroAntiBioI("IndexMaster",Mi,AntibioticsDR,MachineAntiBiotic)) d
....s NewObj=##Class(dbo.BTMIMachineMicroAntiBio).%New()
....s NewObj.MachineParameterDR=Mi
....s NewObj.MachineAntiBiotic=$lg(RowData,3)
....s NewObj.AntibioticsDR=AntibioticsDR
....s sc=NewObj.%Save()
....i ('$SYSTEM.Status.IsOK(sc)) d
.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器关联抗生素失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyMIMachineMicroBugs(StdMi, Mi, Sessions)
{
s StdMi=$g(StdMi)
s Mi=$g(Mi)
s Sessions=$g(Sessions)
s StdOrganismDR="" f s StdOrganismDR=$o(^LisDboStd("BTMIMachineMicroBugsI","IndexMaster",StdMi,StdOrganismDR)) q:StdOrganismDR="" d
.s MachineBug="" f s MachineBug=$o(^LisDboStd("BTMIMachineMicroBugsI","IndexMaster",StdMi,StdOrganismDR,MachineBug)) q:MachineBug="" d
..s RowID="" f s RowID=$o(^LisDboStd("BTMIMachineMicroBugsI","IndexMaster",StdMi,StdOrganismDR,MachineBug,RowID)) q:RowID="" d
...s RowData=$g(^LisDboStd("BTMIMachineMicroBugsD",RowID))
...
...s OrganismDR=..TryCopyOrganism(StdOrganismDR,"",Sessions)
...i '$d(^dbo.BTMIMachineMicroBugsI("IndexMaster",Mi,OrganismDR,MachineBug)) d
....s NewObj=##Class(dbo.BTMIMachineMicroBugs).%New()
....s NewObj.MachineParameterDR=Mi
....s NewObj.MachineBug=$lg(RowData,3)
....s NewObj.OrganismDR=OrganismDR
....s sc=NewObj.%Save()
....i ('$SYSTEM.Status.IsOK(sc)) d
.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器关联细菌失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyMIMachineMicroSens(StdMi, Mi, Sessions)
{
s StdMi=$g(StdMi)
s Mi=$g(Mi)
s Sessions=$g(Sessions)
s StdSensitivityDR="" f s StdSensitivityDR=$o(^LisDboStd("BTMIMachineMicroSensI","IndexMaster",StdMi,StdSensitivityDR)) q:StdSensitivityDR="" d
.s MachineSensitivity="" f s MachineSensitivity=$o(^LisDboStd("BTMIMachineMicroSensI","IndexMaster",StdMi,StdSensitivityDR,MachineSensitivity)) q:MachineSensitivity="" d
..s RowID="" f s RowID=$o(^LisDboStd("BTMIMachineMicroSensI","IndexMaster",StdMi,StdSensitivityDR,MachineSensitivity,RowID)) q:RowID="" d
...s RowData=$g(^LisDboStd("BTMIMachineMicroSensD",RowID))
...
...s SensitivityDR=..TryCopySensitivity(StdSensitivityDR,"",Sessions)
...i '$d(^dbo.BTMIMachineMicroSensI("IndexMaster",Mi,SensitivityDR,MachineSensitivity)) d
....s NewObj=##Class(dbo.BTMIMachineMicroSens).%New()
....s NewObj.MachineParameterDR=Mi
....s NewObj.MachineSensitivity=$lg(RowData,3)
....s NewObj.SensitivityDR=SensitivityDR
....s sc=NewObj.%Save()
....i ('$SYSTEM.Status.IsOK(sc)) d
.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器关联药敏结果失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyMIMachineTestCodeDil(StdMiTsDR, MiTsDR, Sessions)
{
s StdMiTsDR=$g(StdMiTsDR)
s MiTsDR=$g(MiTsDR)
s Sessions=$g(Sessions)
s Result="" f s Result=$o(^LisDboStd("BTMIMachineTestCodeDilI","IndexMaster",StdMiTsDR,Result)) q:Result="" d
.s RowID="" f s RowID=$o(^LisDboStd("BTMIMachineTestCodeDilI","IndexMaster",StdMiTsDR,Result,RowID)) q:RowID="" d
..s RowData=$g(^LisDboStd("BTMIMachineTestCodeDilD",RowID))
..i '$d(^dbo.BTMIMachineTestCodeDilI("IndexMaster",MiTsDR,Result)) d
...s NewObj=##Class(dbo.BTMIMachineTestCodeDil).%New()
...s NewObj.MachineTestCodeDR=MiTsDR
...s NewObj.DilCode=$lg(RowData,3)
...s NewObj.DilName=$lg(RowData,4)
...s sc=NewObj.%Save()
...i ('$SYSTEM.Status.IsOK(sc)) d
....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器项目稀释倍数失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyMIMachineTestCodeTrans(StdMi, Mi, Sessions)
{
s StdMi=$g(StdMi)
s Mi=$g(Mi)
s Sessions=$g(Sessions)
s Result="" f s Result=$o(^LisDboStd("BTMIMachineTestCodeTransI","IndexMaster",StdMi,Result)) q:Result="" d
.s RowID="" f s RowID=$o(^LisDboStd("BTMIMachineTestCodeTransI","IndexMaster",StdMi,Result,RowID)) q:RowID="" d
..s RowData=$g(^LisDboStd("BTMIMachineTestCodeTransD",RowID))
..i '$d(^dbo.BTMIMachineTestCodeTransI("IndexMaster",Mi,Result)) d
...s NewObj=##Class(dbo.BTMIMachineTestCodeTrans).%New()
...s NewObj.MachineParameterDR=Mi
...s NewObj.Result=$lg(RowData,3)
...s NewObj.NewResult=$lg(RowData,4)
...s sc=NewObj.%Save()
...i ('$SYSTEM.Status.IsOK(sc)) d
....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器项目翻译失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyMIMachineTestCode(StdMi, Mi, Sessions)
{
s StdMi=$g(StdMi)
s Mi=$g(Mi)
s Sessions=$g(Sessions)
s StdTestCodeDR="" f s StdTestCodeDR=$o(^LisDboStd("BTMIMachineTestCodeI","IndexMaster",StdMi,StdTestCodeDR)) q:StdTestCodeDR="" d
.s StdResultChannel="" f s StdResultChannel=$o(^LisDboStd("BTMIMachineTestCodeI","IndexMaster",StdMi,StdTestCodeDR,StdResultChannel)) q:StdResultChannel="" d
..s RowID="" f s RowID=$o(^LisDboStd("BTMIMachineTestCodeI","IndexMaster",StdMi,StdTestCodeDR,StdResultChannel,RowID)) q:RowID="" d
...s RowData=$g(^LisDboStd("BTMIMachineTestCodeD",RowID))
...s TestCodeDR=..TryCopyTestCode(StdTestCodeDR,"",Sessions)
...i '$d(^dbo.BTMIMachineTestCodeI("IndexMaster",Mi,TestCodeDR,StdResultChannel)) d
....s NewObj=##Class(dbo.BTMIMachineTestCode).%New()
....s NewObj.MachineParameterDR=Mi
....s NewObj.TestCodeDR=TestCodeDR
....s NewObj.UPChannel=$lg(RowData,4)
....s NewObj.ResultChannel=$lg(RowData,5)
....s NewObj.Scale=$lg(RowData,6)
....s NewObj.Active=$lg(RowData,7)
....s NewObj.IsNotQC=$lg(RowData,8)
....s NewObj.QCType=$lg(RowData,9)
....s sc=NewObj.%Save()
....i ('$SYSTEM.Status.IsOK(sc)) d
.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝仪器项目失败:"_$SYSTEM.Status.GetErrorText(sc))
....
....d ..TryCopyMIMachineTestCodeDil(RowID,NewObj.RowID,Sessions)
q ""
}
ClassMethod TryCopyTestSetOtherData(StdTsDR, TsDR, WGMDR, Sessions)
{
s StdTsDR=$g(StdTsDR)
s TsDR=$g(TsDR)
s WGMDR=$g(WGMDR)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
i '$d(^dbo.BTTestSetWorkGroupMachineI("IndexMaster",TsDR,WGMDR)) d
.s NewTsWGMObj=##Class(dbo.BTTestSetWorkGroupMachine).%New()
.s NewTsWGMObj.Active=1
.s NewTsWGMObj.AlowedPrint=1
.s NewTsWGMObj.IsDefault=1
.s NewTsWGMObj.NoAlowedFormula=""
.s NewTsWGMObj.Sequence=99
.s NewTsWGMObj.TestSetDR=TsDR
.s NewTsWGMObj.WorkGroupMachineDR=WGMDR
.s sc=NewTsWGMObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^插入医嘱关联工作小组失败:"_$SYSTEM.Status.GetErrorText(sc))
s StdWGDR="" f s StdWGDR=$o(^LisDboStd("BTTestSetLayoutI","IndexMaster",StdTsDR,StdWGDR)) q:StdWGDR="" d
.s StdTestCodeDR="" f s StdTestCodeDR=$o(^LisDboStd("BTTestSetLayoutI","IndexMaster",StdTsDR,StdWGDR,StdTestCodeDR)) q:StdTestCodeDR="" d
..s StdTestCodeRowData=^LisDboStd("BTTestCodeD",StdTestCodeDR)
..
..s Active=$lg(StdTestCodeRowData,25)
..i Active=0 q
..
..s TestCodeDR=..TryCopyTestCode(StdTestCodeDR,"",Sessions)
..s StdLayOutDR="" f s StdLayOutDR=$o(^LisDboStd("BTTestSetLayoutI","IndexMaster",StdTsDR,StdWGDR,StdTestCodeDR,StdLayOutDR)) q:StdLayOutDR="" d
...
...d ..TryCopyTestSetLayOut(StdLayOutDR,TsDR,WGDR,TestCodeDR,Sessions)
d ..TryCopyIDPLink(StdTsDR,TsDR,Sessions)
d ..TryCopyIDPFastTestCodePak(StdTsDR,TsDR,Sessions)
q
}
ClassMethod TryCopyIDPFastTestCodePak(StdTestSetDR, TestSetDR, Sessions)
{
s StdTestSetDR=$g(StdTestSetDR)
s TestSetDR=$g(TestSetDR)
s Sessions=$g(Sessions)
s StdSpecimenDR="" f s StdSpecimenDR=$o(^LisDboStd("BTIDPFastTestCodePakI","IndexMaster",StdTestSetDR,StdSpecimenDR)) q:StdSpecimenDR="" d
.s SpecimenDR=..TryCopySpecimen(StdSpecimenDR,"",StdSpecimenDR)
.s StdIDPTestCodePakDR="" f s StdIDPTestCodePakDR=$o(^LisDboStd("BTIDPFastTestCodePakI","IndexMaster",StdTestSetDR,StdSpecimenDR,StdIDPTestCodePakDR)) q:StdIDPTestCodePakDR="" d
..s IDPTestCodePakDR=..TryCopyOneIDPTestCodePak(StdIDPTestCodePakDR,"",Sessions)
..s RowID="" f s RowID=$o(^LisDboStd("BTIDPFastTestCodePakI","IndexMaster",StdTestSetDR,StdSpecimenDR,StdIDPTestCodePakDR,RowID)) q:RowID="" d
...i '$d(^dbo.BTIDPFastTestCodePakI("IndexMaster",TestSetDR,##Class(LIS.Util.Common).IndexData(SpecimenDR),IDPTestCodePakDR)) d
....s NewObj=##Class(dbo.BTIDPFastTestCodePak).%New()
....s NewObj.TestSetDR=TestSetDR
....s NewObj.SpecimenDR=SpecimenDR
....s NewObj.IDPTestCodePakDR=IDPTestCodePakDR
....s sc=NewObj.%Save()
....i ('$SYSTEM.Status.IsOK(sc)) d
.....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定快速结果失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyOneIDPTestCodePak(StdDR, CodeStart, Sessions)
{
s StdDR=$g(StdDR)
i StdDR<0 q ""
s CodeStart=$g(CodeStart)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s RowData=$g(^LisDboStd("BTIDPCultureMedPakD",StdDR))
s Code=CodeStart_$lg(RowData,2)
s CodeI=##Class(LIS.Util.Common).IndexData(Code)
s RetDR=""
i $d(^dbo.BTIDPTestCodePakI("IndexCode",FCode)) d
.s RetDR=$o(^dbo.BTIDPTestCodePakI("IndexCode",FCode,""))
e d
.s NewObj=##Class(dbo.BTIDPTestCodePak).%New()
.s NewObj.Code=$lg(RowData,2)
.s NewObj.CName=$lg(RowData,3)
.s NewObj.Remark=$lg(RowData,4)
.s NewObj.Sequence=$lg(RowData,5)
.s NewObj.Active=$lg(RowData,6)
.s IDPElementDR=$lg(RowData,7)
.i $l(IDPElementDR) d
..s IDPElementDR=..TryCopyIDPElement(IDPElementDR,"",Sessions)
.s NewObj.IDPElementDR=IDPElementDR
.s sc=NewObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程项目包数据失败:"_$SYSTEM.Status.GetErrorText(sc))
.
...d ..TryCopyIDPTestCodePakItem(RowID,NewObj.RowID,Sessions)
.s RetDR=NewObj.RowID
q RetDR
}
ClassMethod TryCopyIDPTestCodePakItem(StdPakDR, PakDR, Sessions)
{
s StdPakDR=$g(StdPakDR)
s PakDR=$g(PakDR)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s StdTestCodeDR="" f s StdTestCodeDR=$o(^LisDboStd("BTIDPTestCodePakItemI","IndexTestCodeDR",StdPakDR,StdTestCodeDR)) q:StdTestCodeDR="" d
.
.s TestCodeDR=..TryCopyTestCode(StdTestCodeDR,"",Sessions)
.s RowID="" f s RowID=$o(^LisDboStd("BTIDPTestCodePakItemI","IndexTestCodeDR",StdPakDR,StdTestCodeDR,RowID)) q:RowID="" d
..i '$d(^dbo.BTIDPTestCodePakItemI("IndexTestCodeDR",PakDR,TestCodeDR)) d
...s RowData=$g(^LisDboStd("BTIDPTestCodePakItemD",RowID))
...s NewObj=##Class(dbo.BTIDPTestCodePakItem).%New()
...s NewObj.IDPTestCodePakDR=PakDR
...s NewObj.TestCodeDR=TestCodeDR
...s NewObj.DefaultResult=$lg(RowData,4)
...s NewObj.Sequence=$lg(RowData,5)
...s NewObj.Active=$lg(RowData,6)
...s sc=NewObj.%Save()
...i ('$SYSTEM.Status.IsOK(sc)) d
....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程项目包元素失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyIDPLink(StdTestSetDR, TestSetDR, Sessions)
{
s StdTestSetDR=$g(StdTestSetDR)
s TestSetDR=$g(TestSetDR)
s Sessions=$g(Sessions)
s RetDR=""
s StdSpecimenDR="" f s StdSpecimenDR=$o(^LisDboStd("BTIDPLinkI","IndexTestSetDR",StdTestSetDR,StdSpecimenDR)) q:StdSpecimenDR="" d
.s SpecimenDR=..TryCopySpecimen(StdSpecimenDR,"",Sessions)
.s RowID="" f s RowID=$o(^LisDboStd("BTIDPLinkI","IndexTestSetDR",StdTestSetDR,StdSpecimenDR,RowID)) q:RowID="" d
..s RowData=$g(^LisDboStd("BTIDPLinkD",RowID))
..i $d(^dbo.BTIDPLinkI("IndexTestSetDR",TestSetDR,##Class(LIS.Util.Common).IndexData(SpecimenDR))) d
...s RetDR=$o(^dbo.BTIDPLinkI("IndexTestSetDR",TestSetDR,##Class(LIS.Util.Common).IndexData(SpecimenDR),""))
..e d
...s NewObj=##Class(dbo.BTIDPLink).%New()
...s NewObj.TestSetDR=TestSetDR
...s NewObj.SpecimenDR=SpecimenDR
...s IDPPakDR=$lg(RowData,4)
...i $l(IDPPakDR) d
....
....s IDPPakDR=..TryCopyIDPPak(IDPPakDR,"",Sessions)
...s NewObj.IDPPakDR=IDPPakDR
...s IDPCultureMedPakDR=$lg(RowData,5)
...i $l(IDPPakDR) d
....
....s IDPPakDR=..TryCopyIDPCultureMedPak(IDPPakDR,"",Sessions)
...s NewObj.IDPCultureMedPakDR=IDPCultureMedPakDR
...s sc=NewObj.%Save()
...i ('$SYSTEM.Status.IsOK(sc)) d
....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程关联数据失败:"_$SYSTEM.Status.GetErrorText(sc))
...s RetDR=NewObj.RowID
q RetDR
}
ClassMethod TryCopyIDPCultureMedPak(StdDR, CodeStart, Sessions)
{
s StdDR=$g(StdDR)
i StdDR<0 q ""
s CodeStart=$g(CodeStart)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s RowData=$g(^LisDboStd("BTIDPCultureMedPakD",StdDR))
s Code=CodeStart_$lg(RowData,2)
s CodeI=##Class(LIS.Util.Common).IndexData(Code)
s RetDR=""
i $d(^dbo.BTIDPCultureMedPakI("IndexCode",CodeI)) d
.s RetDR=$o(^dbo.BTIDPCultureMedPakI("IndexCode",CodeI,""))
e d
.s NewObj=##Class(dbo.BTIDPCultureMedPak).%New()
.s NewObj.Code=Code
.s NewObj.CName=$lg(RowData,3)
.s NewObj.Type=$lg(RowData,4)
.s NewObj.Remark=$lg(RowData,5)
.s NewObj.EntryCode=$lg(RowData,6)
.s NewObj.Sequence=$lg(RowData,7)
.s NewObj.PrintNum=$lg(RowData,8)
.s sc=NewObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝培养基组失败:"_$SYSTEM.Status.GetErrorText(sc))
.s RetDR=NewObj.RowID
d ..TryCopyIDPCultureMedPakItem(StdDR,RetDR,Sessions)
q RetDR
}
ClassMethod TryCopyIDPCultureMedPakItem(StdPakDR, PakDR, Sessions)
{
s StdPakDR=$g(StdPakDR)
s PakDR=$g(PakDR)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s StdSequence="" f s StdSequence=$o(^LisDboStd("BTIDPCultureMedPakItemI","IndexMaster",StdPakDR,StdSequence)) q:StdSequence="" d
.s StdIDPCultureMediumDR="" f s StdIDPCultureMediumDR=$o(^LisDboStd("BTIDPCultureMedPakItemI","IndexMaster",StdPakDR,StdSequence,StdIDPCultureMediumDR)) q:StdIDPCultureMediumDR="" d
..
..s IDPCultureMediumDR=..TryCopyIDPCultureMedium(StdIDPCultureMediumDR,"",Sessions)
..s RowID="" f s RowID=$o(^LisDboStd("BTIDPCultureMedPakItemI","IndexMaster",StdPakDR,StdSequence,StdIDPCultureMediumDR,RowID)) q:RowID="" d
...s RowData=$g(^LisDboStd("BTIDPCultureMedPakItemD",RowID))
...s NewObj=##Class(dbo.BTIDPCultureMedPakItem).%New()
...s NewObj.IDPCultureMedPakDR=PakDR
...s NewObj.IDPCultureMediumDR=IDPCultureMediumDR
...s NewObj.Sequence=$lg(RowData,4)
...s NewObj.DefRes=$lg(RowData,5)
...s IDPPureMediumDR=$lg(RowData,6)
...i $l(IDPPureMediumDR) d
....s IDPPureMediumDR=..TryCopyIDPCultureMedium(IDPPureMediumDR,"",Sessions)
...s NewObj.IDPPureMediumDR=IDPPureMediumDR
..s sc=NewObj.%Save()
..i ('$SYSTEM.Status.IsOK(sc)) d
...THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程包失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyIDPCultureMedium(StdDR, CodeStart, Sessions)
{
s StdDR=$g(StdDR)
i StdDR<0 q ""
s CodeStart=$g(CodeStart)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s RowData=$g(^LisDboStd("BTIDPCultureMediumD",StdDR))
s Code=CodeStart_$lg(RowData,2)
s CodeI=##Class(LIS.Util.Common).IndexData(Code)
s RetDR=""
i $d(^dbo.BTIDPCultureMediumI("IndexCode",CodeI)) d
.s RetDR=$o(^dbo.BTIDPCultureMediumI("IndexCode",CodeI,""))
e d
.s NewObj=##Class(dbo.BTIDPCultureMedium).%New()
.s NewObj.Code=Code
.s NewObj.CName=$lg(RowData,3)
.s NewObj.Condition=$lg(RowData,4)
.s NewObj.Cycle=$lg(RowData,5)
.s NewObj.CultureInterval=$lg(RowData,6)
.s NewObj.BindTestCodeDR=$lg(RowData,7)
.s NewObj.Remark=$lg(RowData,8)
.s NewObj.EntryCode=$lg(RowData,9)
.s NewObj.Sequence=$lg(RowData,10)
.s NewObj.DefBatchNo=$lg(RowData,11)
.s NewObj.DefValidityDate=$lg(RowData,12)
.s NewObj.Weight=$lg(RowData,13)
.s NewObj.MinCollection=$lg(RowData,14)
.s sc=NewObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程培养基失败:"_$SYSTEM.Status.GetErrorText(sc))
.s RetDR=NewObj.RowID
.
.d ..TryCopyIDPCultureDesk(StdDR,RetDR,Sessions)
q RetDR
}
ClassMethod TryCopyIDPCultureDesk(StdMidDR, MidDR, Sessions)
{
s StdMidDR=$g(StdMidDR)
s MidDR=$g(MidDR)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s Sequence="" f s Sequence=$o(^LisDboStd("BTIDPCultureDeskI","IndexMaster",StdMidDR,Sequence)) q:Sequence="" d
.s RowID="" f s RowID=$o(^LisDboStd("BTIDPCultureDeskI","IndexMaster",StdMidDR,Sequence,RowID)) q:RowID="" d
..s RowData=$g(^LisDboStd("BTIDPCultureDeskD",RowID))
..s NewObj=##Class(dbo.BTIDPCultureDesk).%New()
..s NewObj.IDPCultureMediumDR=MidDR
..s NewObj.Remark=$lg(RowData,3)
..s NewObj.IsDefault=$lg(RowData,4)
..s NewObj.IsPanic=$lg(RowData,5)
..s NewObj.IsPositive=$lg(RowData,6)
..s NewObj.Sequence=$lg(RowData,7)
..s NewObj.IDPMachDR=""
..s sc=NewObj.%Save()
..i ('$SYSTEM.Status.IsOK(sc)) d
...THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程培养基失败:"_$SYSTEM.Status.GetErrorText(sc))
q ""
}
ClassMethod TryCopyIDPPak(StdDR, CodeStart, Sessions)
{
s StdDR=$g(StdDR)
i StdDR<0 q ""
s CodeStart=$g(CodeStart)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s RowData=$g(^LisDboStd("BTIDPPakD",StdDR))
s Code=CodeStart_$lg(RowData,2)
s CodeI=##Class(LIS.Util.Common).IndexData(Code)
s RetDR=""
i $d(^dbo.BTIDPPakI("IndexCode",CodeI)) d
.s RetDR=$o(^dbo.BTIDPPakI("IndexCode",CodeI,""))
e d
.s NewObj=##Class(dbo.BTIDPPak).%New()
.s NewObj.Code=Code
.s NewObj.CName=$lg(RowData,3)
.s NewObj.Remark=$lg(RowData,4)
.s NewObj.Sequence=$lg(RowData,5)
.s NewObj.Active=$lg(RowData,6)
.s sc=NewObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程包失败:"_$SYSTEM.Status.GetErrorText(sc))
.s RetDR=NewObj.RowID
.
.d ..TryCopyIDPElementPak(StdDR,RetDR,-100000000000000,-100000000000000,Sessions)
q RetDR
}
ClassMethod TryCopyIDPElementPak(StdPakDR, PakDR, StdParentDR, ParentDR, Sessions)
{
s StdPakDR=$g(StdPakDR)
s PakDR=$g(PakDR)
s StdParentDR=$g(StdParentDR)
s ParentDR=$g(ParentDR)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s StdSequence="" f s StdSequence=$o(^LisDboStd("BTIDPElementPakI","IndexSequence",StdPakDR,StdParentDR,StdSequence)) q:StdSequence="" d
.s RowID="" f s RowID=$o(^LisDboStd("BTIDPElementPakI","IndexSequence",StdPakDR,StdParentDR,StdSequence,RowID)) q:RowID="" d
..s RowData=$g(^LisDboStd("BTIDPElementPakD",RowID))
..s StdIDPElementDR=$lg(RowData,3)
..s IDPElementDR=..TryCopyIDPElement(StdIDPElementDR,"",Sessions)
..s NewObj=##Class(dbo.BTIDPElementPak).%New()
..s NewObj.IDPPakDR=PakDR
..s NewObj.IDPElementDR=IDPElementDR
..s NewObj.DefaultResult=$lg(RowData,4)
..s ParentDRVal=""
..i ParentDR>0 s ParentDRVal=ParentDR
..s NewObj.ParentDR=ParentDRVal
..s NewObj.Sequence=$lg(RowData,6)
..s NewObj.Active=$lg(RowData,7)
..s sc=NewObj.%Save()
..i ('$SYSTEM.Status.IsOK(sc)) d
...THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程包失败:"_$SYSTEM.Status.GetErrorText(sc))
..
..d ..TryCopyIDPElementPak(StdPakDR,PakDR,RowID,NewObj.RowID,Sessions)
q ""
}
ClassMethod TryCopyIDPElement(StdDR, CodeStart, Sessions)
{
s StdDR=$g(StdDR)
i StdDR<0 q ""
s CodeStart=$g(CodeStart)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s RowData=$g(^LisDboStd("BTIDPElementD",StdDR))
s Code=CodeStart_$lg(RowData,2)
s CodeI=##Class(LIS.Util.Common).IndexData(Code)
s RetDR=""
i $d(^dbo.BTIDPElementI("IndexCode",CodeI)) d
.s RetDR=$o(^dbo.BTIDPElementI("IndexCode",CodeI,""))
e d
.s NewObj=##Class(dbo.BTIDPElement).%New()
.s NewObj.Code=Code
.s NewObj.CName=$lg(RowData,3)
.s NewObj.ElementType=$lg(RowData,4)
.s NewObj.BindTestCodeDR=""
.s NewObj.DocterView=$lg(RowData,6)
.s NewObj.NoPrint=$lg(RowData,7)
.s NewObj.PrintNum=$lg(RowData,8)
.s NewObj.Sequence=$lg(RowData,9)
.s NewObj.Active=$lg(RowData,10)
.s sc=NewObj.%Save()
.i ('$SYSTEM.Status.IsOK(sc)) d
..THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程元素失败:"_$SYSTEM.Status.GetErrorText(sc))
.s RetDR=NewObj.RowID
d ..TryCopyIDPElementItem(StdDR,RetDR,Sessions)
q RetDR
}
ClassMethod TryCopyIDPElementItem(StdEleDR, EleDR, Sessions)
{
s StdEleDR=$g(StdEleDR)
s EleDR=$g(EleDR)
s Sessions=$g(Sessions)
s WGDR=$p(Sessions,"^",2)
s HospitalDR=$p(Sessions,"^",5)
s Code="" f s Code=$o(^LisDboStd("BTIDPElementItemI","IndexCode",StdEleDR,Code)) q:Code="" d
.s RowID="" f s RowID=$o(^LisDboStd("BTIDPElementItemI","IndexCode",StdEleDR,Code,RowID)) q:RowID="" d
..s RowData=$g(^LisDboStd("BTIDPElementItemD",RowID))
..
..i '$d(^dbo.BTIDPElementItemI("IndexCode",EleDR,Code)) d
...s NewObj=##Class(dbo.BTIDPElementItem).%New()
...s NewObj.IDPElementDR=EleDR
...s NewObj.Code=$lg(RowData,3)
...s NewObj.CName=$lg(RowData,4)
...s NewObj.Sequence=$lg(RowData,5)
...s NewObj.Active=$lg(RowData,6)
...s sc=NewObj.%Save()
...i ('$SYSTEM.Status.IsOK(sc)) d
....THROW ##class(%Exception.SystemException).%New("事务委托","D",,"-1^拷贝鉴定过程元素子项失败:"_$SYSTEM.Status.GetErrorText(sc))
q RetDR
}
后面还有很多拷贝逻辑。。。
最后做个界面实现选择导入
这样就可以不断搜集“大漂亮”的数据来得到一个供大家选数据的基础数据,后面上线只要选仪器和医嘱了。然后各种相关的数据细化到组合套布局,项目的参考范围和选项一并入库了,选基础数据多香啊。
GLOBAL结合M还是太强了,从不屑到深爱,充分发挥数据库优势。八年的C#和M的结合,从iis到Linux,从ado到M模拟ado,架构成熟,业务完善,真是可以改名叫yaoyaolis了,哈哈–玩笑 推一下M的写法和做标准数据的思路
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)