CREATE OR REPLACE PROCEDURE SP_TCMHERB_JXZHCL
(
  Popflag  in     varchar2,                   --操作类别 1不覆盖操作 2覆盖操作
  Pxzczid  in     number,                     --TCMHERB_LIST_DLD_DET表的xzczid值
  Pmdcode  in     varchar2,                   --TCMHERB_LIST_DLD_DET表的med_list_codg值
  Pczy000  in     number     default 0,       --操作员
  Pczyks0  in     number     default 0,       --操作员科室
  Pcommit  in     varchar2   default 'N',     --是否提交 Y是N否
  Pycshow  in     varchar2   default '0',     --出现异常是否显示 0不显示，1显示
  Pxmlstr  in     varchar2   default '',      --统一的备用入参，以xml格式编码
  Pzxcgbz  out    number,                     --执行成功标志 1成功 0失败
  Ptsxx00  out    varchar2,                   --执行结果提示信息，成功的情况下也可能有警告信息
  Pxxxx00  out    varchar2,                   --执行结果详细信息，成功的情况下也可能有警告信息，一般用来显示参数等指标
  Poutstr  out    varchar2                    --统一的备用出参，以xml格式编码
)
-- MODIFICATION HISTORY
-- Person      Date        Comments
-- jlg        2022.02.11   created 国家医保平台中药饮片目录下载明细表解析转换处理过程           GGMK9EX-20220210-001
as
  ls_CZRQ00    char(8);
  ls_CZSJ00    char(8);
  ls_CZRQSJ    char(16);
  ls_Count0    number(10);
  Ecustom      exception;
  VRowMX       TCMHERB_LIST_DLD_DET%rowtype;   --新医保目录更新明细表
  VRowRZ       GEN_LIST_DLD_LOG%rowtype;       --新医保目录更新操作记录表
  ls_YBGXRQ    BM_YBSFXM.YBGXRQ%type;          --医保更新日期
  ls_PTFPBH    BM_YBFPXM.PTFPBH%type;          --国家医保平台发票项目类别
  ls_XMMC00    BM_YBSFXM.XMMC00%type;          --项目名称
  ls_YPJX00    BM_YBSFXM.YPJX00%type;          --剂型
  ls_XMDW00    BM_YBSFXM.XMDW00%type;          --单位-->最小计价单位
  ls_ZFBL00    BM_YBSFXM.ZFBL00%type;          --是否有效
  ls_SFYX00    BM_YBSFXM.SFYX00%type;          --自付比例 @@jlg暂无法从何取值
  ls_SFYBXM    BM_YBSFXM.SFYBXM%type;          --是否医保项目 Y是 N否 @@jlg暂无法从何取值
  ls_YBLB00    BM_YBSFXM.YBLB00%type;          --医保类别 (无对应项)  0医保项目,1部分自费医保项目,2非医保项目,3补充的非医保项目4甲类药品 5乙类药品 6民族药品 7非医保药品
  ls_PYSM00    BM_YBSFXM.PYSM00%type;          --拼音首码
  ls_WBSM00    BM_YBSFXM.WBSM00%type;          --五笔首码
  ls_GXXLH0    BM_YBSFXM.GXXLH0%type;          --更新序列号
  ls_SFSX00    BM_YBSFXM.SFSX00%type;          --收费上限 (无对应下)
  ls_SCCJ00    BM_YBSFXM.SCCJ00%type;          --生产厂家
  ls_YPGG00    BM_YBSFXM.YPGG00%type;          --规格型号
  ls_BZ0000    BM_YBSFXM.BZ0000%type;          --备注说明
  ls_CPID00    BM_YBSFXM.CPID00%type;          --医保最高单价(大单位)
  ls_ZXJJDW    BM_YBSFXM.ZXJJDW%type;          --医保最高单价(小单位)
  ls_CJR000    BM_YBSFXM.CJR000%type;          --医保产品ID号 (无对应项)
  ls_CFBL00    BM_YBSFXM.CFBL00%type;          --最小计价单位
  ls_YBZGDJ    BM_YBSFXM.YBZGDJ%type;          --拆分比例（倍率）
  ls_YBZGDJ1   BM_YBSFXM.YBZGDJ1%type;         --创建人
  ls_YBJSDJ    BM_YBSFXM.YBJSDJ%type;          --医保结算单价(大单位)
  ls_YBJSDJ1   BM_YBSFXM.YBJSDJ1%type;         --医保结算单价(小单位)
  ls_BKEH83    BM_YBSFXM.BKEH83%type;          --医保国家标准编码
  ls_VER000    BM_YBSFXM.VER000%type;          --版本号
begin
  Pzxcgbz:=0;
  ls_CZRQ00 := to_char(sysdate,'YYYYMMDD');
  ls_CZSJ00 := to_char(sysdate,'HH24:MI:SS');
  ls_CZRQSJ := ls_CZRQ00||ls_CZSJ00;
  select * into VRowRZ from GEN_LIST_DLD_LOG where xzczid = Pxzczid;
  if sql%notfound then
    return;
  end if;

  select * into VRowMX from TCMHERB_LIST_DLD_DET where xzczid = Pxzczid and med_list_codg = Pmdcode;
  if sql%notfound then
    return;
  end if;

  --如果不覆盖操作，则已转换的不处理
  if Popflag = 1 and VRowMX.ZHCLBZ ='1' then
    Pzxcgbz:=1;
    return;
  end if;

  ls_YBGXRQ := replace(VRowMX.updt_time,'-','');                                                     --医保更新日期
  ls_XMMC00 := VRowMX.sin_drug_name;                                                                 --项目名称
  ls_PTFPBH := '03';                                                                                 --医保发票项目   01西药 02成药 03草药
  ls_YPJX00 := substr(VRowMX.tcmherb_cat,1,50);                                                      --剂型
  ls_XMDW00 := substr(null,1,20);                                                                    --单位-->最小计价单位
  ls_SFYX00 := (case when (VRowMX.vali_flag = '0' or VRowMX.vali_flag = 'N') then 'N' else 'Y' end); --是否有效
  ls_ZFBL00 := 1;                                                                                    --自付比例 @@jlg暂无法从何取值
  ls_SFYBXM := 'Y';                                                                                  --是否医保项目 Y是 N否 @@jlg暂无法从何取值
  ls_YBLB00 := '4';                                                                                  --医保类别 (无对应项)  0医保项目,1部分自费医保项目,2非医保项目,3补充的非医保项目4甲类药品 5乙类药品 6民族药品 7非医保药品
  ls_PYSM00 := substr(SF_XT_GETPYSM(ls_XMMC00),1,10);                                                --拼音首码
  ls_WBSM00 := substr(SF_XT_GETWBSM(ls_XMMC00),1,10);                                                --五笔首码
  ls_GXXLH0 := 0;                                                                                    --更新序列号
  ls_SFSX00 := null;                                                                                 --收费上限 (无对应下)
  ls_SCCJ00 := substrb(null,1,100);                                                                  --生产厂家
  ls_YPGG00 := substrb(VRowMX.tcmherb_cat,1,50);                                                     --规格型号
  --ls_BZ0000 := substrb(VRowMX.efcc_atd,1,250);                                                       --备注说明
  ls_BZ0000 := substrb(trim(VRowMX.NAT_INSU_PAY_POL),1,250);                                               --备注说明-- why20220602
  ls_YBZGDJ := 0;                                                                                    --医保最高单价(大单位)
  ls_YBZGDJ1:= 0;                                                                                    --医保最高单价(小单位)
  ls_CPID00 := null;                                                                                 --医保产品ID号 (无对应项)
  ls_ZXJJDW := substrb(null,1,10);                                                                   --最小计价单位
  ls_CFBL00 := null;                                                                                 --拆分比例（倍率）
  ls_CJR000 := VRowRZ.gxczy0;                                                                        --创建人
  ls_YBJSDJ := null;                                                                                 --医保结算单价(大单位)
  ls_YBJSDJ1:= null;                                                                                 --医保结算单价(小单位)
  ls_BKEH83 := substr(VRowMX.med_list_codg,1,50);                                                    --药监本位码
  ls_VER000 := substr(VRowMX.ver,1,20);                                                              --版本号
  --执行插入或修改BM_YBSFXM字典表
  SP_XM_YBSFXM_INSUPD(
    Pxzczid,
    Pmdcode,
    ls_YBGXRQ,
    ls_PTFPBH,
    ls_XMMC00,
    ls_YPJX00,
    ls_XMDW00,
    ls_ZFBL00,
    ls_SFYX00,
    ls_SFYBXM,
    ls_YBLB00,
    ls_PYSM00,
    ls_WBSM00,
    ls_GXXLH0,
    ls_SFSX00,
    ls_SCCJ00,
    ls_YPGG00,
    ls_BZ0000,
    ls_CPID00,
    ls_ZXJJDW,
    ls_CJR000,
    ls_CFBL00,
    ls_YBZGDJ,
    ls_YBZGDJ1,
    ls_YBJSDJ,
    ls_YBJSDJ1,
    ls_BKEH83,
    ls_VER000,
    Pczy000,
    Pczyks0,
    Pcommit,
    Pycshow,
    Pxmlstr,
    Pzxcgbz,
    Ptsxx00,
    Pxxxx00,
    Poutstr
    );

  --此记录更新为 ‘已转换’
  update TCMHERB_LIST_DLD_DET set ZHCLBZ = '1' where xzczid = Pxzczid and med_list_codg = Pmdcode;
  --对应日志表更新为 ‘HIS提取未完成’
  update GEN_LIST_DLD_LOG set HSTQBZ = '2' where xzczid = Pxzczid ;

  if Pcommit ='Y' then
    commit;
  end if;

  Pzxcgbz:=1;
exception
  when no_data_found then
    if Pycshow = '1' then
      raise_application_error(-20001,substrb('没有找到数据！*'||sqlerrm,1,240));
    else
      Ptsxx00:= substrb('没有找到数据！*'||sqlerrm,1,240);
    end if;
  when Ecustom       then
    if Pycshow = '1' then
      raise_application_error(-20010,substrb(Ptsxx00||'！*',1,240));
    end if;
  when others        then
    if Pycshow = '1' then
      raise_application_error(-20002,substrb(nvl(sqlerrm, '原因不明出错')||'！*',1,240));
    else
      Ptsxx00:= substrb(nvl(sqlerrm, '原因不明出错')||'！*',1,240);
    end if;
end;
