`
tangkuo
  • 浏览: 100489 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

MyBatis存储过程调用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,--商家号
                                        V_PAYCLASSID       IN NUMBER,--支付类型
                                        V_AMOUNT         IN NUMBER,--交易金额
                                        V_BANKCHAR       IN NUMBER,--bank手续费 
                                        V_DINPAYCHARGE   OUT NUMBER,--dinpay手续费
                                        V_ONEPROXYCHARGE OUT NUMBER,--一级手续费
                                        V_TWOPROXYCHARGE OUT NUMBER,--二级手续费
                                        V_THREEPROXYCHARGE OUT NUMBER,-- 三级手续费
                                        V_RISKCHARGE     OUT NUMBER, --风险保证金
                                        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); --是否计算分润(不等于0时计算)
    V_PROXY2_RETURN_RATE NUMBER(6,4):=0;
    V_PROXY3_RETURN_RATE NUMBER(6,4):=0;
 
  BEGIN
  
  -- 1.根据支付类型与商家号查询商家业务配置参数(手续费计算方式,费率,风险保证金收取方式,风险保证金值 )
  --并计算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;
    --查询是否需要计算分润
    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 --已过免手续费期 
     BEGIN
        IF V_CHARGETYPE = '2' THEN --2表示固定费率 代理商收费方式根据商家收费方式来定
        BEGIN
          -- 计算三级手续费  总手续费-总交易额*3级固定费率
          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;
          -- 计算二级手续费   总手续费-总交易额*2级固定费率-3级代理手续费;
          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;
          -- 计算一级手续费 1级代理手续费=总手续费-总交易额*1级固定费率 - 2级代理手续费-3级代理手续费;
          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 -- 当商家为返点或者 按笔收时   代理商按返点算法来计算手续费
      BEGIN
        -- 计算三级手续费  3级代理手续费=总手续费*3级返利点;
        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;
        -- 计算二级手续费   2级代理手续费=总手续费*(2级返利点-3级返利点)
        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;
        -- 计算一级手续费 1级代理手续费=总手续费*(1级返利点-2级返利点)
        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;
        
    END;
    ELSIF SYSDATE>=V_CHARGE_DATE AND V_COUNT<=0  THEN --代理商不参与分润
      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;






















分享到:
评论

相关推荐

    springboot mybatis 动态调用oracle存储过程,通过存储过程名称,就能动态调用存储过程、java动态调用or

    能不能写个动态的业务,只输入存储过程名称,自动获取存储过程参数,并且参数的数据从前台传递过来...只根据输入不同的存储过程名称、参数内容,自动调用不同的存储过程。 已经使用在多个项目中 全开源项目 请放心下载

    mybatis调用存储过程

    MyBatis作为一款流行的Java持久层框架,它提供了调用存储过程的功能,使得开发者能够方便地在Java应用中利用数据库的存储过程。下面将详细介绍如何在MyBatis中调用存储过程以及相关的知识点。 1. MyBatis概述 ...

    MyBatis调用存储过程

    MyBatis作为一款流行的Java持久层框架,提供了调用存储过程的功能。下面将详细介绍如何在MyBatis中配置和使用存储过程。 ### 1. 配置MyBatis XML映射文件 在MyBatis的映射文件(mapper.xml)中,我们需要为存储...

    mybatis调用存储过程源码

    这个提供的"mybatis调用存储过程源码"压缩包,包含了一个完整的MyBatis调用存储过程的示例,解压后可以直接运行,帮助开发者理解如何在实际项目中实现这一功能。详细注释可以帮助初学者更好地理解和学习这一过程。...

    springboot整合mybatis调用oracle存储过程

    本文将深入探讨如何在Spring Boot项目中整合MyBatis,实现调用Oracle存储过程并处理游标返回的数据。 首先,我们需要在Spring Boot项目中引入相关的依赖。在`pom.xml`文件中添加Oracle JDBC驱动(ojdbc66-oracle...

    MyBatis调用MYSQL存储过程

    MyBatis调用MYSQL存储过程 返回多行 引用的包: asm-3.1.jar cglib-2.2.jar commons-logging-1.1.1.jar log4j-1.2.13.jar mybatis-3.0.4.jar mysql-connector-java-5.1.13.jar slf4j-api-1.5.8.jar slf4j-log4j12-...

    mybatis调用orclae存储过程

    MyBatis作为一款流行的Java持久层框架,提供了一种方便的方式来调用这些存储过程。下面将详细介绍如何使用MyBatis来调用Oracle存储过程。 ### 1. 创建Oracle存储过程 首先,我们需要在Oracle数据库中创建一个存储...

    spring mybatis 调用oracle存储过程

    本文将深入探讨如何在Spring和MyBatis集成环境中调用Oracle数据库的存储过程,包括无返回值、返回结果集以及返回多个结果的情况。 首先,让我们理解基础概念。Spring是一个全面的后端开发框架,它提供了依赖注入、...

    spring mvc + mybatis 调用mysql 存储过程

    本文将详细讲解如何在Spring MVC和MyBatis集成的项目中调用MySQL存储过程。 首先,让我们理解存储过程的概念。存储过程是在数据库中预编译的一组SQL语句,可以包含输入、输出和内部参数,能够执行复杂的业务逻辑。...

    JAVA通过MyBatis调用MySql存储过程和函数doc文档合集整理.zip

    本合集主要探讨如何在Java中利用MyBatis来调用MySQL的存储过程和函数。 1. **存储过程和函数的基本概念** - 存储过程:是一组预先编译的SQL语句,可以包含输入、输出参数,能够执行复杂的数据库操作。 - 函数:与...

    mybatis调用mysql存储过程

    本篇将详细阐述如何使用MyBatis调用MySQL中的存储过程,帮助你深入理解这一核心技能。 首先,我们需要了解存储过程的基本概念。存储过程是预编译的SQL语句集合,它封装了多个操作,可以在数据库服务器上执行,提高...

    Java调用存储过程--传入集合参数

    ### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...

    Mybatis调用Oracle存储过程的方法图文详解

    本文详细介绍了Mybatis调用Oracle存储过程的方法,包括无参数存储过程的调用,有参数存储过程的调用,和存储过程的结果集调用。这些方法可以帮助开发者更好地使用Mybatis和Oracle存储过程来实现复杂的业务逻辑操作。

    Mybatis调用MySQL存储过程的简单实现

    MyBatis作为一款流行的Java持久层框架,提供了调用数据库存储过程的功能。本文将详细介绍如何使用MyBatis调用MySQL存储过程,以及存储过程的相关概念、优缺点和基本语法。 首先,存储过程是数据库中预编译的一组SQL...

    Mybatis传list参数调用oracle存储过程的解决方法

    "Mybatis调用Oracle存储过程传List参数解决方法" Mybatis是当前最流行的持久层框架之一,它提供了强大的数据访问和操作功能。但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,...

    ibatis调用oracle存储过程分页

    ibatis调用oracle存储过程分页

    Mybatis调用PostgreSQL存储过程实现数组入参传递

    在本文中,我们将探讨如何在Mybatis框架中调用PostgreSQL的存储过程,特别是处理 PostgreSQL 的数组类型作为存储过程的输入参数。Mybatis是一个流行的Java持久层框架,它允许开发者编写SQL语句,并与Java对象进行...

    mybatis调用储存过程

    在调用存储过程时,我们需要利用MyBatis提供的API和配置机制来实现。 1. **配置MyBatis**:在`mybatis-config.xml`配置文件中,你需要添加数据库连接信息,例如数据源、驱动类等。同时,也需要将你的Mapper接口文件...

Global site tag (gtag.js) - Google Analytics