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 }