prompt 永巨电子发票接口确认过程 SP_SF_YJDZFPJKQR create or replace procedure SP_SF_YJDZFPJKQR ( Pjkcjbm in varchar2, --接口场景编码 Pwbid00 in number, --外部发票ID Pcjlybm in varchar2, --厂家来源编码 厂家来源编码 BS:博思,YH:易惠,YJ:永巨。。。(待扩展) Pbrid00 in number, --病人ID Pjzdh00 in number, --结账单号 Ppjh000 in number, --票据号 Pnewpjh in number default 0, --新票据号 Pczy000 in number, --操作员 Pczyks0 in number, --操作员科室 Pintstr in varchar2, --备用参数 xml编码格式传入,目前先传 是否换开纸质发票 格式:0或1 Pcommit in varchar2 default 'N', --是否提交 Pzxzt00 out number, --执行状态 0失败1成功 Perrmsg out varchar2, --错误信息 Poutstr out varchar2 --备用出参 用xml编码格式 ) -- modification history -- Person Date Comments -- chenrenhai 2023.02.02 created 永巨电子发票接口确认过程 MZSF13H-20230202-001 as wbpj SF_WBFPXX%rowtype; pjxx SF_PJSYQK%rowtype; ls_PJXH00 SF_PJSYQK.PJXH00%type; ls_WBPJDM SF_PJSYQK.WBPJDM%type; ls_WBPJXH SF_PJSYQK.WBPJXH%type; ls_CJLYBM SF_PJSYQK.CJLYBM%type; ls_COUNT0 number(10); --计数数量 ls_HKZZFP varchar2(100); --是否换开纸质发票,0否 1是 ls_CZYXM0 BM_YGBM00.ZWXM00%type; ls_YHMSG0 varchar2(1000); ls_PJH000 SF_PJSYQK.PJH000%type; ls_OLDCZY SF_PJSYQK.CZY000%type; --原票据操作员ID ls_MZCJBM BM_TYZD00.MC0000%type; --厂家编码 ls_HKCZFP BM_TYZD00.MC0000%type; --通用字典参数 begin Pzxzt00 := 0; Poutstr := ''; select * into wbpj from SF_WBFPXX where WBID00 = Pwbid00; select nvl(max(ZWXM00),to_char(Pczy000)) into ls_CZYXM0 from BM_YGBM00 where YGBH00 = Pczy000; if PJKCJBM in ('MZSF_DZFP_0001') then --医疗门诊电子票据开具接口 select count(*) into ls_COUNT0 from SF_PJSYQK where PJH000 = PPJH000; if ls_COUNT0 >0 then select nvl(max(CZY000),0) into ls_OLDCZY from SF_PJSYQK where PJH000 = PPJH000; else ls_OLDCZY := Pczy000; end if; --厂家来源编码(门诊)BS:博思 YH:易惠,YJ:永巨,默认YJ select nvl(max(trim(MC0000)),'YJ') into ls_MZCJBM from BM_TYZD00 where ZDMC00='第三方电子发票平台接口' and BH0000='CJLYBM_MZ'; --if (ls_OLDCZY <> Pczy000) and (ls_MZCJBM = 'YJ') then --操作员不同,需要将原票据冲销,在重新生成新票据;易慧模式的,暂不进行此项处理 --SP_SF_FPBD00_REG000( --PPJH000, --票据号 --'0', --外部票据序号,直接传‘0’值 --Pczy000, --操作员编码 --ls_CZYXM0, --操作员姓名 --'1', --操作标志,'1':补打发票 --ls_PJH000, --新的票据内部号 --ls_YHMSG0, --执行结果提示信息,成功的情况下也可能有警告信息 --Perrmsg, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 --Pczyks0 --操作员科室 --); --需要将外部发票信息中的票据号也改为新的票据号,以便能够关联上 --update SF_WBFPXX set PJH000 = ls_PJH000 where WBID00 = Pwbid00; --else ls_PJH000:= PPJH000; --end if; --更新电子发票 update SF_PJSYQK set WBPJLY='02',WBPJDM=wbpj.DZFPDM,WBPJXH=wbpj.DZFPXH,WBID00=Pwbid00,CJLYBM=Pcjlybm where PJH000=ls_PJH000; ls_HKZZFP:= SF_XT_GETXMLNOTE('hkzzfp',Pintstr); if ls_HKZZFP = '1' then --开具电子发票同时换开纸质发票 --更新纸质发票序号 update SF_PJSYQK set PJXH00=nvl(wbpj.ZZFPXH,'0'),WBPJLY='03',WBPJDM=wbpj.ZZFPDM,WBPJXH=wbpj.ZZFPXH where PJH000=ls_PJH000 and PJXH00='0'; end if; elsif PJKCJBM in ('MZSF_DZFP_0003') then --换开纸质票据接口 ls_PJH000:= null; select count(*) into ls_COUNT0 from SF_PJSYQK where PJH000 = PPJH000; if ls_COUNT0 >0 then select nvl(max(CZY000),0) into ls_OLDCZY from SF_PJSYQK where PJH000 = PPJH000; else ls_OLDCZY := Pczy000; end if; --当不同收费员进行电子发票换开纸质发票时,是否按发票重置一样重新生成票据(门诊),0否1是,默认0 ls_HKCZFP:= nvl(SF_XT_TYZDMC('第三方电子发票平台接口','BTSFYHKZZFPSFCZFP_MZ'),'0'); if (ls_OLDCZY <> Pczy000) and (ls_HKCZFP = '1') then SP_SF_FPBD00_REG000( PPJH000, --票据号 '0', --外部票据序号,直接传‘0’值 Pczy000, --操作员编码 ls_CZYXM0, --操作员姓名 '1', --操作标志,'1':补打发票 ls_PJH000, --新的票据内部号 ls_YHMSG0, --执行结果提示信息,成功的情况下也可能有警告信息 Perrmsg, --执行结果详细信息,成功的情况下也可能有警告信息,一般用来显示参数等指标 Pczyks0 --操作员科室 ); --需要将外部发票信息中的票据号也改为新的票据号,以便能够关联上 update SF_WBFPXX set PJH000 = ls_PJH000 where WBID00 = Pwbid00; else ls_PJH000:= PPJH000; end if; --更新纸质发票信息 update SF_PJSYQK set PJXH00=nvl(wbpj.ZZFPXH,'0'),WBPJLY='03',WBPJDM=wbpj.ZZFPDM,WBPJXH=wbpj.ZZFPXH where PJH000=nvl(ls_PJH000,PPJH000) and PJXH00='0'; elsif PJKCJBM in ('MZSF_DZFP_0006') then --电子票据冲红接口 --如果电子发票综合操作里直接冲红的,没有产生对应负票记录的,那么仍按原来的处理 select count(*) into ls_COUNT0 from SF_PJSYQK where BRID00=PBRID00 and OLDPJH=Ppjh000; if ls_COUNT0 =0 then update SF_PJSYQK set WBPJLY='04',WBPJDM=wbpj.CHFPDM,WBPJXH=wbpj.CHFPXH where BRID00=PBRID00 and PJH000=Ppjh000; --原票的WBPJLY,WBPJDM,WBPJXH改为冲红票 else --修改负票的信息 update SF_PJSYQK set WBPJLY='04',WBPJDM=wbpj.CHFPDM,WBPJXH=wbpj.CHFPXH,WBID00=wbpj.WBID00,CJLYBM=wbpj.CJLYBM where BRID00=PBRID00 and OLDPJH=Ppjh000; --更新电子发票 end if; end if; if Pcommit ='Y' then commit; end if; Pzxzt00:= 1; exception when no_data_found then rollback; Perrmsg := substrb('执行永巨电子发票接口确认失败,未找到数据!*SP_SF_YJDZFPJKQR('||PJKCJBM||','||Pwbid00||','||PBRID00||','||PJZDH00||','||PPJH000||','||PCZY000||','||Pintstr||',Pzxzt00,Perrmsg)'||sqlerrm,1,200); when others then rollback; Perrmsg := substrb('执行永巨电子发票接口确认失败!*SP_SF_YJDZFPJKQR('||PJKCJBM||','||Pwbid00||','||PBRID00||','||PJZDH00||','||PPJH000||','||PCZY000||','||Pintstr||',Pzxzt00,Perrmsg)'||sqlerrm,1,200); end; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%