zhangqian
2024-03-19 7d80867c1d2d8340da8e106b4af2ceaba3fc9fc1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
package model
 
import (
    "aps_crm/pkg/mysqlx"
    "github.com/shopspring/decimal"
    "gorm.io/gorm"
)
 
type (
    Product struct {
        Id         uint            `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"`
        Name       string          `json:"name" gorm:"column:name;type:varchar(255);comment:产品名称"`
        Price      decimal.Decimal `json:"price" gorm:"column:price;type:decimal(10,2);comment:产品价格"`
        Number     string          `json:"number" gorm:"column:number;type:varchar(255);comment:产品编号"`
        Amount     decimal.Decimal `json:"amount" gorm:"column:amount;type:decimal(12,2);comment:产品数量"`
        Total      decimal.Decimal `json:"total" gorm:"column:total;type:decimal(10,2);comment:产品总价"`
        Desc       string          `json:"desc" gorm:"column:desc;type:varchar(255);comment:产品描述"`
        Unit       string          `json:"unit" gorm:"column:unit;type:varchar(255);comment:单位"`
        Cost       string          `json:"cost" gorm:"column:cost;type:varchar(255);comment:产品成本"`
        Profit     string          `json:"profit" gorm:"column:profit;type:varchar(255);comment:毛利"`
        Margin     string          `json:"margin" gorm:"column:margin;type:varchar(255);comment:毛利率"`
        Specs      string          `gorm:"type:varchar(191);comment:物料规格" json:"specs"`
        Type       string          `gorm:"type:varchar(191);comment:物料型号" json:"type"`
        gorm.Model `json:"-"`
    }
 
    ProductSearch struct {
        Product
        Ids []uint
        Orm *gorm.DB
    }
)
 
func (Product) TableName() string {
    return "products"
}
 
func NewProductSearch(db *gorm.DB) *ProductSearch {
    if db == nil {
        db = mysqlx.GetDB()
    }
 
    return &ProductSearch{
        Orm: db,
    }
}
 
func (slf *ProductSearch) build() *gorm.DB {
    var db = slf.Orm.Model(&Product{})
    if slf.Id != 0 {
        db = db.Where("id = ?", slf.Id)
    }
    if slf.Name != "" {
        db = db.Where("name = ?", slf.Name)
    }
    if len(slf.Ids) != 0 {
        db = db.Where("id in ?", slf.Ids)
    }
 
    return db
}
 
// Create 创建
func (slf *ProductSearch) Create(record *Product) error {
    var db = slf.build()
    return db.Create(record).Error
}
 
func (slf *ProductSearch) CreateBatch(records []*Product) error {
    var db = slf.build()
    return db.Create(records).Error
}
 
func (slf *ProductSearch) Delete() error {
    var db = slf.build()
    return db.Delete(&Product{}).Error
}
 
func (slf *ProductSearch) Update(record *Product) error {
    var db = slf.build()
    return db.Updates(record).Error
}
 
func (slf *ProductSearch) GetListByIds(ids []int) (result []Product, err error) {
    var db = slf.build()
    err = db.Where("id in (?)", ids).Find(&result).Error
    return
}
 
func (slf *ProductSearch) Find() (result []Product, err error) {
    var db = slf.build()
    err = db.Preload("country").Find(&result).Error
    return
}
 
func (slf *ProductSearch) SetId(id uint) *ProductSearch {
    slf.Id = id
    return slf
}
 
func (slf *ProductSearch) SetIds(ids []uint) *ProductSearch {
    slf.Ids = ids
    return slf
}
 
func (slf *ProductSearch) SetName(name string) *ProductSearch {
    slf.Name = name
    return slf
}
 
func (slf *ProductSearch) UpdateList(m map[string]interface{}, ids []int) error {
    var db = slf.build()
    return db.Where("id in (?)", ids).Updates(m).Error
}
 
func (slf *ProductSearch) First() (result Product, err error) {
    var db = slf.build()
    err = db.First(&result).Error
    return
}
 
func (slf *ProductSearch) FindAll() (result []*Product, err error) {
    var db = slf.build()
    err = db.Find(&result).Error
    return
}
 
func (slf *ProductSearch) Updates(m map[string]interface{}) error {
    var db = slf.build()
    return db.Updates(m).Error
}
 
func ProductMap(products []*Product) (pm map[string]*Product) {
    pm = make(map[string]*Product, len(products))
    for _, p := range products {
        pm[p.Number] = p
    }
    return pm
}