fix: promotion

master
howell 4 years ago
parent fc50d446a6
commit ddd0417117

@ -408,50 +408,23 @@ func GetGoodsRespByInfoList(goodsList []goods.Information, userID uint) []QueryC
salesVolume := v.SalesVolume
discountPrice := sku.DiscountPrice
commission := sku.Commission
now := time.Now()
var tags = make([]string, 0, 0)
var promotionGoods promotion.Goods
mysql2.Db.Select("id, promotion_name, start_time, end_time").First(&promotionGoods, "goods_id = ? AND start_time <= ? AND end_time >= ?", v.ID, now, now)
if promotionGoods.ID > 0 {
var promotionSku promotion.Sku
mysql2.Db.Select("SUM(inventory) AS inventory, SUM(sales_volume) AS sales_volume, MIN(discount_price) as discount_price , MIN(commission) as commission").
Where("promotion_goods_id = ?", promotionGoods.ID).
Group("promotion_goods_id").Find(&promotionSku)
discountPrice = promotionSku.DiscountPrice //活动的价格
//commission = promotionSku.Commission //活动的佣金
inventory = promotionSku.Inventory //活动的库存
startTime = promotionGoods.StartTime
endTime = promotionGoods.EndTime
// 打上特卖标签
tags = append(tags, "限时特卖")
} else { // 再判断商品明天会不会参加活动
mysql2.Db.Select("id, promotion_name").First(&promotionGoods, "goods_id = ? AND start_time > ? ", v.ID, now)
if promotionGoods.ID > 0 {
var promotionSku promotion.Sku
dbc.DB.Select("MIN(discount_price) AS discount_price, MIN(commission) AS commission").
Where("promotion_goods_id = ?", promotionGoods.ID).
Group("promotion_goods_id").
Find(&promotionSku)
startTime = promotionGoods.StartTime
endTime = promotionGoods.EndTime
}
}
tags := make([]string, 0)
// 查看是否是 新人特惠 商品
if isMember, _ := cache.IsMemberOfNewerTehui(strconv.Itoa(int(v.ID))); isMember {
tags = append(tags, "新人特惠")
}
rate := decimal.Zero
switch u.Level {
case 1:
rate = decimal.NewFromFloat(0.5)
case 2:
rate = decimal.NewFromFloat(0.7)
rate1 := decimal.NewFromFloat32(0.4)
rate2 := decimal.NewFromFloat32(0.1)
rate3 := decimal.Zero
if u.Level == 2 {
rate3 = decimal.NewFromFloat(0.2)
}
cost := sku.PurchasePrice.Mul(decimal.NewFromFloat(1.03))
commission = sku.DiscountPrice.Sub(cost).Mul(decimal.NewFromFloat(.93)).Mul(rate).Round(2)
base := sku.GetBase()
commission1 := base.Mul(rate1).Round(2)
commission2 := base.Mul(rate2).Round(2)
commission3 := base.Mul(rate3).Round(2)
commission = commission1.Add(commission2).Add(commission3)
recookGoodsInfoModel := &goods2.RecookGoodsInfoModel{}
space := " "

@ -555,14 +555,11 @@ func QueryGoodsDetailNew(c *gin.Context) {
}
var u1 user.RecookUserInfoModel
mysql2.Db.Find(&u1, "id = ?", p.UserID)
rate := decimal.Zero
{
switch u1.Level {
case 1:
rate = decimal.NewFromFloat(0.5)
case 2:
rate = decimal.NewFromFloat(0.7)
}
rate1 := decimal.NewFromFloat32(0.4)
rate2 := decimal.NewFromFloat32(0.1)
rate3 := decimal.Zero
if u1.Level == 2 {
rate3 = decimal.NewFromFloat(0.2)
}
var summary summaryResponseNew
@ -589,16 +586,26 @@ func QueryGoodsDetailNew(c *gin.Context) {
minCost := minAllPrice.PurchasePrice.Mul(decimal.NewFromFloat(1.03))
minbase := minAllPrice.DiscountPrice.Sub(minCost).Mul(decimal.NewFromFloat(.93)).Round(2)
minCommission1 := minbase.Mul(rate1).Round(2)
minCommission2 := minbase.Mul(rate2).Round(2)
minCommission3 := minbase.Mul(rate3).Round(2)
maxbase := maxAllPrice.DiscountPrice.Sub(minCost).Mul(decimal.NewFromFloat(.93)).Round(2)
maxCommission1 := maxbase.Mul(rate1).Round(2)
maxCommission2 := maxbase.Mul(rate2).Round(2)
maxCommission3 := maxbase.Mul(rate3).Round(2)
summary.Price = priceBorderSub{
priceSub{
OriginalPrice: minAllPrice.OriginalPrice,
DiscountPrice: minAllPrice.DiscountPrice,
Commission: minAllPrice.DiscountPrice.Sub(minCost).Mul(decimal.NewFromFloat(.93)).Mul(rate).Round(2),
Commission: minCommission1.Add(minCommission2).Add(minCommission3),
},
priceSub{
OriginalPrice: maxAllPrice.OriginalPrice,
DiscountPrice: maxAllPrice.DiscountPrice,
Commission: maxAllPrice.DiscountPrice.Sub(minCost).Mul(decimal.NewFromFloat(.93)).Mul(rate).Round(2),
Commission: maxCommission1.Add(maxCommission2).Add(maxCommission3),
},
}
if summary.IsFerme == goods2.RecookGoodsInfoIsFermeTrue {
@ -617,8 +624,11 @@ func QueryGoodsDetailNew(c *gin.Context) {
dbc.DB.Table((&goods.Sku{}).TableName()).Find(&(summary.Sku), "goods_id = ?", p.GoodsID)
for index, v := range summary.Sku {
skc := v.PurchasePrice.Mul(decimal.NewFromFloat32(1.03))
summary.Sku[index].Commission = v.DiscountPrice.Sub(skc).Mul(decimal.NewFromFloat(.93)).Mul(rate).Round(2)
skb := v.GetBase()
sc1 := skb.Mul(rate1).Round(2)
sc2 := skb.Mul(rate2).Round(2)
sc3 := skb.Mul(rate3).Round(2)
summary.Sku[index].Commission = sc1.Add(sc2).Add(sc3)
}
now := time.Now()
var promotionGoods promotion.Goods

@ -279,14 +279,11 @@ func QueryPromotionGoodsList(c *gin.Context) {
}
var u user2.RecookUserInfoModel
dbc.DB.First(&u, "id = ?", p.UserID)
rate := decimal.Zero
{
switch u.Level {
case 1:
rate = decimal.NewFromFloat(0.5)
case 2:
rate = decimal.NewFromFloat(0.7)
}
rate1 := decimal.NewFromFloat32(0.4)
rate2 := decimal.NewFromFloat32(0.1)
rate3 := decimal.Zero
if u.Level == 2 {
rate3 = decimal.NewFromFloat(0.2)
}
//p.TimeItemID=1275
@ -371,8 +368,11 @@ func QueryPromotionGoodsList(c *gin.Context) {
//存着有秒杀商品
one = GetSecKillDetail(v.GoodsID)
}
cost := goodsSku.PurchasePrice.Mul(decimal.NewFromFloat32(1.03))
cm := goodsSku.DiscountPrice.Sub(cost).Mul(decimal.NewFromFloat32(.93)).Mul(rate).Round(2)
base := goodsSku.GetBase()
commission1 := base.Mul(rate1).Round(2)
commission2 := base.Mul(rate2).Round(2)
commission3 := base.Mul(rate3).Round(2)
cm := commission1.Add(commission2).Add(commission3)
gList = append(gList, promotionGoods{
GoodsID: gi.ID,

@ -30,3 +30,9 @@ type Sku struct {
func (r *Sku) TableName() string {
return "recook_goods_sku"
}
func (r *Sku) GetBase() decimal.Decimal {
cost := r.PurchasePrice.Mul(decimal.NewFromFloat(1.03))
base := r.DiscountPrice.Sub(cost).Mul(decimal.NewFromFloat32(.93))
return base.Round(2)
}

@ -82,6 +82,12 @@ func (r *GoodsDetail) TableName() string {
return "recook_order_goods_detail"
}
func (r *GoodsDetail) GetBase() decimal.Decimal {
cost := r.PurchasePrice.Mul(decimal.NewFromFloat(1.03))
base := r.UnitPrice.Sub(cost).Mul(decimal.NewFromFloat32(.93))
return base.Round(2)
}
// 判断商品订单是否结束
func (r GoodsDetail) IsOrderGoodsEnd() bool {
// 成功

@ -15,8 +15,13 @@ func OrderProfit(od order.Information, tx *gorm.DB) error {
var s1 user.Information
tx.First(&s1, "id = ?", od.SharerID)
var ods []order.GoodsDetail
tx.Find(&ods, "order_id = ?", od.ID)
base := decimal.Zero
for _, v := range ods {
base = base.Add(v.GetBase().Mul(decimal.NewFromInt(int64(v.Quantity))))
}
condition := od.SharerID == od.UserID
base := od.GoodsTotalAmount.Sub(od.Cost.Mul(decimal.NewFromFloat32(1.03))).Mul(decimal.NewFromFloat32(.93)) // base
switch u1.Level {
case 0:
// 会员买

@ -100,11 +100,9 @@ func privateRefund(tx *gorm.DB, asGoods *after.RecookAfterSalesGoodsModel) error
var ods order.GoodsDetail
tx.First(&ods, "id = ?", asGoods.OrderGoodsId)
base := ods.GetBase().Mul(decimal.NewFromInt(int64(ods.Quantity)))
for i, v := range profit {
cost := ods.PurchasePrice.Mul(decimal.NewFromInt(int64(ods.Quantity))).Mul(decimal.NewFromFloat32(1.03))
a1 := ods.GoodsAmount.Sub(cost).Mul(decimal.NewFromFloat32(.93))
b2 := v.Base.Sub(a1)
b2 := v.Base.Sub(base)
if err := tx.Model(&profit[i]).Updates(map[string]interface{}{
"base": b2,
"income": b2.Mul(v.Type.GetProfit()).Round(2),

Binary file not shown.
Loading…
Cancel
Save