多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 订单唯一码表订单SKU表实收金额之生成的开发示例 * [ ] 第一步>>订单SKU表存入SKU相关信息 ``` 这里SKU的实收金额小计字段先不存,这个待会再解释原因 ``` * [ ] 第二步>>订单唯一码表存入唯一码相关信息 **单品实收金额计算逻辑** ~~~ 商品销售金额总和 = 订单应收总金额 + 满减满折活动优惠金额 每个唯一码的实收金额 = 订单实收总金额 * (销售价/商品销售金额总和) 即:根据单品的销售价在商品销售总金额中的比例,乘以订单实收总金额,分摊计算单个商品的实收金额 ~~~ 可调用OrderLib组件库中的 calculatePayinAmount方法 **大致代码结构如下:** ~~~ $my_order = new OrdersLib(); // 实例化组件库 // 商品销售金额总和 = 订单应收总金额 + 满减满折活动优惠金额 $ac_total = $order_data['receivable_amount'] + $order_data['total_event_amount']; foreach ( 订单唯一码信息数组 as $key => $value) { ... 单个唯一码的实收金额 = $my_order->calculatePayinAmount($order_data['pay_amount'], $vv['ac_price'], $ac_total); ... ...保存单条唯一码信息... ... } ~~~ *** # *敲黑板,重点来了* 用此方法计算的单品唯一码实收金额四舍五入保留了两位有效数字,因此所有的单品的实收金额之和可能订单实收金额存在小数精度的误差 **!!!所以生成订单还需要下面的步骤来校验并修正这个误差!!!** *** * [ ] 第三步>>修正订单唯一码实收金额之和与订单实收金额不相等的误差 ~~~ 1.查询订单唯一码信息 2.计算订单中所有唯一码的实收金额之和 3.比较订单实收金额和唯一码实收金额之和的误差 4.如果存在误差,在订单的第一个唯一码的实收金额上加上误差值来修正 ~~~ 可调用OrderLib组件库中的 correctPayinAmount方法 **代码示例** ~~~ // 修正订单唯一码实收金额之和与订单实收金额不相等的误差 $my_correct = $my_order->correctPayinAmount($order_id); // 如果修正失败回滚事务,抛出错误信息 if (!$my_correct) { M()->rollback(); $result = array('success' => false, 'code' => 5014, 'msg' => '修正唯一码误差失败!'); return $result; } ~~~ * [ ] 第四步>>补全订单SKU表的小计字段 ~~~ 1.查询订单SKU信息 2.遍历SKU信息,依次查询每个SKU在该订单中的唯一码 3.将各SKU下的所有唯一码分别加和计算出SKU的价格信息 ~~~ ***** ## 这里之所以不在第一步用唯一码的实收金额乘以购买商品的数量来计算小计,是因为唯一码表中的实收金额可能经过了第三步校验,同一个SKU存在两种不一样的价格,用乘法算出的各SKU小计加起来和订单实收金额也会存在误差!!! ***** **代码示例** ~~~ // 填充订单SKU表的小计字段 $my_cal = $my_order->calculateSubtotal($order_id); // 如果修正失败回滚事务,抛出错误信息 if (!$my_cal) { M()->rollback(); $result = array('success' => false, 'code' => 5015, 'msg' => '累加补全订单SKU表小计字段失败!'); return $result; } ~~~