CREATE OR REPLACE PROCEDURE SP_YJ_PXYFZDFY as pzxcgbz varchar2(1); Pzxcgbz1 varchar2(1); ptsxx00 varchar2(300); pxxxx00 varchar2(300); ls_ygbh00 BM_YGBM00.YGBH00%type; --发药人 ls_czyks0 BM_YGBM00.bmbh00%type; ls_dqrq00 YF_MZCF00.FYRQ00%type; ls_dqsj00 YF_MZCF00.FYSJ00%type; ls_CKDH00 YF_YPCKD0.CKDH00%type; ls_SFQY00 varchar2(20); -- MODIFICATION HISTORY -- Person Date Comments -- dsm 2024.08.09 create,平行药房自动发药退药 for YJ9-20240809-002 -- dsm 2024.09.24 增加住院退药的处理 YF9-20240924-002 begin --门诊 select nvl(max(trim(MC0000)),'0') into ls_SFQY00 from BM_TYZD00 where ZDMC00='平行药房配置' and BH0000='YJZLDCPXYF_OPEN'; select nvl(max(trim(MC0000)),'0') into ls_YGBH00 from BM_TYZD00 where ZDMC00='平行药房配置' and BH0000='YJZLDCPXYF_FYCZY'; select ygbh00,bmbh00 into ls_YGBH00,ls_CZYKS0 from BM_YGBM00 where ygbh00=ls_YGBH00;--'1660' ; ----咨询郑力影像药房默认陈娟娟 if ls_SFQY00='1' and ls_YGBH00>0 then for c_cf in(select a.CFLSH0,a.DJH000,a.CFZJE0,a.YFBMBH,a.CFZT00 from YF_MZCF00 a,BM_KSYFDY b where a.JZRQ00>=to_char(sysdate-2,'YYYYMMDD') and a.DJH000>0 and a.FYSJ00 is null and a.YFBMBH=b.YFBMBH and b.YXBZ00='1' ORDER BY A.djh000 -- and EXISTS (select 1 from yj_yw0000 where zyhghh=a.ghh000 and zldccf=a.cflsh0 and xmzt00=3) ---增加项目是已执行的才发药,,因有收费与执行的天数夸度大,造成没扣库存的。 ) loop --- select CZY000,CZYKS0 into ls_YGBH00,ls_CZYKS0 from SF_FYMX00 where DJH000=c_cf.DJH000; select to_char(sysdate,'yyyymmdd'),to_char(sysdate,'hh24:mi:ss') into ls_dqrq00,ls_dqsj00 from dual; IF c_cf.CFZJE0 > 0 and c_cf.CFZT00='1' then SP_YF_MZCF00_FYTY( 0, c_cf.CFLSH0, --处方流水号 ls_YGBH00, --发药人 ls_YGBH00, --复核人 ls_YGBH00, --配方人 '0', --'0'直接发药 '1'排队叫号发药 ls_dqrq00, --发药日期 ls_dqsj00, --发药时间 ls_YGBH00, --输入:操作员编码 null, --操作员科室 'Y', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); if pzxcgbz = 0 then --插入操作日志 rollback; insert into XT_XTCZRZ(CZID00,CZLX00,CZRYBM,CZNR00,CZTABLE,DATAID) values (SQ_XT_XTCZRZ_ID0000.NEXTVAL,1,ls_YGBH00,'平行药房'||c_cf.YFBMBH||',CFLSH0='||c_cf.CFLSH0||'发药失败(SP_YF_MZCF00_FYTY)'||ptsxx00,'YF_MZCF00',c_cf.CFLSH0); commit; --p_errmsg := '处方发药错误:' || ptsxx00; -- return; end if; elsif c_cf.CFZJE0 < 0 then SP_YF_MZCF00_FYTY( 1, --0发药 1退药 c_cf.CFLSH0, --处方流水号 ls_YGBH00, --发药人 ls_YGBH00, --复核人 ls_YGBH00, --配方人 '0', --'0'直接发药 '1'排队叫号发药 ls_dqrq00, --发药日期 ls_dqsj00, --发药时间 ls_YGBH00, --输入:操作员编码 null, --操作员科室 'Y', --是否提交 Pzxcgbz, --执行成功标志 1成功 0失败 ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00 --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 ); if pzxcgbz = 0 then --插入操作日志 rollback; insert into XT_XTCZRZ(CZID00,CZLX00,CZRYBM,CZNR00,CZTABLE,DATAID) values (SQ_XT_XTCZRZ_ID0000.NEXTVAL,1,ls_YGBH00,'平行药房'||c_cf.YFBMBH||',CFLSH0='||c_cf.CFLSH0||'退药失败3(SP_YF_MZCF00_FYTY)'||ptsxx00,'YF_MZCF00',c_cf.CFLSH0); commit; --p_errmsg := '处方退药错误:' || ptsxx00; -- return; end if; end if; end loop; --住院 for c_zycf in(select a.YPQLPC,a.DJH000,YPZSL0,a.YFBMBH,a.YZID00 ,a.BQBMBH,a.YYRQ00 ---住院医技项目是科室执行收费,非病区提取收费。 from YF_YZYPSQ a,BM_KSYFDY b where a.JZRQ00>=to_char(sysdate-2,'YYYYMMDD') and a.DJH000 in (select djh000 from zy_fymx00 where yjjzid=a.ypqlpc ) and a.FYSJ00 is null and a.YFBMBH=b.YFBMBH and a.CKDH00 is null and b.YXBZ00='1' ) loop Pzxcgbz:=0; Pzxcgbz1:=0; select sq_yf_ypckd0_ckdh00.nextval into ls_CKDH00 from dual; SP_YF_YZYPSQ_FYCZ(c_zycf.YPQLPC, ls_CKDH00, ls_ygbh00, ls_czyks0, 'N', Pzxcgbz, Ptsxx00, Pxxxx00, '1',c_zycf.YYRQ00,sysdate,c_zycf.YZID00); if Pzxcgbz = 0 then --插入操作日志 rollback; -- insert into XT_XTCZRZ(CZID00,CZLX00,CZRYBM,CZNR00,CZTABLE,DATAID) values -- (SQ_XT_XTCZRZ_ID0000.NEXTVAL,1,ls_YGBH00,'平行药房'||c_zycf.YFBMBH||'YPQLPC='||c_zycf.YPQLPC||'发药失败1(SP_YF_YZYPSQ_FYCZ)'||ptsxx00,'YF_YZYPSQ',c_zycf.YPQLPC); -- commit; --return; else SP_YF_YZYPSQ_CKD000(ls_CKDH00, c_zycf.YFBMBH, c_zycf.BQBMBH, c_zycf.YPQLPC, 0, ls_ygbh00, ls_CZYKS0, 'N', Pzxcgbz1, Ptsxx00, Pxxxx00, '1',c_zycf.YYRQ00,ls_YGBH00); if Pzxcgbz1 = 0 then --插入操作日志 rollback; -- insert into XT_XTCZRZ(CZID00,CZLX00,CZRYBM,CZNR00,CZTABLE,DATAID) values -- (SQ_XT_XTCZRZ_ID0000.NEXTVAL,1,ls_YGBH00,'平行药房'||c_zycf.YFBMBH||'YPQLPC='||c_zycf.YPQLPC||'发药失败2(SP_YF_YZYPSQ_CKD000)'||ptsxx00,'YF_YZYPSQ',c_zycf.YPQLPC); -- commit; end if; --return; end if; end loop; --住院退药 for c_zyty in(select a.YPQLPC,a.DJH000,YPZSL0,a.YFBMBH,a.YZID00 ,a.BQBMBH,a.YYRQ00 from YF_YZYPSQ a,BM_KSYFDY b where a.JZRQ00>=to_char(sysdate-2,'YYYYMMDD') and nvl(a.DJH000,0)>0 and a.FYSJ00 is null and a.YFBMBH=b.YFBMBH and a.CKDH00 is null and b.YXBZ00='1' and YPZSL0<0 ) loop Pzxcgbz:=0; Pzxcgbz1:=0; SP_YF_ZYBRTY( Pypqlpc=>c_zyty.ypqlpc, Plyrbh0=>ls_ygbh00, --退药人 Pczy000=>ls_ygbh00, --操作员编码 Pczyks0=>ls_czyks0, --操作员科室 Pcommit=>'N', --是否提交 Pzxcgbz=>Pzxcgbz, --执行成功标志 1成功 0失败 Ptsxx00=>Ptsxx00, --执行结果提示信息,成功的情况下也可能有警告信息 Pxxxx00=>Pxxxx00, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 Psfzjyd=>'N', --是否转借药单:N不转Y转 Ppjzjyd=>'N' --片剂是否转借药单:N不转Y转 ); if Pzxcgbz = 0 then --插入操作日志 rollback; insert into XT_XTCZRZ(CZID00,CZLX00,CZRYBM,CZNR00,CZTABLE,DATAID) values (SQ_XT_XTCZRZ_ID0000.NEXTVAL,1,ls_YGBH00,'平行药房'||c_zyty.YFBMBH||'YPQLPC='||c_zyty.YPQLPC||'退药失败(SP_YF_YZYPSQ_FYCZ)'||ptsxx00,'YF_YZYPSQ',c_zyty.YPQLPC); commit; --return; end if; commit; end loop; end if; end SP_YJ_PXYFZDFY;