From 0eac8cd498471e510c1887a914e6e28d1dfb4b19 Mon Sep 17 00:00:00 2001 From: liujiandao <274878379@qq.com> Date: 星期二, 31 十月 2023 11:54:49 +0800 Subject: [PATCH] Merge branch 'master' of http://192.168.5.5:10010/r/aps/WMS --- constvar/const.go | 7 controllers/operation.go | 212 ++++++++++++++++++++++--- models/location_product.go | 29 ++- request/location_product.go | 22 +- controllers/location_product.go | 84 +++++++++- docs/swagger.yaml | 19 ++ docs/docs.go | 31 +++ docs/swagger.json | 31 +++ controllers/location_product_amount.go | 2 9 files changed, 376 insertions(+), 61 deletions(-) diff --git a/constvar/const.go b/constvar/const.go index 5c6a63f..a84fd10 100644 --- a/constvar/const.go +++ b/constvar/const.go @@ -184,3 +184,10 @@ PostType_Soon PostType = iota + 1 //灏藉揩 PostType_AfterReady //褰撴墍鏈変骇鍝佸氨缁椂 ) + +type RuleType int + +const ( + RuleType_Product RuleType = iota + 1 //浜у搧涓婃灦瑙勫垯 + RuleType_ProductCategory //浜у搧绫诲埆涓婃灦瑙勫垯 +) diff --git a/controllers/location_product.go b/controllers/location_product.go index 854d451..5955d2c 100644 --- a/controllers/location_product.go +++ b/controllers/location_product.go @@ -1,8 +1,11 @@ package controllers import ( + "errors" "github.com/gin-gonic/gin" + "gorm.io/gorm" "strconv" + "wms/constvar" "wms/extend/code" "wms/extend/util" "wms/models" @@ -40,14 +43,43 @@ util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浣嶇疆") return } - if params.ProductId == "" { - util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧") + + if params.RuleType != constvar.RuleType_Product && params.RuleType != constvar.RuleType_ProductCategory { + util.ResponseFormat(c, code.RequestParamError, "ruleType寮傚父") return } - //if params.ProductCategoryID == 0 { - // util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆") - // return - //} + + if params.RuleType == constvar.RuleType_Product { + if params.ProductId == "" { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧") + return + } + if _, err := models.NewLocationProductSearch().SetProductId(params.ProductId).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil { + if !errors.Is(err, gorm.ErrRecordNotFound) { + util.ResponseFormat(c, code.RequestParamError, err.Error()) + return + } + } else { + util.ResponseFormat(c, code.RequestParamError, "宸插瓨鍦ㄨ涓婂瑙勫垯锛岃鍕块噸澶嶆坊鍔�") + return + } + } + + if params.RuleType == constvar.RuleType_ProductCategory { + if params.ProductCategoryID == 0 { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆") + return + } + if _, err := models.NewLocationProductSearch().SetProductCategoryId(params.ProductCategoryID).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil { + if !errors.Is(err, gorm.ErrRecordNotFound) { + util.ResponseFormat(c, code.RequestParamError, err.Error()) + return + } + } else { + util.ResponseFormat(c, code.RequestParamError, "宸插瓨鍦ㄨ涓婂瑙勫垯锛岃鍕块噸澶嶆坊鍔�") + return + } + } if err := models.NewLocationProductSearch().Create(¶ms); err != nil { logx.Errorf("Operation create err: %v", err) @@ -116,14 +148,44 @@ util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浣嶇疆") return } - if params.ProductId == "" { - util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧") + + if params.RuleType != constvar.RuleType_Product && params.RuleType != constvar.RuleType_ProductCategory { + util.ResponseFormat(c, code.RequestParamError, "ruleType寮傚父") return } - if params.ProductCategoryID == 0 { - util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆") - return + + if params.RuleType == constvar.RuleType_Product { + if params.ProductId == "" { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧") + return + } + if rule, err := models.NewLocationProductSearch().SetProductId(params.ProductId).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil { + if !errors.Is(err, gorm.ErrRecordNotFound) { + util.ResponseFormat(c, code.RequestParamError, err.Error()) + return + } + } else if params.Id != rule.Id { + util.ResponseFormat(c, code.RequestParamError, "宸插瓨鍦ㄨ涓婂瑙勫垯锛岃鍕块噸澶嶆坊鍔�") + return + } } + + if params.RuleType == constvar.RuleType_ProductCategory { + if params.ProductCategoryID == 0 { + util.ResponseFormat(c, code.RequestParamError, "璇烽�夋嫨浜у搧绫诲埆") + return + } + if rule, err := models.NewLocationProductSearch().SetProductCategoryId(params.ProductCategoryID).SetLocationId(params.LocationId).SetAreaId(params.AreaId).First(); err != nil { + if !errors.Is(err, gorm.ErrRecordNotFound) { + util.ResponseFormat(c, code.RequestParamError, err.Error()) + return + } + } else if params.Id != rule.Id { + util.ResponseFormat(c, code.RequestParamError, "宸插瓨鍦ㄨ涓婂瑙勫垯锛岃鍕块噸澶嶆坊鍔�") + return + } + } + if err := models.NewLocationProductSearch().SetID(params.Id).Update(¶ms); err != nil { logx.Errorf("LocationProduct update err: %v", err) util.ResponseFormat(c, code.SaveFail, "淇敼澶辫触锛�"+err.Error()) diff --git a/controllers/location_product_amount.go b/controllers/location_product_amount.go index 3f33ff3..bcf0abb 100644 --- a/controllers/location_product_amount.go +++ b/controllers/location_product_amount.go @@ -60,7 +60,7 @@ if params.Page*params.PageSize > 0 { search.Orm = search.Orm.Offset((params.Page - 1) * params.PageSize).Limit(params.PageSize) } - if err := search.Orm.Order("wms_location_product_amount.updated_at desc").Find(&records).Error; err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + if err := search.Orm.Order("wms_location_product_amount.updated_at desc").Find(&records).Error; err != nil { util.ResponseFormat(c, code.RequestError, fmt.Errorf("find count err: %v", err)) return } diff --git a/controllers/operation.go b/controllers/operation.go index 3b435f6..5bd16ef 100644 --- a/controllers/operation.go +++ b/controllers/operation.go @@ -74,7 +74,7 @@ } func CheckDetailsRepeat(details []*models.OperationDetails) bool { - detailIDs := []string{} + var detailIDs []string var tempID string for _, v := range details { detailIDs = append(detailIDs, v.ProductId) @@ -349,7 +349,7 @@ } if operation.BaseOperationType == constvar.BaseOperationTypeIncoming { - operationInputs := []*models.Operation{} + var operationInputs []*models.Operation for k, v := range listProdt { value, ok := mapProdt[v.ID] if !ok { @@ -365,6 +365,7 @@ if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return err } + if err == nil { operationTransfer := &models.Operation{ Number: operation.Number, @@ -382,20 +383,10 @@ Comment: operation.Comment, BaseOperationType: constvar.BaseOperationTypeInternal, Details: []*models.OperationDetails{ - &models.OperationDetails{ + { ProductId: v.ID, Amount: value, }, - }, - } - operationTransfer.Id = 0 - operationTransfer.FromLocationID = locationRule.AreaId - operationTransfer.ToLocationID = locationRule.LocationId - operationTransfer.Status = constvar.OperationStatus_Finish - operationTransfer.Details = []*models.OperationDetails{ - &models.OperationDetails{ - ProductId: v.ID, - Amount: value, }, } operationInputs = append(operationInputs, operationTransfer) @@ -420,20 +411,70 @@ return res.Error } } else { - //TODO:鍑哄叆搴撶殑finish鍜屾姤搴熺殑finish閮借澧炲姞瀵筶ocation_product_amount琛ㄦ暟閲忕殑鏇存柊,鍥犱负姝よ〃鏈塒roductCategory瀛楁锛屾墍浠peration_details琛ㄤ腑瑕佸鍔燩roductCategoryId瀛楁 - locAmount, err := models.NewLocationProductAmountSearch(). - SetProductId(v.ID). - SetLocationId(operation.ToLocationID). - First() + locationRule, err = models.NewLocationProductSearch().SetProductCategoryId(v.CategoryId).SetAreaId(operation.ToLocationID).First() if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return err } - locAmount.LocationId = operation.ToLocationID - locAmount.ProductId = v.ID - locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") - locAmount.Amount = locAmount.Amount.Add(value) - if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { - return res.Error + if err == nil { + operationTransfer := &models.Operation{ + Number: operation.Number, + SourceNumber: operation.SourceNumber, + OperationTypeId: 0, + OperationTypeName: operation.OperationTypeName, + Status: constvar.OperationStatus_Finish, + FromLocationID: locationRule.AreaId, + ToLocationID: locationRule.LocationId, + OperationDate: operation.OperationDate, + ContacterID: operation.ContacterID, + ContacterName: operation.ContacterName, + CompanyID: operation.CompanyID, + CompanyName: operation.CompanyName, + Comment: operation.Comment, + BaseOperationType: constvar.BaseOperationTypeInternal, + Details: []*models.OperationDetails{ + { + ProductId: v.ID, + Amount: value, + }, + }, + } + operationInputs = append(operationInputs, operationTransfer) + + //if err := tx.Create(&operationTransfer).Error; err != nil { + // return err + //} + + //TODO:鍑哄叆搴撶殑finish鍜屾姤搴熺殑finish閮借澧炲姞瀵筶ocation_product_amount琛ㄦ暟閲忕殑鏇存柊,鍥犱负姝よ〃鏈塒roductCategory瀛楁锛屾墍浠peration_details琛ㄤ腑瑕佸鍔燩roductCategoryId瀛楁 + locAmount, err := models.NewLocationProductAmountSearch(). + SetProductId(v.ID). + SetLocationId(locationRule.LocationId). + First() + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + locAmount.LocationId = locationRule.LocationId + locAmount.ProductId = v.ID + locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") + locAmount.Amount = locAmount.Amount.Add(value) + if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { + return res.Error + } + } else { + //TODO:鍑哄叆搴撶殑finish鍜屾姤搴熺殑finish閮借澧炲姞瀵筶ocation_product_amount琛ㄦ暟閲忕殑鏇存柊,鍥犱负姝よ〃鏈塒roductCategory瀛楁锛屾墍浠peration_details琛ㄤ腑瑕佸鍔燩roductCategoryId瀛楁 + locAmount, err := models.NewLocationProductAmountSearch(). + SetProductId(v.ID). + SetLocationId(operation.ToLocationID). + First() + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + locAmount.LocationId = operation.ToLocationID + locAmount.ProductId = v.ID + locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") + locAmount.Amount = locAmount.Amount.Add(value) + if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { + return res.Error + } } } } @@ -486,7 +527,9 @@ } } } + if operation.BaseOperationType == constvar.BaseOperationTypeInternal { + var operationInputs []*models.Operation for _, v := range listProdt { value, ok := mapProdt[v.ID] if !ok { @@ -511,15 +554,122 @@ return err } - toLocAmount, res := models.NewLocationProductAmountSearch(). - SetProductId(v.ID). - SetLocationId(operation.ToLocationID). - FirstRes() - if res.Error != nil { + locationRule, err := models.NewLocationProductSearch().SetProductId(v.ID).SetAreaId(operation.ToLocationID).First() + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { return err } - toLocAmount.Amount = toLocAmount.Amount.Add(value) - if err := models.NewLocationProductAmountSearch().SetID(toLocAmount.Id).Update(toLocAmount); err != nil { + + if err == nil { + operationTransfer := &models.Operation{ + Number: operation.Number, + SourceNumber: operation.SourceNumber, + OperationTypeId: 0, + OperationTypeName: operation.OperationTypeName, + Status: constvar.OperationStatus_Finish, + FromLocationID: locationRule.AreaId, + ToLocationID: locationRule.LocationId, + OperationDate: operation.OperationDate, + ContacterID: operation.ContacterID, + ContacterName: operation.ContacterName, + CompanyID: operation.CompanyID, + CompanyName: operation.CompanyName, + Comment: operation.Comment, + BaseOperationType: constvar.BaseOperationTypeInternal, + Details: []*models.OperationDetails{ + { + ProductId: v.ID, + Amount: value, + }, + }, + } + operationInputs = append(operationInputs, operationTransfer) + + //if err := tx.Create(&operationTransfer).Error; err != nil { + // return err + //} + + locAmount, err := models.NewLocationProductAmountSearch(). + SetProductId(v.ID). + SetLocationId(locationRule.LocationId). + First() + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + locAmount.LocationId = locationRule.LocationId + locAmount.ProductId = v.ID + locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") + locAmount.Amount = locAmount.Amount.Add(value) + if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { + return res.Error + } + } else { + locationRule, err = models.NewLocationProductSearch().SetProductCategoryId(v.CategoryId).SetAreaId(operation.ToLocationID).First() + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + if err == nil { + operationTransfer := &models.Operation{ + Number: operation.Number, + SourceNumber: operation.SourceNumber, + OperationTypeId: 0, + OperationTypeName: operation.OperationTypeName, + Status: constvar.OperationStatus_Finish, + FromLocationID: locationRule.AreaId, + ToLocationID: locationRule.LocationId, + OperationDate: operation.OperationDate, + ContacterID: operation.ContacterID, + ContacterName: operation.ContacterName, + CompanyID: operation.CompanyID, + CompanyName: operation.CompanyName, + Comment: operation.Comment, + BaseOperationType: constvar.BaseOperationTypeInternal, + Details: []*models.OperationDetails{ + { + ProductId: v.ID, + Amount: value, + }, + }, + } + operationInputs = append(operationInputs, operationTransfer) + + //if err := tx.Create(&operationTransfer).Error; err != nil { + // return err + //} + + locAmount, err := models.NewLocationProductAmountSearch(). + SetProductId(v.ID). + SetLocationId(locationRule.LocationId). + First() + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + locAmount.LocationId = locationRule.LocationId + locAmount.ProductId = v.ID + locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") + locAmount.Amount = locAmount.Amount.Add(value) + if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { + return res.Error + } + } else { + locAmount, err := models.NewLocationProductAmountSearch(). + SetProductId(v.ID). + SetLocationId(operation.ToLocationID). + First() + if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + return err + } + locAmount.LocationId = operation.ToLocationID + locAmount.ProductId = v.ID + locAmount.CreateDate = time.Now().Format("2006-01-02 15:04:05") + locAmount.Amount = locAmount.Amount.Add(value) + if res := models.NewLocationProductAmountSearch().Orm.Where("id=?", locAmount.ID).Save(locAmount); res.Error != nil { + return res.Error + } + } + } + } + if len(operationInputs) > 0 { + if err := tx.Create(&operationInputs).Error; err != nil { return err } } diff --git a/docs/docs.go b/docs/docs.go index 58d7d71..4e9ca24 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -2353,6 +2353,21 @@ "ReservationMethodByDate" ] }, + "constvar.RuleType": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "x-enum-comments": { + "RuleType_Product": "浜у搧涓婃灦瑙勫垯", + "RuleType_ProductCategory": "浜у搧绫诲埆涓婃灦瑙勫垯" + }, + "x-enum-varnames": [ + "RuleType_Product", + "RuleType_ProductCategory" + ] + }, "constvar.WhetherType": { "type": "integer", "enum": [ @@ -3073,6 +3088,14 @@ "productId": { "description": "浜у搧id", "type": "string" + }, + "ruleType": { + "description": "涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�", + "allOf": [ + { + "$ref": "#/definitions/constvar.RuleType" + } + ] } } }, @@ -3652,6 +3675,14 @@ "productId": { "description": "浜у搧id", "type": "string" + }, + "ruleType": { + "description": "涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�", + "allOf": [ + { + "$ref": "#/definitions/constvar.RuleType" + } + ] } } }, diff --git a/docs/swagger.json b/docs/swagger.json index c430ead..953fc06 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -2341,6 +2341,21 @@ "ReservationMethodByDate" ] }, + "constvar.RuleType": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "x-enum-comments": { + "RuleType_Product": "浜у搧涓婃灦瑙勫垯", + "RuleType_ProductCategory": "浜у搧绫诲埆涓婃灦瑙勫垯" + }, + "x-enum-varnames": [ + "RuleType_Product", + "RuleType_ProductCategory" + ] + }, "constvar.WhetherType": { "type": "integer", "enum": [ @@ -3061,6 +3076,14 @@ "productId": { "description": "浜у搧id", "type": "string" + }, + "ruleType": { + "description": "涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�", + "allOf": [ + { + "$ref": "#/definitions/constvar.RuleType" + } + ] } } }, @@ -3640,6 +3663,14 @@ "productId": { "description": "浜у搧id", "type": "string" + }, + "ruleType": { + "description": "涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�", + "allOf": [ + { + "$ref": "#/definitions/constvar.RuleType" + } + ] } } }, diff --git a/docs/swagger.yaml b/docs/swagger.yaml index a9369d0..5a13e9c 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -178,6 +178,17 @@ - ReservationMethodAtConfirm - ReservationMethodManual - ReservationMethodByDate + constvar.RuleType: + enum: + - 1 + - 2 + type: integer + x-enum-comments: + RuleType_Product: 浜у搧涓婃灦瑙勫垯 + RuleType_ProductCategory: 浜у搧绫诲埆涓婃灦瑙勫垯 + x-enum-varnames: + - RuleType_Product + - RuleType_ProductCategory constvar.WhetherType: enum: - 1 @@ -687,6 +698,10 @@ productId: description: 浜у搧id type: string + ruleType: + allOf: + - $ref: '#/definitions/constvar.RuleType' + description: 涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨� type: object request.AddOperation: properties: @@ -1087,6 +1102,10 @@ productId: description: 浜у搧id type: string + ruleType: + allOf: + - $ref: '#/definitions/constvar.RuleType' + description: 涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨� type: object request.UpdateLocationProductAmount: properties: diff --git a/models/location_product.go b/models/location_product.go index f737765..6a66ba5 100644 --- a/models/location_product.go +++ b/models/location_product.go @@ -3,21 +3,23 @@ import ( "fmt" "gorm.io/gorm" + "wms/constvar" "wms/pkg/mysqlx" ) type ( LocationProduct struct { WmsModel - Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` - LocationId int `json:"locationId" gorm:"type:int;not null;comment:浣嶇疆id"` //浣嶇疆id - Location Location `json:"location" gorm:"foreignKey:LocationId;references:id"` - AreaId int `json:"areaId" grom:"type:int;not null;comment:鍖哄煙id"` //鍖哄煙id - Area Location `json:"area" gorm:"foreignKey:AreaId;references:id"` - ProductCategoryID int `json:"productCategoryId" gorm:"type:int;not null;comment:浜у搧绉嶇被id"` //浜у搧绉嶇被id - ProductCategory ProductCategory `json:"productCategory"` - ProductId string `json:"productId" gorm:"type:varchar(191);not null;comment:浜у搧id"` //浜у搧id - Product Material `json:"product" gorm:"foreignKey:ProductId;references:ID"` + Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` + LocationId int `json:"locationId" gorm:"type:int;not null;comment:浣嶇疆id"` //浣嶇疆id + Location Location `json:"location" gorm:"foreignKey:LocationId;references:id"` + AreaId int `json:"areaId" grom:"type:int;not null;comment:鍖哄煙id"` //鍖哄煙id + Area Location `json:"area" gorm:"foreignKey:AreaId;references:id"` + ProductCategoryID int `json:"productCategoryId" gorm:"type:int;not null;comment:浜у搧绉嶇被id"` //浜у搧绉嶇被id + ProductCategory ProductCategory `json:"productCategory"` + ProductId string `json:"productId" gorm:"type:varchar(191);not null;comment:浜у搧id"` //浜у搧id + Product Material `json:"product" gorm:"foreignKey:ProductId;references:ID"` + RuleType constvar.RuleType `json:"ruleType" gorm:"type:int(11);not null;comment:涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨�"` } LocationProductSearch struct { @@ -90,6 +92,11 @@ return slf } +func (slf *LocationProductSearch) SetProductCategoryId(productCategoryID int) *LocationProductSearch { + slf.ProductCategoryID = productCategoryID + return slf +} + func (slf *LocationProductSearch) build() *gorm.DB { var db = slf.Orm.Model(&LocationProduct{}) @@ -130,6 +137,10 @@ db = db.Where("area_id = ?", slf.AreaId) } + if slf.ProductCategoryID != 0 { + db = db.Where("product_category_id = ?", slf.ProductCategoryID) + } + return db } diff --git a/request/location_product.go b/request/location_product.go index feccc4f..b0e3320 100644 --- a/request/location_product.go +++ b/request/location_product.go @@ -1,16 +1,20 @@ package request +import "wms/constvar" + type AddLocationProduct struct { - LocationId int `json:"locationId"` //浣嶇疆id - ProductId string `json:"productId"` //浜у搧id - ProductCategoryId int `json:"productCategoryId"` //浜у搧绉嶇被id - AreaId int `json:"areaId"` //鍖哄煙id + LocationId int `json:"locationId"` //浣嶇疆id + ProductId string `json:"productId"` //浜у搧id + ProductCategoryId int `json:"productCategoryId"` //浜у搧绉嶇被id + AreaId int `json:"areaId"` //鍖哄煙id + RuleType constvar.RuleType `json:"ruleType"` //涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨� } type UpdateLocationProduct struct { - Id int `json:"id"` - LocationId int `json:"locationId"` //浣嶇疆id - ProductId string `json:"productId"` //浜у搧id - ProductCategoryId int `json:"productCategoryId"` //浜у搧绉嶇被id - AreaId int `json:"areaId"` //鍖哄煙id + Id int `json:"id"` + LocationId int `json:"locationId"` //浣嶇疆id + ProductId string `json:"productId"` //浜у搧id + ProductCategoryId int `json:"productCategoryId"` //浜у搧绉嶇被id + AreaId int `json:"areaId"` //鍖哄煙id + RuleType constvar.RuleType `json:"ruleType"` //涓婃灦瑙勫垯绫诲瀷 1锛氫骇鍝佺被鍨嬶紱2锛氫骇鍝佺被鍒被鍨� } -- Gitblit v1.8.0