procedure SP_PAY_YJJ_ZHCZ ( IN_OPERETORID in varchar2 ,--char(30) N 操作员编号 IN_OPERETORNAME in varchar2 ,--char(50) N 操作员姓名 IN_TERMNO in varchar2 ,--char(32) Y 终端编号 IN_CARDTYPE in varchar2 ,--char(2) N 卡类型 01:社保卡 02:市民健康卡 03:院内就诊卡 04:身份证 05:住院号 06:临时卡 07:腕带编码 08:病案号加身份证 09:住ID 10:病人ID IN_CARDNO in varchar2 ,--char(32) N 卡号 IN_ACCOUNTTYPE in varchar2 ,--char(2) N 帐户类型 01:门诊预交金账户 02:住院预交金账户 IN_IDNO in varchar2 ,--char(32) Y 身份证号 IN_DEPOSITTYPE in varchar2 ,--char(2) N 充值类型 充值类型定义:01:现金 02:POS刷卡 03:单位转账 04:支付宝 05:微信支付 06:健康通支付 07:离线POS 08:建行龙支付 09:聚合支付 10:银联扫码付 11:银联条码付 IN_AMOUNT in number ,--number(12,2) N 充值金额 保留两位小数 IN_CHANNELTYPE in varchar2 ,--char(32) N 渠道类型 01:窗口 02:自助终端 03:移动APP应用 04:微信公众号 05:支付宝服务窗 06:体检自助终端 07:微信小程序 08:支付宝服务窗 09:智能POS 21:平安一账通APP IN_OUTRECHARGENO in varchar2 ,--char(32) N 外部充值交易流水号 HIS或自助机 IN_RECHARGENO in varchar2 ,--char(32) N 支付平台充值流水号 支付平台业务流水号 IN_EXTERNALNO in varchar2 ,--char(64) Y 支付渠道流水号 支付宝、微信等平台流水号 IN_POSTRANS in varchar2 ,--char(1024) Y POS刷卡信息 JSON格式字符串 IN_NOTES in varchar2 ,--char(256) Y 备注信息 OUT_RETCODE out varchar2 ,--返回码 00成功 OUT_RETMSG out varchar2 ,--返回说明 OUT_BALANCE out number ,--余额 OUT_TRACETIME out varchar2 ,--交易成功时间 yyyyMMddHHmmss OUT_TRACENO out varchar2 --HIS处理业务流水号 ) as -- MODIFICATION HISTORY -- Person Date Comments --zhangyc 2017.09.12 created by MZSF-20170908-007 --zhangyc 2017.09.13 修正出参余额错误 by MZSF-20170913-001 --zhangyc 2017.09.14 返回时间改为缴费时间 by MZSF-20170913-003 --zhangyc 2017.09.30 微信或支付宝支付修改 by MZSF-20171010-001 --zhangyc 2017.10.12 微信或支付修正 by MZSF-20171012-002 --zhangyc 2017.10.18 统一支付修正 by MZSF-20171018-002 --zhangyc 2017.10.23 增加门诊建档登记充值 by MZSF-20171023-001 --zhangyc 2017.10.26 修正WBHLID、WBHLJE 写入错误 by MZSF-20171027-002 --zhangyc 2017.11.04 增加写入BM_ZFPTCS by MZSF-20171107-001 --zhangyc 2017.11.09 修正退款缴费备注错误 by MZSF-20171109-006 --zhangyc 2017.11.13 增加住院功能 by ZYSF-20171114-001 --zhangyc 2017.11.21 增加出院结算退款 by ZYSF-20171123-002 --zhangyc 2017.12.01 修正住院病人信息查询失败 by ZYSF-20171201-003 --zhangyc 2017.12.06 修正住院插入的标志MZZYBZ by ZYSF-20171207-003 --zhangyc 2017.12.14 增加参数控制是否本地模拟交易 by ZYSF-20171214-003 --zhangyc 2018.03.05 代码整合 by ZYSF-20180302-001 --zhangyc 2018.05.07 增加取消结算补收 by ZYSF-20180411-001 --zhangyc 2018.05.14 修正插入MZSF-20180514-008数据异常 by MZSF-20180514-008 --zhangyc 2018.06.15 增加ZFMXBM by MZSF-20180619-001 --zhangyc 2018.10.22 增加执行SP_SF_PAY_POSLSZ过程 by MZSF-20181023-004 --zhangyc 2018.11.09 修改住院BM_ZFRZ00.ZFMXBH by ZYSF-20181109-005 --zhuyr 2018.11.05 增加重新结算相关内容 by ZYSF-20180528-001 --zhangyc 2019.03.18 增加09:聚合支付 10:银联扫码付 11:银联条码付 by MZSF-20190318-003 --zhuyr 2019.04.16 处理省二医院取消结算补收会写入ZY_PJSYQK表的问题 by ZYSF-20190408-002 LS_COUNT0 number(10); LS_BRID00 BM_BRXXB0.BRID00%type;--number(10); LS_ZYID00 ZY_BRXXB0.ZYID00%type;--number(10); LS_ZYH000 varchar2(12); LS_ZHYE00 number(12,2); LS_JYJE00 number(12,2);--交易金额 LS_XJJE00 number(12,2); --现金金额 LS_ZZJE00 number(12,2); --转账金额 LS_YHKJE0 number(12,2); --银行卡金额 LS_XJYE00 number(12,2); LS_ZYE000 number(12,2); LS_CZRQ00 varchar2(8); LS_CZSJ00 varchar2(8); LS_JFBZ00 varchar2(1);--交费备注 '0'交 1:退 LS_CZLXBM varchar2(10);--充值类型 LS_CZLXMC varchar2(20);--充值名称 LS_DJH000 SF_BRJFB0.DJH000%type; LS_PJH000 SF_BRJFB0.PJH000%type; LS_ZFFSBH SF_BRJFB0.ZFFS00%type; LS_PTZFBH SF_BRJFB0.ZFFS00%type; LS_ZFFSMC BM_BRZFFS.ZFFSMC%type; LS_ZPH000 SF_BRJFB0.ZPH000%type; LS_ZPZH00 SF_BRJFB0.ZPZH00%type; LS_ZPKHYH SF_BRJFB0.ZPKHYH%type; LS_ZPDWMC SF_BRJFB0.ZPDWMC%type; LS_JYLSH0 SF_BRJFB0.JYLSH0%type;--交易流水号 LS_YKTSH0 SF_BRJFB0.YKTSH0%type;--健康通流水号 LS_JYLXMC SF_BRJFB0.JYLXMC%type;--交易类型名称 LS_JGBM00 SF_BRJFB0.JGBM00%type;--机构编码 LS_JGMC00 SF_BRJFB0.JGMC00%type;--机构名称 LS_DDLSH0 SF_BRJFB0.DDLSH0%type;--订单流水号 LS_YGBH00 BM_YGBM00.YGBH00%type; --操作员编号 LS_YGXM00 BM_YGBM00.ZWXM00%type; --操作员姓名 LS_CZYKS0 BM_YGBM00.BMBH00%type; LS_PJXH00 SF_PJSYQK.PJXH00%type; LS_PJLYID BM_PJLYQK.PJLYID%type; LS_JFLBID BM_BRJFLB.JFLBID%type; LS_PJLXBM BM_PJLYQK.PJLXBM%type; LS_JFYY00 ZY_BRJFB0.JFYY00%type; LS_JFSHR0 ZY_BRJFB0.JFSHR0%type; LS_JFSHSJ ZY_BRJFB0.JFSHSJ%type; LS_YJJPJ0 varchar2(100); --预交金票据与预交金退一样 LS_DDLSH0_TEMP SF_BRJFB0.DDLSH0%type;--订单流水号 LS_MZZYBZ char(1); --门诊住院标志 0:门诊 1:住院 LS_ERRSTR varchar2(200); LS_BZ0000 varchar2(200); RBRXX BM_BRXXB0%rowtype; RZYXX ZY_BRXXB0%rowtype; RZFRZ BM_ZFRZ00%rowtype; LS_PTZFMC varchar2(30); LS_MKLXMC varchar2(20); LS_JFDJH0 number(12); LS_MLZFCS BM_TYZD00.MC0000%type; LS_SFTJSW varchar2(20); --是否提交事务 Y:是 N:否 LS_ZFQDBM BM_ZFRZ00.JGBM00%type;--支付渠道编码 LS_QXJZDH number(12);--取消结算单号 LS_QTLX00 varchar2(50);--其它类型 LS_BSLX00 varchar2(50);--补收类型 Y:一次补收 N:分批次补收 LS_BSZFMC varchar2(50);--补收支付名称 LS_ZYGHID BM_ZFRZ00.ZYGHID%type; LS_JZDH00 BM_ZFRZ00.JZDH00%type; LS_JZPJH0 ZY_JZB000.PJH000%type; LS_ZFMXBH BM_ZFFSMX.ZFMXBH%type;--支付明细编码H:现金I:转账J:POS离线K:POS刷卡L:龙支付M:银联二维码D:微信离线E:微信扫码F:支付宝离线G:支付宝扫码A:榕医通B:聚合支付C:健康通N:银医通P:一卡通 LS_SHH000 SF_BRJFB0.SHH000%type; LS_ZXZT00 varchar2(20);--输出:执行状态 0:失败 1:成功 LS_ERRMSG varchar2(400);--输出:错误信息 begin /* LS_BZ0000:=substrb(IN_OPERETORID||'|'||IN_OPERETORNAME||'|'||IN_TERMNO||'|'||IN_CARDTYPE||'|'||IN_CARDNO||'|'||IN_ACCOUNTTYPE ||'|'||IN_IDNO||'|'||IN_DEPOSITTYPE||'|'||IN_AMOUNT||'|'||IN_CHANNELTYPE||'|'||IN_OUTRECHARGENO||'|'||IN_RECHARGENO ||'|'||IN_EXTERNALNO,1,200); */ LS_ERRSTR :=''; LS_BRID00:=0; LS_ZYID00:=0; LS_CZRQ00:=to_char(sysdate,'YYYYMMDD'); LS_CZSJ00:=to_char(sysdate,'HH24:MI:ss'); LS_MKLXMC:='预交金充值'; LS_JFDJH0:=0; OUT_RETCODE:='99';--出参: 返回码 00成功 LS_JFBZ00:='0';--交费备注 '0'交 1:退 LS_SFTJSW:='Y'; --是否提交事务 Y:是 N:否 LS_JYJE00:=nvl(IN_AMOUNT,0); LS_CZLXBM:=substrb(trim(IN_DEPOSITTYPE),1,10);--充值类型 LS_DDLSH0:=IN_OUTRECHARGENO;--订单流水号(外部充值交易流水号 HIS或自助机) LS_JYLSH0:=IN_RECHARGENO;--交易流水号(支付平台充值流水号 支付平台业务流水号) LS_YKTSH0:=IN_EXTERNALNO;--(支付渠道流水号 支付宝、微信等平台流水号) LS_JGBM00:='00';--00:正常充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_ZPZH00:=trim(IN_TERMNO); LS_BZ0000:=trim(IN_NOTES);--备注信息 LS_ZFQDBM:='YHPAY'; LS_SHH000:='YHPAY'; if IN_ACCOUNTTYPE='01' then --N 帐户类型 01:门诊预交金账户 02:住院预交金账户 LS_MZZYBZ:='0'; --门诊住院标志 0:门诊 1:住院 else LS_MZZYBZ:='1'; --门诊住院标志 0:门诊 1:住院 end if; --IN_CHANNELTYPE 渠道类型 01 窗口 02 自助终端 03 移动APP应用 04 微信公众号 05 支付宝服务窗 06:体检自助终端 07:微信小程序 08:支付宝服务窗 09:智能POS 21:平安一账通APP if trim(IN_CHANNELTYPE)='01' then --机构名称 LS_JGMC00:='窗口缴费'; elsif trim(IN_CHANNELTYPE)='02' then LS_JGMC00:='自助终端'; elsif trim(IN_CHANNELTYPE)='03' then LS_JGMC00:='移动APP应用'; elsif trim(IN_CHANNELTYPE)='04' then LS_JGMC00:='微信公众号'; elsif trim(IN_CHANNELTYPE)='05' then LS_JGMC00:='支付宝服务窗'; elsif trim(IN_CHANNELTYPE)='06' then LS_JGMC00:='体检自助终端'; elsif trim(IN_CHANNELTYPE)='07' then LS_JGMC00:='微信小程序'; elsif trim(IN_CHANNELTYPE)='08' then LS_JGMC00:='支付宝服务窗'; elsif trim(IN_CHANNELTYPE)='09' then LS_JGMC00:='智能POS'; elsif trim(IN_CHANNELTYPE)='21' then LS_JGMC00:='平安一账通APP'; end if; --IN_DEPOSITTYPE 充值类型 01 现金 02 POS刷卡 03 单位转账 04 支付宝 05 微信支付 06 健康通支付 07:离线POS 08:建行龙支付 09:聚合支付 10:银联扫码付 11:银联条码付 --支付明细编码H:现金I:转账J:POS离线K:POS刷卡L:龙支付M:银联二维码D:微信离线E:微信扫码F:支付宝离线G:支付宝扫码A:榕医通B:聚合支付C:健康通N:银医通P:一卡通 if trim(LS_CZLXBM)='01' then --机构名称 LS_CZLXMC:='现金'; elsif trim(LS_CZLXBM)='02' then LS_CZLXMC:='POS刷卡'; elsif trim(LS_CZLXBM)='03' then LS_CZLXMC:='单位转账'; elsif trim(LS_CZLXBM)='04' then LS_CZLXMC:='支付宝'; elsif trim(LS_CZLXBM)='05' then LS_CZLXMC:='微信'; elsif trim(LS_CZLXBM)='06' then LS_CZLXMC:='健康通'; elsif trim(LS_CZLXBM)='07' then LS_CZLXMC:='离线POS'; elsif trim(LS_CZLXBM)='08' then LS_CZLXMC:='建行龙支付'; elsif trim(LS_CZLXBM)='09' then LS_CZLXMC:='聚合支付'; elsif trim(LS_CZLXBM)='10' then LS_CZLXMC:='银联扫码付'; LS_ZFMXBH:='M'; elsif trim(LS_CZLXBM)='11' then LS_CZLXMC:='银联条码付'; LS_ZFMXBH:='M'; else LS_CZLXMC:=''; end if; LS_JYLXMC:=substrb(trim(IN_CHANNELTYPE)||'|'||trim(LS_JGMC00)||'|'||trim(LS_CZLXBM)||'|'||trim(LS_CZLXMC),1,50);--交易类型名称 --IN_DEPOSITTYPE 充值类型 01 现金 02 POS刷卡 03 单位转账 04 支付宝 05 微信支付 06 健康通支付 07:离线POS 08:建行龙支付 09:聚合支付 10:银联扫码付 11:银联条码付 select SF_SF_PAY_JYLXBH(LS_JFBZ00,LS_CZLXBM,LS_ZFQDBM) into LS_PTZFBH from dual; begin select ZFFSMC into LS_PTZFMC from BM_BRZFFS where ZFFSBH=LS_PTZFBH; exception when others then LS_PTZFMC:='银行卡'; end; --支付明细编码H:现金I:转账J:POS离线K:POS刷卡L:龙支付M:银联二维码D:微信离线E:微信扫码F:支付宝离线G:支付宝扫码A:榕医通B:聚合支付C:健康通N:银医通P:一卡通 begin select substrb(SF_SF_ZFMXBH(LS_PTZFBH,LS_ZFQDBM,trim(LS_CZLXBM)),1,2) into LS_ZFMXBH from dual; exception when others then LS_ZFMXBH:=null; end; if LS_DDLSH0 is not null then LS_DDLSH0_TEMP:=LS_DDLSH0; else LS_DDLSH0_TEMP:=LS_JYLSH0; end if; --IN_NOTES 备注信息 :模块类型|缴费单据号|据序号|开户银行|转账单位|支票号码|ZYID00|模块名称|支付名称|支付金额|结账单号|是否一次补交 begin select SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 1) into LS_MKLXMC from dual; select to_number(SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 2)) into LS_JFDJH0 from dual; exception when others then LS_MKLXMC:='预交金充值'; LS_JFDJH0:=0; end; LS_MKLXMC:=nvl(LS_MKLXMC,'预交金充值'); begin if LS_MZZYBZ='0' then --门诊住院标志 0:门诊 1:住院 select trim(SF_SF_TYZD00('支付统一平台参数','MZMLZFFS')) into LS_MLZFCS from dual; else select trim(SF_SF_TYZD00('支付统一平台参数','ZYMLZFFS')) into LS_MLZFCS from dual; end if; exception when others then LS_MLZFCS:='0'; end; if LS_MLZFCS is not null and LS_MLZFCS not in ('0') and trim(IN_RECHARGENO) is null and trim(IN_TERMNO) is null and instrb(','||LS_MLZFCS||',',','||LS_PTZFBH||',')>0 then LS_SFTJSW:='N'; --是否提交事务 Y:是 N:否 end if; --先把参数写入到BM_ZFPTCS insert into BM_ZFPTCS (DDLSH0,NBID00,MKLXMC,CZRQ00,CZSJ00,CZYBH0,CZYXM0,ZDBH00,JFBZ00,ZFFSBH, ZFFSMC,DJH000,CATYPE,CARDNO,ZHTYPE,BRZJBH,CZLX00,CZJE00,QDLX00,TKJYLX, PTLSH0,QDLSH0,YHSKXX,NOTES0) values (IN_OUTRECHARGENO,SQ_BM_ZFPTCS_NBID00.nextval,LS_MKLXMC,LS_CZRQ00,LS_CZSJ00,IN_OPERETORID,IN_OPERETORNAME,IN_TERMNO,LS_JFBZ00,LS_PTZFBH, LS_PTZFMC,LS_JFDJH0,IN_CARDTYPE,IN_CARDNO,IN_ACCOUNTTYPE,IN_IDNO,IN_DEPOSITTYPE,IN_AMOUNT,IN_CHANNELTYPE,null, IN_RECHARGENO,IN_EXTERNALNO,IN_POSTRANS,IN_NOTES); --先提交事务 --是否提交事务 Y:是 N:否 if LS_SFTJSW='Y' then commit; end if; --21:入院登记充值 22:预交金充值 23:出院结算充值 24:重新结算充值 --31:取消入院退款 32:预交金退款 33:出院结算退款 34:重新结算退款 --35:年度结算退款 36:年度结算充值 37:住院取消结算 --门诊建档 时直接返回成功,有hisDLL前台更新缴费表记录 if (LS_MKLXMC='门诊建档') or (LS_MKLXMC='入院登记') or (LS_MKLXMC in ('21')) then OUT_RETCODE:='00';--返回码 00成功 OUT_RETMSG:='';--返回说明 OUT_BALANCE:=IN_AMOUNT;--余额 OUT_TRACETIME:=LS_CZRQ00||substrb(LS_CZSJ00,1,2)||substrb(LS_CZSJ00,4,2)||substrb(LS_CZSJ00,7,2);--交易成功时间 yyyyMMddHHmmss OUT_TRACENO:=LS_DDLSH0_TEMP;--LS_DJH000;--HIS处理业务流水号 return; end if; select count(1)into LS_COUNT0 from BM_ZFRZ00 where DDLSH0=LS_DDLSH0; if LS_COUNT0>0 then select * into RZFRZ from BM_ZFRZ00 A where DDLSH0=LS_DDLSH0; LS_ZFFSBH:=RZFRZ.ZFFS00; LS_BRID00:=RZFRZ.BRID00; LS_ZYID00:=RZFRZ.ZYGHID; LS_ZYH000:=RZFRZ.ZYHGHH; else LS_ZFFSBH:=LS_PTZFBH; end if; --一码付已支付平台返回为主 if (LS_PTZFBH is not null) and (LS_PTZFBH<>LS_ZFFSBH) and (LS_ZFFSBH in (24,25)) then LS_ZFFSBH:=LS_PTZFBH; end if; --INQTCS:票据序号|开户银行|转账单位|支票号码 if LS_ZFFSBH=1 then --现金 LS_XJJE00:=LS_JYJE00;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=0;--银行卡金额 elsif LS_ZFFSBH=8 then --银行卡 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 select SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 4) into LS_ZPKHYH from dual; select SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 5) into LS_ZPDWMC from dual; select SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 6) into LS_ZPH000 from dual; elsif LS_ZFFSBH=2 then --转账 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=LS_JYJE00;--转账金额 LS_YHKJE0:=0;--银行卡金额 select SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 4) into LS_ZPKHYH from dual; select SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 5) into LS_ZPDWMC from dual; select SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 6) into LS_ZPH000 from dual; elsif LS_ZFFSBH=25 then --支付宝 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 elsif LS_ZFFSBH=24 then --微信 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 elsif LS_ZFFSBH=26 then --健康通 LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 elsif LS_ZFFSBH=28 then --电子支付(聚合支付) LS_XJJE00:=0;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=LS_JYJE00;--银行卡金额 else LS_XJJE00:=LS_JYJE00;--现金金额 LS_ZZJE00:=0;--转账金额 LS_YHKJE0:=0;--银行卡金额 end if; begin select ZFFSMC into LS_ZFFSMC from BM_BRZFFS where ZFFSBH=LS_ZFFSBH; exception when others then OUT_RETCODE:='01'; OUT_RETMSG:='表(BM_BRZFFS)未找到有效的记录!ZFFSBH='||LS_ZFFSBH; rollback; return; end; if LS_JYJE00<0 then OUT_RETCODE:='99'; OUT_RETMSG:='入参充值金额传入有误!'||IN_AMOUNT; rollback; return; end if; --查找院内的员工编码 if trim(IN_CHANNELTYPE) in ('02') then --机构编码(渠道类型 01 窗口 02 自助终端 03 移动APP应用 04 微信公众号 05 支付宝服务窗 ) begin select A.YGBH00,A.ZWXM00,A.BMBH00 into LS_YGBH00,LS_YGXM00,LS_CZYKS0 from BM_YGBM00 A,SST_YGBHDY B where A.YGBH00=B.YGBH00 and ZZJBH0=trim(IN_TERMNO); exception when others then OUT_RETCODE:='01'; OUT_RETMSG:='未找到有效的员工信息!'; rollback; return; end; else begin select A.YGBH00,A.ZWXM00,A.BMBH00 into LS_YGBH00,LS_YGXM00,LS_CZYKS0 from BM_YGBM00 A where A.YGBH00=trim(IN_OPERETORID); exception when others then OUT_RETCODE:='01'; OUT_RETMSG:='未找到有效的员工信息!'; rollback; return; end; end if; if (nvl(LS_YGBH00,0) in (0)) or (LS_YGBH00 is null) then OUT_RETCODE:='01'; OUT_RETMSG:='未找到有效的员工编码或姓名!'; rollback; return; end if; if LS_MZZYBZ in ('0') then --门诊住院标志 0:门诊 1:住院 if LS_BRID00=0 then select SF_PAY_BRZYID(IN_CARDTYPE,IN_CARDNO,IN_ACCOUNTTYPE,LS_ZFQDBM) into LS_BRID00 from dual; end if; --执行BM_BRXXB0 begin select * into RBRXX from BM_BRXXB0 A where A.BRID00=LS_BRID00; exception when others then OUT_RETCODE:='02'; OUT_RETMSG:='未找到有效的病人基本的信息!'; rollback; return; end; else --门诊住院标志 0:门诊 1:住院 ---住院--执行 --LS_JYLXMC:=substrb(LS_JYLXMC||IN_NOTES,1,50); if LS_ZYID00=0 then select SF_PAY_BRZYID(IN_CARDTYPE,IN_CARDNO,IN_ACCOUNTTYPE,LS_ZFQDBM) into LS_ZYID00 from dual; end if; --查找住院信息表 begin select * into RZYXX from ZY_BRXXB0 where ZYID00=LS_ZYID00; exception when others then OUT_RETCODE:='02'; OUT_RETMSG:='未找到有效的住院病人的信息!'; rollback; return; end; LS_BRID00:=RZYXX.BRID00; LS_ZYH000:=RZYXX.ZYH000; --执行BM_BRXXB0 begin select * into RBRXX from BM_BRXXB0 A where A.BRID00=LS_BRID00; exception when others then OUT_RETCODE:='02'; OUT_RETMSG:='未找到有效的病人基本的信息!'; rollback; return; end; end if; if LS_BRID00=0 then OUT_RETCODE:='01'; OUT_RETMSG:='未找到有效的病人基本的信息!'; rollback; return; end if; --数据统一校验 SP_SF_PAY_CHECK ( LS_BRID00,--病人ID LS_YGBH00,--操作员 LS_ZFFSBH,--支付方式 LS_MZZYBZ,--门诊住院标志 0:门诊 1:住院 LS_JFBZ00,--缴费备注 0:交 1:退 LS_JYJE00,--交易金额 '',--其他参数 LS_ERRSTR--错误信息 ); if trim(LS_ERRSTR) is not null then OUT_RETCODE:='01'; OUT_RETMSG:=LS_ERRSTR; rollback; return; end if; --门诊业务处理--begin-- if LS_MZZYBZ in ('0') then --门诊住院标志 0:门诊 1:住院 LS_JFLBID:=1; --判断是否已经充值过程 交易流水号(支付平台充值流水号 支付平台业务流水号) select count(1)into LS_COUNT0 from SF_BRJFB0 where BRID00=LS_BRID00 and JYLSH0=LS_JYLSH0; if LS_COUNT0>=1 then OUT_RETCODE:='03'; OUT_RETMSG:='该笔交易已经充值成功,无法重复查找!'; rollback; return; end if; --执行余额 --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(0,LS_BRID00,1,0) into LS_ZHYE00 from dual; if (RZFRZ.ZYHGHH='门诊建档') then LS_DJH000:=RZFRZ.ZYGHID; update SF_BRJFB0 set JYLSH0=LS_JYLSH0,YKTSH0=LS_YKTSH0, JYLXMC=LS_JYLXMC,JGBM00=LS_JGBM00, JGMC00=LS_JGMC00,DDLSH0=LS_DDLSH0, ZFMXBH=LS_ZFMXBH,SHH000=LS_SHH000 where DJH000=LS_DJH000; update BM_ZFRZ00 set ZYGHID=0,ZYHGHH=null where DDLSH0=LS_DDLSH0; else --获取自助机对应收费员的票据序号-- begin select PJDQH0,PJLYID into LS_PJXH00,LS_PJLYID from BM_PJLYQK where PJLXBM = 7 and SYBZ00='Y' and PJSYR0=LS_YGBH00; exception when others then LS_PJXH00:='0'; LS_PJLYID:=0; end; select SQ_SF_BRJFB0_DJH000.nextval into LS_DJH000 from dual; select SQ_SF_PJSYQK_PJH000.nextval into LS_PJH000 from dual; --插入SF_BRJFB0 insert into SF_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPDWMC,ZPZH00,ZPKHYH,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,WBHLID,WBHLJE,CZYKS0, JYLSH0,YKTSH0,JYLXMC,JGBM00,JGMC00,DDLSH0,ZFMXBH,SHH000) values(LS_DJH000,RBRXX.BRID00,1,LS_JYJE00,LS_ZFFSBH,LS_ZFFSMC,LS_ZPH000,LS_ZPDWMC,LS_ZPZH00,LS_ZPKHYH,LS_PJH000, LS_CZRQ00,LS_CZSJ00,LS_YGBH00,LS_YGXM00,0,LS_JFBZ00,0,0,1,LS_JYJE00,LS_CZYKS0, LS_JYLSH0,LS_YKTSH0,LS_JYLXMC,LS_JGBM00,LS_JGMC00,LS_DDLSH0,LS_ZFMXBH,LS_SHH000); --插入SF_PJSYQK insert into SF_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0, DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,BRID00,DZQBJE,CZYKS0,PJLYID) select LS_PJH000,PLBH00,PLMC00,LS_PJXH00,LS_XJJE00,LS_ZZJE00,LS_YHKJE0,LS_YGBH00,LS_YGXM00, LS_CZRQ00,LS_CZSJ00,'Y','0',RBRXX.BRXM00,RBRXX.BRXB00,RBRXX.BRID00,0,LS_CZYKS0,LS_PJLYID from BM_PJLXB0 where PLBH00 = 7 ; --收预交金票据 end if; if (LS_ZFFSBH=8) and (trim(IN_POSTRANS) is not null) then --银行卡 SP_SF_PAY_POSLSZ(LS_DDLSH0,LS_MZZYBZ,LS_JFBZ00,LS_ZFFSBH,RBRXX.BRID00,RBRXX.BRXM00,0,null, LS_YGBH00,LS_YGXM00,LS_CZYKS0,LS_DJH000,LS_JYJE00,trim(IN_POSTRANS),null, 'YHPAY',LS_ZXZT00,LS_ERRMSG); if LS_ZXZT00='0' then --执行状态 0:失败 1:成功 OUT_RETCODE:='03'; OUT_RETMSG:=LS_ERRMSG; rollback; return; end if; end if; --执行余额 --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(0,LS_BRID00,1,0) into LS_ZHYE00 from dual; select count(1)into LS_COUNT0 from BM_ZFRZ00 where DDLSH0=LS_DDLSH0_TEMP; if LS_COUNT0>0 then --修改BM_ZFRZ00 update BM_ZFRZ00 set ZFFS00=LS_ZFFSBH, ZFFSMC=LS_ZFFSMC, DJH000=LS_DJH000, JFJE00=LS_JYJE00, JFRQ00=LS_CZRQ00, JFSJ00=LS_CZSJ00, ZXZTBZ='1',--状态标志 0:失败 1:成功 BRYE00=LS_ZHYE00, PTDDH0=IN_EXTERNALNO,--支付渠道流水号 支付宝、微信等平台流水号 ZFQD00=IN_CHANNELTYPE,--支付渠道=tradeMode JYCGSJ=to_char(sysdate,'YYYYMMDD')||to_char(sysdate,'HH24MIss'), PTGZH0=IN_RECHARGENO,--支付平台跟踪号=traceNo JYLSH0=LS_JYLSH0,--交易流水号 YKTSH0=LS_YKTSH0,--健康通流水号 JYLXMC=LS_JYLXMC,--交易类型名称 JGBM00=LS_JGBM00,--机构编码 JGMC00=LS_JGMC00, --机构名称 BZ0000=LS_BZ0000, YHJYXX=IN_POSTRANS,--银行交易信息 TKJYLX='00', --退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 PJXH00=LS_PJXH00, ZPKHYH=LS_ZPKHYH, ZPDWMC=LS_ZPDWMC, ZPH000=LS_ZPH000, ZFQDBM=LS_ZFQDBM, ZFMXBH=LS_ZFMXBH where DDLSH0=LS_DDLSH0_TEMP; else --插入日志主表 insert into BM_ZFRZ00 ( DDLSH0,--订单流水号 CZRQ00,--操作日期 CZSJ00,--操作时间 CZY000,--操作员编码 CZYXM0,--操作员姓名 JKLXBH,--接口类型编号 0:设置服务 1:查询预交金 2:预交金充值 3:预交金退款 4:查询交易结果 JKLXMC,--接口类型名称 ZDBH00,--终端编号(自助机) BRID00,--病人ID BRXM00,--病人姓名 BRXB00,--病人性别 YBKH00,--医保卡号 YBID00,--医保ID ICKH00,--IC卡号 BRZJBH,--证件编号 BRDH00,--病人电话 MZZYBZ,--门诊住院标志 0:门诊 1:住院 JFBZ00,--缴费备注0:交,1:退 ZYGHID,--住院(ZYID00)或门诊(GHID000)流水号 ZYHGHH,--住院(ZYH000)或门诊(GHH000)号 JZDH00,--结账单号 YJDH00,--医技单号 ZFFS00,--支付编码 ZFFSMC,--支付方式名称 DJH000,--单据流水号=SF_BRJFB0.DJH000 JFJE00,--缴费金额 JFRQ00,--缴费日期 JFSJ00,--缴费时间 ZXZTBZ,--状态标志 0:失败 1:成功 BRYE00,--病人余额 BZ0000,--备注信息 PTDDH0,--支付平台充值订单号=chargeNo,退款订单号=refundNo ZFQD00,--支付渠道=tradeMode JYCGSJ,--交易成功时间(yyyyMMddHHmmss)=traceTime PTGZH0,--支付平台跟踪号=traceNo JKXYBM,--响应编码=respCode JKXYXX,--响应信息=respMsg JYLSH0,--交易流水号 YKTSH0,--健康通流水号 JYLXMC,--交易类型名称 JGBM00,--机构编码 JGMC00,--机构名称 INCS00,--请求入参集合=param INQTCS,--扩展入参集合=extenalMap OUTCS0,--返回参数 TKDDH0,--商户退款订单号=outRefundNo TKJE00,--退款金额 YHJYXX,--银行交易信息 TKJYLX, PJXH00, ZPKHYH, ZPDWMC, ZPH000, ZFQDBM, ZFMXBH )values ( LS_DDLSH0_TEMP,--订单流水号((门诊MZ 住院ZY 自助机:ZZ)+yyyyMMddHHmmss+xxxx) LS_CZRQ00,--操作日期 LS_CZSJ00,--操作时间 LS_YGBH00,--操作员编码 LS_YGXM00,--操作员姓名 '2',--接口类型编号 0:设置服务 1:查询预交金 2:预交金充值 3:预交金退款 4:查询交易结果 12:预交金充值其它渠道 '预交金充值',--接口类型名称 IN_TERMNO,--终端编号(自助机) RBRXX.BRID00,--病人ID trim(RBRXX.BRXM00),--病人姓名 RBRXX.BRXB00,--病人性别 trim(RBRXX.YBKH00),--医保卡号 trim(RBRXX.YBID00),--医保ID trim(IN_CARDNO),--IC卡号 trim(RBRXX.BRZJBH),--证件编号 trim(RBRXX.BRDH00),--病人电话 '0',--门诊住院标志 0:门诊 1:住院 LS_JFBZ00,--缴费备注0:交,1:退 0,--住院(ZYID00)或门诊(GHID000)流水号 null,--住院(ZYH000)或门诊(GHH000)号 0,--结账单号 0,--医技单号 LS_ZFFSBH,--支付编码 LS_ZFFSMC,--支付方式名称 LS_DJH000,--单据流水号=SF_BRJFB0.DJH000 LS_JYJE00,--缴费金额 LS_CZRQ00,--缴费日期 LS_CZSJ00,--缴费时间 '1',--状态标志 0:失败 1:成功 LS_ZHYE00,--病人余额 LS_BZ0000,--备注信息 IN_EXTERNALNO,--支付平台充值订单号=chargeNo,退款订单号=refundNo IN_CHANNELTYPE,--支付渠道=tradeMode null,--交易成功时间(yyyyMMddHHmmss)=traceTime IN_RECHARGENO,--支付平台跟踪号=traceNo '000000',--响应编码=respCode '充值成功',--响应信息=respMsg LS_JYLSH0,--交易流水号 LS_YKTSH0,--健康通流水号 LS_JYLXMC,--交易类型名称 LS_JGBM00,--机构编码 LS_JGMC00,--机构名称 null,--请求入参集合=param null,--POS刷卡信息 null,--返回参数 null,--商户退款订单号=outRefundNo 0 , --退款金额 IN_POSTRANS,--POS刷卡信息--银行交易信息 '00',--退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_PJXH00, LS_ZPKHYH, LS_ZPDWMC, LS_ZPH000, LS_ZFQDBM, LS_ZFMXBH ); end if; update BM_ZFPTCS set DJH000=LS_DJH000 where DDLSH0=LS_DDLSH0; OUT_RETCODE:='00';--返回码 00成功 OUT_RETMSG:='';--返回说明 OUT_BALANCE:=nvl(LS_ZHYE00,0);--余额 OUT_TRACETIME:=LS_CZRQ00||substrb(LS_CZSJ00,1,2)||substrb(LS_CZSJ00,4,2)||substrb(LS_CZSJ00,7,2);--交易成功时间 yyyyMMddHHmmss OUT_TRACENO:=LS_DDLSH0_TEMP;--LS_DJH000;--HIS处理业务流水号 end if; --门诊业务处理--end-- ----------------------------住院业务处理-------------------begin--------------------------- if LS_MZZYBZ in ('1') then --门诊住院标志 0:门诊 1:住院 --IN_NOTES 备注信息 :模块类型|缴费单据号|据序号|开户银行|转账单位|支票号码|ZYID00|模块名称|支付名称|支付金额|结账单号|是否一次补交 begin select to_number(SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 7)) into LS_ZYGHID from dual;--ZYID00或BRID00 select SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 8) into LS_QTLX00 from dual;--其它类型(取消结算补收、重新结算补收) select trim(SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 9)) into LS_BSZFMC from dual;--补收支付名称 select trim(SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 11)) into LS_QXJZDH from dual;--取消结算单号 select trim(SF_SF_RETURNINDEXEH(trim(IN_NOTES),'|', 12)) into LS_BSLX00 from dual;--补收类型 Y:一次补收 N:分批次补收 exception when others then LS_ZYGHID:=0; LS_QTLX00:=''; LS_BSZFMC:=''; LS_QXJZDH:=0; LS_BSLX00:=''; end; LS_QTLX00:=nvl(LS_QTLX00,'正常收退'); LS_JFLBID:=2; begin select substrb(VALUE0,1,1) into LS_YJJPJ0 from XT_XTCS00 where NAME00 = 'ZY_YJJPJ0'; exception when others then LS_YJJPJ0:='N'; end; if LS_JFBZ00='0' then --缴费备注 0:交 1:退 LS_PJLXBM:=8; else --1:退 if trim(LS_YJJPJ0)='Y' then LS_PJLXBM:=8; else LS_PJLXBM:=4; end if; end if; --判断是否已经充值过程 交易流水号(支付平台充值流水号 支付平台业务流水号) select count(1)into LS_COUNT0 from ZY_BRJFB0 where BRID00=LS_BRID00 and JYLSH0=LS_JYLSH0; if LS_COUNT0>=1 then OUT_RETCODE:='03'; OUT_RETMSG:='该笔交易已经充值成功,无法重复查找!'; rollback; return; end if; --21:入院登记充值 22:预交金充值 23:出院结算充值 24:重新结算充值 --31:取消入院退款 32:预交金退款 33:出院结算退款 34:重新结算退款 LS_JGBM00:=LS_MKLXMC; if LS_MKLXMC='21' then LS_JGMC00:='入院登记充值'; elsif LS_MKLXMC='22' then LS_JGMC00:='预交金充值'; elsif LS_MKLXMC='23' then LS_JGMC00:='出院结算充值'; elsif LS_MKLXMC='24' then LS_JGMC00:='重新结算充值'; elsif LS_MKLXMC='31' then LS_JGMC00:='取消入院退款'; elsif LS_MKLXMC='32' then LS_JGMC00:='预交金退款'; elsif LS_MKLXMC='33' then LS_JGMC00:='出院结算退款'; elsif LS_MKLXMC='34' then LS_JGMC00:='重新结算退款'; elsif LS_MKLXMC='35' then LS_JGMC00:='年度结算退款'; elsif LS_MKLXMC='36' then LS_JGMC00:='年度结算充值'; elsif LS_MKLXMC='37' then LS_JGMC00:='取消结算补收'; else LS_JGMC00:='其它'; end if; --执行余额 --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(1,LS_BRID00,2,0) into LS_ZHYE00 from dual; if ((LS_MKLXMC='入院登记') or (LS_MKLXMC in ('21'))) and (LS_JFDJH0>0) then LS_DJH000:=LS_JFDJH0; update ZY_BRJFB0 set JYLSH0=LS_JYLSH0,YKTSH0=LS_YKTSH0, JYLXMC=LS_JYLXMC,JGBM00=LS_JGBM00, JGMC00=LS_JGMC00,DDLSH0=LS_DDLSH0, ZFMXBH=LS_ZFMXBH,SHH000=LS_SHH000 where DJH000=LS_DJH000; else --获取自助机对应收费员的票据序号-- begin select PJDQH0,PJLYID into LS_PJXH00,LS_PJLYID from BM_PJLYQK where PJLXBM =LS_PJLXBM and SYBZ00='Y' and PJSYR0=LS_YGBH00; exception when others then LS_PJXH00:='0'; LS_PJLYID:=0; end; select SQ_ZY_PJSYQK_PJH000.nextval into LS_PJH000 from dual; select SQ_ZY_BRJFB0_DJH000.nextval into LS_DJH000 from dual; if LS_QTLX00 in ('取消结算补收','重新结算补收') then LS_JZDH00:=nvl(RZFRZ.JZDH00,0); LS_ZPDWMC:=LS_QTLX00; LS_ZPZH00:=LS_QXJZDH; LS_ZPKHYH:=LS_PJH000; /* begin select PJH000 into LS_JZPJH0 from ZY_JZB000 where BRID00=RBRXX.BRID00 and JZDH00=LS_JZDH00; exception when others then LS_JZPJH0:=LS_PJH000; end; */ else LS_JZDH00:=nvl(RZFRZ.JZDH00,0); end if; if ((LS_MKLXMC='重新结算充值') or (LS_MKLXMC in ('24'))) then LS_JFLBID := 0; select PJH000 into LS_PJH000 from ZY_JZB000 where JZDH00=nvl(RZFRZ.JZDH00,0); LS_PJLXBM := 3; end if; if LS_MKLXMC in ('23') then --接口类型 33:出院结算退款 --先查询账户余额 begin select XJYE00,ZYE000 into LS_XJYE00,LS_ZYE000 from ZY_BRZHXX where BRID00=LS_BRID00 and JFLBID=LS_JFLBID; exception when others then LS_XJYE00:=0; LS_ZYE000:=0; end; select PJH000 into LS_PJH000 from ZY_JZB000 where JZDH00=nvl(RZFRZ.JZDH00,0); --修改原来的应退款现金金额 update ZY_BRJFB0 set JFJE00=nvl(JFJE00,0)-nvl(LS_JYJE00,0) where BRID00=LS_BRID00 and JFLBID=LS_JFLBID and ZPDWMC='出院结算补收' and ZFFS00=1 and JZDH00 = nvl(RZFRZ.JZDH00,0);--and PLBH00=3; LS_PJLXBM:=3; LS_JFBZ00:=1; end if; --1、添加病人交费记录,对于病人余额的修改在触发器中修改 insert into ZY_BRJFB0(DJH000,BRID00,JFLBID,JFJE00,ZFFS00,ZFFSMC,ZPH000,ZPKHYH,ZPZH00,ZPDWMC,PJH000, JFRQ00,JFSJ00,JFCZY0,CZYXM0,BRYE00,JFBZ00,JKBID0,JZDH00,TTBRID,JFYY00,JFSHR0,JFSHSJ,ZYID00, JYLSH0,YKTSH0,JYLXMC,JGBM00,JGMC00,DDLSH0,ZFMXBH,SHH000) values(LS_DJH000,RBRXX.BRID00,LS_JFLBID,LS_JYJE00,LS_ZFFSBH,LS_ZFFSMC,LS_ZPH000,LS_ZPKHYH,LS_ZPZH00,LS_ZPDWMC,LS_PJH000, LS_CZRQ00,LS_CZSJ00,LS_YGBH00,LS_YGXM00,0,LS_JFBZ00,0,LS_JZDH00,RBRXX.TTBRID,LS_JFYY00,LS_JFSHR0,LS_JFSHSJ,LS_ZYID00, LS_JYLSH0,LS_YKTSH0,LS_JYLXMC,LS_JGBM00,LS_JGMC00,LS_DDLSH0,LS_ZFMXBH,LS_SHH000); if LS_MKLXMC not in ('23','24','37') then if LS_QTLX00 not in ('取消结算补收','重新结算补收') or LS_QTLX00 is not null then --插入票据表 insert into ZY_PJSYQK(PJH000,PLBH00,PLMC00,PJXH00,XJJE00,ZZJE00,YHKJE0,CZY000,CZYXM0,DYRQ00,DYSJ00,SFDY00,PJZT00,XM0000,XB0000,CZYKS0,PJLYID,ZYID00) select LS_PJH000,PLBH00,PLMC00,LS_PJXH00,LS_XJJE00,LS_ZZJE00,LS_YHKJE0,LS_YGBH00,LS_YGXM00, LS_CZRQ00,LS_CZSJ00,'Y','0',RBRXX.BRXM00,RBRXX.BRXB00,LS_CZYKS0,LS_PJLYID,LS_ZYID00 from BM_PJLXB0 where PLBH00 = LS_PJLXBM; end if; end if; if ((LS_MKLXMC='重新结算充值') or (LS_MKLXMC in ('23','24'))) then if LS_ZFFSBH = 8 then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),YHTKJE=nvl(YHTKJE,0)-abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=RBRXX.BRID00 and JZDH00=nvl(RZFRZ.JZDH00,0); elsif LS_ZFFSBH=24 then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),WXTK00=nvl(WXTK00,0)-abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=RBRXX.BRID00 and JZDH00=nvl(RZFRZ.JZDH00,0); elsif LS_ZFFSBH=25 then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),ZFBTK0=nvl(ZFBTK0,0)-abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=RBRXX.BRID00 and JZDH00=nvl(RZFRZ.JZDH00,0); elsif LS_ZFFSBH=28 then update ZY_JZB000 set XJYE00=nvl(XJYE00,0)+abs(nvl(LS_JYJE00,0)),DZZFJE=nvl(DZZFJE,0)-abs(nvl(LS_JYJE00,0)),DDLSH0=LS_DDLSH0 where BRID00=RBRXX.BRID00 and JZDH00=nvl(RZFRZ.JZDH00,0); end if; end if; if LS_MKLXMC in ('23') then --接口类型 23:出院结算补收 update ZY_BRZHXX set XJYE00=Ls_XJYE00,ZYE000=LS_ZYE000 where BRID00=LS_BRID00 and JFLBID=LS_JFLBID;--把账户信息修改为原来的值 update ZY_BRJFB0 set BRYE00=0 where DJH000=LS_DJH000 and BRID00=LS_BRID00; end if; if (LS_ZFFSBH=8) and (trim(IN_POSTRANS) is not null) then --银行卡 SP_SF_PAY_POSLSZ(LS_DDLSH0,LS_MZZYBZ,LS_JFBZ00,LS_ZFFSBH,RBRXX.BRID00,RBRXX.BRXM00,LS_ZYID00,LS_ZYH000, LS_YGBH00,LS_YGXM00,LS_CZYKS0,LS_DJH000,LS_JYJE00,trim(IN_POSTRANS),null, 'YHPAY',LS_ZXZT00,LS_ERRMSG); if LS_ZXZT00='0' then --执行状态 0:失败 1:成功 OUT_RETCODE:='03'; OUT_RETMSG:=LS_ERRMSG; rollback; return; end if; end if; end if; --修改取消结算补收、重新结算补收原缴费表YKTSH0=DDLSH0 if LS_QTLX00 in ('取消结算补收','重新结算补收') and LS_QXJZDH>0 and LS_BSZFMC is not null then --其它类型(取消结算补收、重新结算补收) if LS_BSLX00='Y' then --补收类型 Y:一次补收 N:分批次补收 update ZY_BRJFB0 set YKTSH0=LS_DDLSH0,ZPZH00=LS_DJH000,ZPDWMC=LS_QTLX00, BZ0000=substrb(LS_QTLX00||'|'||LS_BSZFMC||'|'||LS_BSLX00,1,50) where BRID00=RBRXX.BRID00 and JFBZ00='1' and JZDH00=LS_QXJZDH and ZFFS00 in (1,2,8,24,25,26,28) ; else update ZY_BRJFB0 set YKTSH0=LS_DDLSH0,ZPZH00=LS_DJH000,ZPDWMC=LS_QTLX00, BZ0000=substrb(LS_QTLX00||'|'||LS_BSZFMC||'|'||LS_BSLX00,1,50) where BRID00=RBRXX.BRID00 and ZFFSMC=LS_BSZFMC and JFBZ00='1' and JZDH00=LS_QXJZDH and ZFFS00 in (1,2,8,24,25,26,28) ; end if; end if; --执行余额 --0 门诊 1住院 /BRID00 /交费类型 1:门诊 2:住院/返回类型 0:可用余额 1:总余额 2:现金余额 3:停用金额 select SF_SF_GETBRZHYE(1,LS_BRID00,2,0) into LS_ZHYE00 from dual; select count(1)into LS_COUNT0 from BM_ZFRZ00 where DDLSH0=LS_DDLSH0_TEMP; if LS_COUNT0>0 then --修改BM_ZFRZ00 update BM_ZFRZ00 set ZFFS00=LS_ZFFSBH, ZFFSMC=LS_ZFFSMC, DJH000=LS_DJH000, JFJE00=LS_JYJE00, JFRQ00=LS_CZRQ00, JFSJ00=LS_CZSJ00, ZXZTBZ='1',--状态标志 0:失败 1:成功 BRYE00=LS_ZHYE00, PTDDH0=IN_EXTERNALNO,--支付渠道流水号 支付宝、微信等平台流水号 ZFQD00=IN_CHANNELTYPE,--支付渠道=tradeMode JYCGSJ=to_char(sysdate,'YYYYMMDD')||to_char(sysdate,'HH24MIss'), PTGZH0=IN_RECHARGENO,--支付平台跟踪号=traceNo JYLSH0=LS_JYLSH0,--交易流水号 YKTSH0=LS_YKTSH0,--健康通流水号 JYLXMC=LS_JYLXMC,--交易类型名称 JGBM00=LS_JGBM00,--机构编码 JGMC00=LS_JGMC00, --机构名称 BZ0000=LS_BZ0000, YHJYXX=IN_POSTRANS,--银行交易信息 TKJYLX='00', --退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 PJXH00=LS_PJXH00, ZPKHYH=LS_ZPKHYH, ZPDWMC=LS_ZPDWMC, ZPH000=LS_ZPH000, ZFQDBM=LS_ZFQDBM, ZFMXBH=LS_ZFMXBH where DDLSH0=LS_DDLSH0_TEMP; else --插入日志主表 insert into BM_ZFRZ00 ( DDLSH0,--订单流水号 CZRQ00,--操作日期 CZSJ00,--操作时间 CZY000,--操作员编码 CZYXM0,--操作员姓名 JKLXBH,--接口类型编号 0:设置服务 1:查询预交金 2:预交金充值 3:预交金退款 4:查询交易结果 JKLXMC,--接口类型名称 ZDBH00,--终端编号(自助机) BRID00,--病人ID BRXM00,--病人姓名 BRXB00,--病人性别 YBKH00,--医保卡号 YBID00,--医保ID ICKH00,--IC卡号 BRZJBH,--证件编号 BRDH00,--病人电话 MZZYBZ,--门诊住院标志 0:门诊 1:住院 JFBZ00,--缴费备注0:交,1:退 ZYGHID,--住院(ZYID00)或门诊(GHID000)流水号 ZYHGHH,--住院(ZYH000)或门诊(GHH000)号 JZDH00,--结账单号 YJDH00,--医技单号 ZFFS00,--支付编码 ZFFSMC,--支付方式名称 DJH000,--单据流水号=SF_BRJFB0.DJH000 JFJE00,--缴费金额 JFRQ00,--缴费日期 JFSJ00,--缴费时间 ZXZTBZ,--状态标志 0:失败 1:成功 BRYE00,--病人余额 BZ0000,--备注信息 PTDDH0,--支付平台充值订单号=chargeNo,退款订单号=refundNo ZFQD00,--支付渠道=tradeMode JYCGSJ,--交易成功时间(yyyyMMddHHmmss)=traceTime PTGZH0,--支付平台跟踪号=traceNo JKXYBM,--响应编码=respCode JKXYXX,--响应信息=respMsg JYLSH0,--交易流水号 YKTSH0,--健康通流水号 JYLXMC,--交易类型名称 JGBM00,--机构编码 JGMC00,--机构名称 INCS00,--请求入参集合=param INQTCS,--扩展入参集合=extenalMap OUTCS0,--返回参数 TKDDH0,--商户退款订单号=outRefundNo TKJE00,--退款金额 YHJYXX,--银行交易信息 TKJYLX, PJXH00, ZPKHYH, ZPDWMC, ZPH000, ZFQDBM, ZFMXBH )values ( LS_DDLSH0_TEMP,--订单流水号((门诊MZ 住院ZY 自助机:ZZ)+yyyyMMddHHmmss+xxxx) LS_CZRQ00,--操作日期 LS_CZSJ00,--操作时间 LS_YGBH00,--操作员编码 LS_YGXM00,--操作员姓名 '2',--接口类型编号 0:设置服务 1:查询预交金 2:预交金充值 3:预交金退款 4:查询交易结果 12:预交金充值其它渠道 '预交金充值',--接口类型名称 IN_TERMNO,--终端编号(自助机) LS_BRID00,--病人ID trim(RBRXX.BRXM00),--病人姓名 RBRXX.BRXB00,--病人性别 trim(RBRXX.YBKH00),--医保卡号 trim(RBRXX.YBID00),--医保ID trim(IN_CARDNO),--IC卡号 trim(RBRXX.BRZJBH),--证件编号 trim(RBRXX.BRDH00),--病人电话 '1',--门诊住院标志 0:门诊 1:住院 LS_JFBZ00,--缴费备注0:交,1:退 LS_ZYID00,--住院(ZYID00)或门诊(GHID000)流水号 LS_ZYH000,--住院(ZYH000)或门诊(GHH000)号 0,--结账单号 0,--医技单号 LS_ZFFSBH,--支付编码 LS_ZFFSMC,--支付方式名称 LS_DJH000,--单据流水号=SF_BRJFB0.DJH000 LS_JYJE00,--缴费金额 LS_CZRQ00,--缴费日期 LS_CZSJ00,--缴费时间 '1',--状态标志 0:失败 1:成功 LS_ZHYE00,--病人余额 LS_BZ0000,--备注信息 IN_EXTERNALNO,--支付平台充值订单号=chargeNo,退款订单号=refundNo IN_CHANNELTYPE,--支付渠道=tradeMode null,--交易成功时间(yyyyMMddHHmmss)=traceTime IN_RECHARGENO,--支付平台跟踪号=traceNo '000000',--响应编码=respCode '充值成功',--响应信息=respMsg LS_JYLSH0,--交易流水号 LS_YKTSH0,--健康通流水号 LS_JYLXMC,--交易类型名称 LS_JGBM00,--机构编码 LS_JGMC00,--机构名称 null,--请求入参集合=param null,--POS刷卡信息 null,--返回参数 null,--商户退款订单号=outRefundNo 0 , --退款金额 IN_POSTRANS,--POS刷卡信息--银行交易信息 '00',--退款交易类型 00:充值 01:正常退款 02:退款冲正03:支付平台退款成功 04:支付平台退款异常 LS_PJXH00, LS_ZPKHYH, LS_ZPDWMC, LS_ZPH000, LS_ZFQDBM, LS_ZFMXBH ); end if; update BM_ZFPTCS set DJH000=LS_DJH000 where DDLSH0=LS_DDLSH0; OUT_RETCODE:='00';--返回码 00成功 OUT_RETMSG:='';--返回说明 OUT_BALANCE:=nvl(LS_ZHYE00,0);--余额 OUT_TRACETIME:=LS_CZRQ00||substrb(LS_CZSJ00,1,2)||substrb(LS_CZSJ00,4,2)||substrb(LS_CZSJ00,7,2);--交易成功时间 yyyyMMddHHmmss OUT_TRACENO:=LS_DDLSH0_TEMP;--LS_DJH000;--HIS处理业务流水号 end if; --住院业务处理--end-- --提交事务 if OUT_RETCODE='00' then commit; else rollback; end if; exception when no_data_found then OUT_RETCODE:='99'; OUT_RETMSG:=substrb('预交金账户充值(SP_PAY_YJJ_ZHCZ)错误!'||sqlerrm,1,200); rollback; when others then OUT_RETCODE:='99'; OUT_RETMSG:=substrb('预交金账户充值(SP_PAY_YJJ_ZHCZ)错误!'||sqlerrm,1,200); rollback; end;