type p_cursor is ref Cursor;
end;
create or replace package pro_query_postxnjnl is
---办事处,业务员,商户,查询历史交易明细
procedure query_postxnjnl_his_info(curpage in varchar2,
unitpage in varchar2,
stldt in varchar2,
stldtstr in varchar2,
stldtend in varchar2,
txncd in varchar2,
txnsts in varchar2,
agtorg in varchar2,
txnamtstr in varchar2,
txnamtend in varchar2,
mercid in varchar2,
mernam in varchar2,
srefno in varchar2,
osrefno in varchar2,
logno in varchar2,
ologno in varchar2,
termid in varchar2,
flag in varchar2,
mercid_oper in varchar2,
agentid in varchar2,
tlrid in varchar2,
v_cursor out tomorrow.p_cursor);
procedure query_postxnjnl_his_count(stldt in varchar2,
stldtstr in varchar2,
stldtend in varchar2,
txncd in varchar2,
txnsts in varchar2,
agtorg in varchar2,
txnamtstr in varchar2,
txnamtend in varchar2,
mercid in varchar2,
mernam in varchar2,
srefno in varchar2,
osrefno in varchar2,
logno in varchar2,
ologno in varchar2,
termid in varchar2,
flag in varchar2,
mercid_oper in varchar2,
agentid in varchar2,
tlrid in varchar2,
v_cursor out tomorrow.p_cursor);
procedure query_postxnjnl_his_amttotal(stldt in varchar2,
stldtstr in varchar2,
stldtend in varchar2,
txncd in varchar2,
txnsts in varchar2,
agtorg in varchar2,
txnamtstr in varchar2,
txnamtend in varchar2,
mercid in varchar2,
mernam in varchar2,
srefno in varchar2,
osrefno in varchar2,
logno in varchar2,
ologno in varchar2,
termid in varchar2,
flag in varchar2,
mercid_oper in varchar2,
agentid in varchar2,
tlrid in varchar2,
v_cursor out tomorrow.p_cursor);
end;
create or replace package body pro_query_postxnjnl is
---办事处,业务员,商户,查询历史交易明细
procedure query_postxnjnl_his_info(curpage in varchar2,
unitpage in varchar2,
stldt in varchar2,
stldtstr in varchar2,
stldtend in varchar2,
txncd in varchar2,
txnsts in varchar2,
agtorg in varchar2,
txnamtstr in varchar2,
txnamtend in varchar2,
mercid in varchar2,
mernam in varchar2,
srefno in varchar2,
osrefno in varchar2,
logno in varchar2,
ologno in varchar2,
termid in varchar2,
flag in varchar2,
mercid_oper in varchar2,
agentid in varchar2,
tlrid in varchar2,
v_cursor out tomorrow.p_cursor) as
startpos number;
endpos number;
tj varchar2(500);
tj2 varchar2(100);
tj3 varchar2(100);
sqlstr varchar2(300);
query_postxnjnl_his varchar2(3000);
begin
tj := '';
tj2 := '';
tj3 := '';
sqlstr := '';
--商户号
if (mercid is not null) then
tj := tj || ' AND I.MERCNUM LIKE ' || '''' || '%' || mercid || '%' || '''';
end if;
--商户名称
if (mernam is not null) then
tj := tj || ' AND I.MERNAM LIKE ' || '''' || '%' || mernam || '%' || '''';
end if;
--系统参考号
if (srefno is not null) then
tj := tj || ' AND P.SREFNO LIKE ' || '''' || '%' || srefno || '%' || '''';
end if;
--原系统参考号
if (osrefno is not null) then
tj := tj || ' AND P.TSREFNO LIKE ' || '''' || '%' || osrefno || '%' || '''';
end if;
--交易日期
if (stldt is not null) then
tj := tj || ' AND P.SYSDAT =''' || stldt || '''';
end if;
tj := tj || ' AND P.SYSDAT BETWEEN ''' || stldtstr || ''' AND ''' ||
stldtend || '''';
--交易类型
if (txncd is not null) then
tj := tj || ' AND P.TXNCD =''' || txncd || '''';
end if;
--交易状态
if (txnsts is not null) then
tj := tj || ' AND P.TXNSTS =''' || txnsts || '''';
end if;
--合作机构
if (agtorg is not null) then
tj := tj || ' AND P.AGTORG =''' || agtorg || '''';
end if;
--交易金额起
if (txnamtstr is not null) then
tj := tj || ' AND TO_NUMBER(P.TXNAMT)>=TO_NUMBER(''' || txnamtstr || '''' ||
')*100';
end if;
--交易金额终
if (txnamtend is not null) then
tj := tj || ' AND TO_NUMBER(P.TXNAMT)<=TO_NUMBER(''' || txnamtend || '''' ||
')*100';
end if;
--原交易流水号和交易流水号
if ((logno is null) and (ologno is not null)) then
sqlstr := sqlstr || ' AND (P.LOGNO LIKE ' || '''' || '%' || ologno || '%' || '''' ||
'OR P.OLOGNO LIKE ' || '''' || '%' || ologno || '%' ||
''')';
end if;
if ((logno is not null) and (ologno is null)) then
sqlstr := sqlstr || ' AND P.LOGNO LIKE ' || '''' || '%' || logno || '%' || '''';
end if;
if ((logno is not null) and (ologno is not null)) then
sqlstr := sqlstr || ' AND P.LOGNO LIKE ' || '''' || '%' || logno || '%' || '''' ||
'AND P.OLOGNO LIKE ' || '''' || '%' || ologno || '%' || '''';
end if;
--终端号
if (termid is not null) then
sqlstr := sqlstr || ' AND P.TERMID LIKE ' || '''' || '%' || termid || '%' || '''';
end if;
--分页计算
if ((curpage is not null) and (unitpage is not null)) then
startpos := (curpage - 1) * unitpage + 1;
endpos := curpage * unitpage;
end if;
--判断不同角色登录查询历史交易明细
if (flag = '2') then
--商户角色
if (mercid_oper is not null) then
tj := tj || ' AND I.MERCNUM LIKE ' || '''' || '%' || mercid_oper || '%' || '''';
end if;
end if;
if (flag = '3') then
--办事处角色
if (agentid is not null) then
tj2 := tj2 || ' WHERE MI.AGENTID=''' || agentid || '''';
tj3 := tj3 || ' WHERE MD.AGENTID=''' || agentid || '''';
end if;
end if;
if (flag = '1') then
--业务员角色 通过办事处编号和当前操作员id查找
if (tlrid is not null) then
tj2 := tj2 || ' WHERE MI.OPERID =''' || tlrid ||
''' OR MI.AGENTID IN (SELECT AGENTID FROM POSAGTINF WHERE TLRID=''' ||
tlrid || ''')';
tj3 := tj3 || ' WHERE MD.OPERID=''' || tlrid ||
''' OR MD.AGENTID IN (SELECT AGENTID FROM POSAGTINF WHERE TLRID=''' ||
tlrid || ''')';
end if;
end if;
--查询历史交易明细sql
query_postxnjnl_his := 'SELECT DISTINCT I.MERNAM,I.MERCID,I.MERCNUM,B.BRANAM,T.TERMID,P.SYSDAT,P.TXNTM,P.LOGNO,P.TXNTYP,
P.CRDNO,P.TXNAMT,P.SREFNO,P.OLOGNO,P.TSREFNO OTSREFNO,P.TXNSTS,P.CRDFLG,P.TXNCD,U.ISSNAM,N.ORGNAM,P.FEE,(P.TXNAMT-DECODE(TRIM(P.FEE),' || '''''' || ',0,P.FEE)) JSAMT
FROM POSTXNJNLHIS P INNER JOIN
(SELECT TRIM(MI.MERNAM) MERNAM,TRIM(MI.MERCID) MERCID,TRIM(MI.MERCNUM) MERCNUM FROM POSMERCINF MI ' || tj2 || ' union
SELECT DISTINCT TRIM(MD.MERNAM) MERNAM,TRIM(MD.MERCID) MERCID,TRIM(MD.MERCNUM) MERCNUM FROM POSMERCINFMOD MD ' || tj3 || '
)I ON P.MERCID=I.MERCID
INNER JOIN POSTERMINF T ON P.TERMID=T.TERMID LEFT JOIN POSBRAINF B ON TRIM(T.BRAID)=TRIM(B.BRAID)
LEFT JOIN UNIONFITNAME U ON TRIM(P.ISSINO)=TRIM(U.ISSNO)
LEFT JOIN POSNODINF N ON P.AGTORG=N.AGTORG
WHERE P.TXNTYP!=''C'' ' || sqlstr || ' ' || tj || '
ORDER BY P.SYSDAT DESC,P.TXNTM DESC,I.MERCID DESC';
query_postxnjnl_his := 'select * from (select B.*,rownum rid from (' || query_postxnjnl_his || ')B where rownum<=' || endpos || ')A where A.rid>=' || startpos;
open v_cursor for query_postxnjnl_his;
Exception
when others then
dbms_output.put_line('数据库出现异常!');
raise;
end query_postxnjnl_his_info;
--统计总个数
procedure query_postxnjnl_his_count(stldt in varchar2,
stldtstr in varchar2,
stldtend in varchar2,
txncd in varchar2,
txnsts in varchar2,
agtorg in varchar2,
txnamtstr in varchar2,
txnamtend in varchar2,
mercid in varchar2,
mernam in varchar2,
srefno in varchar2,
osrefno in varchar2,
logno in varchar2,
ologno in varchar2,
termid in varchar2,
flag in varchar2,
mercid_oper in varchar2,
agentid in varchar2,
tlrid in varchar2,
v_cursor out tomorrow.p_cursor) as
tj varchar2(500);
tj2 varchar2(100);
tj3 varchar2(100);
sqlstr varchar2(300);
query_postxnjnl_count varchar2(3000);
begin
tj := '';
tj2 := '';
tj3 := '';
sqlstr := '';
--商户号
if (mercid is not null) then
tj := tj || ' AND I.MERCNUM LIKE ' || '''' || '%' || mercid || '%' || '''';
end if;
--商户名称
if (mernam is not null) then
tj := tj || ' AND I.MERNAM LIKE ' || '''' || '%' || mernam || '%' || '''';
end if;
--系统参考号
if (srefno is not null) then
tj := tj || ' AND P.SREFNO LIKE ' || '''' || '%' || srefno || '%' || '''';
end if;
--原系统参考号
if (osrefno is not null) then
tj := tj || ' AND P.TSREFNO LIKE ' || '''' || '%' || osrefno || '%' || '''';
end if;
--交易日期
if (stldt is not null) then
tj := tj || ' AND P.SYSDAT =''' || stldt || '''';
end if;
tj := tj || ' AND P.SYSDAT BETWEEN ''' || stldtstr || ''' AND ''' ||
stldtend || '''';
--交易类型
if (txncd is not null) then
tj := tj || ' AND P.TXNCD =''' || txncd || '''';
end if;
--交易状态
if (txnsts is not null) then
tj := tj || ' AND P.TXNSTS =''' || txnsts || '''';
end if;
--合作机构
if (agtorg is not null) then
tj := tj || ' AND P.AGTORG =''' || agtorg || '''';
end if;
--交易金额起
if (txnamtstr is not null) then
tj := tj || ' AND TO_NUMBER(P.TXNAMT)>=TO_NUMBER(''' || txnamtstr || '''' ||
')*100';
end if;
--交易金额终
if (txnamtend is not null) then
tj := tj || ' AND TO_NUMBER(P.TXNAMT)<=TO_NUMBER(''' || txnamtend || '''' ||
')*100';
end if;
--原交易流水号和交易流水号
if ((logno is null) and (ologno is not null)) then
sqlstr := sqlstr || ' AND (P.LOGNO LIKE ' || '''' || '%' || ologno || '%' || '''' ||
'OR P.OLOGNO LIKE ' || '''' || '%' || ologno || '%' ||
''')';
end if;
if ((logno is not null) and (ologno is null)) then
sqlstr := sqlstr || ' AND P.LOGNO LIKE ' || '''' || '%' || logno || '%' || '''';
end if;
if ((logno is not null) and (ologno is not null)) then
sqlstr := sqlstr || ' AND P.LOGNO LIKE ' || '''' || '%' || logno || '%' || '''' ||
'AND P.OLOGNO LIKE ' || '''' || '%' || ologno || '%' || '''';
end if;
--终端号
if (termid is not null) then
sqlstr := sqlstr || ' AND P.TERMID LIKE ' || '''' || '%' || termid || '%' || '''';
end if;
--判断不同角色登录查询历史交易明细
if (flag = '2') then
--商户角色
if (mercid_oper is not null) then
tj := tj || ' AND I.MERCNUM LIKE ' || '''' || '%' || mercid_oper || '%' || '''';
end if;
end if;
if (flag = '3') then
--办事处角色
if (agentid is not null) then
tj2 := tj2 || ' WHERE MI.AGENTID=''' || agentid || '''';
tj3 := tj3 || ' WHERE MD.AGENTID=''' || agentid || '''';
end if;
end if;
if (flag = '1') then
--业务员角色 通过办事处编号和当前操作员id查找
if (tlrid is not null) then
tj2 := tj2 || ' WHERE MI.OPERID =''' || tlrid ||
''' OR MI.AGENTID IN (SELECT AGENTID FROM POSAGTINF WHERE TLRID=''' ||
tlrid || ''')';
tj3 := tj3 || ' WHERE MD.OPERID=''' || tlrid ||
''' OR MD.AGENTID IN (SELECT AGENTID FROM POSAGTINF WHERE TLRID=''' ||
tlrid || ''')';
end if;
end if;
--查询历史交易明细sql
query_postxnjnl_count := 'SELECT P.LOGNO
FROM POSTXNJNLHIS P INNER JOIN
(SELECT TRIM(MI.MERNAM) MERNAM,TRIM(MI.MERCID) MERCID,TRIM(MI.MERCNUM) MERCNUM FROM POSMERCINF MI ' || tj2 || ' union
SELECT DISTINCT TRIM(MD.MERNAM) MERNAM,TRIM(MD.MERCID) MERCID,TRIM(MD.MERCNUM) MERCNUM FROM POSMERCINFMOD MD ' || tj3 || '
)I ON P.MERCID=I.MERCID WHERE P.TXNTYP!=''C'' ' || sqlstr || ' ' || tj || '';
query_postxnjnl_count := 'SELECT COUNT(1) AS TOLCNT FROM (' || query_postxnjnl_count || ')';
open v_cursor for query_postxnjnl_count;
Exception
when others then
dbms_output.put_line('数据库出现异常!');
raise;
end query_postxnjnl_his_count;
--统计交易总金额
procedure query_postxnjnl_his_amttotal(stldt in varchar2,
stldtstr in varchar2,
stldtend in varchar2,
txncd in varchar2,
txnsts in varchar2,
agtorg in varchar2,
txnamtstr in varchar2,
txnamtend in varchar2,
mercid in varchar2,
mernam in varchar2,
srefno in varchar2,
osrefno in varchar2,
logno in varchar2,
ologno in varchar2,
termid in varchar2,
flag in varchar2,
mercid_oper in varchar2,
agentid in varchar2,
tlrid in varchar2,
v_cursor out tomorrow.p_cursor) as
tj varchar2(500);
tj2 varchar2(100);
tj3 varchar2(100);
sqlstr varchar2(300);
query_postxnjnl_amttotal varchar2(3000);
begin
tj := '';
tj2 := '';
tj3 := '';
sqlstr := '';
--商户号
if (mercid is not null) then
tj := tj || ' AND I.MERCNUM LIKE ' || '''' || '%' || mercid || '%' || '''';
end if;
--商户名称
if (mernam is not null) then
tj := tj || ' AND I.MERNAM LIKE ' || '''' || '%' || mernam || '%' || '''';
end if;
--系统参考号
if (srefno is not null) then
tj := tj || ' AND P.SREFNO LIKE ' || '''' || '%' || srefno || '%' || '''';
end if;
--原系统参考号
if (osrefno is not null) then
tj := tj || ' AND P.TSREFNO LIKE ' || '''' || '%' || osrefno || '%' || '''';
end if;
--交易日期
if (stldt is not null) then
tj := tj || ' AND P.SYSDAT =''' || stldt || '''';
end if;
tj := tj || ' AND P.SYSDAT BETWEEN ''' || stldtstr || ''' AND ''' ||
stldtend || '''';
--交易类型
if (txncd is not null) then
tj := tj || ' AND P.TXNCD =''' || txncd || '''';
end if;
--交易状态
if (txnsts is not null) then
tj := tj || ' AND P.TXNSTS =''' || txnsts || '''';
end if;
--合作机构
if (agtorg is not null) then
tj := tj || ' AND P.AGTORG =''' || agtorg || '''';
end if;
--交易金额起
if (txnamtstr is not null) then
tj := tj || ' AND TO_NUMBER(P.TXNAMT)>=TO_NUMBER(''' || txnamtstr || '''' ||
')*100';
end if;
--交易金额终
if (txnamtend is not null) then
tj := tj || ' AND TO_NUMBER(P.TXNAMT)<=TO_NUMBER(''' || txnamtend || '''' ||
')*100';
end if;
--原交易流水号和交易流水号
if ((logno is null) and (ologno is not null)) then
sqlstr := sqlstr || ' AND (P.LOGNO LIKE ' || '''' || '%' || ologno || '%' || '''' ||
'OR P.OLOGNO LIKE ' || '''' || '%' || ologno || '%' ||
''')';
end if;
if ((logno is not null) and (ologno is null)) then
sqlstr := sqlstr || ' AND P.LOGNO LIKE ' || '''' || '%' || logno || '%' || '''';
end if;
if ((logno is not null) and (ologno is not null)) then
sqlstr := sqlstr || ' AND P.LOGNO LIKE ' || '''' || '%' || logno || '%' || '''' ||
'AND P.OLOGNO LIKE ' || '''' || '%' || ologno || '%' || '''';
end if;
--终端号
if (termid is not null) then
sqlstr := sqlstr || ' AND P.TERMID LIKE ' || '''' || '%' || termid || '%' || '''';
end if;
--判断不同角色登录查询历史交易明细
if (flag = '2') then
--商户角色
if (mercid_oper is not null) then
tj := tj || ' AND I.MERCNUM LIKE ' || '''' || '%' || mercid_oper || '%' || '''';
end if;
end if;
if (flag = '3') then
--办事处角色
if (agentid is not null) then
tj2 := tj2 || ' WHERE MI.AGENTID=''' || agentid || '''';
tj3 := tj3 || ' WHERE MD.AGENTID=''' || agentid || '''';
end if;
end if;
if (flag = '1') then
--业务员角色 通过办事处编号和当前操作员id查找
if (tlrid is not null) then
tj2 := tj2 || ' WHERE MI.OPERID =''' || tlrid ||
''' OR MI.AGENTID IN (SELECT AGENTID FROM POSAGTINF WHERE TLRID=''' ||
tlrid || ''')';
tj3 := tj3 || ' WHERE MD.OPERID=''' || tlrid ||
''' OR MD.AGENTID IN (SELECT AGENTID FROM POSAGTINF WHERE TLRID=''' ||
tlrid || ''')';
end if;
end if;
--查询历史交易明细sql
query_postxnjnl_amttotal := 'SELECT ( SUM (xftxnamt) + SUM (ysqwctxnamt) - SUM (thtxnamt))
AS sumtoal FROM ( SELECT TXNCD, SUM (DECODE (TRIM (TXNCD), 0200000000, TXNAMT, 0))AS XFTXNAMT,
SUM (DECODE (TRIM (TXNCD),0200200000, TXNAMT, 0))AS XFCXTXNAMT,SUM (DECODE (TRIM (TXNCD),0220200000, TXNAMT, 0))AS thtxnamt,
SUM (DECODE (TRIM (TXNCD),0200010000, TXNAMT, 0))AS YSQWCTXNAMT,SUM (DECODE (TRIM (TXNCD), 0200210000, TXNAMT, 0))AS YSQCXTXNAMT
FROM (SELECT TXNCD, SUM (TXNAMT) AS TXNAMT FROM POSTXNJNLHIS P INNER JOIN
(SELECT TRIM(MI.MERNAM) MERNAM,TRIM(MI.MERCID) MERCID,TRIM(MI.MERCNUM) MERCNUM FROM POSMERCINF MI ' || tj2 || ' UNION
SELECT DISTINCT TRIM(MD.MERNAM) MERNAM,TRIM(MD.MERCID) MERCID,TRIM(MD.MERCNUM) MERCNUM FROM POSMERCINFMOD MD ' || tj3 || '
)I ON P.MERCID=I.MERCID INNER JOIN POSTERMINF T ON P.TERMID=T.TERMID LEFT JOIN POSBRAINF B ON TRIM(T.BRAID)=(B.BRAID)
WHERE P.TXNSTS = ''S'' ' || sqlstr || ' ' || tj ||
' GROUP BY TXNCD, txnsts ) GROUP BY TXNCD)';
open v_cursor for query_postxnjnl_amttotal;
Exception
when others then
dbms_output.put_line('数据库出现异常!');
raise;
end query_postxnjnl_his_amttotal;
end;