use_coupon = $use_coupon; } public function getHandlers() { // TODO: Implement getHandlers() method. $data = [ FreeShippingMarketing::class, // 运费减免处理 ScoreMarketing::class, // 积分处理 ]; return empty($this->use_coupon) ? $data : array_merge($data, [CouponMarketing::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(); foreach ($group_order_goods as &$item) { $item['mch_order_info']['marketing_type'] = PurchaseEnum::ADDONS_NAME; // 运费减免处理 foreach ($handlers as $key => $handler) { /** @var BaseMarketing $class*/ $item = $handler::compute($item,$form,$extra); if($item === false) throw new \Exception($handler::getStaticError()); } $form['total_pay_money'] = round($form['total_pay_money'] + ($item['mch_order_info']['pay_money'] ?? 0), 2);// 计算总额 $form['total_pay_score'] = round($form['total_pay_score'] + ($item['mch_order_info']['score'] ?? 0), 2);// 计算总额 } $form['group_order_goods'] = $group_order_goods; return $form; }catch(\Exception $e){ $this->setError($e->getMessage()); return false; } } }