package test import ( "github.com/shopspring/decimal" ) // Material 结构体 type Material struct { ID string Name string `gorm:"type:varchar(191);not null;comment:物料名称" json:"name"` MaterialType MaterialType `gorm:"index;type:int(11);comment:物料类型(数字)" json:"materialType"` Model MaterialMode `gorm:"type:varchar(191);not null;comment:物料类型(字符串)" json:"model"` Specs string `gorm:"type:varchar(191);comment:物料规格" json:"specs"` Type string `gorm:"type:varchar(191);comment:物料型号" json:"type"` MinInventory decimal.Decimal `gorm:"type:decimal(35,18);comment:最小库存" json:"minInventory"` MaxInventory decimal.Decimal `gorm:"type:decimal(35,18);comment:最大库存" json:"maxInventory"` Amount decimal.Decimal `gorm:"type:decimal(35,18);comment:数量" json:"amount"` LockAmount decimal.Decimal `gorm:"type:decimal(35,18);default:0;comment:锁定数量" json:"lockAmount"` Unit string `gorm:"type:varchar(100);comment:单位" json:"unit"` TemplateID string `gorm:"type:varchar(191);comment:模板ID" json:"-"` Status MaterialStatus `gorm:"type:int(11);comment:状态" json:"status"` Supplier string `gorm:"type:varchar(191);comment:供应商" json:"supplier"` PurchasePrice decimal.Decimal `gorm:"type:decimal(35,18);comment:采购价格" json:"purchasePrice"` PurchaseAheadDay int `gorm:"type:int(11);comment:采购提前期(天)" json:"purchaseAheadDay"` ProduceAheadDay int `gorm:"type:int(11);comment:制造提前期(天)" json:"produceAheadDay"` MinPurchaseAmount decimal.Decimal `gorm:"type:decimal(35,18);comment:最小采购量" json:"minPurchaseAmount"` PurchaseType PurchaseType `gorm:"type:int(11);comment:采购类型" json:"purchaseType"` SalePrice decimal.Decimal `gorm:"type:decimal(35,18);comment:销售单价" json:"salePrice"` CategoryName string `gorm:"type:varchar(255);comment:产品类别名称" json:"categoryName"` //产品类别名称 IsStorage int `gorm:"type:tinyint(1);default:1;comment:是否存库(1是2否)" json:"isStorage"` //无库存的在wms以及srm中需要过滤掉 IsVirtual int `json:"isVirtual" gorm:"type:tinyint(1);default:2;comment:是否虚拟物料(1是2否)"` //虚拟物料在MRP计算时跳过该层级直接领用下级物料,虚拟物料不生成工单 } // PurchaseType 采购类型 type PurchaseType int const ( PurchaseTypeOutSource PurchaseType = iota + 1 // 采购 PurchaseTypeSelf // 自制 PurchaseTypeEntrust // 委外 ) type MaterialStatus int const ( MaterialStatusCreate MaterialStatus = iota // 新建 MaterialStatusActive // 启用 MaterialStatusInactive = -1 // 停用 ) // MaterialMode 物料类型(字符串) type MaterialMode string const ( MaterialModeRaw MaterialMode = "原材料" MaterialModeSemi MaterialMode = "半成品" MaterialModeFinished MaterialMode = "成品" MaterialModeAuxiliary MaterialMode = "辅料" //辅料 MaterialModeConsumables MaterialMode = "耗材" //耗材 MaterialModeOther MaterialMode = "其他" //其他 MaterialModeVirtual MaterialMode = "虚拟件" //虚拟件, 不能销售,不能出入库,不能采购 ) func (t MaterialMode) Valid() bool { if t != MaterialModeRaw && t != MaterialModeSemi && t != MaterialModeAuxiliary && t != MaterialModeConsumables && t != MaterialModeOther && t != MaterialModeFinished && t != MaterialModeVirtual { return false } return true } func (t MaterialMode) Type() MaterialType { switch t { case MaterialModeRaw: return MaterialTypeRaw case MaterialModeSemi: return MaterialTypeSemi case MaterialModeFinished: return MaterialTypeFinished case MaterialModeAuxiliary: return MaterialTypeAuxiliary case MaterialModeConsumables: return MaterialTypeConsumables case MaterialModeOther: return MaterialTypeOther case MaterialModeVirtual: return MaterialTypeVirtual } return MaterialType(0) } // MaterialType 物料类型(数字) type MaterialType int const ( MaterialTypeRaw = iota + 1 // 原材料 MaterialTypeSemi // 半成品 MaterialTypeFinished // 成品 MaterialTypeAuxiliary //辅料 MaterialTypeConsumables //耗材 MaterialTypeOther //其他 MaterialTypeVirtual //虚拟件 ) func (t MaterialType) Valid() bool { if t < MaterialTypeRaw || t > MaterialTypeVirtual { return false } return true } // TableName Product 表名 func (Material) TableName() string { return "material" }