(61).订单明细实付金额分摊实现

4.1 需求分析
主订单的应付金额【origin_total_amount】一般是由所有订单明细的商品单价*数量
汇总【order_price*sku_num】组成。
但是由于优惠、运费等都是 以订单为单位 进行计算的,所以减掉优惠、加上运费会得到
一个最终实付金额【
final_total_amount】。
但问题在于如果是 以商品进行交易额分析 ,就需要把优惠、运费分摊到购买的每个商品
中。
4.2 如何分摊
一般是由订单明细每种商品的消费占总订单的比重进行分摊,比如总价 1000 元的商品,
由 600 元和 400 元的 A、B 两种商品组成,
但是经过打折和加运费后,实际付款金额变为
810,那么 A 的分摊实付金额为 486 元和 B 的分摊实付金额为 324 元。
4.3 麻烦的情况
由于明细的分摊是由占比而得,那就会进行除法,除法就有可能出现除不尽的情况。
比如:原价 90 元 ,三种商品每件 30 元。没有优惠但有 10 元运费,总实付金额为 100
元。按占比分摊各三分之一,就会出现三个 33.33 元。加起来就会出现 99.99 元。就会出
现差一分钱的情况。
而我们要求所有订单明细的实付分摊加总必须和订单的总实付相等。
所以我们要的是 100=33.33+33.33+33.34
4.4 解决思路
核心思路:就是需要用两种算法来计算金额
算法一:如果计算时该明细不是最后一笔
使用乘除法公式:实付分摊金额 / 实付总金额 = (数量*单价)/原始总金额
调整移项可得 实付分摊金额 = 实付总金额 * (数量 * 单价) / 原始总金额
算法二:
如果计算时该明细是最后一笔
使用减法公式:
实付分摊金额= 实付总金额 - (其他明细已经计算好的【实付分摊金额】的合计)
判断是否是最后一笔
判断公式:
如果 该条明细 (数量*单价) == 原始总金额 -(其他明细
【数量*单价】的合计)
整个计算中需要的两个合计值:
其他明细已经计算好的【实付分摊金额】的合计
订单的已经计算完的明细的【数量*单价】的合计
如何保存这两个合计?保存在 redis 中。

 

4.5 代码实现

 

 

 

 

 

 

 

### 关于SAP售后订单费用计算方法 在SAP系统中,售后服务订单的费用计算涉及多个模块的功能协同工作。以下是针对这一主题的具体说明: #### 1. 售后服务订单的基础架构 售后服务订单通常通过SAP S/4HANA中的Service Management (SM) 或 Field Service Management (FSM) 进行管理。这些模块支持企业记录并跟踪与客户服务请求相关的活动、资源分配和成本核算[^3]。 #### 2. 费用构成要素 售后服务订单的费用主要由以下几个部分组成: - **人工费**:基于员工的工作时间表和服务合同条款来计算。这可能涉及到小时费率或其他计价方式。 - **材料费**:用于维修或更换零件的成本,这部分会从库存管理系统获取价格信息。 - **差旅及其他间接费用**:如交通补贴、住宿等附加支出项也会被计入总成本之中。 #### 3. 自动化处理机制 为了简化操作流程并提高准确性,SAP 提供了一些内置功能来进行自动化的费用分摊及结算过程,其中包括但不限于: - 使用标准定价程序(Standard Pricing Procedures),可以根据预定义规则动态调整各项收费明细; - 应用了条件技术(Condition Techniques),使得不同的交易情形能够触发相应的评估逻辑从而得出最终报价单据上的金额数值; 此外,在实际应用过程中还可以借助外部接口实现更深层次的数据交换需求比如ERP核心层面向财务会计科目的映射关系建立等等[^1]. #### 4. 特殊情况下的手动干预选项 尽管大多数情况下都可以依靠上述提到的各种自动化手段顺利完成整个生命周期内的所有必要步骤但从灵活性角度考虑还是保留了一定程度上允许用户根据实际情况作出适当修改的可能性以便更好地满足特定业务场景的要求. ```python def calculate_service_order_cost(order_details): total_cost = 0 labor_hours = order_details['labor']['hours'] hourly_rate = order_details['labor']['hourly_rate'] material_items = order_details['materials'] travel_expenses = sum([item['cost'] for item in order_details['travel']]) # Calculate Labor Cost labor_cost = labor_hours * hourly_rate # Calculate Material Costs materials_cost = sum([item['price']*item['quantity'] for item in material_items]) # Sum up all costs total_cost += labor_cost + materials_cost + travel_expenses return round(total_cost, 2) example_data = { 'labor': {'hours': 5, 'hourly_rate': 75}, 'materials': [{'name':'Part A', 'price': 20, 'quantity': 3}], 'travel':[{'description':'Flight','cost':150}] } print(calculate_service_order_cost(example_data)) ``` 以上代码片段展示了一个简单的函数用来估算给定输入参数下某个具体案例里头所产生的总体开销数额。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据开发工程师-宋权

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值