コード例 #1
0
ファイル: order.go プロジェクト: yonglehou/go2o
// 更新账户
func (o *subOrderImpl) updateAccountForOrder(m member.IMember) error {
	if o._value.State != order.StatCompleted {
		return order.ErrUnusualOrderStat
	}
	var err error
	ov := o._value
	conf := o._valRep.GetGlobNumberConf()
	amount := ov.FinalAmount
	acc := m.GetAccount()

	// 增加经验
	rate := conf.ExperienceRateByOrder
	if exp := int(amount * rate); exp > 0 {
		if err = m.AddExp(exp); err != nil {
			return err
		}
	}

	// 增加积分
	//todo: 增加阶梯的返积分,比如订单满30送100积分
	integral := int(amount*conf.IntegralRateByOrder) + conf.IntegralBackExtra
	// 赠送积分
	if integral > 0 {
		err = m.GetAccount().AddIntegral(ov.VendorId, enum.INTEGRAL_TYPE_ORDER,
			integral, fmt.Sprintf("订单返积分%d个", integral))
		if err != nil {
			return err
		}
	}
	acv := acc.GetValue()
	acv.TotalFee += ov.GoodsAmount
	acv.TotalPay += ov.FinalAmount
	acv.UpdateTime = time.Now().Unix()
	_, err = acc.Save()
	return err
}