func (this *partnerService) SavePartner(partnerId int, v *partner.ValuePartner) (int, error) { var pt partner.IPartner var err error var isCreate bool v.Id = partnerId if partnerId > 0 { pt, _ = this._partnerRep.GetPartner(partnerId) if pt == nil { err = errors.New("no such partner") } else { err = pt.SetValue(v) } } else { isCreate = true pt, err = this._partnerRep.CreatePartner(v) } if err != nil { return 0, err } partnerId, err = pt.Save() if isCreate { this.initializePartner(partnerId) } return partnerId, err }
// 更新返现到会员账户 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) 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 *Cart) GetSettleData() (s partner.IShop, d member.IDeliver, paymentOpt, deliverOpt int) { var err error if this.value.ShopId > 0 && this._shop == nil { var pt partner.IPartner pt, err = this.partnerRep.GetPartner(this.partnerId) if err == nil { this._shop = pt.GetShop(this.value.ShopId) } } if this.value.DeliverId > 0 && this._deliver == nil { var m member.IMember m, err = this.memberRep.GetMember(this.value.BuyerId) if err == nil { this._deliver = m.GetDeliver(this.value.DeliverId) } } return this._shop, this._deliver, this.value.PaymentOpt, this.value.DeliverOpt }
func (this *partnerService) SavePartner(partnerId int, v *partner.ValuePartner) (int, error) { var pt partner.IPartner var err error v.Id = partnerId if partnerId > 0 { pt, _ = this._partnerRep.GetPartner(partnerId) if pt == nil { err = errors.New("no such partner") } else { err = pt.SetValue(v) } } else { pt, err = this._partnerRep.CreatePartner(v) } if err != nil { return 0, err } return pt.Save() }
// 更新返现到会员账户 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 *Cart) SettlePersist(shopId, paymentOpt, deliverOpt, deliverId int) error { var shop partner.IShop var deliver member.IDeliver var err error if shopId > 0 { var pt partner.IPartner pt, err = this._partnerRep.GetPartner(this._partnerId) if err != nil { return err } shop = pt.GetShop(shopId) if shop == nil { return partner.ErrNoSuchShop } this._shop = shop this._value.ShopId = shopId } if this._value.BuyerId > 0 && deliverId > 0 { var m member.IMember m, err = this._memberRep.GetMember(this._value.BuyerId) if err != nil { return err } deliver = m.GetDeliver(deliverId) fmt.Println("-----", m.GetAggregateRootId(), deliverId) if deliver == nil { return member.ErrInvalidSession } this._deliver = deliver this._value.DeliverId = deliverId } this._value.PaymentOpt = paymentOpt this._value.DeliverOpt = deliverOpt return nil }
func (this *Member) sendNotifyMail(pt partner.IPartner) error { tplId := pt.KvManager().GetInt(partner.KeyMssTplIdOfProfileComplete) if tplId > 0 { mailTpl := pt.MssManager().GetMailTemplate(tplId) if mailTpl != nil { tpl, err := pt.MssManager().CreateMsgTemplate(mailTpl) if err != nil { return err } //todo:?? data var data = map[string]string{ "Name": this._value.Name, "InvitationCode": this._value.InvitationCode, } return pt.MssManager().Send(tpl, data, []string{this._value.Email}) } } return errors.New("no such email template") }
// 完成订单 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 }