// 应用优惠券 func (this *orderManagerImpl) applyCoupon(m member.IMember, order order.IOrder, py payment.IPaymentOrder, couponCode string) error { po := py.GetValue() cp := this._promRep.GetCouponByCode( m.GetAggregateRootId(), couponCode) // 如果优惠券不存在 if cp == nil { return errors.New("优惠券无效") } // 获取优惠券 coupon := cp.(promotion.ICouponPromotion) result, err := coupon.CanUse(m, po.TotalFee) if result { if coupon.CanTake() { _, err = coupon.GetTake(m.GetAggregateRootId()) //如果未占用,则占用 if err != nil { err = coupon.Take(m.GetAggregateRootId()) } } else { _, err = coupon.GetBind(m.GetAggregateRootId()) } if err != nil { domain.HandleError(err, "domain") err = errors.New("优惠券无效") } else { //应用优惠券 if err = order.ApplyCoupon(coupon); err == nil { _, err = py.CouponDiscount(coupon) } } } return err }