实验室管理系统,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;
//================================================================================
//【取病人身份证号码,add by zxw at 2017-09-21,modify by zxw at 2018-07-31】
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()