實驗室管理系統,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()