|
|
|
@ -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
|
|
|
|
|