set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER PROCEDURE [dbo].[SP_TMS_AUTO_BILLING] (
@V_TMS_ORDER_ID VARCHAR (32), --订单主ID
@V_RETUREN_VALUE VARCHAR (20) output --状态返回
)
AS
/***********************************************************************
** Stored Procedure Documentation
** Stored Procedure Name: SP_TMS_AUTO_BILLING
** Creation Date: 2010-3-1
** Author:
** Program ID:
** Input Parameters:
** Output Parameters:
** Return Status Values:
** Usage:
** Local Variables:
** Called By:
** Calls:
** Data Modifications:
** Updates:
************************************************************************/
BEGIN
DECLARE @V_OPERATION_ITEM VARCHAR (30) ----订单上的费用协议操作项目
DECLARE @V_SERVICE_TYPE VARCHAR (50) ----订单上的服务类型
DECLARE @V_CUSTOMER_CONTRACT VARCHAR(30) ----订单上的费用协议号
DECLARE @V_SERVICE_LEVEL VARCHAR(30) ----订单上的服务时限
DECLARE @V_CHARGE_UNIT VARCHAR(20) ----订单上的计件单位
DECLARE @V_CARGO_TYPE VARCHAR(50) ----订单上的货物类型
DECLARE @V_ESTIMATED_CARGO_PACKAGES NUMERIC ---订单上的货物件数
DECLARE @V_ESTIMATED_CARGO_WEIGHT NUMERIC ---订单上的货物重量
DECLARE @V_ESTIMATED_CARGO_CUBE NUMERIC ---订单上的货物体积
DECLARE @V_BILLING_OFFICE VARCHAR(50) ---订单上的结算公司
DECLARE @V_HOME_CURRENCY VARCHAR(3) ---结算公司本位币
DECLARE @V_CHARGE_CODE VARCHAR(20) ---客户计费协议费用项目中的费用代码
DECLARE @V_CHARGE_ITEM_NAME VARCHAR(50) ---客户计费协议费用项目中的费用名称
DECLARE @V_RATES_NUMBER VARCHAR(20) ---客户计费协议费用项目中的费率号
DECLARE @V_FRT_NAME_EN VARCHAR(50) ---费用英文名称
DECLARE @V_CUST_OPERATION_ITEM_ID VARCHAR(50) ----操作项的ID
DECLARE @V_CUST_CONTRACT_ID VARCHAR(50) ---计费协议ID
DECLARE @V_CRM_CUST_ID VARCHAR(50) ---客户ID
DECLARE @V_CHARGE_QUANTITY NUMERIC ----结算总量
DECLARE @V_UNIT_PRICE NUMERIC ----费用单价
DECLARE @V_CHARGE_CURRENCY VARCHAR(20) ----费用币别
DECLARE @V_CUST_CODE VARCHAR(50) ----客户代码
DECLARE @V_EXCHANGE_RATE NUMERIC ----汇率
DECLARE @V_CUST_INNER_OUTER VARCHAR(50) ----对内或者对外
DECLARE @V_MIN_RATES NUMERIC ----计费协议里面的最低起运价
DECLARE @V_AMOUNT NUMERIC ----费用表里面的amount
---取去订单下需要的数据
SELECT @V_SERVICE_TYPE = SERVICE_TYPE, @V_CUSTOMER_CONTRACT = CUSTOMER_CONTRACT,
@V_SERVICE_LEVEL = SERVICE_LEVEL, @V_CHARGE_UNIT = CHARGE_UNIT,
@V_CARGO_TYPE = CARGO_TYPE, @V_ESTIMATED_CARGO_PACKAGES =ESTIMATED_CARGO_PACKAGES,
@V_ESTIMATED_CARGO_WEIGHT = ESTIMATED_CARGO_WEIGHT, @V_ESTIMATED_CARGO_CUBE = ESTIMATED_CARGO_CUBE,
@V_BILLING_OFFICE = BILLING_OFFICE, @V_HOME_CURRENCY = HOME_CURRENCY
from TMS_ORDER
LEFT JOIN SYS_OFFICE ON BILLING_OFFICE = OFFICE_CODE
where TMS_ORDER_ID = @V_TMS_ORDER_ID
---判断费用单位对应的结算总量
IF(@V_CHARGE_UNIT = '件数')
set @V_CHARGE_QUANTITY = @V_ESTIMATED_CARGO_PACKAGES
ELSE IF(@V_CHARGE_UNIT = '体积')
SET @V_CHARGE_QUANTITY = @V_ESTIMATED_CARGO_CUBE
ELSE
SET @V_CHARGE_QUANTITY = @V_ESTIMATED_CARGO_WEIGHT
----将符合的费用查找出来
DECLARE
V_CHARGE_CURSOR CURSOR FOR
SELECT CRM.CHARGE_CODE, CRM.CHARGE_ITEM_NAME, SFD.FRT_NAME_EN,
CRM.RATES_NUMBER,
CUOI.CUST_OPERATION_ITEM_ID, CUOI.CUST_CONTRACT_ID,
CC.CUST_CODE, CCC.CRM_CUST_ID, CC.CUST_INNER_OUTER
FROM CRM_CUST_CHARGE_ITEM CRM
LEFT JOIN CRM_CUST_OPERATION_ITEM CUOI ON CRM.CUST_OPERATION_ITEM_ID = CUOI.CUST_OPERATION_ITEM_ID
LEFT JOIN CRM_CUST_CONTRACT CCC ON CUOI.CUST_CONTRACT_ID = CCC.CUST_CONTRACT_ID
LEFT JOIN CRM_CUST CC ON CC.CRM_CUST_ID = CCC.CRM_CUST_ID
LEFT JOIN SB_FRT_DEF SFD ON SFD.FRT_CODE = CRM.CHARGE_CODE
LEFT JOIN TMS_OPERATION_ITEM TOI ON CUOI.OPERATION_ITEM=TOI.OPERATION_ITEM
WHERE CCC.CONTRACT_NUMBER = @V_CUSTOMER_CONTRACT
AND CUOI.SERVICE_TYPE = @V_SERVICE_TYPE
AND CUOI.SERVICE_PERIOD = @V_SERVICE_LEVEL
AND CUOI.CARGO_TYPE = @V_CARGO_TYPE
AND TOI.TMS_ORDER_ID = @V_TMS_ORDER_ID
/**
AND EXISTS (SELECT 1 FROM TMS_OPERATION_ITEM TOI
WHERE CUOI.OPERATION_ITEM = TOI.OPERATION_ITEM
AND TMS_ORDER_ID = @V_TMS_ORDER_ID
)
**/
OPEN V_CHARGE_CURSOR
FETCH NEXT FROM V_CHARGE_CURSOR
INTO @V_CHARGE_CODE, @V_CHARGE_ITEM_NAME, @V_FRT_NAME_EN, @V_RATES_NUMBER,
@V_CUST_OPERATION_ITEM_ID, @V_CUST_CONTRACT_ID, @V_CUST_CODE, @V_CRM_CUST_ID,
@V_CUST_INNER_OUTER
IF(@@FETCH_STATUS!=0)
set @V_RETUREN_VALUE = '没有匹配操作项'
WHILE(@@FETCH_STATUS = 0)
BEGIN
set @V_RETUREN_VALUE = '自动计费完成'
---取出费率表中符合条件的记录
SELECT @V_UNIT_PRICE = UNIT_PRICE, @V_CHARGE_CURRENCY = CHARGE_CURRENCY, @V_MIN_RATES = MIN_RATES
FROM CRM_CUST_CHARGE_RATE
WHERE CHARGE_UNIT = @V_CHARGE_UNIT
AND CUST_CONTRACT_ID = @V_CUST_CONTRACT_ID
AND RATES_NUMBER = @V_RATES_NUMBER
AND CHARGE_UNIT_FROM < @V_CHARGE_QUANTITY
AND CHARGE_UNIT_TO >= @V_CHARGE_QUANTITY
---看是否有对应的协议汇率维护
IF(@V_UNIT_PRICE IS NULL)
PRINT 'NO DATA'
ELSE
BEGIN
----查询汇率
SELECT @V_EXCHANGE_RATE = EXCHANGE_RATE
from CRM_CUST_EXCHANGERATE
WHERE CRM_CUST_ID = @V_CRM_CUST_ID
AND LOCAL_CURRENCY_CODE = @V_HOME_CURRENCY
AND FOREIGN_CURRENCY_CODE = @V_CHARGE_CURRENCY
---如果不存在取系统中的汇率
IF(@V_EXCHANGE_RATE IS NULL)
BEGIN
IF(@V_CUST_INNER_OUTER = 'INTERIOR') ----判断是对内的还是对外的汇率
SELECT @V_EXCHANGE_RATE = RATE_IN
FROM SB_RATE
WHERE STANDARD_CUR_CODE = @V_HOME_CURRENCY
AND ORIGINAL_CUR_CODE = @V_CHARGE_CURRENCY
ELSE
SELECT @V_EXCHANGE_RATE = RATE
FROM SB_RATE
WHERE STANDARD_CUR_CODE = @V_HOME_CURRENCY
AND ORIGINAL_CUR_CODE = @V_CHARGE_CURRENCY
END
IF(@V_EXCHANGE_RATE IS NULL)
BEGIN
PRINT @V_HOME_CURRENCY
print @V_CHARGE_CURRENCY
PRINT 'SYS NOT EXCHANGE RATE'
RETURN 1
END
print @V_EXCHANGE_RATE
----判断费用amount是否比最低起运价低,如果低,就取最低起运价,否则却当前值
SET @V_AMOUNT = @V_UNIT_PRICE*@V_CHARGE_QUANTITY
IF(@V_AMOUNT IS NOT NULL AND @V_MIN_RATES IS NOT NULL)
BEGIN
IF(@V_AMOUNT<@V_MIN_RATES)
SET @V_AMOUNT = @V_MIN_RATES
END
----插入费用表
INSERT INTO TMS_FREIGHT(TMS_FREIGHT_ID,
TMS_ORDER_ID,
FRT_CODE,
FRT_NAME,
FRT_NAME_CN,
RP_IND,
UNIT_PRICE,
CHARGE_QUANTITY,
CHARGE_UNIT,
BILLING_STATION,
CUST_CODE,
CURRENCY,
EXCHANGE_RATE,
AMOUNT,
LOCAL_CURRENCY,
LOCAL_CURRENCY_AMOUNT,
IS_SHARE,
NEED_SHARE,
IS_AUTO,
IS_SETTLE,
IS_REVICED,
RECORD_VERSION
)
SELECT NEWID(),
@V_TMS_ORDER_ID,
@V_CHARGE_CODE,
@V_FRT_NAME_EN,
@V_CHARGE_ITEM_NAME,
'0',
@V_UNIT_PRICE,
@V_CHARGE_QUANTITY,
@V_CHARGE_UNIT,
@V_BILLING_OFFICE,
@V_CUST_CODE,
@V_CHARGE_CURRENCY,
@V_EXCHANGE_RATE,
@V_AMOUNT,
@V_HOME_CURRENCY,
@V_AMOUNT*@V_EXCHANGE_RATE,
0,
0,
1,
0,
0,
1
END
-----插入表结束
FETCH NEXT FROM V_CHARGE_CURSOR
INTO @V_CHARGE_CODE, @V_CHARGE_ITEM_NAME, @V_FRT_NAME_EN, @V_RATES_NUMBER,
@V_CUST_OPERATION_ITEM_ID, @V_CUST_CONTRACT_ID, @V_CUST_CODE, @V_CRM_CUST_ID,
@V_CUST_INNER_OUTER
END
CLOSE V_CHARGE_CURSOR
DEALLOCATE V_CHARGE_CURSOR
END
分享到:
相关推荐
过程名称 :预约挂号调用 || 1.获取挂号级别,返回挂号费用总金额 || 2.所有患者按照新病人对待,在数据库取最新的病历号\挂号流水号 || 功能描述 : || 插入挂号表 fin_opr_register || 插入病人基本信息表 ...
在PB9(PowerBuilder 9)环境下执行MSSql2005的存储过程是一个常见的数据库操作任务,尤其对于开发人员来说,理解如何正确地实现这一功能至关重要。PowerBuilder是一款强大的客户端/服务器应用程序开发工具,它支持...
### Oracle存储过程基本语法及示例 在Oracle数据库中,存储过程是一种强大的工具,用于封装一组SQL语句或PL/SQL代码块,以便在数据库服务器上执行特定的任务。存储过程可以提高应用程序性能、确保数据完整性并简化...
从给定的文件信息来看,我们正在探讨的是一个在Oracle数据库环境下编写的存储过程,名为`sp_kr_ns_hn_mtv_dtal`。这个存储过程主要服务于河南移动的手机电视专区日累计报表的需求,其设计与实现包含了多个层面的技术...
本资源结合实例实现一个复杂的存储过程,存储过程中有用到游标、临时表、循环、递归等知识,sql文件附有实例数据表创建的sql语句。
sybase的一个存储过程样例,供大家参考
在数据库管理中,存储过程、函数、触发器和包是SQL的重要组成部分,它们极大地提高了数据库操作的效率和灵活性。下面将详细阐述这些概念及其在实际应用中的示例。 首先,存储过程(Stored Procedure)是一组预编译...
首先,程序开始时存储n=3,k=2。接着,初始化一个二维字符数组`chess[][]`为0,同时初始化一个一维整数数组`sign[]`为0。这两个数组分别用于存储棋盘状态和记录已遍历过的“#”字符的位置。 当n和k的值不为-1时,...
它能够存储多维数组数据,并包含了关于数据的元数据,使得数据具有可移植性和可理解性。标题“nc文件样例_NC”表明这是一个关于NetCDF文件的示例集合,可能用于演示或测试NetCDF文件的读取、写入和处理。 描述中的...
sybase数据库是不支持group_concat函数的,此文件为sybase存储过程样例,可以将多行信息按标识合并为一行多列。
ORACLE SQL 优化存储过程 PROCEDURE ORACLE SQL 优化存储过程 PROCEDURE 是一篇结合实际开发经验和理论知识的文章,旨在帮助开发者提高 SQL 开发效率和优化存储过程。文章涵盖了广泛的知识点,从基本的 SQL 语句到...
解析过程通常涉及读取DICOM头信息,包括患者信息、检查序列、图像属性等,并正确显示图像数据。 在医疗图像领域,正确解析DICOM文件至关重要,因为图像质量、元数据的完整性和准确性直接影响到医生的诊断。例如,...
以下是一些 MySQL 查询存储过程 SQL 语句样例: 创建存储过程: 创建存储过程需要使用 CREATE PROCEDURE 语句。以下是一个创建存储过程的示例: CREATE PROCEDURE GetCustomerOrders ( IN customerId INT )...
【华为存储认证试题样例分析】 华为存储认证试题主要涵盖了多个关键知识点,旨在评估和提升考生在存储领域的专业技能。以下是对几个样例试题的详细分析: 1. **备份方案**: - 备份是数据保护的重要手段,它通过...
在开发过程中,开发者需要处理各种异常情况,例如网络错误、无效URL以及用户交互。Qt提供了丰富的错误处理机制,如异常类和错误码,以便调试和优化应用。 总的来说,【浏览器样例】项目涵盖了Qt GUI编程、网络通信...
8. **存储过程(Stored Procedure)和触发器(Trigger)**:预编译的SQL语句集合,可以提高效率,执行复杂的业务逻辑,而触发器则在特定事件发生时自动执行。 9. **事务(Transaction)管理**:确保数据的一致性和...
**MyBatis**:MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。MyBatis可以使用简单的XML或注解进行配置和原始映射,将接口...
这个过程在处理XML数据时非常有用,尤其是在数据交换、序列化和持久化场景中。 1. XML到Bean转换: 当我们需要将XML文档解析成Java对象时,Castor提供了便利的方法。首先,你需要创建一个描述XML结构与Java类之间...
7. **错误处理和调试**:在开发过程中,良好的错误处理机制和调试工具(如VC2019的调试器)至关重要,帮助找出并修复程序中的问题。 8. **版本控制**:使用Git等版本控制系统管理代码,便于协作开发和版本追踪。 9...