You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

186 lines
8.4 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package goods
import (
"recook/configs"
"recook/internal/v2/lib/db"
"recook/internal/v2/model/flashsale"
"strconv"
"github.com/jinzhu/gorm"
"github.com/shopspring/decimal"
)
type RecookGoodsSkuModel struct {
db.BaseModel
Id uint `gorm:"column:id;primary_key" json:"id"`
GoodsId uint `gorm:"column:goods_id" json:"goodsId"`
Name string `gorm:"column:name" json:"name"`
CombineId string `gorm:"column:combine_id" json:"combineId"`
PicURL string `gorm:"column:pic_url" json:"picUrl"`
Code string `gorm:"column:code" json:"code"`
PurchasePrice decimal.Decimal `gorm:"column:purchase_price" json:"purchasePrice"`
OriginalPrice decimal.Decimal `gorm:"column:original_price" json:"originalPrice"` // 原价
DiscountPrice decimal.Decimal `gorm:"column:discount_price" json:"discountPrice"` // 折扣价
CommissionRate decimal.Decimal `gorm:"column:commission_rate" json:"commissionRate"` // 佣金比
Commission decimal.Decimal `gorm:"column:commission" json:"commission"` // 佣金
ControlPrice decimal.Decimal `gorm:"column:control_price" json:"controlPrice"` // 供应商最低控价
SalesVolume uint `gorm:"column:sales_volume" json:"salesVolume"` // 销售量 销售量只简单累加
Inventory uint `gorm:"column:inventory" json:"inventory"` // 库存量 可以直接补货
SalesVolumeInc uint `gorm:"column:sales_volume_inc" json:"salesVolumeInc"` // 销售量的增量
Coupon decimal.Decimal `gorm:"column:coupon" json:"coupon"`
GoodsNum string `gorm:"column:goods_num" json:"goodsNum"` //商品货号
BmSkuId string `gorm:"column:bm_sku_id" json:"bm_sku_id"` //舶茂的skuid
BmShopId string `gorm:"column:bm_shop_id" json:"bm_shop_id"` //舶茂的商家id
ThirdPartySkuId string `gorm:"column:third_party_sku_id" json:"thirdPartySkuId"` //第三方skuid
ThirdPartyType int `gorm:"column:third_party_type" json:"thirdPartySkuType"` //第三方类型
TMallPrice string `gorm:"column:tmall_price" json:"tmallPrice"`
TMallUrl string `gorm:"column:tmall_url" json:"tmallUrl"`
JdPrice string `gorm:"column:jd_price" json:"jdPrice"`
JdUrl string `gorm:"column:jd_url" json:"jdUrl"`
GysSkuID uint `gorm:"gys_sku_id" json:"gys_sku_id"`
Invoice RecookSkuInvoiceModel `gorm:"foreignKey:SkuId" json:"invoice"`
DetailPhoto []RecookGoodsDetailPhotoModel `gorm:"foreignKey:GoodsID;references:GoodsId"`
Goods RecookGoodsInfoModel `gorm:"foreignKey:GoodsId"`
SecKill flashsale.RecookSecKillGoodsModel `gorm:"foreignKey:Id;references:GoodsSkuId"`
SecKillTemp flashsale.RecookSecKillGoodsModelTemp `gorm:"foreignKey:Id;references:GoodsSkuId"`
Length float64 `json:"length"`
Width float64 `json:"width"`
Height float64 `json:"height"`
Weight float64 `json:"weight"`
Limit int `json:"limit" gorm:"column:limit_num"`
Min int `json:"min" gorm:"column:min_num"`
SaleInventory uint `json:"sale_inventory"`
GoodsInfo *RecookGoodsInfoModel `json:"-" gorm:"foreignKey:goods_id"`
SalePurchasePrice decimal.Decimal `json:"sale_purchase_price" gorm:"column:sale_purchase_price"`
}
func (r *RecookGoodsSkuModel) GetSalePrice(level int) decimal.Decimal {
if r.SalePurchasePrice.IsZero() {
return decimal.Zero
}
if level == 10 {
return r.SalePurchasePrice.Mul(decimal.NewFromFloat(1.03)).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)
}
// TableName sets the insert table name for this struct type
func (r *RecookGoodsSkuModel) TableName() string {
return "recook_goods_sku"
}
// @Style 添加
func (r *RecookGoodsSkuModel) Create(data *RecookGoodsSkuModel) {
r.GetDb().Create(data)
}
// @Style 批量添加
func (r *RecookGoodsSkuModel) CreateAll(datas *[]RecookGoodsSkuModel) int64 {
valueStr := ""
values := []interface{}{}
for _, item := range *datas {
valueStr += ",(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
values = append(values,
item.GoodsId,
item.Name,
item.CombineId,
item.PicURL,
item.Code,
item.PurchasePrice,
item.OriginalPrice,
item.DiscountPrice,
item.CommissionRate,
item.Commission,
item.ControlPrice,
item.SalesVolume,
item.Inventory,
item.SalesVolumeInc,
item.Coupon,
item.GoodsNum,
item.TMallPrice,
item.TMallUrl,
item.JdPrice,
item.JdUrl,
)
}
if len(values) > 0 {
return r.GetDb().Exec("insert into recook_goods_sku(goods_id,name,combine_id,pic_url,code,purchase_price,original_price,discount_price,commission_rate,commission,control_price,sales_volume,inventory,sales_volume_inc,coupon,goods_num,tmall_price,tmall_url,jd_price,jd_url) values "+valueStr[1:], values...).RowsAffected
}
return 0
}
// @Style 添加
func (r *RecookGoodsSkuModel) UpdateByGoodsId(goodsId uint, data *RecookGoodsSkuModel) int64 {
return r.GetDb().Model(&RecookGoodsSkuModel{}).Where("goods_id = ?", goodsId).Update(data).RowsAffected
}
// @Style 添加
func (r *RecookGoodsSkuModel) Update(date map[string]interface{}, query interface{}, queryArgs ...interface{}) (result error) {
return r.GetDb().Model(&RecookGoodsSkuModel{}).Where(query, queryArgs...).Updates(date).Error
}
// @Style 查询
func (r *RecookGoodsSkuModel) FindByCodes(codes []string) (result RecookGoodsSkuModel) {
r.GetDb().First(&result, "code in (?)", codes)
return
}
// @Style 查询
func (r *RecookGoodsSkuModel) FindByGoodsId(goodsId uint) (result []RecookGoodsSkuModel) {
r.GetDb().Find(&result, "goods_id = ?", goodsId)
return
}
// @Style 查询
func (r *RecookGoodsSkuModel) FindByGoodsIds(goodsIds []uint) (result []RecookGoodsSkuModel) {
r.GetDb().Find(&result, "goods_id in (?)", goodsIds)
return
}
// @Style 获取列表数量
func (r *RecookGoodsSkuModel) GetGoodsSql(query interface{}, args ...interface{}) (result *gorm.SqlExpr) {
return r.GetDb().Model(&RecookGoodsSkuModel{}).Select("goods_id").Where(query, args...).SubQuery()
}
// FindByGoodsID 根据goodsID 查询skus.
func (r *RecookGoodsSkuModel) FindByGoodsID(by uint) (result []RecookGoodsSkuModel) {
r.GetDb().Find(&result, "goods_id = ?", by)
return
}
// GetSkuID 获取sku_id.
func (r *RecookGoodsSkuModel) GetSkuID() string {
return r.Code
}
// GetShopSkuID 获取shop_sku_id.
func (r *RecookGoodsSkuModel) GetShopSkuID() string {
return configs.ConfigJSTPrefix + "#" + strconv.Itoa(int(r.Id))
}
// FindByID 根据goodsID 查询sku.
func (r *RecookGoodsSkuModel) FindByID(by uint) (result RecookGoodsSkuModel) {
r.GetDb().Find(&result, "id = ?", by)
return
}
// FindBySkuCode 根据skuCode 查询sku.
func (r *RecookGoodsSkuModel) FindBySkuCode(by string) (result RecookGoodsSkuModel) {
r.GetDb().Find(&result, "code = ?", by)
return
}
//根据id来找到资料并修改库存字段
func (r *RecookGoodsSkuModel) SetInventoryById(id int, inventory int) {
r.GetDb().Model(&RecookGoodsSkuModel{}).Where("id=?", id).Update("inventory", inventory)
}
//根据code来查找RecookGoodsSkuModel
func (r *RecookGoodsSkuModel) FindByCode(code string) (result RecookGoodsSkuModel) {
r.GetDb().Find(&result, "code=?", code)
return
}