You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

42 lines
1.3 KiB

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)
}