product.go
3.5 KB
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
package domain
import (
"fmt"
"gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils"
"strconv"
"time"
)
// 产品信息
type Product struct {
// 企业id
CompanyId int `json:"companyId,omitempty"`
// 组织ID
OrgId int `json:"orgId,omitempty"`
// 产品ID
ProductId int `json:"productId,omitempty"`
// 产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001
ProductCode string `json:"productCode,omitempty"`
// 产品名称
ProductName string `json:"productName,omitempty"`
// 产品类别
ProductCategory string `json:"productCategory,omitempty"`
// 产品规格
ProductSpec *UnitQuantity `json:"productSpec,omitempty"`
// 创建时间
CreatedAt time.Time `json:"createdAt,omitempty"`
// 更新时间
UpdatedAt time.Time `json:"updatedAt,omitempty"`
// 删除时间
DeletedAt time.Time `json:"deletedAt,omitempty"`
// 扩展数据
Ext *Ext `json:"ext,omitempty"`
}
type ProductRepository interface {
Save(product *Product) (*Product, error)
Remove(product *Product) (*Product, error)
FindOne(queryOptions map[string]interface{}) (*Product, error)
Find(queryOptions map[string]interface{}) (int64, []*Product, error)
}
func (product *Product) Identify() interface{} {
if product.ProductId == 0 {
return nil
}
return product.ProductId
}
func (product *Product) Update(data map[string]interface{}) error {
if productCode, ok := data["productCode"]; ok {
product.ProductCode = productCode.(string)
}
if productName, ok := data["productName"]; ok {
product.ProductName = productName.(string)
}
if productCategory, ok := data["productCategory"]; ok {
product.ProductCategory = productCategory.(string)
}
if product.ProductSpec == nil {
product.ProductSpec = &UnitQuantity{}
}
if unit, ok := data["unit"]; ok {
product.ProductSpec.Unit = unit.(string)
}
if unitWeight, ok := data["unitWeight"]; ok {
product.ProductSpec.UnitWeight = unitWeight.(float64)
}
if product.Ext == nil {
product.Ext = &Ext{}
}
if orgName, ok := data["orgName"]; ok {
product.Ext.OrgName = orgName.(string)
}
product.UpdatedAt = time.Now()
return nil
}
func (item *Product) ProductWeigh(quality float64) float64 {
if quality <= 0 {
return 0
}
return item.ProductSpec.UnitWeight * quality
}
// 导入数据体
type ImportProductItem struct {
// 产品编号 编码规则为“CP”+2 位年+2 位月+2 位日+3 位流水码,如 CP211229001
ProductCode string `json:"productCode,omitempty"`
// 产品名称
ProductName string `json:"productName,omitempty"`
// 产品类别
ProductCategory string `json:"productCategory,omitempty"`
// 单位
Unit string `json:"unit,omitempty"`
// 单份重量(原材料)
UnitWeight string `json:"unitWeight,omitempty"`
// 失败理由
FailReason string `json:"failReason"`
}
func (item *ImportProductItem) Valid() error {
if len(item.ProductCode) == 0 {
return fmt.Errorf("产品编号不能为空")
}
//if len(item.ProductName) == 0 {
// return fmt.Errorf("品名不能为空")
//}
//if len(item.Unit) == 0 {
// return fmt.Errorf("规格不能为空")
//}
//if len(item.ProductCategory) == 0 {
// return fmt.Errorf("类别不能为空")
//}
if len(item.UnitWeight) == 0 {
item.UnitWeight = "0"
}
if _, err := strconv.ParseFloat(item.UnitWeight, 64); err != nil {
return fmt.Errorf("投入单份重量格式有误")
}
return nil
}
type Products []*Product
func (products Products) ProductCodes() []string {
var result = utils.NewSet()
for _, v := range products {
result.Add(v.ProductCode)
}
return result.KeysStr()
}