getHandlers(); // $extra_shipping_fee = 0; // if (!empty($form->process_extra_data['shipping_fee'])) { // foreach ($form->process_extra_data['shipping_fee'] as $gid => $fees) { // $extra_shipping_fee = array_sum($fees); // } // } // if (empty($form->marketing['deduct']['shipping_fee']['money'])) $form->marketing['deduct']['shipping_fee']['money'] = 0; // $form->marketing['deduct']['shipping_fee']['money'] += $extra_shipping_fee; // // 判断是否有社区团购插件 // $is_install_community_addons = MallAddons::isInstall($form->mall_id, AddonsEnum::ADDONS_NAME_COMMUNITY); // $is_filter_shipping = false; // foreach ($group_order_goods as &$item) { // // 运费减免处理 // foreach ($handlers as $key => $handler) { // // 如果是社区团购订单,那么就不需要进行邮费处理 - 并且判断是否为送货上门/自提, 团长是否存在 // if ($form->is_force_free_shipping && $handler == FreeShippingMarketing::class) { // continue; // } // /** @var BaseMarketing $class*/ // $item = $handler::compute($item, $form, $extra); // if($item === false) throw new Exception($handler::getStaticError()); // } // if (!$form->is_force_free_shipping) $item = FreightFullReduceMarketing::compute($item, $form); // // 扩展费用 // if (!empty($form->process_extra_data['shipping_fee'])) { // foreach ($form->process_extra_data['shipping_fee'] as $gid => $fees) { // if (!empty($item['goods'][$gid])) { // if (empty($item['mch_order_info']['shipping_money'])) $item['mch_order_info']['shipping_money'] = 0; // $item['mch_order_info']['shipping_money'] += array_sum($fees); // $item['mch_order_info']['pay_money'] += array_sum($fees); // } // } // } // $form['total_pay_money'] = round($form['total_pay_money']+$item['mch_order_info']['pay_money'],2);// 计算总额 // $form['total_pay_money_not_coupon'] = bcadd( // $form['total_pay_money_not_coupon'], bcadd( // $item['mch_order_info']['goods_price'], $item['mch_order_info']['coupon_money'] ?? 0, 2 // ), 2 // ); // 计算优惠券前金额 // // 计算优惠券最后一单金额 // $goodsNum = count($item['goods']); // if (!empty($item['goods']) && $goodsNum > 1) { // // 多个商品时其优惠比例计算容易出现浮点数误差,所以在计算最后一个订单优惠金额时(总金额-前面所有优惠金额) // $goodsEndMoney = $this->setEndMoney($item['goods'], $item['mch_order_info']['goods_price']); // $goodsKeys = array_keys($item['goods']); // $lastKey = end($goodsKeys); // foreach ($item['goods'] as $key => $goods) { // if ($key == $lastKey) { // $item['goods'][$key]['goods_price'] = $goodsEndMoney; // // 因为订单详情是列表,所以需要循环设置优惠金额 // $detailEndMoney = $this->setEndMoney($goods['goods_details'], $item['goods'][$key]['goods_price']); // $detailKeys = array_keys($goods['goods_details']); // $lastKey = end($detailKeys); // foreach ($goods['goods_details'] as $k => $goodsDetail) { // if ($k == $lastKey) { // $item['goods'][$key]['goods_details'][$k]['goods_price'] = $detailEndMoney; // } // } // } // } // } // } // $form['group_order_goods'] = $group_order_goods; // $form = AddonsCoupon::getCanUseCouponList($form, $isNewRecord); // $form = GiveScoreService::setGoodsMarketing($form); // return $form; // }catch(Exception $e){ // $this->setError($e->getMessage()); // return false; // } // } // /** // * 设置最后一个商品的优惠金额 // * @param array $list // * @param $money // * @return string // */ // public function setEndMoney(array $list, $money = 0) // { // $otherList = array_slice($list, 0 , count($list) - 1); // $otherMoney = array_sum(array_column($otherList, 'goods_price')); // return bcsub(round($money, 2), $otherMoney, 2); // } }