package models // Recipe 配方模型 type Recipe struct { Model Name string `gorm:"size:100;not null;comment:配方名称"` Description string `gorm:"size:255;comment:配方描述"` // RecipeIngredients 关联此配方的所有原料组成 RecipeIngredients []RecipeIngredient `gorm:"foreignKey:RecipeID"` } func (Recipe) TableName() string { return "recipes" } // CalculateTotalRawMaterialProportion 计算配方中所有原料的总比例 func (r Recipe) CalculateTotalRawMaterialProportion() float32 { var totalPercentage float32 for _, ingredient := range r.RecipeIngredients { totalPercentage += ingredient.Percentage } return totalPercentage } // CalculateReferencePricePerKilogram 根据原料参考价计算配方每公斤的成本 func (r Recipe) CalculateReferencePricePerKilogram() float32 { var totalCost float32 for _, ingredient := range r.RecipeIngredients { // 确保 RawMaterial 已经被加载 if ingredient.RawMaterial.ID == 0 { return 0.0 } totalCost += ingredient.RawMaterial.ReferencePrice * ingredient.Percentage } return totalCost } // RecipeIngredient 配方原料组成模型 type RecipeIngredient struct { Model RecipeID uint32 `gorm:"not null;comment:关联的配方ID"` Recipe Recipe `gorm:"foreignKey:RecipeID"` RawMaterialID uint32 `gorm:"not null;comment:关联的原料ID"` RawMaterial RawMaterial `gorm:"foreignKey:RawMaterialID"` // 重量百分比 Percentage float32 `gorm:"not null;comment:原料在配方中的百分比 (0-1之间的小数, 例如0.15代表15%)"` } func (RecipeIngredient) TableName() string { return "recipe_ingredients" }