MyBatis stored procedure calls java

<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;






















Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=326664140&siteId=291194637