|
|
|
package public
|
|
|
|
|
|
|
|
import (
|
|
|
|
"errors"
|
|
|
|
"recook/internal/model/goods"
|
|
|
|
"recook/internal/model/order"
|
|
|
|
"recook/internal/model/user"
|
|
|
|
"recook/internal/service/app/shop"
|
|
|
|
order2 "recook/internal/v2/logic/manage/order"
|
|
|
|
manage "recook/internal/v2/model/recook/order"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/golangkit/formatime"
|
|
|
|
"github.com/jinzhu/gorm"
|
|
|
|
)
|
|
|
|
|
|
|
|
/*
|
|
|
|
支付成功后
|
|
|
|
|
|
|
|
标记订单支付完成
|
|
|
|
标记支付记录支付时间
|
|
|
|
购买排名榜单更新
|
|
|
|
|
|
|
|
自己的提成跟上级或者分享人的提成 计算好
|
|
|
|
*/
|
|
|
|
|
|
|
|
func PaySuccessCallback(tx *gorm.DB, orderInfo order.Information, completeTime formatime.Second) error {
|
|
|
|
var orderGoodsList []order.GoodsDetail
|
|
|
|
if err := tx.Select("id, goods_id, sku_id, quantity, promotion_sku_id").Find(&orderGoodsList, "order_id = ?", orderInfo.ID).Error; err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// 写
|
|
|
|
if tx.Model(&orderInfo).Where("status = ?", 0).Updates(order.Information{
|
|
|
|
Status: 1,
|
|
|
|
PayTime: completeTime,
|
|
|
|
}).RowsAffected != 1 {
|
|
|
|
return errors.New("订单已不可支付")
|
|
|
|
}
|
|
|
|
|
|
|
|
// 更新收益情况
|
|
|
|
if !orderInfo.IsSplit {
|
|
|
|
if err := shop.OrderProfit(orderInfo, tx); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// 更新销量
|
|
|
|
nowFormatTime := formatime.NewDateNow()
|
|
|
|
|
|
|
|
for _, v := range orderGoodsList {
|
|
|
|
err := tx.Model(&v).Update(order.GoodsDetail{PayStatus: 1}).Error
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
//给产品加销量
|
|
|
|
var goodsInfo goods.Information
|
|
|
|
tx.First(&goodsInfo, "id=?", v.GoodsID)
|
|
|
|
tx.Model(&goodsInfo).Updates(goods.Information{
|
|
|
|
SalesVolume: goodsInfo.SalesVolume + v.Quantity,
|
|
|
|
})
|
|
|
|
|
|
|
|
//下面是给分类加销量的
|
|
|
|
var g goods.Information
|
|
|
|
tx.Select("first_category_id, second_category_id").First(&g, v.GoodsID)
|
|
|
|
|
|
|
|
rankings := goods.HotSellRankings{
|
|
|
|
GoodsId: v.GoodsID,
|
|
|
|
FirstCategoryID: g.FirstCategoryID,
|
|
|
|
SecondCategoryID: g.SecondCategoryID,
|
|
|
|
Date: nowFormatTime,
|
|
|
|
}
|
|
|
|
tx.FirstOrCreate(&rankings, "date = ? AND goods_id = ?", nowFormatTime.Time.Format("2006-01-02"), v.GoodsID)
|
|
|
|
tx.Model(&rankings).Updates(goods.HotSellRankings{
|
|
|
|
Sales: rankings.Sales + v.Quantity,
|
|
|
|
})
|
|
|
|
// 订单支付成功日志
|
|
|
|
content := "-"
|
|
|
|
if orderInfo.TradeNo != "" {
|
|
|
|
content = "交易流水号:" + orderInfo.TradeNo
|
|
|
|
}
|
|
|
|
if err := order2.OrderLogic.Logs(v.ID, manage.RecookOrderGoodsDetailLogsTypePaySuc, "用户", content, tx); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
// 虚拟订单用户升级
|
|
|
|
var u1 user.Information
|
|
|
|
if err := tx.First(&u1, "id = ?", orderInfo.UserID).Error; err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if u1.IsVip() {
|
|
|
|
// 合伙人或者真实vip店铺无需操作
|
|
|
|
return nil
|
|
|
|
} else {
|
|
|
|
var sku goods.Sku
|
|
|
|
if err := tx.First(&sku, "id = ?", orderGoodsList[0].SkuID).Error; err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
patch := make(map[string]interface{})
|
|
|
|
patch["level"] = 2
|
|
|
|
patch["parent_id"] = 0
|
|
|
|
patch["is_offline"] = true
|
|
|
|
now1 := time.Now()
|
|
|
|
now := time.Date(now1.Year(), now1.Month(), now1.Day(), 0, 0, 0, 00, time.Local)
|
|
|
|
end := now
|
|
|
|
if u1.VipUpgradeEnd.Valid && time.Now().Before(u1.VipUpgradeEnd.Time) {
|
|
|
|
// 续约
|
|
|
|
now = u1.VipUpgradeStart.Time
|
|
|
|
end = u1.VipUpgradeEnd.Time
|
|
|
|
} else {
|
|
|
|
// 没有升级过 || 升级过已经过了上一次的时间重新计算
|
|
|
|
patch["old_level"] = u1.Level
|
|
|
|
patch["old_parent_id"] = u1.ParentID
|
|
|
|
patch["old_root_id"] = u1.RootID
|
|
|
|
}
|
|
|
|
switch sku.EffectDayType {
|
|
|
|
case 1: // 日
|
|
|
|
end = end.AddDate(0, 0, sku.EffectTime)
|
|
|
|
case 2: // 月
|
|
|
|
end = end.AddDate(0, sku.EffectTime, 0)
|
|
|
|
|
|
|
|
}
|
|
|
|
patch["vip_upgrade_start"] = formatime.NewSecondFrom(now)
|
|
|
|
patch["vip_upgrade_end"] = formatime.NewSecondFrom(end)
|
|
|
|
if err := tx.Table((&user.Information{}).TableName()).Where("id = ?", u1.ID).Updates(patch).Error; err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
kind := user.Month
|
|
|
|
if sku.EffectDayType == 1 {
|
|
|
|
// 七天体验
|
|
|
|
kind = user.SevenDay
|
|
|
|
}
|
|
|
|
switch sku.EffectTime {
|
|
|
|
case 1:
|
|
|
|
kind = user.Month
|
|
|
|
case 3:
|
|
|
|
kind = user.Third
|
|
|
|
case 12:
|
|
|
|
kind = user.Year
|
|
|
|
}
|
|
|
|
tx.Create(&user.VipHistory{
|
|
|
|
UserID: int(orderInfo.UserID),
|
|
|
|
Name: kind.Str(),
|
|
|
|
Start: &now,
|
|
|
|
End: &end,
|
|
|
|
Amount: orderInfo.ActualTotalAmount,
|
|
|
|
Level: u1.Level,
|
|
|
|
NickName: u1.Nickname,
|
|
|
|
Mobile: u1.Mobile,
|
|
|
|
Kind: kind,
|
|
|
|
ShareID: int(orderInfo.SharerID),
|
|
|
|
OrderID: uint64(orderInfo.ID),
|
|
|
|
})
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|