package model import ( "ArmedPolice/app/common/model" "ArmedPolice/serve/orm" "fmt" ) type ManageMaterial struct { *model.ManageMaterial } type ( // ManageMaterialBasic 基本信息 ManageMaterialBasic struct { ID uint64 `json:"id"` Code string `json:"code"` Title string `json:"title"` Price float64 `json:"price"` ManufacturerName string `json:"manufacturer_name"` } ManageMaterialInfo struct { *model.ManageMaterial ManufacturerName string `json:"manufacturer_name"` // 制造商 SupplierName string `json:"supplier_name"` // 合作商 } ) // Basic 器材信息 func (m *ManageMaterial) Basic(where ...*model.ModelWhere) ([]*ManageMaterialBasic, error) { mManageSupplier := model.NewManageSupplier() db := orm.GetDB().Table(m.TableName()+" AS m"). Select("m.id", "m.code", "m.title", "m.price", "manufacturer.name AS manufacturer_name"). Joins(fmt.Sprintf("LEFT JOIN %s AS manufacturer ON m.manufacturer_id = manufacturer.id", mManageSupplier.TableName())) if len(where) > 0 { for _, wo := range where { db = db.Where(wo.Condition, wo.Value) } } out := make([]*ManageMaterialBasic, 0) if err := db.Scan(&out).Error; err != nil { return nil, err } return out, nil } // Materials 器材信息 func (m *ManageMaterial) Materials(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*ManageMaterialInfo, error) { mManageSupplier := model.NewManageSupplier() db := orm.GetDB().Table(m.TableName()+" AS m"). Select("m.*", "manufacturer.name AS manufacturer_name", "s.name AS supplier_name"). Joins(fmt.Sprintf("LEFT JOIN %s AS manufacturer ON m.manufacturer_id = manufacturer.id", mManageSupplier.TableName())). Joins(fmt.Sprintf("LEFT JOIN %s AS m_s ON m.id = m_s.material_id AND m_s.is_deleted = %d", model.NewManageMaterialSupplier().TableName(), model.DeleteStatusForNot)). Joins(fmt.Sprintf("LEFT JOIN %s AS s ON m_s.supplier_id = s.id", mManageSupplier.TableName())) if len(where) > 0 { for _, wo := range where { db = db.Where(wo.Condition, wo.Value) } } out := make([]*ManageMaterialInfo, 0) if err := db.Count(count).Error; err != nil { return nil, err } if err := db.Order("p.id " + model.OrderModeToDesc).Offset((page - 1) * pageSize).Limit(pageSize).Scan(&out).Error; err != nil { return nil, err } return out, nil } func NewManageMaterial() *ManageMaterial { return &ManageMaterial{model.NewManageMaterial()} }