package recook import ( "errors" "github.com/jinzhu/gorm" "github.com/shopspring/decimal" "recook/internal/v2/logic/pay" "recook/internal/v2/model/recook/after" user2 "recook/internal/v2/model/recook/user" ) func Refund(tx *gorm.DB, asGoods *after.RecookAfterSalesGoodsModel) error { var wallet user2.RecookUserWalletModel tx.First(&wallet, "user_id = ?", asGoods.UserId) if asGoods.RefundAmount.GreaterThan(decimal.NewFromFloat(0.0)) { if err := tx.Model(&wallet).Updates(map[string]interface{}{ "balance": wallet.Balance.Add(asGoods.RefundAmount), }).Error; err != nil { return err } recookUserWalletBalanceListModel := &user2.RecookUserWalletBalanceListModel{ UserId: wallet.UserId, IncomeType: user2.RecookUserWalletBalanceListIncomeTypeRefund, // 订单退款 Amount: asGoods.RefundAmount, Title: asGoods.GoodsName, Comment: "商品退款-退回", OrderId: asGoods.OrderId, OrderGoodsId: asGoods.OrderGoodsId, OrderTime: asGoods.OrderTime, } recookUserWalletBalanceListModel.SetDb(tx) recookUserWalletBalanceListModel.Create(recookUserWalletBalanceListModel) if recookUserWalletBalanceListModel.Id == 0 { return errors.New("系统异常") } } return pay.SyncRefundSuccessCallback(tx, asGoods) }