正在显示
9 个修改的文件
包含
340 行增加
和
12 行删除
| @@ -439,6 +439,32 @@ func FastProductMaterialGroup(transactionContext application.TransactionContext, | @@ -439,6 +439,32 @@ func FastProductMaterialGroup(transactionContext application.TransactionContext, | ||
| 439 | return rep, mod, err | 439 | return rep, mod, err |
| 440 | } | 440 | } |
| 441 | 441 | ||
| 442 | +// FastProductMaterialGroup 快速返回物料 | ||
| 443 | +// | ||
| 444 | +// transactionContext 事务 | ||
| 445 | +// id 对象唯一标识 | ||
| 446 | +func FastProductMaterial(transactionContext application.TransactionContext, id int, options ...option) (domain.ProductMaterialRepository, *domain.ProductMaterial, error) { | ||
| 447 | + var rep domain.ProductMaterialRepository | ||
| 448 | + var mod *domain.ProductMaterial | ||
| 449 | + var err error | ||
| 450 | + if value, err := CreateProductMaterialRepository(map[string]interface{}{ | ||
| 451 | + "transactionContext": transactionContext, | ||
| 452 | + }); err != nil { | ||
| 453 | + return nil, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 454 | + } else { | ||
| 455 | + rep = value | ||
| 456 | + } | ||
| 457 | + if id > 0 { | ||
| 458 | + if mod, err = rep.FindOne(map[string]interface{}{"productMaterialGroupId": id}); err != nil { | ||
| 459 | + if err == domain.ErrorNotFound { | ||
| 460 | + return nil, nil, application.ThrowError(application.RES_NO_FIND_ERROR, "该物料分组不存在") | ||
| 461 | + } | ||
| 462 | + return nil, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 463 | + } | ||
| 464 | + } | ||
| 465 | + return rep, mod, err | ||
| 466 | +} | ||
| 467 | + | ||
| 442 | /***** 2.配置 *****/ | 468 | /***** 2.配置 *****/ |
| 443 | 469 | ||
| 444 | type FastOptions struct { | 470 | type FastOptions struct { |
| @@ -13,10 +13,13 @@ type MaterialUnitConversionDto struct { | @@ -13,10 +13,13 @@ type MaterialUnitConversionDto struct { | ||
| 13 | ToUnitQuantity *domain.UnitQuantity `json:"toUnitQuantity,omitempty"` | 13 | ToUnitQuantity *domain.UnitQuantity `json:"toUnitQuantity,omitempty"` |
| 14 | } | 14 | } |
| 15 | 15 | ||
| 16 | -func (d *MaterialUnitConversionDto) LoadDto(m *domain.UnitConversion) *MaterialUnitConversionDto { | 16 | +func (d *MaterialUnitConversionDto) LoadDto(m *domain.UnitConversion, material *domain.ProductMaterial) *MaterialUnitConversionDto { |
| 17 | d.UnitConversionId = m.UnitConversionId | 17 | d.UnitConversionId = m.UnitConversionId |
| 18 | d.MaterialName = m.Material.MaterialName | 18 | d.MaterialName = m.Material.MaterialName |
| 19 | d.FromUnitQuantity = m.FromUnitQuantity | 19 | d.FromUnitQuantity = m.FromUnitQuantity |
| 20 | d.ToUnitQuantity = m.ToUnitQuantity | 20 | d.ToUnitQuantity = m.ToUnitQuantity |
| 21 | + if material != nil { | ||
| 22 | + d.MaterialName = material.MaterialName | ||
| 23 | + } | ||
| 21 | return d | 24 | return d |
| 22 | } | 25 | } |
| @@ -25,7 +25,7 @@ type UnitConversionDto struct { | @@ -25,7 +25,7 @@ type UnitConversionDto struct { | ||
| 25 | AuthFlag bool `json:"authFlag"` | 25 | AuthFlag bool `json:"authFlag"` |
| 26 | } | 26 | } |
| 27 | 27 | ||
| 28 | -func (d *UnitConversionDto) LoadDto(m *domain.UnitConversion, orgId int) *UnitConversionDto { | 28 | +func (d *UnitConversionDto) LoadDto(m *domain.UnitConversion, orgId int, productMaterial *domain.ProductMaterial) *UnitConversionDto { |
| 29 | d.UnitConversionId = m.UnitConversionId | 29 | d.UnitConversionId = m.UnitConversionId |
| 30 | d.WorkStation = m.WorkStation | 30 | d.WorkStation = m.WorkStation |
| 31 | d.Material = m.Material | 31 | d.Material = m.Material |
| @@ -36,5 +36,8 @@ func (d *UnitConversionDto) LoadDto(m *domain.UnitConversion, orgId int) *UnitCo | @@ -36,5 +36,8 @@ func (d *UnitConversionDto) LoadDto(m *domain.UnitConversion, orgId int) *UnitCo | ||
| 36 | if m.Ext != nil { | 36 | if m.Ext != nil { |
| 37 | d.OrgName = m.Ext.OrgName | 37 | d.OrgName = m.Ext.OrgName |
| 38 | } | 38 | } |
| 39 | + if productMaterial != nil { | ||
| 40 | + d.Material.MaterialName = productMaterial.MaterialName | ||
| 41 | + } | ||
| 39 | return d | 42 | return d |
| 40 | } | 43 | } |
| @@ -91,12 +91,21 @@ func (unitConversionService *UnitConversionService) GetUnitConversion(getUnitCon | @@ -91,12 +91,21 @@ func (unitConversionService *UnitConversionService) GetUnitConversion(getUnitCon | ||
| 91 | //var unitConversionRepository domain.UnitConversionRepository | 91 | //var unitConversionRepository domain.UnitConversionRepository |
| 92 | var unitConversion *domain.UnitConversion | 92 | var unitConversion *domain.UnitConversion |
| 93 | _, unitConversion, err = factory.FastPgUnitConversion(transactionContext, getUnitConversionQuery.UnitConversionId) | 93 | _, unitConversion, err = factory.FastPgUnitConversion(transactionContext, getUnitConversionQuery.UnitConversionId) |
| 94 | - | 94 | + if err != nil { |
| 95 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
| 96 | + } | ||
| 97 | + var productMaterial *domain.ProductMaterial | ||
| 98 | + if unitConversion.Material.ProductMaterialId > 0 { | ||
| 99 | + _, productMaterial, err = factory.FastProductMaterial(transactionContext, unitConversion.Material.ProductMaterialId) | ||
| 100 | + if err != nil { | ||
| 101 | + return nil, application.ThrowError(application.BUSINESS_ERROR, err.Error()) | ||
| 102 | + } | ||
| 103 | + } | ||
| 95 | if err := transactionContext.CommitTransaction(); err != nil { | 104 | if err := transactionContext.CommitTransaction(); err != nil { |
| 96 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 105 | return nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 97 | } | 106 | } |
| 98 | result := &dto.UnitConversionDto{} | 107 | result := &dto.UnitConversionDto{} |
| 99 | - result.LoadDto(unitConversion, 0) | 108 | + result.LoadDto(unitConversion, 0, productMaterial) |
| 100 | return result, nil | 109 | return result, nil |
| 101 | 110 | ||
| 102 | } | 111 | } |
| @@ -293,17 +302,29 @@ func (unitConversionService *UnitConversionService) SearchUnitConversion(operate | @@ -293,17 +302,29 @@ func (unitConversionService *UnitConversionService) SearchUnitConversion(operate | ||
| 293 | if err != nil { | 302 | if err != nil { |
| 294 | return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | 303 | return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) |
| 295 | } | 304 | } |
| 296 | - if err := transactionContext.CommitTransaction(); err != nil { | ||
| 297 | - return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 305 | + |
| 306 | + var mapProductMaterial = make(map[int]*domain.ProductMaterial, 0) | ||
| 307 | + productMaterialIds := domain.UnitConversions(unitConversions).ProductMaterialIds() | ||
| 308 | + if len(productMaterialIds) > 0 { | ||
| 309 | + productMaterialRepository, _, _ := factory.FastProductMaterial(transactionContext, 0) | ||
| 310 | + _, productMaterials, err := productMaterialRepository.Find(map[string]interface{}{"productMaterialIds": productMaterialIds}) | ||
| 311 | + if err != nil { | ||
| 312 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 313 | + } | ||
| 314 | + mapProductMaterial = domain.ProductMaterials(productMaterials).ToMapById() | ||
| 298 | } | 315 | } |
| 299 | 316 | ||
| 300 | var result = make([]*dto.UnitConversionDto, 0) | 317 | var result = make([]*dto.UnitConversionDto, 0) |
| 301 | for i := range unitConversions { | 318 | for i := range unitConversions { |
| 302 | item := unitConversions[i] | 319 | item := unitConversions[i] |
| 303 | newItem := &dto.UnitConversionDto{} | 320 | newItem := &dto.UnitConversionDto{} |
| 304 | - newItem.LoadDto(item, operateInfo.OrgId) | 321 | + newItem.LoadDto(item, operateInfo.OrgId, mapProductMaterial[item.Material.ProductMaterialId]) |
| 305 | result = append(result, newItem) | 322 | result = append(result, newItem) |
| 306 | } | 323 | } |
| 324 | + | ||
| 325 | + if err := transactionContext.CommitTransaction(); err != nil { | ||
| 326 | + return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | ||
| 327 | + } | ||
| 307 | return count, result, nil | 328 | return count, result, nil |
| 308 | } | 329 | } |
| 309 | 330 | ||
| @@ -331,11 +352,22 @@ func (unitConversionService *UnitConversionService) SearchMaterial(operateInfo * | @@ -331,11 +352,22 @@ func (unitConversionService *UnitConversionService) SearchMaterial(operateInfo * | ||
| 331 | return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) | 352 | return 0, nil, application.ThrowError(application.TRANSACTION_ERROR, err.Error()) |
| 332 | } | 353 | } |
| 333 | 354 | ||
| 355 | + var mapProductMaterial = make(map[int]*domain.ProductMaterial, 0) | ||
| 356 | + productMaterialIds := domain.UnitConversions(unitConversions).ProductMaterialIds() | ||
| 357 | + if len(productMaterialIds) > 0 { | ||
| 358 | + productMaterialRepository, _, _ := factory.FastProductMaterial(transactionContext, 0) | ||
| 359 | + _, productMaterials, err := productMaterialRepository.Find(map[string]interface{}{"productMaterialIds": productMaterialIds}) | ||
| 360 | + if err != nil { | ||
| 361 | + return 0, nil, application.ThrowError(application.INTERNAL_SERVER_ERROR, err.Error()) | ||
| 362 | + } | ||
| 363 | + mapProductMaterial = domain.ProductMaterials(productMaterials).ToMapById() | ||
| 364 | + } | ||
| 365 | + | ||
| 334 | var result = make([]*dto.MaterialUnitConversionDto, 0) | 366 | var result = make([]*dto.MaterialUnitConversionDto, 0) |
| 335 | for i := range unitConversions { | 367 | for i := range unitConversions { |
| 336 | item := unitConversions[i] | 368 | item := unitConversions[i] |
| 337 | newItem := &dto.MaterialUnitConversionDto{} | 369 | newItem := &dto.MaterialUnitConversionDto{} |
| 338 | - newItem.LoadDto(item) | 370 | + newItem.LoadDto(item, mapProductMaterial[item.Material.ProductMaterialId]) |
| 339 | result = append(result, newItem) | 371 | result = append(result, newItem) |
| 340 | } | 372 | } |
| 341 | return count, map[string]interface{}{ | 373 | return count, map[string]interface{}{ |
| @@ -2,9 +2,11 @@ package domain | @@ -2,9 +2,11 @@ package domain | ||
| 2 | 2 | ||
| 3 | // 物料 | 3 | // 物料 |
| 4 | type Material struct { | 4 | type Material struct { |
| 5 | - // 物料名称 | 5 | + // 物料ID |
| 6 | + ProductMaterialId int `json:"productMaterialId"` | ||
| 7 | + // 物料名称 (最新数据需要查询物料表) | ||
| 6 | MaterialName string `json:"materialName,omitempty"` | 8 | MaterialName string `json:"materialName,omitempty"` |
| 7 | - // 物料类别 | 9 | + // 物料类别 ‘南瓜饼串’、‘ 包装袋(空)’、‘包装袋(件数)’、装箱(件数) |
| 8 | MaterialCategory string `json:"materialCategory,omitempty"` | 10 | MaterialCategory string `json:"materialCategory,omitempty"` |
| 9 | } | 11 | } |
| 10 | 12 |
| @@ -49,3 +49,13 @@ func (productMaterial *ProductMaterial) Identify() interface{} { | @@ -49,3 +49,13 @@ func (productMaterial *ProductMaterial) Identify() interface{} { | ||
| 49 | func (productMaterial *ProductMaterial) Update(data map[string]interface{}) error { | 49 | func (productMaterial *ProductMaterial) Update(data map[string]interface{}) error { |
| 50 | return nil | 50 | return nil |
| 51 | } | 51 | } |
| 52 | + | ||
| 53 | +type ProductMaterials []*ProductMaterial | ||
| 54 | + | ||
| 55 | +func (productMaterials ProductMaterials) ToMapById() map[int]*ProductMaterial { | ||
| 56 | + var mapProductMaterial = make(map[int]*ProductMaterial, 0) | ||
| 57 | + for _, v := range productMaterials { | ||
| 58 | + mapProductMaterial[v.ProductMaterialId] = v | ||
| 59 | + } | ||
| 60 | + return mapProductMaterial | ||
| 61 | +} |
| 1 | package domain | 1 | package domain |
| 2 | 2 | ||
| 3 | -import "time" | 3 | +import ( |
| 4 | + "gitlab.fjmaimaimai.com/allied-creation/allied-creation-manufacture/pkg/infrastructure/utils" | ||
| 5 | + "time" | ||
| 6 | +) | ||
| 4 | 7 | ||
| 5 | // 单位换算 | 8 | // 单位换算 |
| 6 | type UnitConversion struct { | 9 | type UnitConversion struct { |
| @@ -57,3 +60,16 @@ func (unitConversion *UnitConversion) Update(data map[string]interface{}) error | @@ -57,3 +60,16 @@ func (unitConversion *UnitConversion) Update(data map[string]interface{}) error | ||
| 57 | unitConversion.UpdatedAt = time.Now() | 60 | unitConversion.UpdatedAt = time.Now() |
| 58 | return nil | 61 | return nil |
| 59 | } | 62 | } |
| 63 | + | ||
| 64 | +type UnitConversions []*UnitConversion | ||
| 65 | + | ||
| 66 | +func (unitConversions UnitConversions) ProductMaterialIds() []int { | ||
| 67 | + set := utils.NewSet() | ||
| 68 | + for i := range unitConversions { | ||
| 69 | + if unitConversions[i].Material.ProductMaterialId == 0 { | ||
| 70 | + continue | ||
| 71 | + } | ||
| 72 | + set.Add(unitConversions[i].Material.ProductMaterialId) | ||
| 73 | + } | ||
| 74 | + return set.KeysInt() | ||
| 75 | +} |
| @@ -153,7 +153,11 @@ func (repository *ProductMaterialRepository) Find(queryOptions map[string]interf | @@ -153,7 +153,11 @@ func (repository *ProductMaterialRepository) Find(queryOptions map[string]interf | ||
| 153 | var productMaterialModels []*models.ProductMaterial | 153 | var productMaterialModels []*models.ProductMaterial |
| 154 | productMaterials := make([]*domain.ProductMaterial, 0) | 154 | productMaterials := make([]*domain.ProductMaterial, 0) |
| 155 | query := sqlbuilder.BuildQuery(tx.Model(&productMaterialModels), queryOptions) | 155 | query := sqlbuilder.BuildQuery(tx.Model(&productMaterialModels), queryOptions) |
| 156 | - query.SetOffsetAndLimit(20) | 156 | + query.SetWhereByQueryOption("company_id = ?", "companyId") |
| 157 | + if v, ok := queryOptions["productMaterialIds"]; ok && len(v.([]int)) > 0 { | ||
| 158 | + query.Where("product_material_id in (?)", pg.In(v)) | ||
| 159 | + } | ||
| 160 | + query.SetOffsetAndLimit(domain.MaxQueryRow) | ||
| 157 | query.SetOrderDirect("product_material_id", "DESC") | 161 | query.SetOrderDirect("product_material_id", "DESC") |
| 158 | if count, err := query.SelectAndCount(); err != nil { | 162 | if count, err := query.SelectAndCount(); err != nil { |
| 159 | return 0, productMaterials, err | 163 | return 0, productMaterials, err |
pkg/infrastructure/utils/set.go
0 → 100644
| 1 | +package utils | ||
| 2 | + | ||
| 3 | +const ( | ||
| 4 | + unmanaged = iota | ||
| 5 | + untyped | ||
| 6 | + intType | ||
| 7 | + int64Type | ||
| 8 | + uintType | ||
| 9 | + uint64Type | ||
| 10 | + stringType | ||
| 11 | +) | ||
| 12 | + | ||
| 13 | +type PlaceholderType = struct{} | ||
| 14 | + | ||
| 15 | +// Set is not thread-safe, for concurrent use, make sure to use it with synchronization. | ||
| 16 | +type Set struct { | ||
| 17 | + data map[interface{}]PlaceholderType | ||
| 18 | + tp int | ||
| 19 | +} | ||
| 20 | + | ||
| 21 | +// NewSet returns a managed Set, can only put the values with the same type. | ||
| 22 | +func NewSet() *Set { | ||
| 23 | + return &Set{ | ||
| 24 | + data: make(map[interface{}]PlaceholderType), | ||
| 25 | + tp: untyped, | ||
| 26 | + } | ||
| 27 | +} | ||
| 28 | + | ||
| 29 | +// NewUnmanagedSet returns a unmanaged Set, which can put values with different types. | ||
| 30 | +func NewUnmanagedSet() *Set { | ||
| 31 | + return &Set{ | ||
| 32 | + data: make(map[interface{}]PlaceholderType), | ||
| 33 | + tp: unmanaged, | ||
| 34 | + } | ||
| 35 | +} | ||
| 36 | + | ||
| 37 | +// Add adds i into s. | ||
| 38 | +func (s *Set) Add(i ...interface{}) { | ||
| 39 | + for _, each := range i { | ||
| 40 | + s.add(each) | ||
| 41 | + } | ||
| 42 | +} | ||
| 43 | + | ||
| 44 | +// AddInt adds int values ii into s. | ||
| 45 | +func (s *Set) AddInt(ii ...int) { | ||
| 46 | + for _, each := range ii { | ||
| 47 | + s.add(each) | ||
| 48 | + } | ||
| 49 | +} | ||
| 50 | + | ||
| 51 | +// AddInt64 adds int64 values ii into s. | ||
| 52 | +func (s *Set) AddInt64(ii ...int64) { | ||
| 53 | + for _, each := range ii { | ||
| 54 | + s.add(each) | ||
| 55 | + } | ||
| 56 | +} | ||
| 57 | + | ||
| 58 | +// AddUint adds uint values ii into s. | ||
| 59 | +func (s *Set) AddUint(ii ...uint) { | ||
| 60 | + for _, each := range ii { | ||
| 61 | + s.add(each) | ||
| 62 | + } | ||
| 63 | +} | ||
| 64 | + | ||
| 65 | +// AddUint64 adds uint64 values ii into s. | ||
| 66 | +func (s *Set) AddUint64(ii ...uint64) { | ||
| 67 | + for _, each := range ii { | ||
| 68 | + s.add(each) | ||
| 69 | + } | ||
| 70 | +} | ||
| 71 | + | ||
| 72 | +// AddStr adds string values ss into s. | ||
| 73 | +func (s *Set) AddStr(ss ...string) { | ||
| 74 | + for _, each := range ss { | ||
| 75 | + s.add(each) | ||
| 76 | + } | ||
| 77 | +} | ||
| 78 | + | ||
| 79 | +// Contains checks if i is in s. | ||
| 80 | +func (s *Set) Contains(i interface{}) bool { | ||
| 81 | + if len(s.data) == 0 { | ||
| 82 | + return false | ||
| 83 | + } | ||
| 84 | + | ||
| 85 | + s.validate(i) | ||
| 86 | + _, ok := s.data[i] | ||
| 87 | + return ok | ||
| 88 | +} | ||
| 89 | + | ||
| 90 | +// Keys returns the keys in s. | ||
| 91 | +func (s *Set) Keys() []interface{} { | ||
| 92 | + var keys []interface{} | ||
| 93 | + | ||
| 94 | + for key := range s.data { | ||
| 95 | + keys = append(keys, key) | ||
| 96 | + } | ||
| 97 | + | ||
| 98 | + return keys | ||
| 99 | +} | ||
| 100 | + | ||
| 101 | +// KeysInt returns the int keys in s. | ||
| 102 | +func (s *Set) KeysInt() []int { | ||
| 103 | + var keys []int | ||
| 104 | + | ||
| 105 | + for key := range s.data { | ||
| 106 | + if intKey, ok := key.(int); ok { | ||
| 107 | + keys = append(keys, intKey) | ||
| 108 | + } | ||
| 109 | + } | ||
| 110 | + | ||
| 111 | + return keys | ||
| 112 | +} | ||
| 113 | + | ||
| 114 | +// KeysInt64 returns int64 keys in s. | ||
| 115 | +func (s *Set) KeysInt64() []int64 { | ||
| 116 | + var keys []int64 | ||
| 117 | + | ||
| 118 | + for key := range s.data { | ||
| 119 | + if intKey, ok := key.(int64); ok { | ||
| 120 | + keys = append(keys, intKey) | ||
| 121 | + } | ||
| 122 | + } | ||
| 123 | + | ||
| 124 | + return keys | ||
| 125 | +} | ||
| 126 | + | ||
| 127 | +// KeysUint returns uint keys in s. | ||
| 128 | +func (s *Set) KeysUint() []uint { | ||
| 129 | + var keys []uint | ||
| 130 | + | ||
| 131 | + for key := range s.data { | ||
| 132 | + if intKey, ok := key.(uint); ok { | ||
| 133 | + keys = append(keys, intKey) | ||
| 134 | + } | ||
| 135 | + } | ||
| 136 | + | ||
| 137 | + return keys | ||
| 138 | +} | ||
| 139 | + | ||
| 140 | +// KeysUint64 returns uint64 keys in s. | ||
| 141 | +func (s *Set) KeysUint64() []uint64 { | ||
| 142 | + var keys []uint64 | ||
| 143 | + | ||
| 144 | + for key := range s.data { | ||
| 145 | + if intKey, ok := key.(uint64); ok { | ||
| 146 | + keys = append(keys, intKey) | ||
| 147 | + } | ||
| 148 | + } | ||
| 149 | + | ||
| 150 | + return keys | ||
| 151 | +} | ||
| 152 | + | ||
| 153 | +// KeysStr returns string keys in s. | ||
| 154 | +func (s *Set) KeysStr() []string { | ||
| 155 | + var keys []string | ||
| 156 | + | ||
| 157 | + for key := range s.data { | ||
| 158 | + if strKey, ok := key.(string); ok { | ||
| 159 | + keys = append(keys, strKey) | ||
| 160 | + } | ||
| 161 | + } | ||
| 162 | + | ||
| 163 | + return keys | ||
| 164 | +} | ||
| 165 | + | ||
| 166 | +// Remove removes i from s. | ||
| 167 | +func (s *Set) Remove(i interface{}) { | ||
| 168 | + s.validate(i) | ||
| 169 | + delete(s.data, i) | ||
| 170 | +} | ||
| 171 | + | ||
| 172 | +// Count returns the number of items in s. | ||
| 173 | +func (s *Set) Count() int { | ||
| 174 | + return len(s.data) | ||
| 175 | +} | ||
| 176 | + | ||
| 177 | +func (s *Set) add(i interface{}) { | ||
| 178 | + switch s.tp { | ||
| 179 | + case unmanaged: | ||
| 180 | + // do nothing | ||
| 181 | + case untyped: | ||
| 182 | + s.setType(i) | ||
| 183 | + default: | ||
| 184 | + s.validate(i) | ||
| 185 | + } | ||
| 186 | + s.data[i] = PlaceholderType{} | ||
| 187 | +} | ||
| 188 | + | ||
| 189 | +func (s *Set) setType(i interface{}) { | ||
| 190 | + // s.tp can only be untyped here | ||
| 191 | + switch i.(type) { | ||
| 192 | + case int: | ||
| 193 | + s.tp = intType | ||
| 194 | + case int64: | ||
| 195 | + s.tp = int64Type | ||
| 196 | + case uint: | ||
| 197 | + s.tp = uintType | ||
| 198 | + case uint64: | ||
| 199 | + s.tp = uint64Type | ||
| 200 | + case string: | ||
| 201 | + s.tp = stringType | ||
| 202 | + } | ||
| 203 | +} | ||
| 204 | + | ||
| 205 | +func (s *Set) validate(i interface{}) { | ||
| 206 | + if s.tp == unmanaged { | ||
| 207 | + return | ||
| 208 | + } | ||
| 209 | + | ||
| 210 | + switch i.(type) { | ||
| 211 | + case int: | ||
| 212 | + if s.tp != intType { | ||
| 213 | + //logx.Errorf("Error: element is int, but set contains elements with type %d", s.tp) | ||
| 214 | + } | ||
| 215 | + case int64: | ||
| 216 | + if s.tp != int64Type { | ||
| 217 | + //logx.Errorf("Error: element is int64, but set contains elements with type %d", s.tp) | ||
| 218 | + } | ||
| 219 | + case uint: | ||
| 220 | + if s.tp != uintType { | ||
| 221 | + //logx.Errorf("Error: element is uint, but set contains elements with type %d", s.tp) | ||
| 222 | + } | ||
| 223 | + case uint64: | ||
| 224 | + if s.tp != uint64Type { | ||
| 225 | + //logx.Errorf("Error: element is uint64, but set contains elements with type %d", s.tp) | ||
| 226 | + } | ||
| 227 | + case string: | ||
| 228 | + if s.tp != stringType { | ||
| 229 | + //logx.Errorf("Error: element is string, but set contains elements with type %d", s.tp) | ||
| 230 | + } | ||
| 231 | + } | ||
| 232 | +} |
-
请 注册 或 登录 后发表评论