From 0409a5d0235f4a87ecf08b12baa9149279a90447 Mon Sep 17 00:00:00 2001 From: wangpengfei <274878379@qq.com> Date: 星期五, 18 八月 2023 22:25:58 +0800 Subject: [PATCH] fix --- model/product.go | 2 service/quotation.go | 52 ++++++++++++++++++++++--- model/quotation.go | 9 +++- 3 files changed, 52 insertions(+), 11 deletions(-) diff --git a/model/product.go b/model/product.go index e88a323..2880731 100644 --- a/model/product.go +++ b/model/product.go @@ -12,7 +12,7 @@ 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:int;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:浜у搧鎻忚堪"` gorm.Model `json:"-"` diff --git a/model/quotation.go b/model/quotation.go index 6bd3f8b..091c34b 100644 --- a/model/quotation.go +++ b/model/quotation.go @@ -43,9 +43,12 @@ return "quotation" } -func NewQuotationSearch() *QuotationSearch { +func NewQuotationSearch(db *gorm.DB) *QuotationSearch { + if db == nil { + db = mysqlx.GetDB() + } return &QuotationSearch{ - Orm: mysqlx.GetDB(), + Orm: db, } } @@ -104,7 +107,7 @@ func (slf *QuotationSearch) Find() (*Quotation, error) { var db = slf.build() var record Quotation - err := db.Preload("Client").Preload("Contact").Preload("SaleChance").First(&record).Error + err := db.Preload("Products").Preload("Client").Preload("Contact").Preload("SaleChance").First(&record).Error return &record, err } diff --git a/service/quotation.go b/service/quotation.go index f0bbdbe..ede0edc 100644 --- a/service/quotation.go +++ b/service/quotation.go @@ -3,12 +3,13 @@ import ( "aps_crm/model" "aps_crm/pkg/ecode" + "aps_crm/pkg/mysqlx" ) type QuotationService struct{} func (QuotationService) AddQuotation(quotation *model.Quotation) int { - err := model.NewQuotationSearch().Create(quotation) + err := model.NewQuotationSearch(nil).Create(quotation) if err != nil { return ecode.QuotationExist } @@ -18,14 +19,51 @@ func (QuotationService) UpdateQuotation(quotation *model.Quotation) int { // check quotation exist - _, err := model.NewQuotationSearch().SetId(quotation.Id).Find() + tmp, err := model.NewQuotationSearch(nil).SetId(quotation.Id).Find() if err != nil { return ecode.QuotationNotExist } - err = model.NewQuotationSearch().SetId(quotation.Id).Update(quotation) - if err != nil { - return ecode.QuotationSetErr + if len(quotation.Products) == 0 { + err = model.NewQuotationSearch(nil).SetId(quotation.Id).Update(quotation) + if err != nil { + return ecode.QuotationSetErr + } + } else { + tx := mysqlx.GetDB().Begin() + err = tx.Model(tmp).Association("Products").Clear() + if err != nil { + tx.Rollback() + return ecode.QuotationSetErr + } + + err = model.NewQuotationSearch(tx).SetId(quotation.Id).Update(quotation) + if err != nil { + tx.Rollback() + return ecode.QuotationSetErr + } + + for _, product := range quotation.Products { + if product.Id == 0 { + err = model.NewProductSearch(tx).Create(&product) + if err != nil { + tx.Rollback() + return ecode.QuotationSetErr + } + } else { + err = model.NewProductSearch(tx).SetId(product.Id).Update(&product) + if err != nil { + tx.Rollback() + return ecode.QuotationSetErr + } + } + err = tx.Model(&tmp).Association("Products").Append(&product) + if err != nil { + tx.Rollback() + return ecode.QuotationSetErr + } + } + tx.Commit() } return ecode.OK @@ -33,7 +71,7 @@ func (QuotationService) GetQuotationList(page, pageSize int, data map[string]interface{}) ([]*model.Quotation, int64, int) { // get contact list - contacts, total, err := model.NewQuotationSearch().SetPage(page, pageSize).SetSearchMap(data).FindAll() + contacts, total, err := model.NewQuotationSearch(nil).SetPage(page, pageSize).SetSearchMap(data).FindAll() if err != nil { return nil, 0, ecode.QuotationListErr } @@ -42,7 +80,7 @@ func (QuotationService) DeleteQuotation(ids []int) int { // delete client - err := model.NewQuotationSearch().SetIds(ids).Delete() + err := model.NewQuotationSearch(nil).SetIds(ids).Delete() if err != nil { return ecode.QuotationDeleteErr } -- Gitblit v1.8.0