实验室管理系统[LIS],powerbuilder12.6开发,SQLSERVER2008数据库

210 阅读15分钟

实验室管理系统,powerbuilder12.6开发,SQLSERVER2008数据库

一、主要功能:

是专为医院检验科设计的一套实验室信息管理系统,能将实验仪器与计算机组成网络,使病人样品接收、实验数据存取、报告审核、打印分发,实验数据统计分析等繁杂的操作过程实现了智能化、自动化和规范化管理。有助于提高实验室的整体管理水平,减少漏洞,提高检验质量。
二、技术特点:

1、先进的开发技术:采用sqlserver2008数据库,客户端采用Powerbuilder12.6为开发工具,采用“事务完整性”,三层结构等技术,确保系统的高性能和安全性。
2、稳定性:产品成熟可靠、性能稳定。
3、专业化:产品的开发具有专业性和延续性,为用户提供持续的免费版本升级服务。
4、经济性:满足适用范围内医院的实际需求,性价比优,经济实用。
5、灵活性:系统操作方便,满足用户的不同管理模式。
6、安全性:系统采用多重权限控制,确保系统安全。
7、支持条码、磁卡等。
8、少维护性:产品化软件,减少系统的维护成本。

Long Ll_Row
String  Ls_Doctadviseno,Ls_Requester,Ls_PatientId,Ls_Section,Ls_PatientName,Ls_Bed_No,Ls_Sex,Ls_Diagnostic,Ls_Sampletype
String Ls_Sampleno,Ls_Toponymy,Ls_Examinaimcode,Ls_Examinaim,Ls_Fphm,Ls_Age,Ls_Age_Unit,Ls_Brxz,Ls_Sample_jszt,Ls_executor
DateTime Ld_ReceiveTime,Ld_Birthday,Ld_executeTime
Integer Li_bz,Li_StayHospitalMode,Li_Feestatus,Li_RequestMode,Li_Count
Double  Ld_fee
datetime Ld_REQUESTTIME

FOR Ll_Row = 1 TO dw_accept.RowCount()
Li_bz = dw_accept.Object.bz[Ll_Row]
IF Li_bz = 1 THEN //【标志为1 确定标本接收】
Ls_executor           = dw_accept.Object.executor[Ll_Row]//【接收者】

Ld_executeTime      = dw_accept.Object.executetime[Ll_Row]//【采集时间,此处需要调整,】

Ls_Doctadviseno     = dw_accept.Object.doctadviseno[Ll_Row]
Ls_Requester         = dw_accept.Object.requester[Ll_Row]//【申请医生】
//----------------2018-07-31增加--------------------------------------------------------
Ld_REQUESTTIME   =dw_accept.object.REQUESTTIME[Ll_Row]//【申请日期】
//-------------------------------------------------------------------------------------------------
Li_StayHospitalMode = dw_accept.Object.stayhospitalmode[Ll_Row]//【样本类型:门诊,住院】
//【病人标志】
Ls_PatientId         = dw_accept.Object.patientid[Ll_Row]         //【诊疗卡号或住院号】
Ls_Section          = dw_accept.Object.section[Ll_Row]           //【科室】
Ls_PatientName      = dw_accept.Object.patientname[Ll_Row]//【病人姓名】
Ls_Bed_No           = dw_accept.Object.bed_no[Ll_Row]         //【床号】
Ls_Sex              = dw_accept.Object.sex[Ll_Row]                 //【性别】
Ls_Diagnostic       = dw_accept.Object.diagnostic[Ll_Row]     //【诊断】
Ls_Sampletype       = dw_accept.Object.sampletype[Ll_Row] //【样本类型】
Ls_Sampleno         = dw_accept.Object.sampleno[Ll_Row]    //【样本号】
Ls_Toponymy         = dw_accept.Object.toponymy[Ll_Row]
Ls_Examinaimcode    = dw_accept.Object.examinaimcode[Ll_Row]//【检验项目代码】
Ls_Examinaim        = dw_accept.Object.examinaim[Ll_Row]     //【检验项目】
Ls_Fphm              = dw_accept.Object.fphm[Ll_Row]              //【发票号码】
Ls_Age                = dw_accept.Object.age[Ll_Row]                //【年龄】
Ls_Age_Unit         = dw_accept.Object.age_unit[Ll_Row]         //【年龄单位】
Ls_Brxz               = dw_accept.Object.brxz[Ll_Row]                  //【病人性质】
Ls_Sample_jszt      = dw_accept.Object.sample_jszt[Ll_Row]
Ld_Birthday          = dw_accept.Object.birthday[Ll_Row]           //【出生日期】
Li_RequestMode      = dw_accept.Object.requestmode[Ll_Row]
Ld_fee                 = dw_accept.Object.fee[Ll_Row]                    //【金额】
Li_Feestatus         = dw_accept.Object.feestatus[Ll_Row]        
Ld_ReceiveTime   = f_sysdate()  //【条码接收日期,默认为当前日期,2019-06-08】【服务器端日期】
//【把病人信息插入到Lab_patientinfo的表中】
//【取出表lab_patientinfo中存有该样本号的病人信息数量】    
SELECT count(*)  INTO :Li_Count FROM lab_patientinfo Where sampleno = :Ls_Sampleno;
//================================================================================
//【取病人身份证号码】
string ll_br_sfzh
choose case  Li_StayHospitalMode
case 1//【门诊,2018-07-31,加上门诊事务,以前没加导致无法写入身份证号】
//**********************************************************************
choose case login.his_lb
case '1'//【MY-HIS】
select sfzh into :ll_br_sfzh from mzbrinfor where mzblh=:Ls_PatientId using mz;
if ll_br_sfzh='' or isnull(ll_br_sfzh) then
ll_br_sfzh=''
end if
case '2'//【-HIS】
SELECT   dbo.Com_SickBaseInfo.FIDCardNo AS 身份证号码 into :ll_br_sfzh
FROM      dbo.Com_SickCardInfo INNER JOIN  dbo.Com_SickBaseInfo ON dbo.Com_SickCardInfo.FSickID = dbo.Com_SickBaseInfo.FID
where Com_SickCardInfo.FCardNo =:Ls_PatientId using mz;
if ll_br_sfzh='' or isnull(ll_br_sfzh) then
ll_br_sfzh=''
end if
if Ls_PatientId='0' then
Ls_PatientId=Ls_Fphm
end if
case '3'//【3-儿童医院】
select sfzh into :ll_br_sfzh from mzbrinfor where id=:Ls_PatientId using mz;
if ll_br_sfzh='' or isnull(ll_br_sfzh) then
ll_br_sfzh=''
end if
case '4'    //【4-万达接口】

end choose
//************************************************************************
//================================================================================
case 2//【住院,2018-07-31,加上住院事务,以前没加导致无法写入身份证号】
choose case login.his_lb
case '1'//【MY-HIS】
select sicksfzh into :ll_br_sfzh from zyzysickman where zycode=:Ls_PatientId using zy;
if ll_br_sfzh='' or isnull(ll_br_sfzh) then
ll_br_sfzh=''
end if
case '2'//【HIS】
//select sfzh into :ll_br_sfzh FROM   view_zymx_mysoft where mzblh=:Ls_PatientId using zy;
if ll_br_sfzh='' or isnull(ll_br_sfzh) then
ll_br_sfzh=''
end if
case '3'//【3-】
select top 1 sfzh into :ll_br_sfzh FROM   view_zymx_mysoft where zyhm=:Ls_PatientId using zy;
if ll_br_sfzh='' or isnull(ll_br_sfzh) then
ll_br_sfzh=''
end if
case '4'//【4-万达接口】

end choose
//=============================================================================
case 3//【体检】
ll_br_sfzh=''
end choose
//=============================================================================
//***************************【插入表lab_patientinfo数据】************************************************
IF Li_Count = 0 THEN    //【若表中无信息,则新插入一条记录】
INSERT INTO lab_patientinfo
(REQUESTTIME ,br_sfzh,doctadviseno,     requester,     stayhospitalmode,     patientid,      section,       depart_bed,
patientname,      sex,           birthday,             cycle,          diagnostic,    sampletype,
fee,              feestatus,     sampleno,             receivetime,    receiver,      toponymy,
examinaimcode,    examinaim,     fphm,                 labdepartment,  resultstatus,  nl,
nldw,             brxz,          computername,         requestmode,    notes,         executor,    executetime,CHECKOPERATOR)
VALUES
(:Ld_REQUESTTIME ,:ll_br_sfzh,:Ls_Doctadviseno, :Ls_Requester, :Li_stayhospitalmode, :Ls_PatientId,  :Ls_Section,   :Ls_Bed_No,
:Ls_PatientName,  :Ls_Sex,       :Ld_Birthday,         '20',           :Ls_Diagnostic, :Ls_sampletype,
:Ld_fee,          2,             :Ls_sampleno,         :Ld_receivetime, :login.userid, :Ls_toponymy,
:Ls_examinaimcode,:Ls_examinaim, :Ls_Fphm,             :is_jyks ,    0,             :Ls_Age,
:Ls_Age_Unit,     :Ls_Brxz,      :login.computer,      :Li_RequestMode,:Ls_Sample_jszt ,:Ls_executor, :Ld_executetime,:login.checker1)  using sqlca;
ELSE //【若表中有记录,把几个标本的检验目的合并】
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
IF MessageBox('系统提示【MYSOFT】',"是否确定把【*"+Ls_PatientName+"*】的标本合并到同一个样本号!",question!,yesno!,2) = 1 THEN
UPDATE lab_patientinfo
SET  doctadviseno = :Ls_Doctadviseno,requester =:Ls_Requester,stayhospitalmode = :Li_stayhospitalmode,
patientid = :Ls_PatientId,section = :Ls_Section,depart_bed = :Ls_Bed_No,    patientname = :Ls_PatientName,sex = :ls_sex ,birthday = :Ld_Birthday ,
cycle = '20',    diagnostic = :ls_diagnostic ,    sampletype = :ls_sampletype,    nl = :ls_age ,nldw = :ls_age_unit ,brxz = :ls_brxz ,
requestmode = :li_requestmode ,    notes = :ls_sample_jszt,    fphm = :ls_fphm ,    examinaim = examinaim +:Ls_examinaim,fee = :Ld_fee,    feestatus = 2    
Where sampleno = :Ls_Sampleno using sqlca;
ELSE
CONTINUE
END IF
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
END IF
//********************************************************************************************
IF sqlca.SQLCode = 0 THEN
commit using sqlca;

            IF Li_StayHospitalMode = 2 THEN // 【为住院病人记帐】
IF wf_charge_zy(Ls_Doctadviseno,Ls_PatientId,Ls_Requester,Ls_PatientName) = -1 THEN
Li_Feestatus = 1 //【未记帐】
dw_accept.Object.bz[Ll_Row]
rollback using sqlca;
//CONTINUE//【于2019-04-16关闭,为了增加手工录入,否则导致无法判断是否扫入条码】
ELSE
Li_Feestatus = 2 //【已记帐】
END IF
dw_accept.Object.feestatus[Ll_Row] = Li_Feestatus
elseif  Li_StayHospitalMode = 1 then  // 【门诊病人】
IF wf_charge_mz(Ls_Doctadviseno,Ls_PatientName) = -1 THEN
Li_Feestatus = 1 //【未记帐】
dw_accept.Object.bz[Ll_Row]
rollback using sqlca;
//CONTINUE //【于2019-04-16关闭,为了增加手工录入,否则导致无法判断是否扫入条码】
ELSE
Li_Feestatus = 2 //【已记帐】
END IF
dw_accept.Object.feestatus[Ll_Row] = Li_Feestatus
END IF

//===============【修改条码信息标志】============================================
UPDATE lab_jytmxx    SET    deviceid=:is_deviceid_1,feestatus = :Li_Feestatus,receiver = :login.userid,    receivetime = :Ld_receivetime,labdepartment = :is_jyks,samplestatus  = 4,    sample_notes  = '标本合格',    sample_jszt   = :Ls_sample_jszt,sampleno      = :Ls_sampleno 
Where doctadviseno = :Ls_Doctadviseno;
IF sqlca.SQLCode = 0 THEN
commit using sqlca;
//【样本管理--修改L_JYTMXX_BBGL】
if trim(login.bbgl)='1' then
iuo_bbgl.uf_receive_barcode(sqlca,Ls_doctadviseno,li_stayhospitalmode,login.userid,ld_receivetime,is_jyks,is_deviceid_1)
end if
ELSE
rollback using sqlca;
MessageBox('系统提示【MYSOFT】','【'+Ls_PatientName+'】----lab_jytmxx保存失败!~n~n原因是:'+sqlca.SQLErrText)
END IF
//============================================================================
ELSE
rollback using sqlca;
MessageBox('系统提示','【'+Ls_PatientName+'】----lab_patientinfo保存失败!~n~n原因是:'+sqlca.SQLErrText)
END IF

END IF
NEXT

dw_accept.SetFilter('bz = 0') 
dw_accept.Filter()


 

 

 

POWERBUILDER12.6开发实验室管理系统[LIS](四),希森美康XN-350全自动血球计数仪接口

 

POWERBUILDER12.6开发实验室管理系统[LIS](四),希森美康XN-350全自动血球计数仪接口

一、接收到的数据

1H|\^&|||    XN-350^00-18^12527^^^^AW618382||||||||E1394-97 D6
2P|1||||^^|||U|||||^||||||||||||^^^ 68
3C|1|| 2B
4O|1||^^                     2^A|^^^^WBC\^^^^RBC\^^^^HGB\^^^^HCT\^^^^MCV\^^^^MCH\^^^^MCHC\^^^^PLT\^^^^RDW-SD\^^^^RDW-CV\^^^^PDW\^^^^MPV\^^^^P-LCR\^^^^PCT\^^^^NEUT#\^^^^LYMPH#\^^^^MONO#\^^^^EO#\^^^^BASO#\^^^^NEUT%\^^^^LYMPH%\^^^^MONO%\^^^^EO%\^^^^BASO%\^^^^IG#\^^^^IG%\^^^^RET#\^^^^RET%\^^^^HFR\^^^^MFR\^^^^LFR\^^^^IRF\^^^^IPF\^^^^RET-HE\^^^^IPF#\^^^^OPEN|||||||N||||||||||||||F 68
5C|1|| 2D
6R|1|^^^^WBC^1|13.55|10*3/uL||N||F||||20180528130748 8B
7R|2|^^^^RBC^1|4.59|10*6/uL||N||F||||20180528130748 5F
0R|3|^^^^HGB^1|14.3|g/dL||N||F||||20180528130748 DE
1R|4|^^^^HCT^1|40.6|%||N||F||||20180528130748 CF
2R|5|^^^^MCV^1|88.5|fL||N||F||||20180528130748 70
3R|6|^^^^MCH^1|31.2|pg||N||F||||20180528130748 7A
4R|7|^^^^MCHC^1|35.2|g/dL||N||F||||20180528130748 32
5R|8|^^^^PLT^1|357|10*3/uL||N||F||||20180528130748 48
6R|9|^^^^NEUT%^1|55.9|%||N||F||||20180528130748 64
7R|10|^^^^LYMPH%^1|32.9|%||N||F||||20180528130748 D6
0R|11|^^^^MONO%^1|6.1|%||N||F||||20180528130748 48
1R|12|^^^^EO%^1|4.7|%||N||F||||20180528130748 A9
2R|13|^^^^BASO%^1|0.4|%||N||F||||20180528130748 35
3R|14|^^^^NEUT#^1|7.57|10*3/uL||H||F||||20180528130748 0E
4R|15|^^^^LYMPH#^1|4.46|10*3/uL||H||F||||20180528130748 59
5R|16|^^^^MONO#^1|0.83|10*3/uL||H||F||||20180528130748 07
6R|17|^^^^EO#^1|0.64|10*3/uL||H||F||||20180528130748 63
7R|18|^^^^BASO#^1|0.05|10*3/uL||N||F||||20180528130748 F7
0R|19|^^^^IG%^1|0.3|%||N||F||||20180528130748 A3
1R|20|^^^^IG#^1|0.04|10*3/uL||N||F||||20180528130748 54
2R|21|^^^^RDW-SD^1|38.2|fL||N||F||||20180528130748 61
3R|22|^^^^RDW-CV^1|11.8|%||N||F||||20180528130748 D5
4R|23|^^^^PDW^1|11.0|fL||N||F||||20180528130748 94
5R|24|^^^^MPV^1|9.6|fL||N||F||||20180528130748 7B
6R|25|^^^^P-LCR^1|21.9|%||N||F||||20180528130748 88
7R|26|^^^^PCT^1|0.34|%||N||F||||20180528130748 0E
0R|27|^^^^RET%^1|1.99|%||N||F||||20180528130748 3D
1R|28|^^^^RET#^1|0.0913|10*6/uL||N||F||||20180528130748 23
2R|29|^^^^IRF^1|12.8|%||N||F||||20180528130748 0A
3R|30|^^^^LFR^1|87.2|%||N||F||||20180528130748 0C
4R|31|^^^^MFR^1|11.3|%||N||F||||20180528130748 03
5R|32|^^^^HFR^1|1.5|%||N||F||||20180528130748 D1
6R|33|^^^^RET-HE^1|34.9|pg||N||F||||20180528130748 84
7R|34|^^^^IPF^1|1.7|%||N||F||||20180528130748 D6
0R|35|^^^^IPF#^1|6.1|10*3/uL||N||F||||20180528130748 7B
1R|36|^^^^Lymphocytosis||||A||F||||20180528130748 23
2R|37|^^^^Blasts/Abn_Lympho?|70|||||F||||20180528130748 84
3R|38|^^^^Left_Shift?|0|||||F||||20180528130748 B6
4R|39|^^^^Atypical_Lympho?|20|||||F||||20180528130748 11
5R|40|^^^^NRBC?|0|||||F||||20180528130748 EE
6R|41|^^^^RBC_Agglutination?|70|||||F||||20180528130748 8E
7R|42|^^^^Turbidity/HGB_Interference?|90|||||F||||20180528130748 FF
0R|43|^^^^Iron_Deficiency?|70|||||F||||20180528130748 E8
1R|44|^^^^HGB_Defect?|80|||||F||||20180528130748 7C
2R|45|^^^^Fragments?|10|||||F||||20180528130748 A3
3R|46|^^^^IRBC?|0|||||F||||20180528130748 ED
4R|47|^^^^PLT_Clumps?|0|||||F||||20180528130748 92
5R|48|^^^^Positive_Diff||||A||F||||20180528130748 CE
6R|49|^^^^SCAT_WDF|PNG&R&20180528&R&2018_05_28_13_07_2_WDF.PNG|||N||F||||20180528130748 9D
7R|50|^^^^SCAT_WDF-CBC|PNG&R&20180528&R&2018_05_28_13_07_2_WDF_CBC.PNG|||N||F||||20180528130748 B2
0R|51|^^^^SCAT_RET|PNG&R&20180528&R&2018_05_28_13_07_2_RET.PNG|||N||F||||20180528130748 A4
1R|52|^^^^SCAT_PLT-O|PNG&R&20180528&R&2018_05_28_13_07_2_PLT_O.PNG|||N||F||||20180528130748 DA
2R|53|^^^^SCAT_RET-E|PNG&R&20180528&R&2018_05_28_13_07_2_RET_EXT.PNG|||N||F||||20180528130748 6A
3R|54|^^^^DIST_RBC|PNG&R&20180528&R&2018_05_28_13_07_2_RBC.PNG|||N||F||||20180528130748 8B
4R|55|^^^^DIST_PLT|PNG&R&20180528&R&2018_05_28_13_07_2_PLT.PNG|||N||F||||20180528130748 BF
5R|56|^^^^DIST_RBC(FSC)|PNG&R&20180528&R&2018_05_28_13_07_2_RBC_FSC.PNG|||N||F||||20180528130748 F7
6C|1|| 2E
7L|1|N

二、接收数据

string ls_receiver
string ls_data
string ls_temp
string ls_graphall
string ls_graph
string ls_senddata
string ls_parm[]
long ll_num
long ll_i
long ll_at
long ll_length
long ll_gt
integer li_file
integer li_gt
integer i
long ll_count
//【接收数据】
winsock.object.getdata(ref ls_receiver)
ls_senddata = ""
//【发送应答】
Choose Case ls_receiver
//【询问字符(ENQ)】
Case Char(5)
ls_senddata= is_chr6
//【发送数据】
winsock.object.senddata(ls_senddata)
gf_write_log(is_deviceid,ls_receiver)
//【结束字符(ENQ)】
Case Char(4)
ls_senddata= is_chr6
//【发送数据】
winsock.object.senddata(ls_senddata)
gf_write_log(is_deviceid,ls_receiver)
End Choose

//【接收到的数据保存为日志】
gf_write_log(is_deviceid,ls_receiver)
wf_setsource(ls_receiver)
datetime xt_date
xt_date=f_sysdate()

//【如果有数据】
if len(ls_receiver) > 0 then

//【写入数据备份表】
if login.if_backup_data=1 then
insert into LAB_JSSJ_BACKUP(YQID,JSSJNR,JS_DATE) values(:is_deviceid,:ls_receiver,:xt_date);
if sqlca.sqlcode<>0 then
rollback using sqlca;
gf_write_log(parent.is_deviceid,is_tempstr+'写入表【 LAB_JSSJ_BACKUP】不成功!')
else
Commit Using sqlca;
end if
end if

//【写入表lab_source】
Insert Into lab_source ( soufull , deviceid ) Values ( :ls_receiver ,:is_deviceid )  using sqlca;
if sqlca.sqlcode<>0 then
rollback using sqlca;
gf_write_log(parent.is_deviceid,is_tempstr+'写入表lab_source不成功!')
else
Commit Using sqlca;
end if
//【发送应答】
if pos(ls_receiver,char(13))>0 then
ls_senddata= is_chr6
//【发送数据】
winsock.object.senddata(ls_senddata)
end if
ls_receiver = ""
end if

三、解析数据

string ls_orisampno
string ls_today
string ls_channel
string ls_samtype
string ls_resultflag
string ls_pdname
string ls_temp
string ls_result
string ls_testday
integer li_flag
integer li_pd
integer li_i
integer li_count
integer li_length
integer li_update
integer li_gt
integer li_gt1
integer li_gt2
integer li_gt3
integer li_gt4
datetime ld_qcdate
double ld_result
string ls_sample
//【服务器端日期】
ld_qcdate = f_sysdate()
ls_today = string(ld_qcdate,"yyyymmdd")
//【取表中接收的数据】
is_sourfull = gf_commtimer1(is_deviceid)+'|'
//【如果为空】
if is_sourfull = "" then
timer(3)

        if in_icon.ii_currentid <> 1 then
in_icon.uf_modifyico(1)
end if

return
end if

//【数据不为空】


timer(0)


if pos(is_sourfull,"O|") > 0 then
//inv_tray.modifytray(0,handle(this),'mysoft\ico\NETHOOD.ico',gi_device_name +' - 数据接收系统【正在解析数据】')
choose case in_icon.ii_currentid
case 1
in_icon.uf_modifyico(2)
case 2
in_icon.uf_modifyico(3)
case 3
in_icon.uf_modifyico(1)
end choose
//【取样本号】
ls_orisampno = "0000" + trim(f_spliterstring_new(f_spliterstring_new(is_sourfull,'|',4),'^',3))
ls_sample =/*ls_today + */is_profilename 
is_sampleno = ls_sample+ f_ybh_fill( integer(ls_orisampno))
end if

 
//【6R|1|^^^^WBC^1|13.55|10*3/uL||N||F||||20180528130748|】
string ls_ybh
if pos(is_sourfull,"R|") > 0 then
//inv_tray.modifytray(0,handle(this),'mysoft\ico\NETHOOD.ico',gi_device_name +' - 数据接收系统【正在解析数据】')
choose case in_icon.ii_currentid
case 1
in_icon.uf_modifyico(2)
case 2
in_icon.uf_modifyico(3)
case 3
in_icon.uf_modifyico(1)
end choose

//【通道号】【^^^^WBC^】
ls_channel =  f_spliterstring_new(f_spliterstring_new(is_sourfull,'|',3),'^',5)
//【结果值】
is_result = f_spliterstring_new(is_sourfull,'|',4)

    //【测试项目ID】
is_testid = gf_commchannel(ls_channel,is_sampletype,is_deviceid,is_bzybh)

//【测试日期】
ls_testday = left( f_spliterstring_new(is_sourfull,'|',13),8)
ls_ybh=''
ls_ybh=ls_testday+ is_sampleno
//【用于执行gf_commdata()时判断是否:P写入正常结果数据,C写入质控结果数据】
is_type = "P"
li_flag = 1
gf_commdata(is_type,is_testid,ls_ybh,is_result,ld_qcdate,is_sampletype,is_deviceid,li_flag)
wf_settext( ls_ybh,is_testid,is_result)
ls_channel =''

end if

timer(0.9)
return

 

POWERBUILDER12.6开发实验室管理系统[LIS](三),罗氏cobas411发光仪接口

一、接收到的数据

1H|\^&||||||||||P|| 05
2P|1||||||||||||||||||||||||||||||||| 3B
3O|1|1|1^0^1^^SAMPLE^NORMAL|ALL|R|20170813094208|||||X||||||||||||||O||||| 0E
4R|1|^^^370^^0|37.00|pg/ml|5.10^2950|N||F|||20170813094837|20170813100656| AD
5R|2|^^^150^^0|9.55|mIU/ml|0.110^198.0|N||F|||20170813095207|20170813101026| 04
6R|3|^^^140^^0|8.93|mIU/ml|0.110^198.0|N||F|||20170813095125|20170813100944| 0D
7R|4|^^^131^^0|408.0|uIU/ml|1.10^9900|N||F|||20170813095043|20170813100902| DA
0R|5|^^^121^^0|0.653|ng/ml|0.035^59.00|N||F|||20170813095001|20170813100820| F0
1R|6|^^^111^^0|0.126|ng/ml|0.025^15.00|N||F|||20170813094919|20170813100738| FC
2L|1 3B


1H|\^&||||||||||P|| 05
2P|1||||||||||||||||||||||||||||||||| 3B
3O|1|2|2^0^2^^SAMPLE^NORMAL|ALL|R|20170813094221|||||X||||||||||||||O||||| 0C
4R|1|^^^370^^0|62.32|pg/ml|5.10^2950|N||F|||20170813095249|20170813101108| A7
5R|2|^^^150^^0|7.24|mIU/ml|0.110^198.0|N||F|||20170813095619|20170813101438| 0C
6R|3|^^^140^^0|6.66|mIU/ml|0.110^198.0|N||F|||20170813095537|20170813101356| 10
7R|4|^^^131^^0|481.6|uIU/ml|1.10^9900|N||F|||20170813095455|20170813101314| E6
0R|5|^^^121^^0|0.467|ng/ml|0.035^59.00|N||F|||20170813095413|20170813101232| F8
1R|6|^^^111^^0|0.172|ng/ml|0.025^15.00|N||F|||20170813095331|20170813101150| E7
2L|1 3B

1H|\^&||||||||||P|| 05
2P|1||||||||||||||||||||||||||||||||| 3B
3O|1|3|3^0^3^^SAMPLE^NORMAL|ALL|R|20170813094227|||||X||||||||||||||O||||| 15
4R|1|^^^370^^0|23.97|pg/ml|5.10^2950|N||F|||20170813095701|20170813101520| A6
5R|2|^^^150^^0||mIU/ml|0.110^198.0|A||X|||00000000000000|20170813095825| 1E
6C|1|I|55^Sample LLD Noise|I 80
7R|3|^^^140^^0||mIU/ml|0.110^198.0|A||X|||00000000000000|20170813095825| 20
0C|1|I|55^Sample LLD Noise|I 7A
1R|4|^^^131^^0||uIU/ml|1.10^9900|A||X|||00000000000000|20170813095825| C5
2C|1|I|55^Sample LLD Noise|I 7C
3R|5|^^^121^^0||ng/ml|0.035^59.00|A||X|||00000000000000|20170813095825| E9
4C|1|I|55^Sample LLD Noise|I 7E
5R|6|^^^111^^0|0.115|ng/ml|0.025^15.00|N||F|||20170813095743|20170813101602| F1
6L|1 3F

1H|\^&||||||||||P|| 05
2P|1||||||||||||||||||||||||||||||||| 3B
3O|1|4|4^0^4^^SAMPLE^NORMAL|ALL|R|20170813094230|||||X||||||||||||||O||||| 12
4R|1|^^^370^^0|<5.00|pg/ml|5.10^2950|<||F|||20170813095907|20170813101726| A0
5C|1|I|50^Below measuring range|I 0F
6R|2|^^^150^^0|9.90|mIU/ml|0.110^198.0|N||F|||20170813100237|20170813102056| FE
7R|3|^^^140^^0|3.57|mIU/ml|0.110^198.0|N||F|||20170813100155|20170813102014| F5
0R|4|^^^131^^0|311.0|uIU/ml|1.10^9900|N||F|||20170813100113|20170813101932| C1
1R|5|^^^121^^0|0.326|ng/ml|0.035^59.00|N||F|||20170813100031|20170813101850| E8
2R|6|^^^111^^0|0.030|ng/ml|0.025^15.00|N||F|||20170813095949|20170813101808| FA
3L|1

二、解析数据

//【取得数据写入数据库】
Boolean  lb_odbc
String   ls_pfname,ls_orisampno,ls_today,ls_flags,ls_testtype,ls_mkxx,ls_reprottime
String   ls_lisybh,ls_temp,ls_ywjc,ls_channel,ls_sampleno
String    ls_sample,ls_testid,ls_type,ls_value,ls_testname
String    ls_testresult,ls_resultdate,ls_date,ls_time
Integer  li_yqybh,li_lisybh,i,li_ybno1,li_ybno2,li_flag,li_count
DateTime ldt_rq1,ldt_rq2,ldt_today,ld_qcdate
Long         ll_testname,ll_testresult,ll_gt1,ll_gt2
Date         ld_today
Dec{2}   ldc_result
string ls_testday

//【从源数据表中取出原始数据】
is_sourfull = gf_commtimer1(is_deviceid)
//【判断有无数据,执行TIMER事件】
If f_str_isnull(is_sourfull) Then
Timer(0.9)
Return
Else
Timer(0)
mle_source.Text = is_sourfull
mle_result.Text = ""
End If

//【服务器日期】
ld_qcdate = f_sysdate()
//【生成YYYYMMDD格式】
ls_today = String(ld_qcdate,"yyyymmdd")

Timer(0)

ii_gt = f_atc(is_sourfull,"|",1) - 1

Choose Case Mid(is_sourfull,ii_gt,1)
Case "O"//【取样本基本信息】
//O|1|1|1^0^1^^SAMPLE^NORMAL|ALL|R|20170813094208|||||X||||||||||||||O|||||
//Mid(string,start,length),   从string字符串的start字符开始取得length长度的字符串
//如果省略第三个参数表示从start字符开始到字符串结尾的字符串。
ll_gt1 = f_atc(is_sourfull,"|",3) + 1
ll_gt2 = f_atc(is_sourfull,"^",1)
ls_orisampno = Mid(is_sourfull,ll_gt1,ll_gt2 - ll_gt1)
ls_orisampno = "00000" + Mid(is_sourfull,ll_gt1,ll_gt2 - ll_gt1)
is_sampleno = Right(ls_orisampno,5)
//【测试日期--ls_testday,待测试成功后重新写此接口】
ls_testday=left(f_spliterstring_one(is_sourfull,7),8)
gf_write_log(is_deviceid,'测试日期,用于修改该接口,文本:【'+is_sourfull+'】')
gf_write_log(is_deviceid,'测试日期,用于修改该接口,测试日期:【'+ls_testday+'】')
//【样本号】
is_sampleno = gf_commtimer2(is_sampleno,is_deviceid,is_profilename,ls_today)
is_type = "P"
Case "R"//【取样本结果】
ll_gt1 = f_atc(is_sourfull,"^",3) + 1
ll_gt2 = f_atc(is_sourfull,"^",4)
//【通道号】
ls_channel = Trim(Mid(is_sourfull,ll_gt1,ll_gt2 - ll_gt1))
ll_gt1 = f_atc(is_sourfull,"|",3) + 1
ll_gt2 = f_atc(is_sourfull,"|",4)
is_result = Trim(Mid(is_sourfull,ll_gt1,ll_gt2 - ll_gt1))
is_result = f_replace(is_result,"*","")
//【测试结果】
If Pos(is_result,'^') > 0 Then
is_result = Trim(Mid(is_result,Pos(is_result,'^') + 1))
End If
is_sampletype = ""
//【测试项目ID】
is_testid = gf_commchannel(ls_channel,is_sampletype,is_deviceid,is_bzybh)
li_flag = 1
//【数据写入数据库】
gf_commdata(is_type,is_testid,is_sampleno,is_result,ld_qcdate,is_sampletype,is_deviceid,li_flag)
//【显示数据】
wf_settext(is_sampleno,ls_channel,is_result)
End Choose

Timer(0.2)
Return

 

POWERBUILDER12.6开发实验室管理系统[LIS](二),东芝tba120fr全自动生化分析仪接口

一、接收到的数据

R 000100000001               1  1201904220904  1   1  16.7   1A   2  30.6   1A   3    69   1A   4   8.4   1A   5  7324   1A   6  12.5   1A   7   4.5CAL1    8  77.5   1A   9  40.9CAL1   10 252.4   1A  11   4.6   1A  12   4.7   1A  13  56.0CAL1   14 315.9   1A  15  2.13   1A  16   4.7   1A  17   2.0   1A  18   1.3   1A  19  2.82   1A  20 141.9   1A  21  70.8   1A  22 240.8CAL1   23 250.0   1A  24  67.4   1A  25 13.44   1A  26  0.63   1A  27  33.0   1A  28 10.08CAL1   29  1.40   1A  30   2.3   1A  31   0.2   1A  32   6.2   1A  33   4.7   1A201904220831

二、串口线做法 23交叉46交叉78交叉55直连19空,如果串口线不按照此做法,导致无法正确接收数据

三、ONCOME事件

If ole_1.Object.commevent = 2  Then //有数据
is_temp = ole_1.Object.input
is_tempstr = is_tempstr+is_temp
Choose Case is_temp
Case Char(2)
is_tempstr = is_temp
Case Char(3)
//====================================================================
//【写入数据备份表】
datetime xt_date
xt_date=f_sysdate()
if login.if_backup_data=1 then
insert into LAB_JSSJ_BACKUP(YQID,JSSJNR,JS_DATE) values(:is_deviceid,:is_tempstr,:xt_date);
if sqlca.sqlcode<>0 then
rollback using sqlca;
gf_write_log(parent.is_deviceid,is_tempstr+'写入表【 LAB_JSSJ_BACKUP】不成功!')
else
Commit Using sqlca;
end if
end if
//====================================================================
Insert Into lab_source (soufull , deviceid ) Values (:is_tempstr,:is_deviceid) ;
Commit  using sqlca;
wf_setsource(is_tempstr)
is_tempstr = '' //置空
End Choose
End If

四、解析数据

Boolean  lb_odbc
String   ls_lisybh,ls_temp,ls_ywjc,ls_channel,ls_sampleno
String    ls_sample,ls_testid,ls_type,ls_value,ls_testname
String    ls_testresult,ls_result1,ls_result2,ls_qc
Integer  li_yqybh,li_lisybh,i,li_ybno1,li_ybno2,li_flag
Integer  li_i,li_pos,li_start=50
DateTime ldt_rq1,ldt_rq2,ldt_today
Date         ld_today,ld_qcdate
Dec{2}   ldc_result
Long         ll_testname,ll_testresult
string     ls_orisampno,ls_today

//【取原始数据】
is_sourfull=gf_commtimer1(is_deviceid)

ls_qc = gf_getparm(is_sourfull,char(23),2)

If f_str_isNull(is_sourfull) Then
Timer(0.9)
Return
Else
timer(0)
mle_source.Text = is_sourfull
mle_result.Text = ''
End If

ls_type = 'P'
li_flag = 0


ldt_today = f_sysdate()
ld_today  = Date(ldt_today)

ls_today = string(ld_qcdate,'yyyymmdd')
ls_sample = f_date_str(ld_today) + is_profilename 

mle_source.Text = is_sourfull
mle_result.Text = ''


li_yqybh     = Integer(Mid(is_sourfull,13,3))    //【得到当前结果样本号】
ls_sampleno = ls_sample + f_ybh_fill(li_yqybh)        //【生成LIS样本号】

if pos(ls_qc,'QC') > 0 then
ls_type = 'C'
ls_sampleno = mid(ls_qc,pos(ls_qc,'QC-'),4)
end if

FOR li_i = 1 to (len(is_sourfull) - 64 )/15//f_getstr_num(is_sourfull,'1A')//(len(is_sourfull) - 64 )/15

choose case in_icon.ii_currentid
case 1
in_icon.uf_modifyico(2)
case 2
in_icon.uf_modifyico(3)
case 3
in_icon.uf_modifyico(1)
end choose


ls_value = mid(is_sourfull,li_start,15)
ls_testname=trim(mid(ls_value,1,5))
ls_testresult = trim(mid(ls_value,6,6))
if pos(ls_testresult,'C') > 0 then
ls_testresult = f_replace(ls_testresult,'C','')
end if
li_start = li_start + 15    
//【取得样本编号】
ls_testid  =  gf_commchannel(ls_testname,is_sampletype,is_deviceid,'')
//【将数据写入数据库中】
gf_commdata(ls_type,ls_testid,ls_sampleno,ls_testresult,ldt_today,is_sampletype,is_deviceid,li_flag)
//【数据存入数据库】
//【写入数据备份表】
datetime xt_date
xt_date=f_sysdate()
string ls_sjjg
ls_sjjg='样本号:'+ls_sampleno+'项目ID:'+ls_testid +'结果:'+ls_testresult +'通道号:'+ls_testname
if login.if_backup_data=1 then
insert into LAB_JSSJ_BACKUP(YQID,JSSJNR,JS_DATE) values(:is_deviceid,:ls_sjjg,:xt_date);
if sqlca.sqlcode<>0 then
rollback using sqlca;
else
Commit Using sqlca;
end if
end if
//====================================================================
//【显示数据结果】
wf_settext(ls_sampleno,ls_testname,ls_testresult)
next

Timer(0.9)