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编码格式传入，目前先传 是否换开纸质发票 格式：<hkzzfp>0或1</hkzzfp>
  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;

--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%