创建账务变动函数
来源:互联网 发布:皇甫圣华淘宝店号 编辑:程序博客网 时间:2024/04/28 01:39
CREATE OR REPLACE FUNCTION FUN_ACCOUNT_CHANGE( HeadObject IN EBSHEADOBJECT,
InAccountNo IN PUB_ACCOUNT_INFO.ACCOUNTNO%TYPE,
InAccountType IN PUB_ACCOUNT_INFO.ACCOUNTTYPE%TYPE,
InOpMoney IN NUMBER,
InOpProfit IN NUMBER,
InFlag IN VARCHAR) RETURN VARCHAR2
IS
DbAccountFlag PUB_ACCOUNT_INFO.ACCOUNTFLAG%TYPE;
DbState PUB_ACCOUNT_INFO.STATE%TYPE;
DbCredit PUB_ACCOUNT_INFO.CREDIT%TYPE;
DbCreditHLD PUB_ACCOUNT_INFO.CREDITHLD%TYPE;
DbProfit PUB_ACCOUNT_INFO.PROFIT%TYPE;
DbMacChk PUB_ACCOUNT_INFO.MACCHK%TYPE;
DbThresHold PUB_ACCOUNT_INFO.THRESHOLD%TYPE;
DbLeastCredit PUB_ACCOUNT_INFO.LEASTCREDIT%TYPE;
DbCredit0 PUB_ACCOUNT_INFO.CREDIT%TYPE;
DbProfit0 PUB_ACCOUNT_INFO.PROFIT%TYPE;
vCredit PUB_ACCOUNT_INFO.CREDIT%TYPE;
vProfit PUB_ACCOUNT_INFO.PROFIT%TYPE;
DbConnectPhone PUB_ACCOUNT_INFO.CONNECTPHONE%TYPE;
vMacChk VARCHAR2(128);
---212001 212002 214001 214003 214005 会导致lasttime时间的更新,该项的更新原则是仅记录由代理商主动发起的交易,佣金处理不做时间点更新.
BEGIN
--根据ACCOUNTTYPE ACCOUNTNO 获取账号信息
BEGIN
SELECT ACCOUNTFLAG,STATE,CREDIT,PROFIT,CREDITHLD,MACCHK,THRESHOLD,LEASTCREDIT ,CONNECTPHONE
INTO DbAccountFlag,DbState,DbCredit,DbProfit,DbCreditHld,DbMacChk,DbThresHold,DbLeastCredit,DbConnectPhone
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=INACCOUNTTYPE;
EXCEPTION
--账户不存在
WHEN NO_DATA_FOUND THEN
RETURN '31000002';
WHEN OTHERS THEN
RETURN '90000001';
END;
IF DbState != 0 THEN
--账务状态不正常,修改错误代码
RETURN '31000003';
END IF;
--校验MAC
SELECT RAWTOHEX(EBS_MD5(LPAD(DbCredit,16,'0')||LPAD(DbProfit,16,'0'))) INTO vMacChk FROM DUAL;
IF vMacChk != DbMacChk THEN
--账务非法变动,修改错误代码
RETURN '31000004';
END IF;
--如果使用本金账户,则重新获取账户信息
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
BEGIN
SELECT STATE,CREDIT,PROFIT,DbCreditHld,MACCHK,THRESHOLD,LEASTCREDIT ,CONNECTPHONE
INTO DbState,DbCredit,DbProfit0,DbCreditHld,DbMacChk,DbThresHold,DbLeastCredit,DbConnectPhone
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
EXCEPTION
--账户不存在
WHEN NO_DATA_FOUND THEN
RETURN '31000002';
WHEN OTHERS THEN
RETURN '90000001';
END ;
IF DbState != 0 THEN
--账务状态不正常,修改错误代码
RETURN '31000003';
END IF;
--校验MAC
SELECT RAWTOHEX(EBS_MD5(LPAD(DbCredit,16,'0')||LPAD(DbProfit0,16,'0'))) INTO vMacChk FROM DUAL;
IF vMacChk != DbMacChk THEN
--账务非法变动,修改错误代码
RETURN '31000004';
END IF;
END IF;
--交易类别:
CASE InFlag
WHEN '-' THEN
--账户金额减少,佣金增加(适用于充值业务,佣金金额可以为负)
IF DbCredit < INOPMONEY THEN
--账务金额不足
RETURN '31000001';
END IF;
IF DbCredit -INOPMONEY <DbLeastCredit THEN
--最少金额控制
RETURN '31000001';
END IF;
IF DbCreDit - INOPMONEY <DbThresHold THEN
--告警阀值
INSERT INTO BASE_SENDSMS_LOG(AGTPHONE,CORPID,OPTIME,STATE,OWNER,MESSAGE)
VALUES( DbConnectPhone,SUBSTR(InAccountNo,3,4),sysdate,0,HeadObject.TradeType||HeadObject.TradeCode||HeadObject.StreamId,'保证金余额不足,剩余'||DbCreDit/100||'请及时存款');
END IF;
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT+InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,PROFIT=PROFIT+InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '+' THEN
--账户金额增加,佣金减少(适用于冲正,存款等业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT-InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,PROFIT=PROFIT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '212001' THEN
--账户金额增加,佣金不变(存款等业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,CREDITTOT = CREDITTOT+INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,CREDITTOT = CREDITTOT+INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '212002' THEN
--账户金额减少,佣金不变(存款冲正等业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,CREDITTOT = CREDITTOT-INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,CREDITTOT = CREDITTOT-INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '214001' THEN
--账户金额减少,佣金增加(适用于充值业务,佣金金额可以为负)
IF DbCredit < INOPMONEY THEN
--账务金额不足
RETURN '31000001';
END IF;
IF DbCredit -INOPMONEY <DbLeastCredit THEN
--最少金额控制
RETURN '31000001';
END IF;
IF DbCreDit - INOPMONEY <DbThresHold THEN
--告警阀值
INSERT INTO BASE_SENDSMS_LOG(AGTPHONE,CORPID,OPTIME,STATE,OWNER,MESSAGE)
VALUES( DbConnectPhone,SUBSTR(InAccountNo,3,4),sysdate,0,HeadObject.TradeType||HeadObject.TradeCode||HeadObject.StreamId,'保证金余额不足,剩余'||DbCreDit/100||'请及时存款');
END IF;
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT+InOpProfit,PROFITTOT=PROFITTOT+InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,PROFIT=PROFIT+InOpProfit,PROFITTOT=PROFITTOT+InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN 'C214001' THEN
--账户金额增加,佣金减少(适用于自动冲正交易)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT-InOpProfit,PROFITTOT=PROFITTOT-InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,PROFIT=PROFIT-InOpProfit,PROFITTOT=PROFITTOT-InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '214003' THEN
--账户冻结金额增加,佣金减少(适用于冲正业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDITHLD=CREDITHLD+INOPMONEY ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT-InOpProfit , PROFITTOT=PROFITTOT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDITHLD=CREDITHLD+INOPMONEY,PROFIT=PROFIT-InOpProfit, PROFITTOT=PROFITTOT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '214004' THEN
--账户冻结金额减少, 保证金增加,佣金不变(冻结金额返保证金)
IF DbCreditHld < INOPMONEY THEN
--账务金额不足
RETURN '31000001';
END IF;
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,CREDITHLD=CREDITHLD-INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,CREDITHLD=CREDITHLD-INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '214005' THEN
--账户金额不变,冻结金额减少,佣金增加(适用于冲正取消交易,该交易不校验冻结金额余额)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDITHLD=CREDITHLD-INOPMONEY WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT+InOpProfit,PROFITTOT=PROFITTOT+InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDITHLD=CREDITHLD-INOPMONEY,PROFIT=PROFIT+InOpProfit,PROFITTOT=PROFITTOT+InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '215002' THEN
--佣金转保证金的交易规定所有佣金只能转往基本账户,不能转往明细账户。
--账户佣金金额减少, 保证金增加
IF DbProfit < INOPPROFIT THEN
--账务佣金金额不足
RETURN '31000007';
END IF;
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
--IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
IF (INACCOUNTTYPE !=0) THEN
--明细账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-INOPPROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+INOPMONEY,PROFIT-INOPPROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,PROFIT=PROFIT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT-INOPPROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
RETURN '00000000';
WHEN '215003' THEN
--账户佣金金额增加
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+INOPPROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT+InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+INOPPROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
RETURN '00000000';
WHEN '500300' THEN
--账户金额减少,账户冻结金额增加,佣金减少(适用于金额冻结业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF DbCredit < INOPMONEY THEN
--账务金额不足
RETURN '31000001';
END IF;
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,CREDITHLD=CREDITHLD+INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,CREDITHLD=CREDITHLD+INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN 'H' THEN
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
--记录账户变动流水表
RETURN '99999999';
ELSE
RETURN '99999999';
END CASE;
RETURN '00000000';
InAccountNo IN PUB_ACCOUNT_INFO.ACCOUNTNO%TYPE,
InAccountType IN PUB_ACCOUNT_INFO.ACCOUNTTYPE%TYPE,
InOpMoney IN NUMBER,
InOpProfit IN NUMBER,
InFlag IN VARCHAR) RETURN VARCHAR2
IS
DbAccountFlag PUB_ACCOUNT_INFO.ACCOUNTFLAG%TYPE;
DbState PUB_ACCOUNT_INFO.STATE%TYPE;
DbCredit PUB_ACCOUNT_INFO.CREDIT%TYPE;
DbCreditHLD PUB_ACCOUNT_INFO.CREDITHLD%TYPE;
DbProfit PUB_ACCOUNT_INFO.PROFIT%TYPE;
DbMacChk PUB_ACCOUNT_INFO.MACCHK%TYPE;
DbThresHold PUB_ACCOUNT_INFO.THRESHOLD%TYPE;
DbLeastCredit PUB_ACCOUNT_INFO.LEASTCREDIT%TYPE;
DbCredit0 PUB_ACCOUNT_INFO.CREDIT%TYPE;
DbProfit0 PUB_ACCOUNT_INFO.PROFIT%TYPE;
vCredit PUB_ACCOUNT_INFO.CREDIT%TYPE;
vProfit PUB_ACCOUNT_INFO.PROFIT%TYPE;
DbConnectPhone PUB_ACCOUNT_INFO.CONNECTPHONE%TYPE;
vMacChk VARCHAR2(128);
---212001 212002 214001 214003 214005 会导致lasttime时间的更新,该项的更新原则是仅记录由代理商主动发起的交易,佣金处理不做时间点更新.
BEGIN
--根据ACCOUNTTYPE ACCOUNTNO 获取账号信息
BEGIN
SELECT ACCOUNTFLAG,STATE,CREDIT,PROFIT,CREDITHLD,MACCHK,THRESHOLD,LEASTCREDIT ,CONNECTPHONE
INTO DbAccountFlag,DbState,DbCredit,DbProfit,DbCreditHld,DbMacChk,DbThresHold,DbLeastCredit,DbConnectPhone
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=INACCOUNTTYPE;
EXCEPTION
--账户不存在
WHEN NO_DATA_FOUND THEN
RETURN '31000002';
WHEN OTHERS THEN
RETURN '90000001';
END;
IF DbState != 0 THEN
--账务状态不正常,修改错误代码
RETURN '31000003';
END IF;
--校验MAC
SELECT RAWTOHEX(EBS_MD5(LPAD(DbCredit,16,'0')||LPAD(DbProfit,16,'0'))) INTO vMacChk FROM DUAL;
IF vMacChk != DbMacChk THEN
--账务非法变动,修改错误代码
RETURN '31000004';
END IF;
--如果使用本金账户,则重新获取账户信息
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
BEGIN
SELECT STATE,CREDIT,PROFIT,DbCreditHld,MACCHK,THRESHOLD,LEASTCREDIT ,CONNECTPHONE
INTO DbState,DbCredit,DbProfit0,DbCreditHld,DbMacChk,DbThresHold,DbLeastCredit,DbConnectPhone
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
EXCEPTION
--账户不存在
WHEN NO_DATA_FOUND THEN
RETURN '31000002';
WHEN OTHERS THEN
RETURN '90000001';
END ;
IF DbState != 0 THEN
--账务状态不正常,修改错误代码
RETURN '31000003';
END IF;
--校验MAC
SELECT RAWTOHEX(EBS_MD5(LPAD(DbCredit,16,'0')||LPAD(DbProfit0,16,'0'))) INTO vMacChk FROM DUAL;
IF vMacChk != DbMacChk THEN
--账务非法变动,修改错误代码
RETURN '31000004';
END IF;
END IF;
--交易类别:
CASE InFlag
WHEN '-' THEN
--账户金额减少,佣金增加(适用于充值业务,佣金金额可以为负)
IF DbCredit < INOPMONEY THEN
--账务金额不足
RETURN '31000001';
END IF;
IF DbCredit -INOPMONEY <DbLeastCredit THEN
--最少金额控制
RETURN '31000001';
END IF;
IF DbCreDit - INOPMONEY <DbThresHold THEN
--告警阀值
INSERT INTO BASE_SENDSMS_LOG(AGTPHONE,CORPID,OPTIME,STATE,OWNER,MESSAGE)
VALUES( DbConnectPhone,SUBSTR(InAccountNo,3,4),sysdate,0,HeadObject.TradeType||HeadObject.TradeCode||HeadObject.StreamId,'保证金余额不足,剩余'||DbCreDit/100||'请及时存款');
END IF;
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT+InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,PROFIT=PROFIT+InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '+' THEN
--账户金额增加,佣金减少(适用于冲正,存款等业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT-InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,PROFIT=PROFIT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '212001' THEN
--账户金额增加,佣金不变(存款等业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,CREDITTOT = CREDITTOT+INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,CREDITTOT = CREDITTOT+INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '212002' THEN
--账户金额减少,佣金不变(存款冲正等业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,CREDITTOT = CREDITTOT-INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,CREDITTOT = CREDITTOT-INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '214001' THEN
--账户金额减少,佣金增加(适用于充值业务,佣金金额可以为负)
IF DbCredit < INOPMONEY THEN
--账务金额不足
RETURN '31000001';
END IF;
IF DbCredit -INOPMONEY <DbLeastCredit THEN
--最少金额控制
RETURN '31000001';
END IF;
IF DbCreDit - INOPMONEY <DbThresHold THEN
--告警阀值
INSERT INTO BASE_SENDSMS_LOG(AGTPHONE,CORPID,OPTIME,STATE,OWNER,MESSAGE)
VALUES( DbConnectPhone,SUBSTR(InAccountNo,3,4),sysdate,0,HeadObject.TradeType||HeadObject.TradeCode||HeadObject.StreamId,'保证金余额不足,剩余'||DbCreDit/100||'请及时存款');
END IF;
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))),LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT+InOpProfit,PROFITTOT=PROFITTOT+InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,PROFIT=PROFIT+InOpProfit,PROFITTOT=PROFITTOT+InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN 'C214001' THEN
--账户金额增加,佣金减少(适用于自动冲正交易)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT-InOpProfit,PROFITTOT=PROFITTOT-InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,PROFIT=PROFIT-InOpProfit,PROFITTOT=PROFITTOT-InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '214003' THEN
--账户冻结金额增加,佣金减少(适用于冲正业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDITHLD=CREDITHLD+INOPMONEY ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT-InOpProfit , PROFITTOT=PROFITTOT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDITHLD=CREDITHLD+INOPMONEY,PROFIT=PROFIT-InOpProfit, PROFITTOT=PROFITTOT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '214004' THEN
--账户冻结金额减少, 保证金增加,佣金不变(冻结金额返保证金)
IF DbCreditHld < INOPMONEY THEN
--账务金额不足
RETURN '31000001';
END IF;
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,CREDITHLD=CREDITHLD-INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,CREDITHLD=CREDITHLD-INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '214005' THEN
--账户金额不变,冻结金额减少,佣金增加(适用于冲正取消交易,该交易不校验冻结金额余额)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDITHLD=CREDITHLD-INOPMONEY WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
IF INOPPROFIT !=0 THEN
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT+InOpProfit,PROFITTOT=PROFITTOT+InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+InOpProfit,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDITHLD=CREDITHLD-INOPMONEY,PROFIT=PROFIT+InOpProfit,PROFITTOT=PROFITTOT+InOpProfit ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+InOpProfit,16,'0'))) ,LASTTIME=sysdate WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN '215002' THEN
--佣金转保证金的交易规定所有佣金只能转往基本账户,不能转往明细账户。
--账户佣金金额减少, 保证金增加
IF DbProfit < INOPPROFIT THEN
--账务佣金金额不足
RETURN '31000007';
END IF;
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
--IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
IF (INACCOUNTTYPE !=0) THEN
--明细账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT-INOPPROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT-InOpProfit,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT+INOPMONEY,PROFIT-INOPPROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT+INOPMONEY,PROFIT=PROFIT-InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT+INOPMONEY,16,'0')||LPAD(PROFIT-INOPPROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
RETURN '00000000';
WHEN '215003' THEN
--账户佣金金额增加
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT,PROFIT+INOPPROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET PROFIT=PROFIT+InOpProfit,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT,16,'0')||LPAD(PROFIT+INOPPROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
RETURN '00000000';
WHEN '500300' THEN
--账户金额减少,账户冻结金额增加,佣金减少(适用于金额冻结业务)
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
IF DbCredit < INOPMONEY THEN
--账务金额不足
RETURN '31000001';
END IF;
IF (INACCOUNTTYPE !=0) AND (DbAccountFlag !=0 )THEN
--挂机账户
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,0,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=0;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,CREDITHLD=CREDITHLD+INOPMONEY ,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=0;
ELSE
INSERT INTO PUB_ACCOUNT_LOG (STREAMID,ACCOUNTNO,ACCOUNTTYPE,OPTIME,OLDCREDIT,OLDPROFIT,OPMONEY,NEWCREDIT,NEWPROFIT,TRADETYPE,TRADECODE,CHNLTYPE,DEPTNO,OPERNO)
SELECT HeadObject.StreamId,InAccountNo,InAccountType,sysdate,CREDIT,PROFIT,InOpMoney,CREDIT-InOpMoney,PROFIT,HeadObject.TradeType,HeadObject.TradeCode,HeadObject.ChnlType,HeadObject.DeptNo,HeadObject.OperNo
FROM PUB_ACCOUNT_INFO
WHERE ACCOUNTNO=InAccountNo AND ACCOUNTTYPE=InAccountType;
UPDATE PUB_ACCOUNT_INFO SET CREDIT=CREDIT-INOPMONEY,CREDITHLD=CREDITHLD+INOPMONEY,MACCHK=RAWTOHEX(EBS_MD5(LPAD(CREDIT-INOPMONEY,16,'0')||LPAD(PROFIT,16,'0'))) WHERE ACCOUNTNO=INACCOUNTNO AND ACCOUNTTYPE=InAccountType;
END IF;
--记录账户变动流水表
RETURN '00000000';
WHEN 'H' THEN
--更新账户,更新佣金(如果使用本金账户,则两个账户都需要更新,佣金记录在明细账户中)
--记录账户变动流水表
RETURN '99999999';
ELSE
RETURN '99999999';
END CASE;
RETURN '00000000';
END;
**********本博客所有内容均为原创,如有转载请注明作者和出处!!!**********
Name: guoyJoe
QQ: 252803295
Email: oracledba_cn@hotmail.com
Blog: http://blog.csdn.net/guoyJoe
ITPUB: http://www.itpub.net/space-uid-28460966.html
OCM: http://education.oracle.com/education/otn/YGuo.HTM
_____________________________________________________________
加群验证问题:哪些SGA结构是必需的,哪些是可选的?否则拒绝申请!!!
答案在:http://blog.csdn.net/guoyjoe/article/details/8624392
Oracle@Paradise 总群:127149411
Oracle@Paradise No.1群:177089463(已满)
Oracle@Paradise No.2群:121341761
Oracle@Paradise No.3群:140856036
- 创建账务变动函数
- IUFO中的账务函数
- 创建账务账户表(Account)
- perl 包函数变动 需要重新打包
- 账务管理
- JS操作select下拉框动态变动(创建/删除/获取)
- DB 8升级到9 部分函数变动(Left Substr)
- oepngl绘制变动的多边形之glRotatef函数的利用
- 记录一下tf里面函数的细节变动
- 账务处理规则
- 工业企业财务账务处理
- 账务账号的开通
- 账务账号的暂停
- 账务账号的删除
- 账务账号的新增
- 账务账号的修改
- 核心系统账务基本知识
- AM账务处理
- Leveldb 实现原理
- UVa 340 - Master-Mind Hints
- 初识Vocaloid3
- 创建一个函数打印出表空间的大小
- Java--------面向对象
- 创建账务变动函数
- 实验四 节点与基站的通信
- Java:Unicode简介
- 创建自治事务
- 谈谈离职和跳槽
- 更好一个版本的翻译
- Unicode accent String 比较问题
- 从string中将UTF-8编码解码成Unicode code point
- JAVA list如何remove