// 三级返现 func (this *Order) backFor3R(pt partner.IPartner, m member.IMember, back_fee float32, unixTime int64) { if back_fee == 0 { return } i := 0 mName := m.GetValue().Name saleConf := pt.GetSaleConf() percent := saleConf.CashBackTg2Percent for i < 2 { rl := m.GetRelation() if rl == nil || rl.InvitationMemberId == 0 { break } m = this._memberRep.GetMember(rl.InvitationMemberId) if m == nil { break } if i == 1 { percent = saleConf.CashBackTg1Percent } this.updateMemberAccount(m, pt.GetValue().Name, mName, back_fee*percent, unixTime) i++ } }
// 更新返现到会员账户 func (this *Order) updateShoppingMemberBackFee(pt partner.IPartner, m member.IMember, fee float32, unixTime int64) { if fee == 0 { return } v := this.GetValue() pv := pt.GetValue() //更新账户 acc := m.GetAccount() //acc.TotalFee += this._value.Fee //acc.TotalPay += this._value.PayFee acc.PresentBalance += fee // 更新赠送余额 acc.TotalPresentFee += fee acc.UpdateTime = unixTime m.SaveAccount() //给自己返现 icLog := &member.IncomeLog{ MemberId: this._value.MemberId, OrderId: v.Id, Type: "backcash", Fee: fee, Log: fmt.Sprintf("订单:%s(商家:%s)返现¥%.2f元", v.OrderNo, pv.Name, fee), State: 1, RecordTime: unixTime, } m.SaveIncomeLog(icLog) }
// 更新返现到会员账户 func (this *Order) updateShoppingMemberBackFee(pt partner.IPartner, m member.IMember, fee float32, unixTime int64) { if fee == 0 { return } v := this.GetValue() pv := pt.GetValue() //更新账户 acc := m.GetAccount() acv := acc.GetValue() //acc.TotalFee += this._value.Fee //acc.TotalPay += this._value.PayFee acv.PresentBalance += fee // 更新赠送余额 acv.TotalPresentFee += fee acv.UpdateTime = unixTime acc.Save() //给自己返现 tit := fmt.Sprintf("订单:%s(商家:%s)返现¥%.2f元", v.OrderNo, pv.Name, fee) acc.PresentBalance(tit, v.OrderNo, float32(fee)) }
// 完成订单 func (this *Order) Complete() error { now := time.Now().Unix() v := this._value m := this._memberRep.GetMember(v.MemberId) if m == nil { return member.ErrNoSuchMember } var err error var ptl partner.IPartner ptl, err = this._partnerRep.GetPartner(v.PartnerId) if err != nil { log.Println("供应商异常!", v.PartnerId) log.PrintErr(err) return err } pv := ptl.GetValue() if pv.ExpiresTime < time.Now().Unix() { return errors.New("您的账户已经过期!") } // 增加经验 if EXP_BIT == 0 { fv := infrastructure.GetApp().Config().GetFloat(variable.EXP_BIT) if fv <= 0 { panic("[WANNING]:Exp_bit not set!") } EXP_BIT = float32(fv) } if err = m.AddExp(int(v.Fee * EXP_BIT)); err != nil { return err } // 更新账户 updateAccountForOrder(m, this) //******* 返现到账户 ************ var back_fee float32 saleConf := ptl.GetSaleConf() if saleConf.CashBackPercent > 0 { back_fee = v.Fee * saleConf.CashBackPercent //将此次消费记入会员账户 this.updateShoppingMemberBackFee(ptl, m, back_fee*saleConf.CashBackMemberPercent, now) //todo: 增加阶梯的返积分,比如订单满30送100积分 backIntegral := int(v.Fee)*saleConf.IntegralBackNum + saleConf.IntegralBackExtra // 赠送积分 if backIntegral != 0 { err = m.AddIntegral(v.PartnerId, enum.INTEGRAL_TYPE_ORDER, backIntegral, fmt.Sprintf("订单返积分%d个", backIntegral)) if err != nil { return err } } } this._value.Status = enum.ORDER_COMPLETED this._value.IsSuspend = 0 this._value.UpdateTime = now _, err = this.Save() if err == nil { err = this.AppendLog(enum.ORDER_LOG_SETUP, false, "订单已完成") // 处理返现促销 this.handleCashBackPromotions(ptl, m) // 三级返现 if back_fee > 0 { this.backFor3R(ptl, m, back_fee, now) } } return err }
// 完成订单 func (this *Order) Complete() error { now := time.Now().Unix() v := this._value m, err := this._memberRep.GetMember(v.MemberId) if err == nil { var ptl partner.IPartner ptl, err = this._partnerRep.GetPartner(v.PartnerId) if err != nil { log.Println("供应商异常!", v.PartnerId) log.PrintErr(err) return err } pv := ptl.GetValue() if pv.ExpiresTime < time.Now().Unix() { return errors.New("您的账户已经过期!") } //返现比例 saleConf := ptl.GetSaleConf() back_fee := v.Fee * saleConf.CashBackPercent //将此次消费记入会员账户 this.updateShoppingMemberAccount(ptl, m, back_fee*saleConf.CashBackMemberPercent, now) //todo: 增加阶梯的返积分,比如订单满30送100积分 backIntegral := int(v.Fee)*saleConf.IntegralBackNum + saleConf.IntegralBackExtra //判断是否满足升级条件 if backIntegral != 0 { err = m.AddIntegral(v.PartnerId, enum.INTEGRAL_TYPE_ORDER, backIntegral, fmt.Sprintf("订单返积分%d个", backIntegral)) if err != nil { return err } } // 增加经验 if EXP_BIT == 0 { fv := infrastructure.GetApp(). Config().GetFloat(variable.EXP_BIT) EXP_BIT = float32(fv) } if EXP_BIT == 0 { log.Println("[WANNING]:Exp_bit not set!") } err = m.AddExp(int(v.Fee * EXP_BIT)) if err != nil { return err } // 三级返现 this.backFor3R(ptl, m, back_fee, now) this._value.Status = enum.ORDER_COMPLETED this._value.IsSuspend = 0 this._value.UpdateTime = now _, err := this.Save() if err == nil { err = this.AppendLog(enum.ORDER_LOG_SETUP, false, "订单已完成") } } return err }