fix: cancel order

master
howell 4 years ago
parent edbc81f1b4
commit cffc42ce44

@ -2,16 +2,13 @@ package order
import (
"github.com/gin-gonic/gin"
"github.com/shopspring/decimal"
"recook/internal/api/mobile/pay/public"
"recook/internal/back"
"recook/internal/dbc"
"recook/internal/model/coupon"
"recook/internal/model/goods"
"recook/internal/model/order"
"recook/internal/model/user"
"recook/internal/v2/lib/jcook"
"recook/internal/v2/model/flashsale"
"recook/tools"
)
@ -20,13 +17,10 @@ type cancelOrderParam struct {
OrderID uint `json:"orderId"`
}
/*
退
退
*/
// CancelOrder 取消订单
//标记订单取消
//优惠券退回
//瑞币退回
func CancelOrder(c *gin.Context) {
var p cancelOrderParam
err := tools.ParseParams(&p, c)
@ -66,7 +60,7 @@ func CancelOrder(c *gin.Context) {
back.Suc(c, "", nil)
}
// 0未付款 1支付成功 2订单取消 3订单过期 4交易成功 5订单关闭
// CancelOrExpireOrder 0未付款 1支付成功 2订单取消 3订单过期 4交易成功 5订单关闭
func CancelOrExpireOrder(orderInfo *order.Information, cancel bool) error {
tx := dbc.DB.Begin()
{
@ -86,19 +80,9 @@ func CancelOrExpireOrder(orderInfo *order.Information, cancel bool) error {
tx.Model(orderInfo).Update("apply_status", 11) // 取消申请成功
}
}
var orderCoupons []order.CouponDetail
var personalCouponIds []uint
tx.Select("personal_coupon_id").Find(&orderCoupons, "order_id = ?", orderInfo.ID)
for _, v := range orderCoupons {
personalCouponIds = append(personalCouponIds, v.PersonalCouponID)
}
var wallet user.Wallet
tx.First(&wallet, "user_id = ?", orderInfo.UserID)
var couponMiddles []coupon.ReceiverMid
tx.Select("id").Find(&couponMiddles, personalCouponIds)
var goodsList []order.GoodsDetail
tx.Find(&goodsList, "order_id = ?", orderInfo.ID)
@ -115,83 +99,8 @@ func CancelOrExpireOrder(orderInfo *order.Information, cancel bool) error {
}
}
// 优惠券退回
for _, v := range couponMiddles {
if err := tx.Model(&v).Updates(map[string]interface{}{"status": 0}).Error; err != nil {
tx.Rollback()
return err
}
}
// 瑞币撤回
if orderInfo.CoinTotalAmount.GreaterThan(decimal.NewFromFloat(0.0)) {
if err := tx.Model(&wallet).Updates(map[string]interface{}{
"coin": wallet.Coin.Add(orderInfo.CoinTotalAmount),
}).Error; err != nil {
tx.Rollback()
return err
}
// 加入流水记录, 直接加在coinHistory中
var uCoinHis user.CoinHistory
uCoinHis.UserID = orderInfo.UserID
uCoinHis.CoinNum = orderInfo.CoinTotalAmount
// uCoinHis.CoinType = user.PurchasedTypeForCoinHistory
uCoinHis.CoinType = user.RefundTypeForCoinHistory
uCoinHis.OrderId = orderInfo.ID
uCoinHis.Remark = "订单取消,瑞币撤回"
if err := dbc.DB.Save(&uCoinHis).Error; err != nil {
tx.Rollback()
return err
}
// 记录
one := user.WalletCoinList{
UserID: wallet.UserID,
Number: int64(orderInfo.CoinTotalAmount.IntPart()),
Title: orderInfo.Title,
Comment: "订单过期-全部退回",
OrderID: orderInfo.ID,
OrderGoodsId: 0,
}
if err := tx.Create(&one).Error; err != nil {
tx.Rollback()
return err
}
}
// 存库撤回 瑞币明细
for _, v := range goodsList {
// if v.PromotionSkuId > 0 {
// var ps promotion.Sku
// tx.First(&ps, v.PromotionSkuId)
// if ps.ID > 0 {
// if err := tx.Model(&ps).Updates(map[string]interface{}{
// "sales_volume": ps.SalesVolume - v.Quantity,
// "inventory": ps.Inventory + v.Quantity,
// }).Error; err != nil {
// tx.Rollback()
// return err
// }
// }
// } else {
// var sku goods.Sku
// tx.First(&sku, v.SkuID)
// salesVolume := sku.SalesVolume - v.Quantity
// if sku.SalesVolume < v.Quantity {
// salesVolume = 0
// }
// if err := tx.Model(&sku).Updates(map[string]interface{}{
// "sales_volume": salesVolume,
// "inventory": sku.Inventory + v.Quantity,
// }).Error; err != nil {
// tx.Rollback()
// return err
// }
// }
// }
// 排除订单取消时活动商品库存-1导致数据溢出的情况
var sku goods.Sku
tx.First(&sku, v.SkuID)
@ -206,25 +115,7 @@ func CancelOrExpireOrder(orderInfo *order.Information, cancel bool) error {
tx.Rollback()
return err
}
}
//判断是否为秒杀商品
for _, v := range goodsList {
if v.ActivityStatus == 1 {
var sg flashsale.RecookSecKillGoodsModel
tx.Table(sg.TableName()).Where("GoodsSkuId=?", v.SkuID).Where("sec_kill_activity_id=?", v.ActivityId).First(&sg)
//撤回库存
num := sg.RealStock.Add(decimal.NewFromInt(int64(v.Quantity)))
if err := tx.Table(sg.TableName()).Where("id=?", sg.Id).Update("real_stock", num).Error; err != nil {
tx.Rollback()
return err
}
} else {
continue
}
}
}
tx.Commit()
return nil

Loading…
Cancel
Save