CREATE OR REPLACE PROCEDURE SP_BQ_YJYZQT ( p_mode00 in number,--0删除--1核对,2--停止,3--取消,4--排序,5--预停止(应该是暂停) 7提交 5实际上为暂停的处理,增加8为预停止..9预撤销 p_yzmxid in number,--医嘱ID(分组号) p_hdrxm0 in varchar,--核对人姓名 p_tzys00 in number,--停止医生 p_tzrxm0 in varchar,--停止人姓名 p_tzrq00 in varchar,--停止日期 p_tzsj00 in varchar,--停止时间 p_pxsj00 in varchar,--排序时间 p_czy000 in number ,--操作员 p_cjks00 in char default '', --采集科室 p_sssbz0 in char default 'N' --手术室标识 )AS v_Count number(10); --计数器 v_tzys00 bq_yjyz00.TZYS00%type;--停止医生 v_hdrxm0 bq_yjyz00.tzrxm0%type; v_tzrxm0 bq_yjyz00.tzrxm0%type; v_zyid00 zy_brxxb0.zyid00%type; V_yzzt00 char(1); Verrmsg VarChar2(255); --错误提示 VParams VarChar2(255); --错误提示 Ecustom EXCEPTION ; --错误提示 VJZRQ00 Char(8); --医嘱拆分截至日期 bYTZYZ0 Boolean; --是否预停止医嘱 v_tzrq00 bq_yjyz00.tzrq00%type;--预停止日期日期 v_tzsj00 bq_yjyz00.tzsj00%type;--预停止日期时间 v_yjyz00 BQ_YJYZ00%rowtype; --医技医嘱 v_yzsjfg char(8); --医嘱时间分割 VYTZLDZSFKYCX XT_XTCS00.VALUE0%TYPE ; --已经停止类短嘱是否可以撤销 ls_jhmxid BQ_YPYZMX.JHMXID%type; --计划明细 ls_zrzcid LJ_ZRZC00.ZRZCID%type; --zrzcid ls_zyid00 BQ_YPYZ00.zyid00%type; --zyid00 PBCTQID number ; --本次提取ID v_CZYXM0 BM_YGBM00.ZWXM00%TYPE; --中文姓名 ls_YZQYSJMRTJSJ varchar2(20); --医嘱起用时间是否默认为提交时间 ls_DQSJWYZQYSJ varchar2(20); --录入医嘱时,医嘱起用时间默认当前时间 v_RYRQ00 char(8); --入院日期 v_RYCWH0 ZY_BRXXB0.RYCWH0%type; --入院床位号 v_qyrq00 BQ_YPYZ00.QYRQ00%type; --起用日期 v_qysj00 BQ_YPYZ00.QYSJ00%type; --起用时间 v_sysdate date; LS_YZLX00 BQ_YJYZ00.YZLX00%type; ls_YDYYZBRSC varchar(10);--打印过的医嘱不能删除 vYHDYZSFCX varchar2(10); v_zlxmjc BQ_YJYZ00.ZLXMJC%type; v_zlxmid BQ_YJYZ00.ZLXMID%type; ls_SHDJ00 number; --术后登记 v_ycxbz0 BQ_YJYZ00.YCXBZ0%type; v_Count1 number(2); BQ_SFQYYCXYZ varchar2(10); -- MODIFICATION HISTORY -- Person Date Comments -- chenqw 20090611 医嘱被撤消时手术输血申请单被删除或取消 -- qks 2009.11.06 修改预停止业务操作;预停止(YZZT00=5,tzys00不为空)的药品医嘱也能停止 -- chenqw 2009.12.26 医嘱被撤消时手术输血申请单处于不能删除的状态则不能删除该医嘱 -- liuj 2010.09.20 限制病区不允许核对的医嘱不核对 JY_BBCJKS -- zhangwz 2010.11.02 病区不允许核对医嘱不核对增加采集科室过滤 by BQ-20101101-002 -- zhangwz 2011.05.16 医嘱核对时把p_czy000更新至BQ_YJYZ00.KZYS00. by ZYYS-20110314-001. -- zhangwz 2011.05.26 医嘱撤销增加能对已经停止了的短嘱进行撤销 by ZYYS-20110510-001. -- zhangwz 2011.08.11 增加参数控制能否对已经停止类的短嘱进行撤销 by ZYYS-20110810-004. -- dsm 2011.08.24 路径医嘱,弃选完后,又重新选择的医嘱,提交后把变异记录删除. -- zhangwz 2011.09.09 增加传入参数 p_sssbz0 用于区别是否是手术室系统的手术相关医嘱界面提交的新医嘱 by SSMZ-20110907-001. -- zhangwz 2011.12.21 p_mode00 增加=8 的预停止机制,预停止医嘱的处理不改变医嘱状态,因为预停止的医嘱在时间未到时还要正常收费 by ZYYS-20111219-001. -- zhangwz 2012.05.10 增加处理住院医生医嘱提交非药短嘱的时候根据有开展预约的检查治疗科室进行 YJ_YW00000 表 XMZT00=6 数据的生成 by BQ-20120503-002. -- zhangwz 2012.05.10 增加处理对已经预约非药短嘱(医嘱住院医生已提交)进行撤销或者是删除时预约数据的处理 by ZYYS-20120510-001. -- liuj 2012.05.21 手术医嘱,当手术被安排后医嘱不能删除否则会没掉,原因是sszt00被置成7 for ZYYS-20120518-001 -- liuj 2012.06.29 提交医嘱时同时写入医嘱提交日期跟时间 for ZYYS-20120627-001 -- chenyw 2013.07.01 输血医嘱撤销会报错,撤销不了 for BQ-20130701-002 -- yangy 2013.10.17 提交医嘱时,取医嘱的启用日期修改为当前时间,有参数控制 for DZBL-20131014-005 -- dsm 2013.10.22 YZLX00='4'的医嘱核对后直接停止 for YJ-20131012-001 -- dsm 2013.10.29 YZLX00='4' or YZLX00='5'的医嘱提交后直接停止 for BQ-20131024-001 -- xuxm 2014.02.17 会诊录入的医嘱,在医嘱提交时自动停止,但停止人TZRXM0不需要写入,这样护士才能对已停止的该条医嘱进行核对。 for DZBL-20140214-002 -- dsm 2014.05.07 p_mode00=2停止时如果 如果原来的医嘱状态是5(预停止)的,也就是BQ_TZYZSFXYHD=‘Y’时的停止数据,在护士核对时,就直接把tzrxm0写入 for BQ-20140429-002 -- dsm 2015.05.21 打印过的医嘱不能删除(BQ_YDYYZBRSC=Y) for BQ-20150428-001 -- dsm 2015.10.09 核对过的医嘱不能撤销ZS_YHDYZSFCX for ZYYS-20150922-001 -- dsm 2015.12.09 ZLXMJC.BWSFKK=N的项目未输入部位的不能提交 for ZYYS-20151109-001 -- dsm 2015.12.18 ZS_YHDYZSFCX='Y'时"当天核对之后的提取,执行状态也还能操作撤销"修正此bug ZYYS-20151130-001 -- dsm 2015.12.24 是否判断术后登记 for ZYYS-20151126-001 -- zhengzk 2017.07.07 医嘱核对增加医嘱核对时间和日期的写入 for BQ-20170619-002 -- zhengzk 2018.04.19 新增参数控制非药医嘱停止是否写入护士姓名 for BQ-20180409-002 -- dsm 2018.05.21 YCXBZ0=1时TZYS00不变 for BQ-20180509-001 -- dsm 2018.11.23 停止医嘱核对不能覆盖新增医嘱的核对时间 BQ-20181112-002 -- dsm 2019.08.01 TZSHR0写入护士YGBH00 for BQ-20190802-001 -- dsm 2019.09.30 核对状态的医嘱允许预停止 for BQ-20190925-001 begin VParams := 'SP_BQ_YJYZQT('||p_mode00||','||p_yzmxid||','||p_hdrxm0||','||p_tzys00||',' ||p_tzrxm0||','||p_tzrq00||','||p_tzsj00||','||p_pxsj00||')'; v_sysdate := sysdate; select zyid00,hdrxm0,tzys00,yzzt00,tzrxm0,tzrq00,tzsj00,ZLXMJC,ZLXMID,nvl(YCXBZ0,'0') into v_zyid00,v_hdrxm0,v_tzys00,v_yzzt00,v_tzrxm0,v_tzrq00,v_tzsj00,v_zlxmjc,v_zlxmid,v_ycxbz0 from bq_yjyz00 where yzmxid=p_yzmxid; begin select ZWXM00 into v_CZYXM0 from BM_YGBM00 where YGBH00=p_czy000; exception when others then v_CZYXM0:=''; end; --删除医嘱 if p_mode00 = 0 then --已打印医嘱不能删除,Y不能删除,N不控制 select nvl(max(trim(value0)),'N') into ls_YDYYZBRSC from XT_XTCS00 where name00='BQ_YDYYZBRSC' and value0='Y'; --判断是否新开医嘱 select Count(1) into v_Count from BQ_YJYZ00 where YZZT00 in ('0','7') and YZMXID = p_yzmxid; if v_Count = 0 then Verrmsg:='不是新开医嘱,不能删除'; Raise Ecustom; end if; --已打印医嘱不能删除,Y不能删除,N不控制 select nvl(max(trim(value0)),'N') into ls_YDYYZBRSC from XT_XTCS00 where name00='BQ_YDYYZBRSC' and value0='Y'; if ls_YDYYZBRSC='Y' then select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and dypc00=0; if v_Count = 0 then Verrmsg := '已经打印医嘱,不能删除!*还回信息:'; raise Ecustom; end if; end if; select Count(1) into v_Count from XK_SXSQ00 where yzmxid = p_yzmxid and SQZT00 in ('2','3'); if v_Count > 0 then Verrmsg:='输血申请已经生效,不能删除该医嘱'; Raise Ecustom; end if; ----已预约数据的处理------ begin select nvl(b.YYID00,0) into v_Count from BQ_YJYZ00 a,YJ_YW0000 b,YJ_YYBRB0 c where a.YZMXID=p_yzmxid and a.CLBZ00='1' and a.ZYID00+0=b.ZYGHID and b.XMZT00='6' and trim(b.YZCFID)=to_char(a.YZMXID) and nvl(b.YYID00,0)<>0 and b.YYID00=c.YYID00 and c.YYZT00='0' and rownum=1; exception when others then v_Count:=0; end; if v_Count>0 then begin delete YJ_YYBRB0 where YYID00=v_Count; end; end if; delete BQ_YJYZ00 where YZMXID = p_yzmxid; delete XK_SXSQ00 where yzmxid = p_yzmxid; select Count(1) into v_Count from ss_yw0000 where yzmxid = p_yzmxid and SSZT00 in ('2','4'); if v_Count > 0 then Verrmsg:='手术已被安排或已执行,不能删除该医嘱'; Raise Ecustom; end if; update ss_yw0000 set sszt00='7' where yzmxid=p_yzmxid ; --核对医嘱 elsif p_mode00 = 1 then select count(1) into v_Count from BQ_YJYZ00 a WHERE a.ZLXMID in (select ZLXMID from JY_BBCJKS) AND a.YZMXID = p_yzmxid and a.YZZT00<>'3' and a.YZZT00<>'4' and (not exists (select 1 from JY_BBCJKS where to_char(KSBH00)=p_cjks00 and ZLXMID=a.ZLXMID) or p_cjks00=''); -- select nvl(YZLX00,'0') into LS_YZLX00 from BQ_YJYZ00 where YZMXID=p_yzmxid; if v_Count = 0 then if (V_yzzt00=0) or (V_yzzt00 in (3,4) and (v_hdrxm0 is null or v_tzrxm0 is null)) then Verrmsg:=Verrmsg; else Verrmsg := '不是待核对的医嘱,不能核对'; raise Ecustom; end if; if v_ycxbz0='1' and V_yzzt00='0' then Verrmsg := '预撤销医嘱不能和对,不能核对'; raise Ecustom; end if; if (V_yzzt00=0) and (v_hdrxm0 is null) then--新开的医嘱 --修改医嘱状态和核对人 update BQ_YJYZ00 set YZZT00 = '1',HDRXM0 = p_hdrxm0,HDR000=p_czy000 where YZMXID = p_yzmxid; elsif (V_yzzt00=0) and (v_hdrxm0 is not null) then--重整的医嘱 update BQ_YJYZ00 set YZZT00 = '2' where YZMXID = p_yzmxid; else --医生停止/撤销的医嘱 select COUNT(*) INTO V_Count FROM bq_yjyz00 WHERE YZMXID = p_yzmxid AND YZLX00='4' AND HDR000 IS NULL; IF V_Count>0 THEN update BQ_YJYZ00 set TZRXM0 = p_hdrxm0 ,HSHTRQ=to_char(sysdate,'YYYYMMDD'),HSHTSJ=to_char(sysdate,'hh24:mi:ss'),TZSHR0=p_czy000,HDR000=p_czy000,HDRXM0=p_hdrxm0 where YZMXID = p_yzmxid; ELSE update BQ_YJYZ00 set TZRXM0 = p_hdrxm0 ,HSHTRQ=to_char(sysdate,'YYYYMMDD'),HSHTSJ=to_char(sysdate,'hh24:mi:ss'),TZSHR0=p_czy000 where YZMXID = p_yzmxid; END IF; end if; --判定是否仍然有新开的医嘱 select count(*) into V_Count from (select yzid00 from bq_ypyz00 where zyid00=v_zyid00 and yzzt00='0' and rownum=1 union all select yzmxid from bq_yjyz00 where zyid00=v_zyid00 and yzzt00='0' and rownum=1); if V_Count=0 then Update xt_dzgg00 set YXZZRQ=to_char(sysdate,'YYYYMMDD'),YXZZSJ=to_char(sysdate,'hh24:mi:ss') where zyid00=v_zyid00 and CZLB00='1' and YXZZRQ='99991231'; end if; --判定是否仍然有撤销医嘱 select count(*) into V_Count from (select yzid00 from bq_ypyz00 where zyid00=v_zyid00 and yzzt00='3' and tzrxm0 is null and rownum=1 union all select yzmxid from bq_yjyz00 where zyid00=v_zyid00 and yzzt00='3' and tzrxm0 is null and rownum=1); if V_Count=0 then Update xt_dzgg00 set YXZZRQ=to_char(sysdate,'YYYYMMDD'),YXZZSJ=to_char(sysdate,'hh24:mi:ss') where zyid00=v_zyid00 and CZLB00='3' and YXZZRQ='99991231'; end if; --判定是否仍然有停止医嘱 select count(*) into V_Count from (select yzid00 from bq_ypyz00 where zyid00=v_zyid00 and yzzt00='4' and tzrxm0 is null and rownum=1 union all select yzmxid from bq_yjyz00 where zyid00=v_zyid00 and yzzt00='4' and tzrxm0 is null and rownum=1); if V_Count=0 then Update xt_dzgg00 set YXZZRQ=to_char(sysdate,'YYYYMMDD'),YXZZSJ=to_char(sysdate,'hh24:mi:ss') where zyid00=v_zyid00 and CZLB00='2' and YXZZRQ='99991231'; end if; --拆分医嘱20040916 --默认截至日期为当前时间加上30天 SELECT TO_CHAR(SYSDATE+30, 'YYYYMMDD') INTO VJZRQ00 FROM DUAL; SP_BQ_YZCF00_SINGLE(VJZRQ00, P_YZMXID, '1'); update BQ_YJYZ00 set HDRQ00 = TO_CHAR(SYSDATE,'YYYYMMDD'), HDSJ00 = TO_CHAR(SYSDATE,'HH24:MI:SS') where YZMXID = p_yzmxid and HDRQ00 is null; end if; --停止医嘱 elsif p_mode00 = 2 then bYTZYZ0 :=((v_tzys00 is not null) and (v_yzzt00='5')); --判断是否提取医嘱 if not bYTZYZ0 then --正常停止 select Count(1) into v_Count from BQ_YJYZ00 where YZZT00 = '2' and YZMXID = p_yzmxid; if v_Count = 0 then Verrmsg:='不是提取医嘱,不能停止'; Raise Ecustom; end if; --判断停止时间是否大于和起用时间提取时间 select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and QYRQ00 <= p_tzrq00 and QYRQ00||QYSJ00 <= p_tzrq00||p_tzsj00; --and ((TQRQ00 is null and TQSJ00 is null) -- or (TQRQ00 <= p_tzrq00 -- and TQRQ00||TQSJ00 <= p_tzrq00||p_tzsj00)); if v_Count = 0 then Verrmsg:='停止时间小于起用时间,不能停止'; Raise Ecustom; end if; --调用非药品医嘱停止退费存储过程 SP_BQ_YJYZTZ( p_czy000,p_yzmxid,p_tzrq00,p_tzsj00); -- update BQ_YJYZ00 set YZZT00 = '3',TZYS00 = p_tzys00,TZRXM0 = p_tzrxm0, TZRQ00 = p_tzrq00,TZSJ00 = p_tzsj00 where YZMXID = p_yzmxid; else --从预停止到停止 if p_hdrxm0 is null then Verrmsg := '核对人不允许为空!'; raise Ecustom; end if; if v_tzrxm0=p_hdrxm0 then Verrmsg := '核对和停止操作员不允许一样!'; raise Ecustom; end if; --调用非药品医嘱停止退费存储过程 SP_BQ_YJYZTZ( p_czy000,p_yzmxid,v_tzrq00,v_tzsj00); -- update BQ_YJYZ00 set YZZT00 = '3',tzshr0=(select ygbh00 from bm_ygbm00 where zwxm00=p_hdrxm0 and rownum=1) --增加停止审核人 ,TZRXM0=decode( YZZT00,'5', p_hdrxm0,TZRXM0) where YZMXID = p_yzmxid; end if; if p_tzrxm0='' or p_tzrxm0 is null then select count(*)into V_Count from XT_DZGG00 where zyid00=v_zyid00 and CZLB00='2'; if V_Count=0 then Insert into XT_DZGG00(ID0000,ZYID00,FSBQ00,FSBQMC,FSKS00,FSKSMC,FSXX00, YXQSRQ,YXQSSJ,YXZZRQ,YXZZSJ,CZY000,CZLB00,XTDM00) select SQ_XT_DZGG00_ID0000.nextval,zyid00,0,' ',dqbq00,' ','"'||TRIM(RYCWH0)||'床'||TRIM(ZYH000)||' '||TRIM(XM0000)||'" --有医嘱停止 '||to_char(sysdate,'hh24:mi'), to_char(sysdate,'yyyymmdd'),to_char(sysdate,'hh24:mi:ss'),'99991231','00:00:00',p_czy000,'2','9' from zy_brxxb0 where zyid00=v_zyid00; end if; end if; select Count(1) into v_Count from XT_XTCS00 where NAME00 = 'BQ_FYYZTZSFXRHS' and trim(VALUE0) = 'N'; if v_Count > 0 then update BQ_YJYZ00 set TZRXM0 = null where YZMXID = p_yzmxid; end if; --取消医嘱 elsif p_mode00 = 3 then begin select VALUE0 into VYTZLDZSFKYCX from XT_XTCS00 where NAME00='ZS_YTZLDZSFKYCX'; exception when others then VYTZLDZSFKYCX:='N'; end; begin select trim(VALUE0) into BQ_SFQYYCXYZ from XT_XTCS00 where NAME00='BQ_SFQYYCXYZ' and VALUE0='Y'; exception when others then BQ_SFQYYCXYZ:='N'; end; begin select trim(VALUE0) into VYHDYZSFCX from XT_XTCS00 where NAME00='ZS_YHDYZSFCX' and VALUE0='N'; exception when others then VYHDYZSFCX:='Y'; end; if VYHDYZSFCX='N' then select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and YZZT00<>'0' ; if v_Count>0 then Verrmsg := '已核对医嘱不能撤消!*返回信息:'; raise Ecustom; end if; end if; if BQ_SFQYYCXYZ='Y' and V_YCXBZ0='0' then Verrmsg := '对不起,此医嘱医生未做预撤销,!*返回信息:'; raise Ecustom; end if; --判断是否新开或核对医嘱 select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and ((YZZT00 in ('0','1')) or (YZZT00='3' and CLBZ00='1' and trim(VYTZLDZSFKYCX)='Y')); if v_Count = 0 then if trim(VYTZLDZSFKYCX)='Y' then Verrmsg:='不是新开或核对、或已经停止的短嘱类 医嘱,不能取消'; else Verrmsg:='不是新开或核对 医嘱,不能取消'; end if; Raise Ecustom; end if; select Count(1) into v_Count from ss_yw0000 where yzmxid = p_yzmxid and SSZT00 in ('2','4'); if v_Count > 0 then Verrmsg:='手术已被安排或已执行,不能删除该医嘱'; Raise Ecustom; end if; update BQ_YJYZ00 set YZZT00 = '4',TZYS00 = decode(YCXBZ0,'1',nvl(TZYS00,p_tzys00),p_tzys00),TZRXM0 = p_tzrxm0,ZLXMJC=Substrb('(取消)'||ZLXMJC,1,40), TZRQ00 = p_tzrq00,TZSJ00 = p_tzsj00 where YZMXID = p_yzmxid; -- delete XK_SXSQ00 where yzmxid = p_yzmxid; update ss_yw0000 set sszt00='7'where yzmxid=p_yzmxid; if p_tzrxm0='' or p_tzrxm0 is null then select count(*)into V_Count from XT_DZGG00 where zyid00=v_zyid00 and CZLB00='3'; if V_Count=0 then Insert into XT_DZGG00(ID0000,ZYID00,FSBQ00,FSBQMC,FSKS00,FSKSMC,FSXX00, YXQSRQ,YXQSSJ,YXZZRQ,YXZZSJ,CZY000,CZLB00,XTDM00) select SQ_XT_DZGG00_ID0000.nextval,zyid00,0,' ',dqbq00,' ','"'||TRIM(RYCWH0)||'床'||TRIM(ZYH000)||' '||TRIM(XM0000)||'" --有医嘱撤消 '||to_char(sysdate,'hh24:mi'), to_char(sysdate,'yyyymmdd'),to_char(sysdate,'hh24:mi:ss'),'99991231','00:00:00',p_czy000,'3','9' from zy_brxxb0 where zyid00=v_zyid00; end if; end if; ----已预约数据的处理------ begin select nvl(b.YYID00,0) into v_Count from BQ_YJYZ00 a,YJ_YW0000 b,YJ_YYBRB0 c where a.YZMXID=p_yzmxid and a.CLBZ00='1' and a.ZYID00+0=b.ZYGHID and b.XMZT00='6' and trim(b.YZCFID)=to_char(a.YZMXID) and nvl(b.YYID00,0)<>0 and b.YYID00=c.YYID00 and c.YYZT00='0' and rownum=1; exception when others then v_Count:=0; end; if v_Count>0 then begin update YJ_YYBRB0 set QXRQ00=to_char(sysdate,'YYYYMMDD'),QXSJ00=to_char(sysdate,'HH24:MI:SS'),YYZT00='2',BZ0000='操作员: '||v_CZYXM0||' 进行了医嘱撤销!' where YYID00=v_Count; end; end if; --预取消医嘱 elsif p_mode00 = 9 then begin select VALUE0 into VYTZLDZSFKYCX from XT_XTCS00 where NAME00='ZS_YTZLDZSFKYCX'; exception when others then VYTZLDZSFKYCX:='N'; end; begin select trim(VALUE0) into BQ_SFQYYCXYZ from XT_XTCS00 where NAME00='BQ_SFQYYCXYZ' and VALUE0='Y'; exception when others then BQ_SFQYYCXYZ:='N'; end; begin select trim(VALUE0) into VYHDYZSFCX from XT_XTCS00 where NAME00='ZS_YHDYZSFCX' and VALUE0='N'; exception when others then VYHDYZSFCX:='Y'; end; if VYHDYZSFCX='N' then select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and YZZT00<>'0' ; if v_Count>0 then Verrmsg := '已核对医嘱不能撤消!*返回信息:'; raise Ecustom; end if; end if; --判断是否新开或核对医嘱 select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and ((YZZT00 in ('0','1')) or (YZZT00='3' and CLBZ00='1' and trim(VYTZLDZSFKYCX)='Y')) and nvl(YCXBZ0,'0')='0'; if v_Count = 0 then if trim(VYTZLDZSFKYCX)='Y' then Verrmsg:='不是新开或核对、或已经停止的短嘱类 医嘱,不能取消'; else Verrmsg:='不是新开或核对 医嘱,不能取消'; end if; Raise Ecustom; end if; select Count(1) into v_Count from ss_yw0000 where yzmxid = p_yzmxid and SSZT00 in ('2','4'); if v_Count > 0 then Verrmsg:='手术已被安排或已执行,不能删除该医嘱'; Raise Ecustom; end if; update BQ_YJYZ00 set YCXBZ0 = '1',TZYS00 =p_tzys00, YTZRQ0 = p_tzrq00,YTZSJ0 = p_tzsj00 where YZMXID = p_yzmxid; elsif p_mode00 = 4 then --排序医嘱 update BQ_YJYZ00 set PXSJ00 = p_pxsj00 where YZMXID = p_yzmxid; --医嘱预停止(实际应该是暂停) elsif p_mode00 = 5 then --判断是否新开、核对、提取医嘱 /*select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and YZZT00 in ('0','1','2'); if v_Count = 0 then Verrmsg:='不是新开、核对、提取医嘱,不能预停止'; Raise Ecustom; end if; */ select Count(1) into v_Count1 from XT_XTCS00 where name00='BQ_CXCQYZSFYTZ' and VALUE0='Y'; if v_Count1=1 then select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and YZZT00 in ('2','1') and CLBZ00 = '0'; else select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and YZZT00 in ('2') and CLBZ00 = '0'; end if; if v_Count = 0 then Verrmsg := '非使用长期非药医嘱,不能预停止'; Raise Ecustom; end if; --判断停止时间是否大于和起用时间提取时间 select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and QYRQ00 <= p_tzrq00 and QYRQ00||QYSJ00 <= p_tzrq00||p_tzsj00; if v_Count = 0 then Verrmsg:='停止时间小于起用时间,不能停止'; Raise Ecustom; end if; --取医嘱信息 select * into v_yjyz00 from BQ_YJYZ00 where YZMXID = p_yzmxid; --取医嘱时间点 select Trim(VALUE0) into v_yzsjfg from XT_XTCS00 where NAME00='BQ_FYYZSJFG'; --插入 insert into BQ_YZZXJL( ZYID00, YZMXID, TQDJH0, DJHLB0, FYDJH0, ZT0000, CZR000, YZID00, QSRQ00, QSSJ00, JSRQ00, JSSJ00, SJJSRQ, SJJSSJ, CZRQ00, CZSJ00, SCJSRQ, CS0000 ) values ( v_yjyz00.ZYID00, v_yjyz00.YZMXID, 0, 1, 0, '3', p_czy000, 0,--v_yjyz00.YZMXID, Decode(v_yjyz00.YZZT00,'1',v_yjyz00.QYRQ00,'2',To_Char(TO_DATE(v_yjyz00.TQRQ00,'YYYYMMDD')+1,'YYYYMMDD')), v_yzsjfg, Decode(v_yjyz00.YZZT00,'1',v_yjyz00.QYRQ00,'2',To_Char(TO_DATE(v_yjyz00.TQRQ00,'YYYYMMDD')+2,'YYYYMMDD')), v_yzsjfg, Decode(v_yjyz00.YZZT00,'1',v_yjyz00.QYRQ00,'2',To_Char(TO_DATE(v_yjyz00.TQRQ00,'YYYYMMDD')+2,'YYYYMMDD')), v_yzsjfg, To_Char(SYSDATE,'YYYYMMDD'), To_Char(SYSDATE,'HH24:MI:SS'), v_yjyz00.TQRQ00||v_yjyz00.TQSJ00, 0 ); update BQ_YJYZ00 set YZZT00='5',TZYS00 = p_tzys00,TZRXM0 = p_tzrxm0, TZRQ00 = p_tzrq00,TZSJ00 = p_tzsj00 where YZMXID = p_yzmxid; elsif p_mode00 = 7 then select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and YZZT00 in ('7'); if v_Count = 0 then Verrmsg := '没有新开未提交的医嘱!*还回信息:'; raise Ecustom; end if; select count(*) into v_Count from BM_ZLZD00 a,BQ_YJYZ00 b where b.YZMXID = p_yzmxid and a.ZLXMID=b.ZLXMID and a.BWSFKK='N' and b.BWMC00 is null; if v_Count>0 then Verrmsg := '['||v_ZLXMJC||']未录入部位不能提交!'; raise Ecustom; end if; select count(*) into v_Count from XT_XTCS00 where NAME00='ZS_WZDZSQDBNTJ' and VALUE0='Y'; if v_Count>0 then select count(*) into v_Count from BM_ZLZD00 a,BQ_YJYZ00 b where b.YZMXID = p_yzmxid and a.ZLXMID=b.ZLXMID and nvl(b.SQID00,0)=0 and nvl(a.ZYSQID,0)>0; if v_Count>0 then Verrmsg := '['||v_ZLXMJC||']未做电子申请单不能提交!'; raise Ecustom; end if; end if; ls_SHDJ00:=SF_ZS_CHECKSHDJ(v_zyid00); if ls_SHDJ00>0 then Verrmsg := '存在未做未做术后登记的手术,请先做好术后登记后再开新医嘱!'; raise Ecustom; end if; -- --是否医嘱启用时间默认提交时间 select nvl(max(trim(VALUE0)),'N') into ls_YZQYSJMRTJSJ from XT_XTCS00 where NAME00='ZS_YZQYSJMRTJSJ'; if (ls_YZQYSJMRTJSJ = 'Y') then select nvl(max(trim(VALUE0)),'N') into ls_DQSJWYZQYSJ from XT_XTCS00 where NAME00='ZS_YZ_DQSJWYZQYSJ'; if ls_DQSJWYZQYSJ = 'Y' then select nvl(a.QSRQ00,b.RYRQ00), b.RYCWH0 into v_RYRQ00, v_RYCWH0 from bq_brldxx a,zy_brxxb0 b where a.zyid00(+)=b.zyid00 and b.zyid00 = v_zyid00 and a.qszt00='新入' and rownum=1; if(v_RYRQ00 = to_char(v_sysdate,'yyyyMMdd')) then v_Count := 0; else v_Count := 1; end if; if (v_RYCWH0 is null) then Verrmsg:='病人未指定床号,不能提交医嘱!'; Raise Ecustom; end if; if (v_Count = 0) then select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and ((to_date(qyrq00||qysj00,'yyyyMMddhh24:mi:ss') - to_date(lrrq00||lrsj00,'yyyyMMddhh24:mi:ss'))*24*60*60) between -900 and 60; --非当天入院的病人,或者当天入院且录入时间和启用时间相差10分钟以内的,取医嘱的提交时间作为起用时间 end if; if(v_Count>0) then --60秒内的医嘱,取相同的提交时间作为启用时间 select nvl(max(qyrq00),to_char(v_sysdate,'yyyyMMdd')),nvl(max(qysj00),to_char(v_sysdate,'hh24:mi:ss')) into v_qyrq00, v_qysj00 from bq_yjyz00 where zyid00 = v_zyid00 and ((sysdate - to_date(qyrq00||qysj00,'yyyyMMddhh24:mi:ss'))*24*60*60) between -1 and 60; if(v_qyrq00||v_qysj00 = to_char(v_sysdate,'yyyyMMddhh24:mi:ss')) then --60秒内的医嘱,取相同的提交时间作为启用时间 select nvl(max(qyrq00),to_char(v_sysdate,'yyyyMMdd')),nvl(max(qysj00),to_char(v_sysdate,'hh24:mi:ss')) into v_qyrq00, v_qysj00 from bq_ypyz00 where zyid00 = v_zyid00 and ((sysdate - to_date(qyrq00||qysj00,'yyyyMMddhh24:mi:ss'))*24*60*60) between -1 and 60; end if; update BQ_YJYZ00 set qyrq00=v_qyrq00, qysj00=v_qysj00 where YZMXID = p_yzmxid; end if; end if; end if; if LS_YZLX00 not in('4','5') then update BQ_YJYZ00 set YZZT00 = '0',YZTJRQ=to_char(sysdate,'yyyymmdd'),YZTJSJ=to_char(sysdate,'hh24:mi:ss'),KZYS00=decode(p_sssbz0,'Y',KZYS00,decode(nvl(p_czy000,0),0,KZYS00,p_czy000)) where YZMXID = p_yzmxid; else update BQ_YJYZ00 set YZZT00 = '0',YZTJRQ=to_char(sysdate,'yyyymmdd'),YZTJSJ=to_char(sysdate,'hh24:mi:ss') where YZMXID = p_yzmxid; end if; select count(*)into V_Count from XT_DZGG00 where zyid00=v_zyid00 and CZLB00='1'; if (V_Count=0) and (p_sssbz0='N') then Insert into XT_DZGG00(ID0000,ZYID00,FSBQ00,FSBQMC,FSKS00,FSKSMC,FSXX00, YXQSRQ,YXQSSJ,YXZZRQ,YXZZSJ,CZY000,CZLB00,XTDM00) select SQ_XT_DZGG00_ID0000.nextval,zyid00,0,' ',dqbq00,' ','"'||TRIM(RYCWH0)||'床'||TRIM(ZYH000)||' '||TRIM(XM0000)||'" --有新开医嘱 '||to_char(sysdate,'hh24:mi'), to_char(sysdate,'yyyymmdd'),to_char(sysdate,'hh24:mi:ss'),'99991231','00:00:00',p_czy000,'1','9' from zy_brxxb0 where zyid00=v_zyid00; end if; select nvl(JHMXID,0), nvl(YZLX00,'0') into ls_jhmxid,LS_YZLX00 from BQ_YJYZ00 where YZMXID= p_yzmxid and rownum<=1; if ls_jhmxid>0 then select ZYID00 into ls_zyid00 from BQ_YJYZ00 where YZMXID= p_yzmxid; begin select ZRZCID into ls_zrzcid from lj_zrzc00 where ZYID00=ls_zyid00 and nvl(JSRQ00,' ')=' ' ; exception when others then ls_zrzcid:=0; end; if ls_zrzcid>0 then sp_zs_lj_deletebyjl(ls_zrzcid,ls_jhmxid); end if; end if; if LS_YZLX00 in('4','5') then --BQ-20131024-001 update bq_yjyz00 set YZZT00='3' ,TZRQ00=to_char(sysdate,'YYYYMMDD') ,TZSJ00=to_char(sysdate,'HH24:MI:SS') --,TZRXM0 = v_CZYXM0 ,HDRXM0=v_CZYXM0 ,TZYS00=KZYS00 where YZMXID=p_yzmxid; end if; select count(*) into V_Count from BQ_YJYZ00 a,YJ_KSPBHB b where a.ZXKS00=b.YJKSBH and b.HBSYBZ='0' and b.YYRQ00>=to_char(sysdate,'YYYYMMDD') and a.YZMXID=p_yzmxid and a.CLBZ00='1' and a.YZLX00<>'4'; if V_Count>0 then begin commit; --底下执行有可能有回滚 SP_BQ_YJYZZX_XZ 为了保证提交能完成 --为了后面能调用正常的项目执行过程先弄成核对状态 update BQ_YJYZ00 set YZZT00='1' where YZMXID=p_yzmxid; select * into v_yjyz00 from BQ_YJYZ00 where YZMXID=p_yzmxid; SELECT TO_CHAR(SYSDATE+30, 'YYYYMMDD') INTO VJZRQ00 FROM DUAL; SP_BQ_YZCF00_SINGLE(VJZRQ00, P_YZMXID, '1'); SP_BQ_YJYZZX_XZ(p_czy000,v_yjyz00.ZYID00,v_yjyz00.BQH000,'0,'||to_char(p_yzmxid),to_date(v_yjyz00.QYRQ00,'YYYYMMDD'),PBCTQID,null,'Y'); update BQ_YJYZ00 set YZZT00='0' where YZMXID=p_yzmxid; --还原状态 end; end if; elsif p_mode00 = 8 then select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and YZZT00 in ('2') and CLBZ00 = '0'; if v_Count = 0 then Verrmsg := '非使用长期非药医嘱,不能预停止'; Raise Ecustom; end if; --判断停止时间是否大于和起用时间提取时间 select Count(1) into v_Count from BQ_YJYZ00 where YZMXID = p_yzmxid and QYRQ00 <= p_tzrq00 and QYRQ00||QYSJ00 <= p_tzrq00||p_tzsj00; if v_Count = 0 then Verrmsg:='预停止时间小于起用时间,不能预停止'; Raise Ecustom; end if; update BQ_YJYZ00 set TZYS00 = p_tzys00,TZRXM0 = p_tzrxm0,YTZRQ0 = p_tzrq00,YTZSJ0 = p_tzsj00 where YZMXID = p_yzmxid; end if; exception when no_data_found then raise_application_error(-20001,substrb('数据没有找到!*'||sqlerrm||','||Vparams,1,220)); when Ecustom then raise_application_error(-20010,substrb(Verrmsg||'!*'||Vparams,1,220)); when others then raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'!*'||Vparams,1,220)); end;