feat(server-go): 耗材管理(库存/预警/采购建议,#16)
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
package model
|
||||
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Consumable 耗材
|
||||
type Consumable struct {
|
||||
ID string `gorm:"type:uuid;primaryKey;default:gen_random_uuid()" json:"id"`
|
||||
Name string `gorm:"size:64" json:"name"`
|
||||
Category string `gorm:"size:32;index" json:"category"` // lamp_reagent/lamp_consumable/disinfectant/other
|
||||
Spec *string `gorm:"size:128" json:"spec,omitempty"`
|
||||
Quantity float64 `gorm:"type:float" json:"quantity"`
|
||||
Unit *string `gorm:"size:32" json:"unit,omitempty"`
|
||||
MinQuantity float64 `gorm:"column:min_quantity;type:float" json:"minQuantity"`
|
||||
ExpiryDate *time.Time `gorm:"column:expiry_date;type:timestamptz" json:"expiryDate,omitempty"`
|
||||
Supplier *string `gorm:"size:128" json:"supplier,omitempty"`
|
||||
Note *string `gorm:"type:text" json:"note,omitempty"`
|
||||
CreatedAt time.Time `gorm:"type:timestamptz" json:"createdAt"`
|
||||
UpdatedAt time.Time `gorm:"type:timestamptz" json:"updatedAt"`
|
||||
}
|
||||
|
||||
func (Consumable) TableName() string { return "consumables" }
|
||||
|
||||
// LowStockAlert 库存低于安全阈值
|
||||
func (c Consumable) LowStockAlert() bool {
|
||||
return c.Quantity < c.MinQuantity
|
||||
}
|
||||
|
||||
// ExpiringAlert 效期在 days 天内到期(含已过期)
|
||||
func (c Consumable) ExpiringAlert(days int) bool {
|
||||
if c.ExpiryDate == nil {
|
||||
return false
|
||||
}
|
||||
return !c.ExpiryDate.After(time.Now().Add(time.Duration(days) * 24 * time.Hour))
|
||||
}
|
||||
|
||||
// PurchaseSuggestion 建议采购量(低于安全阈值时补足差额,向上取整)
|
||||
func (c Consumable) PurchaseSuggestion() float64 {
|
||||
if !c.LowStockAlert() {
|
||||
return 0
|
||||
}
|
||||
return math.Ceil(c.MinQuantity - c.Quantity)
|
||||
}
|
||||
Reference in New Issue
Block a user