<parameterMap class="java.util.Map" id="countChargeMap">
<parameter property="merchantId" jdbcType="VARCHAR" javaType="java.lang.String" mode="IN"/>
<parameter property="payClassId" jdbcType="INTEGER" javaType="java.lang.Integer" mode="IN"/>
<parameter property="amount" jdbcType="DECIMAL" javaType="java.math.BigDecimal" mode="IN"/>
<parameter property="bankCharges" jdbcType="DECIMAL" javaType="java.math.BigDecimal" mode="IN"/>
<parameter property="dinpayCharge" jdbcType="DECIMAL" javaType="java.math.BigDecimal" mode="INOUT"/>
<parameter property="oneProxyCharge" jdbcType="DECIMAL" javaType="java.math.BigDecimal" mode="INOUT"/>
<parameter property="twoProxyCharge" jdbcType="DECIMAL" javaType="java.math.BigDecimal" mode="INOUT"/>
<parameter property="threeProxyCharge" jdbcType="DECIMAL" javaType="java.math.BigDecimal" mode="INOUT"/>
<parameter property="riskCharge" jdbcType="DECIMAL" javaType="java.math.BigDecimal" mode="INOUT"/>
<parameter property="proxy1Id" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
<parameter property="proxy2Id" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
<parameter property="proxy3Id" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
</parameterMap>
<procedure id="callCharge"parameterMap="countChargeMap">
<![CDATA[
{call COUNTCHARGENOPROXY(?,?,?,?,?,?,?,?,?,?,?,?) }
]]>
</procedure>
CREATE OR REPLACE PROCEDURE COUNTCHARGENOPROXY(V_MERCHANTID IN VARCHAR2,--merchant ID
V_PAYCLASSID IN NUMBER,--payment type
V_AMOUNT IN NUMBER,--transaction amount
V_BANKCHAR IN NUMBER,--bank fee
V_DINPAYCHARGE OUT NUMBER,--dinpay fee
V_ONEPROXYCHARGE OUT NUMBER,--Level 1 handling fee
V_TWOPROXYCHARGE OUT NUMBER,-- Level 2 handling fee
V_THREEPROXYCHARGE OUT NUMBER,-- Level 3 handling fee
V_RISKCHARGE OUT NUMBER, -- Risk margin
V_ONEPROXYID OUT VARCHAR2,
V_TWOPROXYID OUT VARCHAR2,
V_THREEPROXYID OUT VARCHAR2)
AS
BEGIN
DECLARE
V_CHARGE_DATE DATE;
V_CHARGETYPE VARCHAR2(2);
V_COUNT NUMBER(1,0); --Whether to calculate profit (calculated when not equal to 0)
V_PROXY2_RETURN_RATE NUMBER(6, 4):=0;
V_PROXY3_RETURN_RATE NUMBER(6,4):=0;
BEGIN
-- 1. According to the payment type and merchant number, query the merchant's business configuration parameters (fee calculation method, rate, risk margin collection method, risk margin value )
-- and calculate the total handling fee and risk margin of dinpay
SELECT CHARGE_DATE,
CASE
WHEN CHARGE_TYPE='1' THEN CHARGE_VALUE
WHEN CHARGE_TYPE='0' OR CHARGE_TYPE='2' THEN CHARGE_VALUE * V_AMOUNT
WHEN CHARGE_TYPE='3' THEN (CHARGE_VALUE * V_AMOUNT)-V_BANKCHAR
END,
CASE
WHEN DEPOSIT_TYPE='0' THEN 0
WHEN CHARGE_TYPE='0' OR CHARGE_TYPE='2' OR CHARGE_TYPE='3' THEN V_AMOUNT*(1-CHARGE_VALUE)*DEPOSIT_VALUE
WHEN CHARGE_TYPE='1' THEN (V_AMOUNT-CHARGE_VALUE)*DEPOSIT_VALUE
END,
CHARGE_TYPE
INTO V_CHARGE_DATE,V_DINPAYCHARGE,V_RISKCHARGE,V_CHARGETYPE
FROM T_MERCHANT_PAYCLASS_CONFIG WHERE MERCHANT_ID=V_MERCHANTID AND PAYCLASS_ID=V_PAYCLASSID;
--查询三级代理商ID
SELECT PROXY_ID INTO V_THREEPROXYID FROM T_MERCHANT WHERE ID=V_MERCHANTID; --Query
whether to calculate profit
SELECT COUNT(*) INTO V_COUNT FROM T_PROXY_PAYCLASS_CONFIG WHERE PROXY_ID=V_THREEPROXYID AND PAYCLASS_ID=V_PAYCLASSID;
IF SYSDATE>=V_CHARGE_DATE AND V_COUNT>0 THEN --Yes Excessive fee waiver period
BEGIN IF V_CHARGETYPE
= '2' THEN --2 means the fixed rate agent's charging method is determined according to the merchant's charging method rate SELECT V_DINPAYCHARGE-TP.RETURN_FIXED*V_AMOUNT,T.PARENT_ID INTO V_THREEPROXYCHARGE,V_TWOPROXYID FROM T_PROXY_PAYCLASS_CONFIG TP,T_PROXY T WHERE TP.PROXY_ID=T.ID AND TP.PROXY_ID=V_THREEPROXYID AND TP.PAYCLASS_ID=V_PAYCLASSID;
-- Calculate Level 2 handling fee Total handling fee - total transaction amount * Level 2 fixed rate - Level 3 agency handling fee;
SELECT V_DINPAYCHARGE-TP.RETURN_FIXED*V_AMOUNT-V_THREEPROXYCHARGE,T.PARENT_ID
INTO V_TWOPROXYCHARGE,V_ONEPROXYID
FROM T_PROXY_PAYCLASS_CONFIG TP,T_PROXY T WHERE T.ID=TP.PROXY_ID AND TP.PROXY_ID=V_TWOPROXYID AND TP.PAYCLASS_ID=V_PAYCLASSID;
-- Calculate level 1 handling fee 1 level agency handling fee = total handling fee - total transaction amount * level 1 fixed rate - 2 Level Proxy Fee - Level 3 Proxy Fee;
SELECT V_DINPAYCHARGE-TP.RETURN_FIXED*V_AMOUNT-V_THREEPROXYCHARGE-V_TWOPROXYCHARGE
INTO V_ONEPROXYCHARGE
FROM T_PROXY_PAYCLASS_CONFIG TP,T_PROXY T WHERE T.ID=TP.PROXY_ID AND TP.PROXY_ID=V_ONEPROXYID AND TP.PAYCLASS_ID= V_PAYCLASSID;
END;
ELSIF V_CHARGETYPE='0' OR V_CHARGETYPE='1' OR V_CHARGETYPE='3' THEN -- When the merchant is a rebate or pays by pen, the agent calculates the handling fee according to the rebate algorithm
BEGIN
-- Calculates the third-level handling fee for the third-level agent Handling fee=Total handling fee*3 level rebate points;
SELECT V_DINPAYCHARGE*TP.RETURN_RATE,TP.RETURN_RATE,T.PARENT_ID
INTO V_THREEPROXYCHARGE,V_PROXY3_RETURN_RATE,V_TWOPROXYID
FROM T_PROXY_PAYCLASS_CONFIG TP,T_PROXY T
WHERE TP.PROXY_ID=T.ID AND TP.PROXY_ID =V_THREEPROXYID AND TP.PAYCLASS_ID=V_PAYCLASSID;
-- Calculate Level 2 handling fee Level 2 agency handling fee = total handling fee * (Level 2 rebate point - Level 3 rebate point)
SELECT V_DINPAYCHARGE*(TP.RETURN_RATE-V_PROXY3_RETURN_RATE),TP. RETURN_RATE,T.PARENT_ID
INTO V_TWOPROXYCHARGE,V_PROXY2_RETURN_RATE,V_ONEPROXYID
FROM T_PROXY_PAYCLASS_CONFIG TP,T_PROXY T WHERE T.ID=TP.PROXY_ID AND TP.PROXY_ID=V_TWOPROXYID AND TP.PAYCLASS_ID=V_PAYCLASSID;
-- Calculate level 1 handling fee Level 1 agency handling fee = total handling fee * (Level 1 rebate point- 2 level rebate points)
SELECT V_DINPAYCHARGE*(TP.RETURN_RATE-V_PROXY2_RETURN_RATE)
INTO V_ONEPROXYCHARGE
FROM T_PROXY_PAYCLASS_CONFIG TP,T_PROXY T WHERE T.ID=TP.PROXY_ID AND TP.PROXY_ID=V_ONEPROXYID AND TP.PAYCLASS_ID=V_PAYCLASSID;
END; END
IF;
;
ELSIF SYSDATE>=V_CHARGE_DATE AND V_COUNT<=0 THEN --Agents do not participate in profit sharing
BEGIN
SELECT PARENT_ID INTO V_TWOPROXYID FROM T_PROXY WHERE ID=V_THREEPROXYID AND PROXY_LEVEL=3;
SELECT PARENT_ID INTO V_ONEPROXYID FROM T_PROXY WHERE ID=V_TWOPROXYID AND PROXY_LEVEL=2;
V_ONEPROXYCHARGE := 0;
V_TWOPROXYCHARGE := 0;
V_THREEPROXYCHARGE := 0;
END;
ELSE
BEGIN
SELECT PARENT_ID INTO V_TWOPROXYID FROM T_PROXY WHERE ID=V_THREEPROXYID AND PROXY_LEVEL=3;
SELECT PARENT_ID INTO V_ONEPROXYID FROM T_PROXY WHERE ID=V_TWOPROXYID AND PROXY_LEVEL=2;
V_DINPAYCHARGE := 0;
V_ONEPROXYCHARGE := 0;
V_TWOPROXYCHARGE := 0;
V_THREEPROXYCHARGE := 0;
END;
END IF;
END;
END;
MyBatis stored procedure calls java
Guess you like
Origin http://10.200.1.11:23101/article/api/json?id=326664140&siteId=291194637
Ranking