| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php
- namespace addons\ValetOrder\common\logic\order;
- use addons\Coupon\common\models\AddonsCoupon;
- use common\enums\AddonsEnum;
- use common\logic\order\marketing\AgentMarketing;
- use common\logic\order\marketing\BaseMarketing;
- use common\logic\order\marketing\CouponMarketing;
- use common\logic\order\marketing\DeductionMarketing;
- use common\logic\order\marketing\FreightFullReduceMarketing;
- use common\logic\order\marketing\FullReduceMarketing;
- use common\logic\order\marketing\MemberPriceMarketing;
- use common\logic\order\marketing\RegionalDividendMarketing;
- use common\logic\order\marketing\RepurchaseMarketing;
- use common\models\mall\MallAddons;
- use Exception;
- /**
- * 订单优惠相关处理
- *
- * @Author bing
- * @DateTime 2021-09-22 18:16:58
- * @copyright: Copyright (c) 2020 广东七件事集团
- */
- class OrderMarketingLogicV2 extends BaseOrderMarketing
- {
- public function getHandlers()
- {
- return [
- RepurchaseMarketing::class, //复购价格处理
- MemberPriceMarketing::class, // 会员价折扣
- FullReduceMarketing::class, // 满减减免处理
- AgentMarketing::class, // 渠道
- RegionalDividendMarketing::class, // 区域分红 - 合伙人 - 代理价
- CouponMarketing::class, // 优惠券
- FreeShippingMarketing::class, // 运费减免处理,涉及到包邮规则,必须在最后处理
- DeductionMarketing::class, // 会员积分抵扣
- ];
- }
- /**
- * 运行
- *
- * @param $form
- * @param bool $isNewRecord 创建记录
- *
- * @return object|mixed
- */
- public function run($form, $isNewRecord = false)
- {
- try {
- $extra = [];
- $group_order_goods = $form['group_order_goods'];
- $handlers = $this->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
- ); // 计算优惠券前金额
- }
- $form['group_order_goods'] = $group_order_goods;
- $form = AddonsCoupon::getCanUseCouponList($form, $isNewRecord);
- return $form;
- } catch (Exception $e) {
- $this->setError($e->getMessage());
- return false;
- }
- }
- }
|