96 lines
3.3 KiB
Go
Executable File
96 lines
3.3 KiB
Go
Executable File
package gmodel
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type FsProductPrice struct {
|
|
Id int64 `gorm:"primary_key" json:"id"`
|
|
Sn *string `gorm:"default:''" json:"sn"` // 唯一编码
|
|
Title *string `gorm:"default:''" json:"title"` // 标题描述
|
|
ProductId *int64 `gorm:"default:0" json:"product_id"` // 产品ID
|
|
MaterialId *int64 `gorm:"default:0" json:"material_id"` // 材质ID
|
|
SizeId *int64 `gorm:"default:0" json:"size_id"` // 尺寸ID
|
|
EachBoxNum *int64 `gorm:"default:0" json:"each_box_num"` // 每一箱的个数
|
|
EachBoxWeight *float64 `gorm:"default:0" json:"each_box_weight"` // 每一箱的重量 单位KG
|
|
MinBuyNum *int64 `gorm:"default:0" json:"min_buy_num"` // 最少购买量
|
|
StepNum *string `gorm:"default:''" json:"step_num"` // 数量阶梯 eg:10,20,30
|
|
StepPrice *string `gorm:"default:''" json:"step_price"` // 价格阶梯 eg:100,50,25
|
|
Status *int64 `gorm:"default:1" json:"status"` // 是否可用
|
|
IsDefault *int64 `gorm:"default:0" json:"is_default"` // 是否默认
|
|
}
|
|
type FsProductPriceModel struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewFsProductPriceModel(db *gorm.DB) *FsProductPriceModel {
|
|
return &FsProductPriceModel{db}
|
|
}
|
|
|
|
type GetPriceListByProductIdsRsp struct {
|
|
ProductId int64 `json:"product_id"`
|
|
Price string `json:"price"`
|
|
}
|
|
|
|
func (p *FsProductPriceModel) GetSimplePriceListByProductIds(ctx context.Context, productIds []int64) (resp []GetPriceListByProductIdsRsp, err error) {
|
|
if len(productIds) == 0 {
|
|
return nil, nil
|
|
}
|
|
db := p.db.WithContext(ctx).Model(&FsProductPrice{}).Select("product_id,group_concat(step_price) as price").
|
|
Where("`product_id` in (?) and `status` = ? group by product_id", productIds, 1)
|
|
if err = db.Find(&resp).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
func (p *FsProductPriceModel) GetPriceListBySizeIds(ctx context.Context, sizeIds []int64) (resp []FsProductPrice, err error) {
|
|
if len(sizeIds) == 0 {
|
|
return
|
|
}
|
|
err = p.db.WithContext(ctx).Model(&FsProductPrice{}).Where("`size_id` in (?) and `status` = ? ", sizeIds, 1).Find(&resp).Error
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
type FindOneProductPriceByParamsReq struct {
|
|
ProductId *int64
|
|
MaterialId *int64
|
|
SizeId *int64
|
|
Status *int64
|
|
}
|
|
|
|
func (p *FsProductPriceModel) FindOneProductPriceByParams(ctx context.Context, req FindOneProductPriceByParamsReq) (resp FsProductPrice, err error) {
|
|
db := p.db.WithContext(ctx).Model(&FsProductPrice{})
|
|
if req.ProductId != nil {
|
|
db = db.Where("`product_id` = ?", *req.ProductId)
|
|
}
|
|
if req.MaterialId != nil {
|
|
db = db.Where("`material_id` = ?", *req.MaterialId)
|
|
}
|
|
if req.SizeId != nil {
|
|
db = db.Where("`size_id` = ?", *req.SizeId)
|
|
}
|
|
if req.Status != nil {
|
|
db = db.Where("`status` = ?", *req.Status)
|
|
}
|
|
if err = db.First(&resp).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
|
return FsProductPrice{}, err
|
|
}
|
|
return resp, nil
|
|
}
|
|
func (p *FsProductPriceModel) GetPriceListByProductIds(ctx context.Context, productIds []int64) (resp []FsProductPrice, err error) {
|
|
if len(productIds) == 0 {
|
|
return nil, nil
|
|
}
|
|
db := p.db.WithContext(ctx).Model(&FsProductPrice{}).
|
|
Where("`product_id` in (?) and `status` = ?", productIds, 1)
|
|
if err = db.Find(&resp).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|