fix: 修改抵扣逻辑

master
howell 3 years ago
parent d2dc582b82
commit fd04b0a6b6

@ -50,10 +50,10 @@ func CreatePreviewNormalOrder(c *gin.Context) {
return
}
if p.Quantity > 50 {
back.Fail(c, "单件最多拍50件")
return
}
//if p.Quantity > 50 {
// back.Fail(c, "单件最多拍50件")
// return
//}
var ancestorID uint = 0
var myInfo user.Information
@ -94,7 +94,9 @@ func CreatePreviewNormalOrder(c *gin.Context) {
back.Err(c, err.Error())
return
}
cost = cost.Add(cost.Add(sku.PurchasePrice.Mul(decimal.NewFromInt(int64(p.Quantity)))))
q := decimal.NewFromInt(int64(p.Quantity))
cost = cost.Add(cost.Add(sku.PurchasePrice.Mul(q)))
coinReducePrice = coinReducePrice.Add(sku.GetSelfProfit(myInfo.Level).Mul(q))
}
var promotionGoods promotion.Goods
@ -290,7 +292,7 @@ func CreatePreviewNormalOrder(c *gin.Context) {
vendorName = vendor.Username
}
}
actualAmount = unitPrice.Mul(decimal.NewFromInt(int64(p.Quantity))).Add(expressFee)
actualAmount = unitPrice.Mul(decimal.NewFromInt(int64(p.Quantity))).Add(expressFee).Sub(coinReducePrice)
tx := dbc.DB.Begin()
{

@ -196,7 +196,8 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
}
brandInfo, _ := brandMap[goodsInfo.BrandID]
coinAmount := sku.GetSelfProfit(myInfo.Level).Mul(decimal.NewFromInt(int64(v.Quantity)))
goodsAmount := unitPrice.Mul(decimal.NewFromInt(int64(v.Quantity)))
one := order_preview.GoodsDetail{
VendorID: goodsInfo.VendorID,
VendorName: vendorName,
@ -222,10 +223,12 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
UnitPrice: unitPrice,
PurchasePrice: sku.PurchasePrice,
TotalCommission: commission.Mul(decimal.NewFromInt(int64(v.Quantity))),
GoodsAmount: unitPrice.Mul(decimal.NewFromInt(int64(v.Quantity))),
GoodsAmount: goodsAmount,
IsImport: goodsInfo.IsImport,
Storehouse: goodsInfo.Storehouse,
IsFerme: goodsInfo.IsFerme,
CoinAmount: coinAmount,
ActualAmount: goodsAmount.Sub(coinAmount),
}
preOrderGoodsList = append(preOrderGoodsList, &one)
goodsTotalAmount = goodsTotalAmount.Add(one.GoodsAmount)
@ -322,6 +325,8 @@ func CreatePreviewShoppingTrolleyOrder(c *gin.Context) {
return
}
goodsTotalCommission = goodsTotalCommission.Add(v.TotalCommission)
coinTotalAmount = coinTotalAmount.Add(v.CoinAmount)
actualTotalAmount = actualTotalAmount.Sub(coinTotalAmount) // 减去抵扣
}
if actualTotalAmount.LessThan(decimal.NewFromFloat(-0.01)) {

@ -1,9 +1,9 @@
package goods
import (
"recook/internal/define"
"github.com/shopspring/decimal"
"recook/internal/define"
"recook/internal/model/order"
)
type Sku struct {
@ -46,14 +46,37 @@ func (r *Sku) GetBase() decimal.Decimal {
return base.Round(2)
}
func (o *Sku) GetSalePrice(level int) decimal.Decimal {
if o.SalePurchasePrice.IsZero() {
func (r *Sku) GetSelfProfit(level int) decimal.Decimal {
base := r.GetBase()
switch level {
case 0:
return decimal.Zero
case 1:
self := base.Mul(order.Self.GetProfit())
brand := base.Mul(order.Brand.GetProfit())
return self.Add(brand)
case 2:
// 店铺买
self := base.Mul(order.Self.GetProfit())
brand := base.Mul(order.Brand.GetProfit())
shop := base.Mul(order.Shop.GetProfit())
return self.Add(brand).Add(shop)
case 10:
// 子公司 100%自购
return base.Mul(order.All.GetProfit())
default:
return decimal.Zero
}
}
func (r *Sku) GetSalePrice(level int) decimal.Decimal {
if r.SalePurchasePrice.IsZero() {
return decimal.Zero
}
if level == 10 {
return o.SalePurchasePrice.Mul(decimal.NewFromFloat(1.03)).Round(2)
return r.SalePurchasePrice.Mul(decimal.NewFromFloat(1.03)).Round(2)
}
s1 := o.SalePurchasePrice.Mul(decimal.NewFromFloat(1.03)).Round(2).Mul(decimal.NewFromFloat(1.2)).Round(2)
// s1 = s1.Add(o.DiscountPrice.Sub(o.SalePurchasePrice.Mul(decimal.NewFromFloat(1.03))).Mul(decimal.NewFromFloat(0.2)).Round(2))
s1 := r.SalePurchasePrice.Mul(decimal.NewFromFloat(1.03)).Round(2).Mul(decimal.NewFromFloat(1.2)).Round(2)
// s1 = s1.Add(r.DiscountPrice.Sub(r.SalePurchasePrice.Mul(decimal.NewFromFloat(1.03))).Mul(decimal.NewFromFloat(0.2)).Round(2))
return s1.Round(2)
}

@ -66,13 +66,13 @@ func OrderProfit(od order.Information, tx *gorm.DB) error {
}
case 1:
// 店主买
if err := tx.Create(order.CreateProfit(od.UserID, order.Self, base, od.ID)).Error; err != nil {
return err
}
//if err := tx.Create(order.CreateProfit(od.UserID, order.Self, base, od.ID)).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(order.CreateProfit(od.UserID, order.Brand, base, od.ID)).Error; err != nil {
// return err
//}
if err := tx.Create(order.CreateProfit(u1.ParentID, order.Shop, base, od.ID)).Error; err != nil {
return err
@ -83,20 +83,20 @@ func OrderProfit(od order.Information, tx *gorm.DB) error {
}
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(r2).Error; err != nil {
return err
}
if err := tx.Create(r3).Error; err != nil {
return err
}
//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(r2).Error; err != nil {
// return err
//}
//
//if err := tx.Create(r3).Error; err != nil {
// return err
//}
// 30%店铺补贴
if err := tx.Create(order.CreateProfit(u1.RootID, order.Company, base, od.ID)).Error; err != nil {
@ -104,9 +104,9 @@ func OrderProfit(od order.Information, tx *gorm.DB) error {
}
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(order.CreateProfit(od.UserID, order.All, base, od.ID)).Error; err != nil {
// return err
//}
}
case 2: // 批发收益
if u1.Level == 2 && u1.IsOffline {

Loading…
Cancel
Save