vendor_meta.go 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package model
  2. import (
  3. "github.com/QuantumNous/new-api/common"
  4. "gorm.io/gorm"
  5. )
  6. // Vendor 用于存储供应商信息,供模型引用
  7. // Name 唯一,用于在模型中关联
  8. // Icon 采用 @lobehub/icons 的图标名,前端可直接渲染
  9. // Status 预留字段,1 表示启用
  10. // 本表同样遵循 3NF 设计范式
  11. type Vendor struct {
  12. Id int `json:"id"`
  13. Name string `json:"name" gorm:"size:128;not null;uniqueIndex:uk_vendor_name_delete_at,priority:1"`
  14. Description string `json:"description,omitempty" gorm:"type:text"`
  15. Icon string `json:"icon,omitempty" gorm:"type:varchar(128)"`
  16. Status int `json:"status" gorm:"default:1"`
  17. CreatedTime int64 `json:"created_time" gorm:"bigint"`
  18. UpdatedTime int64 `json:"updated_time" gorm:"bigint"`
  19. DeletedAt gorm.DeletedAt `json:"-" gorm:"index;uniqueIndex:uk_vendor_name_delete_at,priority:2"`
  20. }
  21. // Insert 创建新的供应商记录
  22. func (v *Vendor) Insert() error {
  23. now := common.GetTimestamp()
  24. v.CreatedTime = now
  25. v.UpdatedTime = now
  26. return DB.Create(v).Error
  27. }
  28. // IsVendorNameDuplicated 检查供应商名称是否重复(排除自身 ID)
  29. func IsVendorNameDuplicated(id int, name string) (bool, error) {
  30. if name == "" {
  31. return false, nil
  32. }
  33. var cnt int64
  34. err := DB.Model(&Vendor{}).Where("name = ? AND id <> ?", name, id).Count(&cnt).Error
  35. return cnt > 0, err
  36. }
  37. // Update 更新供应商记录
  38. func (v *Vendor) Update() error {
  39. v.UpdatedTime = common.GetTimestamp()
  40. return DB.Save(v).Error
  41. }
  42. // Delete 软删除供应商
  43. func (v *Vendor) Delete() error {
  44. return DB.Delete(v).Error
  45. }
  46. // GetVendorByID 根据 ID 获取供应商
  47. func GetVendorByID(id int) (*Vendor, error) {
  48. var v Vendor
  49. err := DB.First(&v, id).Error
  50. if err != nil {
  51. return nil, err
  52. }
  53. return &v, nil
  54. }
  55. // GetAllVendors 获取全部供应商(分页)
  56. func GetAllVendors(offset int, limit int) ([]*Vendor, error) {
  57. var vendors []*Vendor
  58. err := DB.Offset(offset).Limit(limit).Find(&vendors).Error
  59. return vendors, err
  60. }
  61. // SearchVendors 按关键字搜索供应商
  62. func SearchVendors(keyword string, offset int, limit int) ([]*Vendor, int64, error) {
  63. db := DB.Model(&Vendor{})
  64. if keyword != "" {
  65. like := "%" + keyword + "%"
  66. db = db.Where("name LIKE ? OR description LIKE ?", like, like)
  67. }
  68. var total int64
  69. if err := db.Count(&total).Error; err != nil {
  70. return nil, 0, err
  71. }
  72. var vendors []*Vendor
  73. if err := db.Offset(offset).Limit(limit).Order("id DESC").Find(&vendors).Error; err != nil {
  74. return nil, 0, err
  75. }
  76. return vendors, total, nil
  77. }