CREATE OR REPLACE PROCEDURE SP_SF_BSDZFPJKQR ( Pjkcjbm in varchar2, --接口场景编码 Pwbid00 in number, --外部发票ID Pcjlybm in varchar2, --厂家来源编码 厂家来源编码 BS:博思,YH:易惠,。。。(待扩展) 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 -- jlg 2020.10.12 created 博思电子发票接口确认过程 MZSF9-20201012-002 -- jlg 2020.10.29 Pnewpjh 增加默认值0 MZSF9-20201029-001 -- jlg 2020.11.09 去掉PZDYYG = Pczy000 的条件,及增加Pbycs00的xml编码格式,增加备用出参Poutstr MZSF9-20201027-003 -- jlg 2020.11.16 中间日志表由SF_WBPJXX改为SF_WBFPXX表,增加入参Pwbid00,Pcjlybm,修改入参Pbycs00为Pintstr MZSF9-20201113-002 -- jlg 2020.12.03 修改换开纸质发票时,WBPJDM,WBPJXH也修改为纸质发票对应代码与号码 MZSF9-20201202-004 -- linzetao 2021.03.10 取消结算冲红票据时, WBPJDM、WBPJXH、WBPJLY同时写入取消票据 MZSF9-20210309-003 -- jlg 2021.03.16 重新处理作废纸质票据接口的负票的信息写入(如果没有负票的情况呢?后面再考虑) MZSF9-20210315-005 -- jlg 2021.04.09 开具电子票时,如果原来SF_PJSYQK.CZY000与当前Pczy000不一致,则原票据冲销,重新生成票据号 MZSF9-20210315-006 -- jlg 2021.04.27 修改:当电子发票通用字典CJLYBM_MZ='YH'时,暂不处理上一条的处理方式 MZSF9-20210423-004 -- zhangyc 2021.04.30 PJKCJBM='MZSF_DZFP_0003'是,修改票据表条件PJH000=PPJH000 改为PJH000=nvl(ls_PJH000,PPJH000) by MZSF9-20210423-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; --厂家编码 begin Pzxzt00 := 0; Poutstr := ''; ls_HKZZFP:= SF_XT_GETXMLNOTE('hkzzfp',Pintstr); 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:易惠,默认BS select nvl(max(trim(MC0000)),'BS') into ls_MZCJBM from BM_TYZD00 where ZDMC00='第三方电子发票平台接口' and BH0000='CJLYBM_MZ'; if (ls_OLDCZY <> Pczy000) and (ls_MZCJBM = 'BS') 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; if ls_HKZZFP = '1' then --开具电子发票同时换开纸质发票 --更新纸质发票序号 update SF_PJSYQK set PJXH00=nvl(wbpj.ZZFPXH,'0'),WBPJLY='03',WBPJDM=wbpj.ZZFPDM,WBPJXH=wbpj.ZZFPXH,czy000=wbpj.zzczy0,czyxm0= (select trim(ZWXM00) from BM_YGBM00 where YGBH00 = wbpj.zzczy0),dyrq00=wbpj.zzfprq,dysj00=wbpj.zzfpsj where PJH000=ls_PJH000 and PJXH00='0'; end if; elsif PJKCJBM in ('MZSF_DZFP_0003') then --换开纸质票据接口 update SF_PJSYQK set PJXH00=nvl(wbpj.ZZFPXH,'0'),WBPJLY='03',WBPJDM=wbpj.ZZFPDM,WBPJXH=wbpj.ZZFPXH,czy000=wbpj.zzczy0,czyxm0=(select trim(ZWXM00) from BM_YGBM00 where YGBH00 = wbpj.zzczy0),dyrq00=wbpj.zzfprq,dysj00=wbpj.zzfpsj where PJH000=nvl(ls_PJH000,PPJH000) and PJXH00='0'; elsif PJKCJBM in ('MZSF_DZFP_0004') 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='05' where BRID00=PBRID00 and PJH000=PPJH000 and PJXH00=wbpj.ZZFPXH; else --找到原票的信息 select nvl(max(PJXH00),'0'),nvl(max(WBPJDM),'0'),nvl(max(WBPJXH),'0'),nvl(max(CJLYBM),'0') into ls_PJXH00,ls_WBPJDM,ls_WBPJXH,ls_CJLYBM from SF_PJSYQK where BRID00=PBRID00 and PJH000 = PPJH000; --修改负票的信息 update SF_PJSYQK set WBPJLY='05',WBPJDM =ls_WBPJDM,WBPJXH =ls_WBPJXH,WBID00=Pwbid00,CJLYBM=ls_CJLYBM --PJXH00='-'||ls_PJXH00 这里PJXH00不做处理了,取消结算时会处理 where BRID00=PBRID00 and OLDPJH=PPJH000; end if; elsif PJKCJBM in ('MZSF_DZFP_0005') then --重新换开纸质票据接口 select * into wbpj from SF_WBFPXX where BRID00=PBRID00 and JZDH00=PJZDH00 and PJH000=PNEWPJH; update SF_PJSYQK set PJXH00=nvl(wbpj.ZZFPXH,'0'),WBPJLY='03',WBPJDM=wbpj.ZZFPDM,WBPJXH=wbpj.ZZFPXH,WBID00 =wbpj.WBID00,CJLYBM=wbpj.CJLYBM,czy000=wbpj.zzczy0,czyxm0=(select trim(ZWXM00) from BM_YGBM00 where YGBH00 = wbpj.zzczy0),dyrq00=wbpj.zzfprq,dysj00=wbpj.zzfpsj where BRID00=PBRID00 and PJH000=PNEWPJH; 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_BSDZFPJKQR('||PJKCJBM||','||Pwbid00||','||PBRID00||','||PJZDH00||','||PPJH000||','||PCZY000||','||Pintstr||',Pzxzt00,Perrmsg)'||sqlerrm,1,200); when others then rollback; Perrmsg := substrb('执行博思电子发票接口确认失败!*SP_SF_BSDZFPJKQR('||PJKCJBM||','||Pwbid00||','||PBRID00||','||PJZDH00||','||PPJH000||','||PCZY000||','||Pintstr||',Pzxzt00,Perrmsg)'||sqlerrm,1,200); end;