package services import ( "fmt" "strconv" "time" "server/models" "github.com/beego/beego/v2/client/orm" ) // ListSuppliers 获取供应商列表(可选租户过滤、关键词搜索、状态筛选、分页) func ListSuppliers(tenantId, keyword, status string, page, pageSize int) (list []*models.Supplier, total int64, err error) { o := orm.NewOrm() qs := o.QueryTable(new(models.Supplier)).Filter("delete_time__isnull", true) if tenantId != "" { qs = qs.Filter("tenant_id", tenantId) } if keyword != "" { cond := orm.NewCondition() cond1 := cond.Or("supplier_name__icontains", keyword). Or("contact_person__icontains", keyword). Or("contact_phone__icontains", keyword) qs = qs.SetCond(cond1) } if status != "" { qs = qs.Filter("status", status) } total, err = qs.Count() if err != nil { return } if page <= 0 { page = 1 } if pageSize <= 0 { pageSize = 10 } offset := (page - 1) * pageSize _, err = qs.OrderBy("-create_time").Limit(pageSize, offset).All(&list) return } // GetSupplier 通过ID获取供应商 func GetSupplier(id int64) (*models.Supplier, error) { o := orm.NewOrm() m := models.Supplier{Id: id} if err := o.Read(&m); err != nil { return nil, err } return &m, nil } // CreateSupplier 新增供应商 func CreateSupplier(m *models.Supplier) error { o := orm.NewOrm() _, err := o.Insert(m) return err } // UpdateSupplier 更新供应商(全量更新) func UpdateSupplier(m *models.Supplier, cols ...string) error { o := orm.NewOrm() if len(cols) == 0 { _, err := o.Update(m) return err } _, err := o.Update(m, cols...) return err } // SoftDeleteSupplier 软删除供应商 func SoftDeleteSupplier(id int64) error { o := orm.NewOrm() now := time.Now() m := models.Supplier{Id: id, DeleteTime: &now} _, err := o.Update(&m, "delete_time") return err } // 更新供应商开票信息 func UpdateSupplierInvoice(params orm.Params) error { o := orm.NewOrm() // Extract id from params idVal, ok := params["id"] if !ok || idVal == "" { return fmt.Errorf("id is required") } var id int64 switch v := idVal.(type) { case int64: id = v case int: id = int64(v) case float64: id = int64(v) case string: if v == "" { return fmt.Errorf("id is required") } n, err := strconv.ParseInt(v, 10, 64) if err != nil { return fmt.Errorf("invalid id: %v", err) } id = n default: return fmt.Errorf("invalid id type") } delete(params, "id") // remove id from update fields if _, err := o.QueryTable(new(models.Supplier)).Filter("id", id).Update(params); err != nil { return err } return nil }