OrderMarketingLogic.php 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace addons\Purchase\common\logic\order;
  3. use addons\Purchase\common\enums\PurchaseEnum;
  4. use addons\Purchase\common\logic\order\marketing\ScoreMarketing;
  5. use common\logic\order\BaseOrderMarketing;
  6. use common\logic\order\marketing\BaseMarketing;
  7. use common\logic\order\marketing\CouponMarketing;
  8. use common\logic\order\marketing\FreeShippingMarketing;
  9. /**
  10. * 订单优惠相关处理
  11. * @Author bing
  12. * @DateTime 2021-09-22 18:16:58
  13. * @copyright: Copyright (c) 2020 广东七件事集团
  14. */
  15. class OrderMarketingLogic extends BaseOrderMarketing
  16. {
  17. public $use_coupon;
  18. public function __construct($use_coupon = 0)
  19. {
  20. $this->use_coupon = $use_coupon;
  21. }
  22. public function getHandlers()
  23. {
  24. // TODO: Implement getHandlers() method.
  25. $data = [
  26. FreeShippingMarketing::class, // 运费减免处理
  27. ScoreMarketing::class, // 积分处理
  28. ];
  29. return empty($this->use_coupon) ? $data : array_merge($data, [CouponMarketing::class]);
  30. }
  31. /**
  32. * 运行
  33. * @param $form
  34. * @param bool $isNewRecord 创建记录
  35. * @return object|mixed
  36. */
  37. public function run( $form, $isNewRecord = false)
  38. {
  39. try{
  40. $extra = [];
  41. $group_order_goods = $form['group_order_goods'];
  42. $handlers = $this->getHandlers();
  43. foreach ($group_order_goods as &$item) {
  44. $item['mch_order_info']['marketing_type'] = PurchaseEnum::ADDONS_NAME;
  45. // 运费减免处理
  46. foreach ($handlers as $key => $handler) {
  47. /** @var BaseMarketing $class*/
  48. $item = $handler::compute($item,$form,$extra);
  49. if($item === false) throw new \Exception($handler::getStaticError());
  50. }
  51. $form['total_pay_money'] = round($form['total_pay_money'] + ($item['mch_order_info']['pay_money'] ?? 0), 2);// 计算总额
  52. $form['total_pay_score'] = round($form['total_pay_score'] + ($item['mch_order_info']['score'] ?? 0), 2);// 计算总额
  53. }
  54. $form['group_order_goods'] = $group_order_goods;
  55. return $form;
  56. }catch(\Exception $e){
  57. $this->setError($e->getMessage());
  58. return false;
  59. }
  60. }
  61. }