deduction = $deduction; $this->orderFreight = $orderFreight; $this->order = $orderFreight->getOrder(); } public function getUidAttribute() { return $this->order->uid; } public function getCodeAttribute() { return $this->getCode(); } public function getNameAttribute() { return $this->getName(); } /** * @return string */ public function getCode() { return $this->getDeduction()->getCode(); } /** * @return string */ public function getName() { return $this->getDeduction()->getName(); } /** * @return bool */ public function getIsEnableAttribute() { return $this->isEnableDeductFreight(); } /** * 此抵扣对应的虚拟币 * @return VirtualCoin * @throws \Illuminate\Contracts\Container\BindingResolutionException */ public function newCoin() { return app('CoinManager')->make($this->getCode()); } /** * @return mixed * @throws \app\common\exceptions\AppException */ public function getAmountAttribute() { return $this->getAmount(); } protected $deductionAmount; /** * @return mixed * @throws \app\common\exceptions\AppException */ public function getAmount() { if (!$this->deductionAmount) { $this->deductionAmount = $this->newCoin(); // 购买者不存在虚拟币记录 if (!$this->getMemberCoin()) { trace_log()->deduction('订单抵扣', "{$this->getName()} 用户没有对应虚拟币"); return $this->deductionAmount; } $deductionFreightAmount = $this->orderFreight->getPriceBefore($this->getCode().'Deduction'); $amount = min($this->getMemberCoin()->getMaxUsableCoin()->getMoney(), $deductionFreightAmount); $this->deductionAmount = $this->newCoin()->setMoney($amount); } return $this->deductionAmount; } public function getOrder() { return $this->order; } public function getDeduction() { return $this->deduction; } /** * @return Deduction */ public function getOrderDeduction() { return $this->order->getOrderDeductManager()->getOrderDeductions()->where('code', $this->getCode())->first(); } public function isChecked() { $this->getOrderDeduction()->isChecked(); } /** * 下单用户此抵扣对应虚拟币的余额 * @return MemberCoin * @throws \Illuminate\Contracts\Container\BindingResolutionException */ private function getMemberCoin() { if (isset($this->memberCoin)) { return $this->memberCoin; } $code = $this->getCode(); return \app\frontend\modules\deduction\EnableDeductionService::getInstance()->getMemberCoin($code); } //是否开启运费抵扣 public function isEnableDeductFreight() { return $this->getDeduction()->isEnableDeductDispatchPrice(); } }