feat: 添加批发收益

master
howell 4 years ago
parent a4d3e6c17e
commit a4a85f9638

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

@ -50,3 +50,7 @@ const (
CouponScopeUniversal = 0 // 通用
CouponScopeBrand = 1 // 品牌优惠券
)
const (
Coefficient = 0.92
)

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

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

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

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

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

Loading…
Cancel
Save