diff --git a/internal/api/mobile/goods/detail.go b/internal/api/mobile/goods/detail.go index baab40e..7727963 100644 --- a/internal/api/mobile/goods/detail.go +++ b/internal/api/mobile/goods/detail.go @@ -593,12 +593,12 @@ func QueryGoodsDetailNew(c *gin.Context) { minCost := minAllPrice.PurchasePrice.Mul(decimal.NewFromFloat(1.03)) - minbase := minAllPrice.DiscountPrice.Sub(minCost).Mul(decimal.NewFromFloat(.92)).Round(2) + minbase := minAllPrice.DiscountPrice.Sub(minCost).Mul(decimal.NewFromFloat(define.Coefficient)).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(.92)).Round(2) + maxbase := maxAllPrice.DiscountPrice.Sub(minCost).Mul(decimal.NewFromFloat(define.Coefficient)).Round(2) maxCommission1 := maxbase.Mul(rate1).Round(2) maxCommission2 := maxbase.Mul(rate2).Round(2) maxCommission3 := maxbase.Mul(rate3).Round(2) diff --git a/internal/define/constant.go b/internal/define/constant.go index 1e0275b..3eea8d7 100755 --- a/internal/define/constant.go +++ b/internal/define/constant.go @@ -50,3 +50,7 @@ const ( CouponScopeUniversal = 0 // 通用 CouponScopeBrand = 1 // 品牌优惠券 ) + +const ( + Coefficient = 0.92 +) diff --git a/internal/model/goods/sku.go b/internal/model/goods/sku.go index 12dffa2..4f6827d 100755 --- a/internal/model/goods/sku.go +++ b/internal/model/goods/sku.go @@ -1,6 +1,9 @@ package goods -import "github.com/shopspring/decimal" +import ( + "github.com/shopspring/decimal" + "recook/internal/define" +) type Sku struct { ID uint `gorm:"column:id;primary_key" json:"id"` @@ -33,6 +36,6 @@ func (r *Sku) TableName() string { func (r *Sku) GetBase() decimal.Decimal { cost := r.PurchasePrice.Mul(decimal.NewFromFloat(1.03)) - base := r.DiscountPrice.Sub(cost).Mul(decimal.NewFromFloat32(.92)) + base := r.DiscountPrice.Sub(cost).Mul(decimal.NewFromFloat32(define.Coefficient)) return base.Round(2) } diff --git a/internal/model/order/goods_detail.go b/internal/model/order/goods_detail.go index dae2131..c30de13 100755 --- a/internal/model/order/goods_detail.go +++ b/internal/model/order/goods_detail.go @@ -1,6 +1,7 @@ package order import ( + "recook/internal/define" "recook/internal/model/order_preview" "github.com/golangkit/formatime" @@ -84,7 +85,7 @@ func (r *GoodsDetail) TableName() string { func (r *GoodsDetail) GetBase() decimal.Decimal { cost := r.PurchasePrice.Mul(decimal.NewFromFloat(1.03)) - base := r.UnitPrice.Sub(cost).Mul(decimal.NewFromFloat32(.92)) + base := r.UnitPrice.Sub(cost).Mul(decimal.NewFromFloat32(define.Coefficient)) return base.Round(2) } diff --git a/internal/model/order/jyy.go b/internal/model/order/jyy.go index 3b2aa80..e719f87 100644 --- a/internal/model/order/jyy.go +++ b/internal/model/order/jyy.go @@ -30,6 +30,7 @@ const ( Shop Company All + Sale ) var profitStr = map[IncomeType]string{ @@ -39,6 +40,7 @@ var profitStr = map[IncomeType]string{ Shop: "开店补贴", Company: "店铺补贴", All: "子公司自购导购收益", + Sale: "批发收益", } func (o IncomeType) GetStr() string { @@ -52,6 +54,7 @@ var profitMap = map[IncomeType]decimal.Decimal{ Shop: decimal.NewFromFloat(0.2), Company: decimal.NewFromFloat(0.3), All: decimal.NewFromFloat(1), + Sale: decimal.NewFromFloat(1), } func (o IncomeType) GetProfit() decimal.Decimal { diff --git a/internal/service/app/shop/benefit.go b/internal/service/app/shop/benefit.go index 24b8bd1..0556b3f 100644 --- a/internal/service/app/shop/benefit.go +++ b/internal/service/app/shop/benefit.go @@ -1,6 +1,7 @@ package shop import ( + "recook/internal/define" "recook/internal/model/order" "recook/internal/model/user" @@ -22,81 +23,99 @@ func OrderProfit(od order.Information, tx *gorm.DB) error { base = base.Add(v.GetBase().Mul(decimal.NewFromInt(int64(v.Quantity)))) } condition := od.SharerID == od.UserID - switch u1.Level { - case 0: - // 会员买 - if condition { - // 自购平台100% - return nil - } else if s1.Level != 0 { - // 40%导购补贴 - if err := tx.Create(order.CreateProfit(od.SharerID, order.Guide, base, od.ID)).Error; err != nil { - return err + switch od.OrderType { + case 1: // 零售收益 + switch u1.Level { + case 0: + // 会员买 + if condition { + // 自购平台100% + return nil + } else if s1.Level != 0 { + // 40%导购补贴 + if err := tx.Create(order.CreateProfit(od.SharerID, order.Guide, base, od.ID)).Error; err != nil { + return err + } + // 10%品牌补贴 + if err := tx.Create(order.CreateProfit(od.SharerID, order.Brand, base, od.ID)).Error; err != nil { + return err + } + spID := od.SharerID + if s1.Level == 1 { + var sp1 user.Information + if err := tx.First(&sp1, "id = ?", s1.ParentID).Error; err != nil { + return err + } + spID = sp1.ID + } + // 20%开店补贴 + if err := tx.Create(order.CreateProfit(spID, order.Shop, base, od.ID)).Error; err != nil { + return err + } + // 30%店铺补贴 + if err := tx.Create(order.CreateProfit(u1.RootID, order.Company, base, od.ID)).Error; err != nil { + return err + } } - // 10%品牌补贴 - if err := tx.Create(order.CreateProfit(od.SharerID, order.Brand, base, od.ID)).Error; err != nil { + case 1: + // 店主买 + if err := tx.Create(order.CreateProfit(od.UserID, order.Self, base, od.ID)).Error; err != nil { return err } - spID := od.SharerID - if s1.Level == 1 { - var sp1 user.Information - if err := tx.First(&sp1, "id = ?", s1.ParentID).Error; err != nil { - return err - } - spID = sp1.ID + + if err := tx.Create(order.CreateProfit(od.UserID, order.Brand, base, od.ID)).Error; err != nil { + return err } - // 20%开店补贴 - if err := tx.Create(order.CreateProfit(spID, order.Shop, base, od.ID)).Error; err != nil { + + if err := tx.Create(order.CreateProfit(u1.ParentID, order.Shop, base, od.ID)).Error; err != nil { return err } // 30%店铺补贴 if err := tx.Create(order.CreateProfit(u1.RootID, order.Company, base, od.ID)).Error; err != nil { return err } - } - case 1: - // 店主买 - if err := tx.Create(order.CreateProfit(od.UserID, order.Self, base, od.ID)).Error; err != nil { - return err - } + case 2: + // 店铺买 + r1 := order.CreateProfit(od.UserID, order.Self, base, od.ID) + r2 := order.CreateProfit(od.UserID, order.Brand, base, od.ID) + r3 := order.CreateProfit(od.UserID, order.Shop, base, od.ID) + if err := tx.Create(r1).Error; err != nil { + return err + } - if err := tx.Create(order.CreateProfit(od.UserID, order.Brand, base, od.ID)).Error; err != nil { - return err - } + if err := tx.Create(r2).Error; err != nil { + return err + } - if err := tx.Create(order.CreateProfit(u1.ParentID, order.Shop, base, od.ID)).Error; err != nil { - return err - } - // 30%店铺补贴 - if err := tx.Create(order.CreateProfit(u1.RootID, order.Company, base, od.ID)).Error; err != nil { - return err - } - case 2: - // 店铺买 - r1 := order.CreateProfit(od.UserID, order.Self, base, od.ID) - r2 := order.CreateProfit(od.UserID, order.Brand, base, od.ID) - r3 := order.CreateProfit(od.UserID, order.Shop, base, od.ID) - if err := tx.Create(r1).Error; err != nil { - return err - } + if err := tx.Create(r3).Error; err != nil { + return err + } - if err := tx.Create(r2).Error; err != nil { - return err + // 30%店铺补贴 + if err := tx.Create(order.CreateProfit(u1.RootID, order.Company, base, od.ID)).Error; err != nil { + return err + } + case 10: + // 子公司 100%自购 + if err := tx.Create(order.CreateProfit(od.UserID, order.All, base, od.ID)).Error; err != nil { + return err + } } - - if err := tx.Create(r3).Error; err != nil { - return err + case 2: // 批发收益 + if u1.Level == 2 && u1.IsOffline { + // 实体店产生批发收益给子公司 + extraBase := decimal.Zero + for _, v := range ods { + extra := v.UnitPrice.Sub(v.PurchasePrice).Mul(decimal.NewFromFloat(0.2)).Round(2) + extraBase = extraBase.Add( + extra.Mul(decimal.NewFromFloat(define.Coefficient).Round(2)).Mul(decimal.NewFromInt(int64(v.Quantity)))) + } + if err := tx.Create(order.CreateProfit(u1.RootID, order.Sale, base, od.ID)).Error; err != nil { + return err + } } - // 30%店铺补贴 - if err := tx.Create(order.CreateProfit(u1.RootID, order.Company, base, od.ID)).Error; err != nil { - return err - } - case 10: - // 子公司 100%自购 - if err := tx.Create(order.CreateProfit(od.UserID, order.All, base, od.ID)).Error; err != nil { - return err - } } + return nil } diff --git a/internal/v2/model/recook/order/recookOrderGoodsDetail.go b/internal/v2/model/recook/order/recookOrderGoodsDetail.go index ce545d8..4470d38 100644 --- a/internal/v2/model/recook/order/recookOrderGoodsDetail.go +++ b/internal/v2/model/recook/order/recookOrderGoodsDetail.go @@ -1,6 +1,7 @@ package manage import ( + "recook/internal/define" "recook/internal/model/user" "recook/internal/v2/lib/db" "recook/internal/v2/model/gys/enterprise" @@ -124,7 +125,7 @@ func (r *RecookOrderGoodsDetailModel) TableName() string { func (r *RecookOrderGoodsDetailModel) GetBase() decimal.Decimal { cost := r.PurchasePrice.Mul(decimal.NewFromFloat(1.03)) - base := r.UnitPrice.Sub(cost).Mul(decimal.NewFromFloat32(.92)) + base := r.UnitPrice.Sub(cost).Mul(decimal.NewFromFloat32(define.Coefficient)) return base.Round(2) }