From 7312497d178aa763321ddd5ee56b97b422784555 Mon Sep 17 00:00:00 2001 From: lishihai <dslsh@dscom> Date: 星期五, 14 六月 2024 18:11:16 +0800 Subject: [PATCH] 新增/修改产品-对动态属性的支持Attributes->AttributeValues --- controllers/product_controller.go | 122 +++++++++++++++++++++++++++------------- 1 files changed, 83 insertions(+), 39 deletions(-) diff --git a/controllers/product_controller.go b/controllers/product_controller.go index 606e381..3e9ea0c 100644 --- a/controllers/product_controller.go +++ b/controllers/product_controller.go @@ -53,22 +53,40 @@ return } //params.ID = utils.GetUUID() - err := models.NewMaterialSearch().Create(¶ms) + + err := models.WithTransaction(func(tx *gorm.DB) error { + if err := models.NewMaterialSearch().SetOrm(tx).Create(¶ms); err != nil { + return err + } + materialAttachmentList := []*models.MaterialAttachment{} + for _, v := range params.AttachmentIDs { + ma := &models.MaterialAttachment{MaterialID: params.ID, AttachmentID: v} + materialAttachmentList = append(materialAttachmentList, ma) + } + if len(materialAttachmentList) > 0 { + if err := models.NewMaterialAttachmentSearch().SetOrm(tx).CreateBatch(materialAttachmentList); err != nil { + return err + } + } + avs := make([]*models.AttributeValue, 0) + for _, v := range params.Attributes { + av := models.AttributeValue{ + Model: gorm.Model{}, + EntityID: params.ID, + AttributeID: v.ID, + Value: v.Value, + } + avs = append(avs, &av) + + } + if err := models.NewAttributeValueSearch().SetOrm(tx).CreateBatch(avs); err != nil { + return err + } + return nil + }) if err != nil { util.ResponseFormat(c, code.RequestParamError, "浜у搧淇℃伅淇濆瓨澶辫触") return - } - - materialAttachmentList := []*models.MaterialAttachment{} - for _, v := range params.AttachmentIDs { - ma := &models.MaterialAttachment{MaterialID: params.ID, AttachmentID: v} - materialAttachmentList = append(materialAttachmentList, ma) - } - if len(materialAttachmentList) > 0 { - if err := models.NewMaterialAttachmentSearch().CreateBatch(materialAttachmentList); err != nil { - util.ResponseFormat(c, code.SaveFail, "闄勪欢淇濆瓨澶辫触") - return - } } util.ResponseFormat(c, code.Success, "淇濆瓨鎴愬姛") @@ -216,38 +234,64 @@ util.ResponseFormat(c, code.RequestParamError, "浜у搧淇℃伅鏇存柊澶辫触") return } - - //鏇存柊鍦ㄥ簱鐨勪骇鍝佺被鍨� - if params.CategoryId > 0 { - find, _ := models.NewLocationProductAmountSearch().SetProductId(params.ID).Find() - if len(find) > 0 { - var ids []int - for _, f := range find { - if f.ProductCategoryID != params.CategoryId { - ids = append(ids, f.Id) + err = models.WithTransaction(func(tx *gorm.DB) error { + //鏇存柊鍦ㄥ簱鐨勪骇鍝佺被鍨� + if params.CategoryId > 0 { + find, _ := models.NewLocationProductAmountSearch().SetProductId(params.ID).Find() + if len(find) > 0 { + var ids []int + for _, f := range find { + if f.ProductCategoryID != params.CategoryId { + ids = append(ids, f.Id) + } } + m := make(map[string]interface{}) + m["productCategoryId"] = params.CategoryId + _ = models.NewLocationProductAmountSearch().SetOrm(tx).SetIds(ids).UpdateByMap(m) } - m := make(map[string]interface{}) - m["productCategoryId"] = params.CategoryId - _ = models.NewLocationProductAmountSearch().SetIds(ids).UpdateByMap(m) } - } + materialAttachmentList := []*models.MaterialAttachment{} + for _, v := range params.AttachmentIDs { + ma := &models.MaterialAttachment{MaterialID: params.ID, AttachmentID: v} + materialAttachmentList = append(materialAttachmentList, ma) + } + if err := models.NewMaterialAttachmentSearch().SetOrm(tx).SetMaterialID(params.ID).Delete(); err != nil { + util.ResponseFormat(c, code.RequestParamError, "浜у搧闄勪欢娓呴櫎澶辫触") + return err + } + if len(materialAttachmentList) > 0 { + if err := models.NewMaterialAttachmentSearch().SetOrm(tx).CreateBatch(materialAttachmentList); err != nil { + util.ResponseFormat(c, code.RequestParamError, "浜у搧淇℃伅鏇存柊澶辫触") + return err + } + } - materialAttachmentList := []*models.MaterialAttachment{} - for _, v := range params.AttachmentIDs { - ma := &models.MaterialAttachment{MaterialID: params.ID, AttachmentID: v} - materialAttachmentList = append(materialAttachmentList, ma) - } - if err := models.NewMaterialAttachmentSearch().SetMaterialID(params.ID).Delete(); err != nil { - util.ResponseFormat(c, code.RequestParamError, "浜у搧闄勪欢娓呴櫎澶辫触") + attributeValueSearch := models.NewAttributeValueSearch() + //鍒犻櫎浠庢柊鎻掑叆 + if err := attributeValueSearch.SetOrm(tx).SetEntityID(params.ID).Delete(); err != nil { + return err + } + avs := make([]*models.AttributeValue, 0) + for _, v := range params.Attributes { + av := models.AttributeValue{ + Model: gorm.Model{}, + EntityID: params.ID, + AttributeID: v.ID, + Value: v.Value, + } + avs = append(avs, &av) + + } + if err := models.NewAttributeValueSearch().SetOrm(tx).CreateBatch(avs); err != nil { + return err + } + return nil + }) + if err != nil { + util.ResponseFormat(c, code.RequestParamError, "浜у搧淇℃伅鏇存柊澶辫触") return } - if len(materialAttachmentList) > 0 { - if err := models.NewMaterialAttachmentSearch().CreateBatch(materialAttachmentList); err != nil { - util.ResponseFormat(c, code.RequestParamError, "浜у搧淇℃伅鏇存柊澶辫触") - return - } - } + util.ResponseFormat(c, code.Success, "鏇存柊鎴愬姛") } -- Gitblit v1.8.0