prompt 住院国家医保接口日志:【4203】自费病人就诊以及费用明细上传完成标识修改_日志生成 create or replace procedure SP_ZY_GJYBRZ_ZFSCBS( PYBJKID in varchar2 ,--[1]输入:医保接口ID PJKCJBM in varchar2 ,--[2]输入:接口场景编码 PBRID00 in number ,--[3]输入:BRID00 PZYID00 in number ,--[4]输入:ZYID000 PZYH000 in varchar2 ,--[5]输入:ZYH000 PCZY000 in number ,--[6]输入:操作员编码 PCZYXM0 in varchar2 ,--[7]输入:操作员姓名 PCZYKS0 in number ,--[8]输入:操作员科室 PQQCSID in varchar2 default '' ,--[9]输入:参数中间ID PINXML0 in varchar2 default '' ,--[10]输入:请求参数(XML) POTHER0 in varchar2 default '' ,--[11]输入:备用参数 PCOMMIT in varchar2 default 'N' ,--[12]输入:是否提交事务 Y:提交 N:不提交 PZXZT00 out number ,--[13]输出:执行状态 0:失败 1:成功 POUTXML out varchar2 ,--[14]输出:出参(XML) PERRMSG out varchar2 --[15]输出:错误信息 ) as -- MODIFICATION HISTORY -- Person Date Comments -- linzetao 2025.12.15 created by 【4203】自费病人就诊以及费用明细上传完成标识修改_日志生成 ZYSF-20251215-001 -- linzetao 2026.04.02 调整fixmedins_mdtrt_id节点取值处理 -- --------- ---------- ------- LS_COUNT0 number(12,2); LS_COUNT1 number(12,2); LS_CZRQ00 char(8); LS_CZSJ00 char(8); LS_INFNLX BM_TYCJBM.INFNLX%type;--:[国家医保]交易类型 1:直接调用医保DLL 3:调用服务接口 LS_QQJDBS BM_TYCJBM.QQJDBS%type;--:请求节点标识 LS_FHJDBS BM_TYCJBM.FHJDBS%type;--:返回节点标识 LS_DateTimeStr varchar2(20); --日期时间型:格式为:yyyy-MM-dd HH:mm:ss LS_DateStr varchar2(10); --日期型:格式为:yyyy-MM-dd LS_TimeStr varchar2(10); --时间型:格式为:HH:mm:ss LS_JKFSZ0 ZY_YBJKMX.JKFSZ0%type;--接口发送值 LS_JKFHZ0 ZY_YBJKMX.JKFHZ0%type;--接口返回值 LS_VALUE0 ZY_YBJKMX.VALUE0%type;--请求报文字符串 LS_HISCS0 ZY_YBJKRZ.HISCS0%type;--HIS前台请求参数 LS_QQDATA ZY_YBJKRZ.QQDATA%type;--请求报文 LS_MainJson ZY_YBJKRZ.QQDATA%type;--主项Json LS_detailJson ZY_YBJKRZ.QQDATA%type;--明细Json LS_inputJson ZY_YBJKRZ.QQDATA%type;--input输入 in_JZDH00 varchar2(20); --前端传入的结账单号 in_cplt_flag varchar2(10); --前端传入的完成标志 LD_BRID00 BM_BRXXB0.BRID00%type; --病人id LD_JZDH00 ZY_JZB000.JZDH00%type; --结账单号 LD_CXJZDH ZY_JZB000.CXJZDH%type; --冲销结账单号 LD_HJJE00 ZY_JZB000.HJJE00%type; --合计金额 LS_fixmedins_mdtrt_id varchar2(30); --1.fixmedins_mdtrt_id: 医药机构就诊ID 字符型(30) LS_fixmedins_code varchar2(30); --2.fixmedins_code: 定点医药机构编号 字符型(30) LS_cplt_flag varchar2(10); --3.cplt_flag: 完成标志 字符型(6) 费用明细和就诊信息上传完成后修改完成标志 --修改医保发送明细表 cursor CUR_UPDATE_YBJKMX is select YBJKID,JKMXID,JDBM00,ZJDBM0,JKSXBM,JKSXMC,JKFSZ0,JKFHZ0,FSLXBZ,VALUE0,ZDLX00 from ZY_YBJKMX where YBJKID=PYBJKID and FSLXBZ in ('1','3') and JDBM00 in (LS_QQJDBS) order by JKMXID; --查询主项数据 cursor CUR_QUERY_Main is select YBJKID,JKMXID,JDBM00,ZJDBM0,JKSXBM,JKSXMC,JKFSZ0,JKFHZ0,FSLXBZ,VALUE0,ZDLX00 from ZY_YBJKMX where YBJKID=PYBJKID and FSLXBZ in ('1','3') and CJBM00 in ('AllIn') order by JKMXID; --查询明细数据 cursor CUR_QUERY_detail is select YBJKID,JKMXID,JDBM00,ZJDBM0,JKSXBM,JKSXMC,JKFSZ0,JKFHZ0,FSLXBZ,VALUE0,ZDLX00 from ZY_YBJKMX where YBJKID=PYBJKID and FSLXBZ in ('1','3') and CJBM00=PJKCJBM and JDBM00 in (LS_QQJDBS) order by JKMXID; begin PZXZT00 := 0; --输出:执行状态 0:失败 1:成功 POUTXML := null;--输出:出参(XML) PERRMSG := null;--输出:错误信息 LS_QQDATA := null;--请求报文 LS_MainJson := null;---主项Json LS_detailJson := null;---明细Json LS_inputJson := null;---input输入 LS_HISCS0:=substrb(PINXML0,1,4000);--HIS前台请求参数 LS_CZRQ00:=to_char(sysdate,'YYYYMMDD'); LS_CZSJ00:=to_char(sysdate,'HH24:MI:SS'); LS_DateTimeStr:=to_char(sysdate,'YYYY-MM-DD HH24:MI:SS'); --日期时间型:格式为:yyyy-MM-dd HH:mm:ss LS_DateStr:=to_char(sysdate,'YYYY-MM-DD'); --日期型:格式为:yyyy-MM-dd LS_TimeStr:=to_char(sysdate,'HH24:MI:SS'); --时间型:格式为:HH:mm:ss begin select QQJDBS into LS_QQJDBS from BM_TYCJBM where CJBM00=PJKCJBM; exception when others then PZXZT00 := 0; PERRMSG := '未找到有效的场景字典(CJBM00='||PJKCJBM||'),请联系管理员!'; return; end; --获取中间表数据 begin select a.fixmedins_code into LS_fixmedins_code from ZY_YBJKRZ a where YBJKID=PYBJKID; exception when others then LS_fixmedins_code := null; --fixmedins_code: 定点医药机构编号 字符型(30) end; in_JZDH00 := substrb(SF_XT_GETXMLSTR('jzdh00',PINXML0),1,30); --结账单号 begin LD_JZDH00 := to_number(in_JZDH00); exception when others then LD_JZDH00 := 0; end; if LD_JZDH00 = 0 then PERRMSG := '未传入待删除的结算单号'; PZXZT00 := 0; --执行状态 0:失败 1:成功 return; end if; begin select CXJZDH,HJJE00 into LD_CXJZDH,LD_HJJE00 from ZY_JZB000 where ZYID00=Pzyid00 and JZDH00=LD_JZDH00; exception when others then PERRMSG := '在结账表未找到结算单号(JZDH00='||LD_JZDH00||')的数据!'; PZXZT00 := 0; --执行状态 0:失败 1:成功 return; end; in_cplt_flag := substrb(SF_XT_GETXMLSTR('cplt_flag',PINXML0),1,10); --3.cplt_flag: 完成标志 字符型(6) if in_cplt_flag is null then PERRMSG := '未传入要修改的完成标志!'; PZXZT00 := 0; --执行状态 0:失败 1:成功 return; end if; if LD_CXJZDH > 0 and LD_HJJE00 < 0 then LS_fixmedins_mdtrt_id := substrb('ZY'||trim(to_char(LD_CXJZDH)),1,30); --1.fixmedins_mdtrt_id: 医药机构就诊ID 字符型(30) varchar2(30); else LS_fixmedins_mdtrt_id := substrb('ZY'||trim(to_char(LD_JZDH00)),1,30); --1.fixmedins_mdtrt_id: 医药机构就诊ID 字符型(30) varchar2(30); end if; LS_fixmedins_code := substrb(LS_fixmedins_code,1,30); --2.fixmedins_code: 定点医药机构编号 字符型(30) varchar2(30); LS_cplt_flag := substrb(in_cplt_flag,1,6); --3.cplt_flag: 完成标志 字符型(6) 费用明细和就诊信息上传完成后修改完成标志 --插入表SF_YBJKMX insert into ZY_YBJKMX(YBJKID,JKMXID,JDBM00,ZJDBM0,ZDBM00,ZDMC00, JKSXBM,JKSXMC,JKFSZ0,JKFHZ0,FSLXBZ,ZDLX00,BZ0000,CJBM00) select PYBJKID,A.ZDNBID,A.JDBM00,null,substrb(nvl(A.JKDZBM,A.JKSXBM),1,50),substrb(nvl(A.JKDZMC,JKSXMC),1,100), A.JKSXBM,A.JKSXMC,null,null,substrb(a.JKFSLX,1,1),substrb(a.ZDTYPE,1,1),a.BZ0000,A.CJBM00 from BM_TYCJZD A where A.CJBM00=PJKCJBM and JDBM00 in (LS_QQJDBS) and nvl(A.SFYX00,'1')='1' and A.JKFSLX in ('1','2','3'); --修改:医保发送变量赋值 for C_YBFS in CUR_UPDATE_YBJKMX loop LS_JKFSZ0:=null;--接口发送值 LS_JKFHZ0:=null;--接口返回值 LS_VALUE0:=null;--请求报文字符串 if C_YBFS.JKSXBM = 'fixmedins_mdtrt_id' then --1.fixmedins_mdtrt_id: 医药机构就诊ID 字符型(30) varchar2(30); if nvl(C_YBFS.ZDLX00,'1') = '7' then LS_VALUE0:=substrb(LS_fixmedins_mdtrt_id,1,4000); else LS_JKFSZ0:=substrb(LS_fixmedins_mdtrt_id,1,250); end if; update ZY_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM = 'fixmedins_code' then --2.fixmedins_code: 定点医药机构编号 字符型(30) varchar2(30); if nvl(C_YBFS.ZDLX00,'1') = '7' then LS_VALUE0:=substrb(LS_fixmedins_code,1,4000); else LS_JKFSZ0:=substrb(LS_fixmedins_code,1,250); end if; update ZY_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; elsif C_YBFS.JKSXBM = 'cplt_flag' then --2.fixmedins_code: 定点医药机构编号 字符型(30) varchar2(30); if nvl(C_YBFS.ZDLX00,'1') = '7' then LS_VALUE0:=substrb(LS_cplt_flag,1,4000); else LS_JKFSZ0:=substrb(LS_cplt_flag,1,250); end if; update ZY_YBJKMX set JKFSZ0=LS_JKFSZ0,JKFHZ0=LS_JKFHZ0,VALUE0=LS_VALUE0 where YBJKID=PYBJKID and JKSXBM=C_YBFS.JKSXBM and JKMXID=C_YBFS.JKMXID; end if; end loop; --查询主项数据 for C_Main in CUR_QUERY_Main loop LS_MainJson := SF_XT_GETJSONSTR(LS_MainJson,C_Main.JKSXBM,C_Main.JKFSZ0,'0'); end loop; if LS_MainJson is null then PZXZT00:=0; PERRMSG:='国家医保接口(自费病人门诊就医信息删除)主项报文不能为空!'; return; end if; --查询明细数据 for C_detail in CUR_QUERY_detail loop if nvl(C_detail.ZDLX00,'1') = '7' then LS_detailJson := SF_XT_GETJSONSTR(LS_detailJson,C_detail.JKSXBM,C_detail.VALUE0,'0','1','1'); elsif nvl(C_detail.ZDLX00,'1') = '0' then LS_detailJson := SF_XT_GETJSONSTR(LS_detailJson,C_detail.JKSXBM,C_detail.JKFSZ0,'0','1','0'); else LS_detailJson := SF_XT_GETJSONSTR(LS_detailJson,C_detail.JKSXBM,C_detail.JKFSZ0,'0','1','1'); end if; end loop; --input输入 LS_inputJson := SF_XT_GETJSONSTR(LS_inputJson,'input',LS_detailJson,'1'); --拼接整个报文, http服务拼接arg0, 非http直接拼接 if LS_INFNLX='3' then LS_QQDATA := SF_XT_GETJSONSTR(LS_QQDATA,'arg0',LS_MainJson||','||LS_inputJson,'1'); else LS_QQDATA := LS_MainJson||','||LS_inputJson; end if; LS_QQDATA:='{'||LS_QQDATA||'}'; --修改请求报文 update ZY_YBJKRZ set QQDATA=LS_QQDATA where YBJKID=PYBJKID;--请求报文 if PCOMMIT='Y' then commit; end if; PZXZT00:=1; --输出:执行状态 0:失败 1:成功 PERRMSG:=null; --输出:错误信息 exception when no_data_found then PZXZT00:=0; PERRMSG:=substrb('住院医保接口交互生成失败!原因:'||sqlerrm,1,200); rollback; when others then PZXZT00:=0; PERRMSG:=substrb('住院医保接口交互生成失败!原因:'||sqlerrm,1,200); rollback; end; / show error; --%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%