OrderMarketingLogic.php 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace addons\UpgradeGift\common\logic\order;
  3. use addons\UpgradeGift\common\logic\order\marketing\BaseMarketing;
  4. use addons\UpgradeGift\common\logic\order\marketing\FreeShippingMarketing;
  5. use addons\UpgradeGift\common\logic\order\marketing\FreightFullReduceMarketing;
  6. use Exception;
  7. /**
  8. * 订单优惠相关处理
  9. *
  10. * @Author bing
  11. * @DateTime 2021-09-22 18:16:58
  12. * @copyright: Copyright (c) 2020 广东七件事集团
  13. */
  14. class OrderMarketingLogic extends BaseOrderMarketing
  15. {
  16. public function getHandlers()
  17. {
  18. return [
  19. FreeShippingMarketing::class, // 运费减免处理,涉及到包邮规则,必须在最后处理
  20. ];
  21. }
  22. /**
  23. * 运行
  24. *
  25. * @param $form
  26. * @param bool $isNewRecord 创建记录
  27. *
  28. * @return object|mixed
  29. */
  30. public function run($form, $isNewRecord = false)
  31. {
  32. try {
  33. $extra = [];
  34. $group_order_goods = $form['group_order_goods'];
  35. $handlers = $this->getHandlers();
  36. $extra_shipping_fee = 0;
  37. if (!empty($form->process_extra_data['shipping_fee'])) {
  38. foreach ($form->process_extra_data['shipping_fee'] as $gid => $fees) {
  39. $extra_shipping_fee = array_sum($fees);
  40. }
  41. }
  42. if (empty($form->marketing['deduct']['shipping_fee']['money'])) $form->marketing['deduct']['shipping_fee']['money'] = 0;
  43. $form->marketing['deduct']['shipping_fee']['money'] += $extra_shipping_fee;
  44. foreach ($group_order_goods as &$item) {
  45. // 运费减免处理
  46. foreach ($handlers as $key => $handler) {
  47. // 如果是社区团购订单,那么就不需要进行邮费处理 - 并且判断是否为送货上门/自提, 团长是否存在
  48. if ($form->is_force_free_shipping && $handler == FreeShippingMarketing::class) {
  49. continue;
  50. }
  51. /** @var BaseMarketing $class */
  52. $item = $handler::compute($item, $form, $extra);
  53. if ($item === false) throw new Exception($handler::getStaticError());
  54. }
  55. if (!$form->is_force_free_shipping) $item = FreightFullReduceMarketing::compute($item, $form);
  56. // 扩展费用
  57. if (!empty($form->process_extra_data['shipping_fee'])) {
  58. foreach ($form->process_extra_data['shipping_fee'] as $gid => $fees) {
  59. if (!empty($item['goods'][$gid])) {
  60. if (empty($item['mch_order_info']['shipping_money'])) $item['mch_order_info']['shipping_money'] = 0;
  61. $item['mch_order_info']['shipping_money'] += array_sum($fees);
  62. $item['mch_order_info']['pay_money'] += array_sum($fees);
  63. }
  64. }
  65. }
  66. $form['total_pay_money'] = round($form['total_pay_money']+$item['mch_order_info']['pay_money'],2);// 计算总额
  67. $form['total_pay_money_not_coupon'] = bcadd(
  68. $form['total_pay_money_not_coupon'], bcadd(
  69. $item['mch_order_info']['goods_price'], $item['mch_order_info']['coupon_money'] ?? 0, 2
  70. ), 2
  71. ); // 计算优惠券前金额
  72. }
  73. $form['group_order_goods'] = $group_order_goods;
  74. return $form;
  75. } catch (Exception $e) {
  76. $this->setError($e->getMessage());
  77. return false;
  78. }
  79. }
  80. }