From 1fc5652567b9668bde0c4f174bc9b2458de751eb Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期五, 18 八月 2023 16:36:09 +0800 Subject: [PATCH] 销售明细修改产品 --- constvar/serviceContractStatus.go | 12 + service/salesDetails.go | 25 ++ constvar/salesDetailsProduct.go | 12 + model/request/serviceContractStatus.go | 19 + model/serviceContractStatus.go | 87 +++++-- service/dataServer.go | 5 model/salesDetailsProduct.go | 133 ++++++++++++ model/request/salesDetailsProduct.go | 22 ++ service/serviceContractStatus.go | 98 ++++---- model/product.go | 121 ++++++++++ model/salesDetails.go | 5 router/serviceContractStatus.go | 3 api/v1/serviceContractStatus.go | 79 +++--- 13 files changed, 489 insertions(+), 132 deletions(-) diff --git a/api/v1/serviceContractStatus.go b/api/v1/serviceContractStatus.go index ffbf8bd..c3786b7 100644 --- a/api/v1/serviceContractStatus.go +++ b/api/v1/serviceContractStatus.go @@ -1,12 +1,11 @@ - package v1 import ( - "aps_crm/model" "aps_crm/model/request" "aps_crm/model/response" "aps_crm/pkg/contextx" "aps_crm/pkg/ecode" + "aps_crm/service" "github.com/gin-gonic/gin" "strconv" ) @@ -14,13 +13,12 @@ type ServiceContractStatusApi struct{} // Add -// -// @Tags ServiceContractStatus -// @Summary 娣诲姞鏈嶅姟鍚堝悓鐘舵�� -// @Produce application/json -// @Param object body request.AddServiceContractStatus true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{} -// @Router /api/serviceContractStatus/add [post] +// @Tags 鍚堝悓鐘舵�� +// @Summary 娣诲姞鍚堝悓鐘舵�� +// @Produce application/json +// @Param object body request.AddServiceContractStatus true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/serviceContractStatus/add [post] func (s *ServiceContractStatusApi) Add(c *gin.Context) { var params request.AddServiceContractStatus ctx, ok := contextx.NewContext(c, ¶ms) @@ -28,10 +26,7 @@ return } - serviceContractStatus := new(model.ServiceContractStatus) - serviceContractStatus.Name = params.Name - - errCode := serviceContractStatusService.AddServiceContractStatus(serviceContractStatus) + errCode := service.NewServiceContractStatusService().AddServiceContractStatus(¶ms.ServiceContractStatus) if errCode != ecode.OK { ctx.Fail(errCode) return @@ -41,13 +36,12 @@ } // Delete -// -// @Tags ServiceContractStatus -// @Summary 鍒犻櫎鏈嶅姟鍚堝悓鐘舵�� -// @Produce application/json -// @Param id path int true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{} -// @Router /api/serviceContractStatus/delete/{id} [delete] +// @Tags 鍚堝悓鐘舵�� +// @Summary 鍒犻櫎鍚堝悓鐘舵�� +// @Produce application/json +// @Param id path int true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/serviceContractStatus/delete/{id} [delete] func (s *ServiceContractStatusApi) Delete(c *gin.Context) { ctx, ok := contextx.NewContext(c, nil) if !ok { @@ -55,7 +49,7 @@ } id, _ := strconv.Atoi(c.Param("id")) - errCode := serviceContractStatusService.DeleteServiceContractStatus(id) + errCode := service.NewServiceContractStatusService().DeleteServiceContractStatus(id) if errCode != ecode.OK { ctx.Fail(errCode) return @@ -65,21 +59,24 @@ } // Update -// -// @Tags ServiceContractStatus -// @Summary 鏇存柊鏈嶅姟鍚堝悓鐘舵�� -// @Produce application/json -// @Param object body request.UpdateServiceContractStatuss true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{} -// @Router /api/serviceContractStatus/update [put] +// @Tags 鍚堝悓鐘舵�� +// @Summary 鏇存柊鍚堝悓鐘舵�� +// @Produce application/json +// @Param object body request.UpdateServiceContractStatus true "鏌ヨ鍙傛暟" +// @Success 200 {object} contextx.Response{} +// @Router /api/serviceContractStatus/update [put] func (s *ServiceContractStatusApi) Update(c *gin.Context) { - var params request.UpdateServiceContractStatuss + var params request.UpdateServiceContractStatus ctx, ok := contextx.NewContext(c, ¶ms) if !ok { return } + if params.Id == 0 { + ctx.Fail(ecode.ParamsErr) + } + params.ServiceContractStatus.Id = params.Id - errCode := serviceContractStatusService.UpdateServiceContractStatus(params.ServiceContractStatuss) + errCode := service.NewServiceContractStatusService().UpdateServiceContractStatus(¶ms.ServiceContractStatus) if errCode != ecode.OK { ctx.Fail(errCode) return @@ -89,25 +86,27 @@ } // List -// -// @Tags ServiceContractStatus -// @Summary 鑾峰彇鏈嶅姟鍚堝悓鐘舵�佸垪琛� -// @Produce application/json -// @Success 200 {object} contextx.Response{data=response.ServiceContractStatusResponse} -// @Router /api/serviceContractStatus/list [get] +// @Tags 鍚堝悓鐘舵�� +// @Summary 鑾峰彇鍚堝悓鐘舵�佸垪琛� +// @Produce application/json +// @Param object query request.GetServiceContractStatusList true "鍙傛暟" +// @Success 200 {object} response.ListResponse{data=[]model.ServiceContractStatus} +// @Router /api/serviceContractStatus/list [get] func (s *ServiceContractStatusApi) List(c *gin.Context) { - ctx, ok := contextx.NewContext(c, nil) + var params request.GetServiceContractStatusList + ctx, ok := contextx.NewContext(c, ¶ms) if !ok { return } - serviceContractStatuss, errCode := serviceContractStatusService.GetServiceContractStatusList() + serviceContractStatus, total, errCode := service.NewServiceContractStatusService().GetServiceContractStatusList() if errCode != ecode.OK { ctx.Fail(errCode) return } - ctx.OkWithDetailed(response.ServiceContractStatusResponse{ - List: serviceContractStatuss, + ctx.OkWithDetailed(response.ListResponse{ + Data: serviceContractStatus, + Count: total, }) } diff --git a/constvar/salesDetailsProduct.go b/constvar/salesDetailsProduct.go new file mode 100644 index 0000000..6803cbb --- /dev/null +++ b/constvar/salesDetailsProduct.go @@ -0,0 +1,12 @@ +package constvar +type SalesDetailsProductQueryClass string + +const ( + SalesDetailsProductQueryClassExpireLessThen60Days SalesDetailsProductQueryClass = "" +) + +type SalesDetailsProductKeywordType string + +const ( + SalesDetailsProductKeywordCustomerName SalesDetailsProductKeywordType = "" +) diff --git a/constvar/serviceContractStatus.go b/constvar/serviceContractStatus.go new file mode 100644 index 0000000..232e49a --- /dev/null +++ b/constvar/serviceContractStatus.go @@ -0,0 +1,12 @@ +package constvar +type ServiceContractStatusQueryClass string + +const ( + ServiceContractStatusQueryClassExpireLessThen60Days ServiceContractStatusQueryClass = "" +) + +type ServiceContractStatusKeywordType string + +const ( + ServiceContractStatusKeywordCustomerName ServiceContractStatusKeywordType = "" +) diff --git a/model/product.go b/model/product.go index a61ee23..7ec7b6b 100644 --- a/model/product.go +++ b/model/product.go @@ -1,21 +1,122 @@ package model import ( + "aps_crm/pkg/mysqlx" "github.com/shopspring/decimal" "gorm.io/gorm" ) -type Product struct { - Id uint `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` - 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:浜у搧鏁伴噺"` - 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:"-"` -} +type ( + Product struct { + Id uint `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` + 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:浜у搧鏁伴噺"` + 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:"-"` + } + + ProductSearch struct { + Product + Ids []uint + Orm *gorm.DB + } +) func (Product) TableName() string { return "products" } + +func NewProductSearch(db *gorm.DB) *ProductSearch { + if db == nil { + db = mysqlx.GetDB() + } + + return &ProductSearch{ + Orm: db, + } +} + +func (slf *ProductSearch) build() *gorm.DB { + var db = slf.Orm.Model(&Product{}) + if slf.Id != 0 { + db = db.Where("id = ?", slf.Id) + } + if slf.Name != "" { + db = db.Where("name = ?", slf.Name) + } + + return db +} + +// Create 鍒涘缓 +func (slf *ProductSearch) Create(record *Product) error { + var db = slf.build() + return db.Create(record).Error +} + +func (slf *ProductSearch) CreateBatch(records []*Product) error { + var db = slf.build() + return db.Create(records).Error +} + +func (slf *ProductSearch) Delete() error { + var db = slf.build() + return db.Delete(&Product{}).Error +} + +func (slf *ProductSearch) Update(record *Product) error { + var db = slf.build() + return db.Updates(record).Error +} + +func (slf *ProductSearch) GetListByIds(ids []int) (result []Product, err error) { + var db = slf.build() + err = db.Where("id in (?)", ids).Find(&result).Error + return +} + +func (slf *ProductSearch) Find() (result []Product, err error) { + var db = slf.build() + err = db.Preload("country").Find(&result).Error + return +} + +func (slf *ProductSearch) SetId(id uint) *ProductSearch { + slf.Id = id + return slf +} + +func (slf *ProductSearch) SetIds(ids []uint) *ProductSearch { + slf.Ids = ids + return slf +} + +func (slf *ProductSearch) SetName(name string) *ProductSearch { + slf.Name = name + return slf +} + +func (slf *ProductSearch) UpdateList(m map[string]interface{}, ids []int) error { + var db = slf.build() + return db.Where("id in (?)", ids).Updates(m).Error +} + +func (slf *ProductSearch) First() (result Product, err error) { + var db = slf.build() + err = db.First(&result).Error + return +} + +func (slf *ProductSearch) FindAll() (result []*Product, err error) { + var db = slf.build() + err = db.Find(&result).Error + return +} + +func (slf *ProductSearch) Updates(m map[string]interface{}) error { + var db = slf.build() + return db.Updates(m).Error +} diff --git a/model/request/salesDetailsProduct.go b/model/request/salesDetailsProduct.go new file mode 100644 index 0000000..b494989 --- /dev/null +++ b/model/request/salesDetailsProduct.go @@ -0,0 +1,22 @@ +package request + +import ( + "aps_crm/constvar" + "aps_crm/model" +) + +type AddSalesDetailsProduct struct { + model.SalesDetailsProduct +} + +type UpdateSalesDetailsProduct struct { + Id int `json:"id"` + model.SalesDetailsProduct +} + +type GetSalesDetailsProductList struct { + PageInfo + QueryClass constvar.SalesDetailsProductQueryClass `json:"queryClass" form:"queryClass"` + KeywordType constvar.SalesDetailsProductKeywordType `json:"keywordType" form:"keywordType"` + Keyword string `json:"keyword" form:"keyword"` +} diff --git a/model/request/serviceContractStatus.go b/model/request/serviceContractStatus.go index 98ec257..8c3d71d 100644 --- a/model/request/serviceContractStatus.go +++ b/model/request/serviceContractStatus.go @@ -1,15 +1,22 @@ - package request +import ( + "aps_crm/constvar" + "aps_crm/model" +) + type AddServiceContractStatus struct { - Name string ` json:"name" binding:"required"` + model.ServiceContractStatus } type UpdateServiceContractStatus struct { - Id int `json:"id" binding:"required"` - Name string `json:"name" binding:"required"` + Id int `json:"id"` + model.ServiceContractStatus } -type UpdateServiceContractStatuss struct { - ServiceContractStatuss []*UpdateServiceContractStatus `json:"service_contract_status" binding:"required"` +type GetServiceContractStatusList struct { + PageInfo + QueryClass constvar.ServiceContractStatusQueryClass `json:"queryClass" form:"queryClass"` + KeywordType constvar.ServiceContractStatusKeywordType `json:"keywordType" form:"keywordType"` + Keyword string `json:"keyword" form:"keyword"` } diff --git a/model/salesDetails.go b/model/salesDetails.go index 55a6912..a2659d8 100644 --- a/model/salesDetails.go +++ b/model/salesDetails.go @@ -224,3 +224,8 @@ amount = record.AmountUnInvoiced.Add(amount) return slf.UpdateByMap(map[string]interface{}{"amount_not_invoiced": amount}) } + +func (slf *SalesDetailsSearch) UpdateProducts(record *SalesDetails, newProducts, removedProducts []*Product) error { + var db = slf.build() + return db.Updates(record).Error +} diff --git a/model/salesDetailsProduct.go b/model/salesDetailsProduct.go new file mode 100644 index 0000000..467b869 --- /dev/null +++ b/model/salesDetailsProduct.go @@ -0,0 +1,133 @@ +package model + +import ( + "aps_crm/constvar" + "aps_crm/pkg/mysqlx" + "fmt" + "gorm.io/gorm" +) + +type ( + // SalesDetailsProduct 閿�鍞槑缁嗗拰浜у搧鍏宠仈 + SalesDetailsProduct struct { + SalesDetailsId int `json:"id" gorm:"column:id;type:int;primary_key;AUTO_INCREMENT"` + ProductId uint `json:"name" gorm:"primary_key;column:name;type:varchar(255);not null;default:'';comment:鍚嶇О"` + } + + // SalesDetailsProductSearch 閿�鍞槑缁嗗拰浜у搧鍏宠仈鎼滅储鏉′欢 + SalesDetailsProductSearch struct { + SalesDetailsProduct + Orm *gorm.DB + QueryClass constvar.SalesDetailsProductQueryClass + KeywordType constvar.SalesDetailsProductKeywordType + Keyword string + PageNum int + PageSize int + } +) + +func (SalesDetailsProduct) TableName() string { + return "sales_details_product" +} + +func NewSalesDetailsProductSearch() *SalesDetailsProductSearch { + return &SalesDetailsProductSearch{ + Orm: mysqlx.GetDB(), + } +} + +func (slf *SalesDetailsProductSearch) build() *gorm.DB { + var db = slf.Orm.Model(&SalesDetailsProduct{}) + + return db +} + +func (slf *SalesDetailsProductSearch) Create(record *SalesDetailsProduct) error { + var db = slf.build() + return db.Create(record).Error +} + +func (slf *SalesDetailsProductSearch) CreateBatch(records []*SalesDetailsProduct) error { + var db = slf.build() + return db.Create(records).Error +} + +func (slf *SalesDetailsProductSearch) Delete() error { + var db = slf.build() + return db.Delete(&SalesDetailsProduct{}).Error +} + +func (slf *SalesDetailsProductSearch) Update(record *SalesDetailsProduct) error { + var db = slf.build() + return db.Updates(record).Error +} + +func (slf *SalesDetailsProductSearch) FindAll() ([]*SalesDetailsProduct, error) { + var db = slf.build() + var record = make([]*SalesDetailsProduct, 0) + err := db.Find(&record).Error + return record, err +} + +func (slf *SalesDetailsProductSearch) SetPage(page, size int) *SalesDetailsProductSearch { + slf.PageNum, slf.PageSize = page, size + return slf +} + +func (slf *SalesDetailsProductSearch) SetOrm(tx *gorm.DB) *SalesDetailsProductSearch { + slf.Orm = tx + return slf +} + +func (slf *SalesDetailsProductSearch) First() (*SalesDetailsProduct, error) { + var db = slf.build() + var record = new(SalesDetailsProduct) + err := db.First(record).Error + return record, err +} + +func (slf *SalesDetailsProductSearch) Updates(values interface{}) error { + var db = slf.build() + return db.Updates(values).Error +} + +func (slf *SalesDetailsProductSearch) Save(record *SalesDetailsProduct) error { + var db = slf.build() + + if err := db.Save(record).Error; err != nil { + return fmt.Errorf("save err: %v, record: %+v", err, record) + } + + return nil +} + +func (slf *SalesDetailsProductSearch) Find() ([]*SalesDetailsProduct, int64, error) { + var db = slf.build() + var records = make([]*SalesDetailsProduct, 0) + var total int64 + if err := db.Count(&total).Error; err != nil { + return records, total, err + } + if slf.PageNum > 0 && slf.PageSize > 0 { + db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize) + } + + err := db.Find(&records).Error + return records, total, err +} + +// InitDefaultData 鍒濆鍖栨暟鎹� +func (slf *SalesDetailsProductSearch) InitDefaultData() error { + var ( + db = slf.Orm.Table(slf.TableName()) + total int64 = 0 + ) + if err := db.Count(&total).Error; err != nil { + return err + } + if total != 0 { + return nil + } + records := []*SalesDetailsProduct{} + return slf.CreateBatch(records) +} diff --git a/model/serviceContractStatus.go b/model/serviceContractStatus.go index f7e271b..881b69d 100644 --- a/model/serviceContractStatus.go +++ b/model/serviceContractStatus.go @@ -1,21 +1,30 @@ package model import ( + "aps_crm/constvar" "aps_crm/pkg/mysqlx" + "errors" + "fmt" "gorm.io/gorm" "sync" ) type ( - // ServiceContractStatus 鍟嗘満闃舵 + // ServiceContractStatus 鍚堝悓鐘舵�� ServiceContractStatus struct { - Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` - Name string `json:"name" gorm:"column:name;type:varchar(255);comment:鍟嗘満闃舵鍚嶇О"` + Id int `json:"id" gorm:"column:id;type:int;primary_key;AUTO_INCREMENT"` + Name string `json:"name" gorm:"column:name;type:varchar(255);not null;default:'';comment:鍚嶇О"` } + // ServiceContractStatusSearch 鍚堝悓鐘舵�佹悳绱㈡潯浠� ServiceContractStatusSearch struct { ServiceContractStatus - Orm *gorm.DB + Orm *gorm.DB + QueryClass constvar.ServiceContractStatusQueryClass + KeywordType constvar.ServiceContractStatusKeywordType + Keyword string + PageNum int + PageSize int } ) @@ -34,9 +43,6 @@ if slf.Id != 0 { db = db.Where("id = ?", slf.Id) } - if slf.Name != "" { - db = db.Where("name = ?", slf.Name) - } return db } @@ -44,6 +50,11 @@ func (slf *ServiceContractStatusSearch) Create(record *ServiceContractStatus) error { var db = slf.build() return db.Create(record).Error +} + +func (slf *ServiceContractStatusSearch) CreateBatch(records []*ServiceContractStatus) error { + var db = slf.build() + return db.Create(records).Error } func (slf *ServiceContractStatusSearch) Delete() error { @@ -56,18 +67,11 @@ return db.Updates(record).Error } -func (slf *ServiceContractStatusSearch) Find() (*ServiceContractStatus, error) { - var db = slf.build() - var record = new(ServiceContractStatus) - err := db.First(record).Error - return record, err -} - func (slf *ServiceContractStatusSearch) FindAll() ([]*ServiceContractStatus, error) { var db = slf.build() - var records = make([]*ServiceContractStatus, 0) - err := db.Find(&records).Error - return records, err + var record = make([]*ServiceContractStatus, 0) + err := db.Find(&record).Error + return record, err } func (slf *ServiceContractStatusSearch) SetId(id int) *ServiceContractStatusSearch { @@ -75,19 +79,54 @@ return slf } -func (slf *ServiceContractStatusSearch) SetName(name string) *ServiceContractStatusSearch { - slf.Name = name +func (slf *ServiceContractStatusSearch) SetPage(page, size int) *ServiceContractStatusSearch { + slf.PageNum, slf.PageSize = page, size return slf } -func (slf *ServiceContractStatusSearch) Updates(data map[string]interface{}) error { - var db = slf.build() - return db.Updates(data).Error +func (slf *ServiceContractStatusSearch) SetOrm(tx *gorm.DB) *ServiceContractStatusSearch { + slf.Orm = tx + return slf } -func (slf *ServiceContractStatusSearch) CreateBatch(records []*ServiceContractStatus) error { +func (slf *ServiceContractStatusSearch) First() (*ServiceContractStatus, error) { var db = slf.build() - return db.Create(records).Error + var record = new(ServiceContractStatus) + err := db.First(record).Error + return record, err +} + +func (slf *ServiceContractStatusSearch) Updates(values interface{}) error { + var db = slf.build() + return db.Updates(values).Error +} + +func (slf *ServiceContractStatusSearch) Save(record *ServiceContractStatus) error { + if record.Id == 0 { + return errors.New("id涓虹┖") + } + var db = slf.build() + + if err := db.Save(record).Error; err != nil { + return fmt.Errorf("save err: %v, record: %+v", err, record) + } + + return nil +} + +func (slf *ServiceContractStatusSearch) Find() ([]*ServiceContractStatus, int64, error) { + var db = slf.build() + var records = make([]*ServiceContractStatus, 0) + var total int64 + if err := db.Count(&total).Error; err != nil { + return records, total, err + } + if slf.PageNum > 0 && slf.PageSize > 0 { + db = db.Limit(slf.PageSize).Offset((slf.PageNum - 1) * slf.PageSize) + } + + err := db.Find(&records).Error + return records, total, err } // InitDefaultData 鍒濆鍖栨暟鎹� diff --git a/router/serviceContractStatus.go b/router/serviceContractStatus.go index 0f0d48e..53438ff 100644 --- a/router/serviceContractStatus.go +++ b/router/serviceContractStatus.go @@ -1,4 +1,3 @@ - package router import ( @@ -17,4 +16,4 @@ serviceContractStatusRouter.PUT("update", serviceContractStatusApi.Update) // 鏇存柊$CName$ serviceContractStatusRouter.GET("list", serviceContractStatusApi.List) // 鑾峰彇$CName$鍒楄〃 } -} \ No newline at end of file +} diff --git a/service/dataServer.go b/service/dataServer.go index ab15917..4ea3990 100644 --- a/service/dataServer.go +++ b/service/dataServer.go @@ -105,7 +105,7 @@ data.OrderType = orderTypeList // get ServiceContractStatus list - serviceContractStatusList, _ := ServiceGroup.GetServiceContractStatusList() + serviceContractStatusList, _, _ := ServiceGroup.GetServiceContractStatusList() data.ServiceContractStatus = serviceContractStatusList // get ServiceContractType list @@ -148,8 +148,7 @@ currencyList, _ := ServiceGroup.GetCurrencyList() data.Currency = currencyList - errCode = ecode.OK return -} \ No newline at end of file +} diff --git a/service/salesDetails.go b/service/salesDetails.go index fb9b9dd..a2e5ad8 100644 --- a/service/salesDetails.go +++ b/service/salesDetails.go @@ -5,6 +5,7 @@ "aps_crm/model" "aps_crm/pkg/ecode" "github.com/shopspring/decimal" + "gorm.io/gorm" ) type SalesDetailsService struct{} @@ -71,7 +72,29 @@ salesDetails.AmountReceivable = salesDetails.AmountTotal.Sub(salesDetails.AmountReceived) salesDetails.AmountUnInvoiced = salesDetails.AmountTotal.Sub(salesDetails.AmountInvoiced) - err = model.NewSalesDetailsSearch().SetId(salesDetails.Id).Update(salesDetails) + err = model.WithTransaction(func(db *gorm.DB) error { + err = model.NewSalesDetailsSearch().SetId(salesDetails.Id).Update(salesDetails) + if err != nil { + return err + } + err = model.NewProductSearch(db).SetIds(removedProductIds).Delete() + if err != nil { + return err + } + err = model.NewProductSearch(db).CreateBatch(newProducts) + if err != nil { + return err + } + var rel []*model.SalesDetailsProduct + for _, p := range newProducts { + rel = append(rel, &model.SalesDetailsProduct{ + SalesDetailsId: salesDetails.Id, + ProductId: p.Id, + }) + } + return model.NewSalesDetailsProductSearch().CreateBatch(rel) + }) + if err != nil { return ecode.SalesDetailsSetErr } diff --git a/service/serviceContractStatus.go b/service/serviceContractStatus.go index 93cced0..ac5a82a 100644 --- a/service/serviceContractStatus.go +++ b/service/serviceContractStatus.go @@ -1,4 +1,3 @@ - package service import ( @@ -9,61 +8,68 @@ type ServiceContractStatusService struct{} +func NewServiceContractStatusService() ServiceContractStatusService { + return ServiceContractStatusService{} +} + func (ServiceContractStatusService) AddServiceContractStatus(serviceContractStatus *model.ServiceContractStatus) int { err := model.NewServiceContractStatusSearch().Create(serviceContractStatus) if err != nil { - return ecode.ServiceContractStatusExist + return ecode.DBErr } return ecode.OK } -func (ServiceContractStatusService) DeleteServiceContractStatus(id int) int { - _, err := model.NewServiceContractStatusSearch().SetId(id).Find() +func (ServiceContractStatusService) GetServiceContractStatus(id int) (*model.ServiceContractStatus, int) { + serviceContractStatus, err := model.NewServiceContractStatusSearch().SetId(id).First() if err != nil { - return ecode.ServiceContractStatusNotExist - } - - err = model.NewServiceContractStatusSearch().SetId(id).Delete() - if err != nil { - return ecode.ServiceContractStatusNotExist - } - return ecode.OK -} - -func (ServiceContractStatusService) GetServiceContractStatusList() ([]*model.ServiceContractStatus, int) { - list, err := model.NewServiceContractStatusSearch().FindAll() - if err != nil { - return nil, ecode.ServiceContractStatusListErr - } - - return list, ecode.OK -} - -func (ServiceContractStatusService) UpdateServiceContractStatus(serviceContractStatuss []*request.UpdateServiceContractStatus) int { - for _, v := range serviceContractStatuss { - // check serviceContractStatus exist - _, err := model.NewServiceContractStatusSearch().SetId(v.Id).Find() - if err != nil { - return ecode.ServiceContractStatusNotExist - } - - err = model.NewServiceContractStatusSearch().SetId(v.Id).Updates(map[string]interface{}{ - "name": v.Name, - }) - if err != nil { - return ecode.ServiceContractStatusSetErr - } - } - - return ecode.OK -} - -func (ServiceContractStatusService) GetServiceContractStatusDetail(id int) (*model.ServiceContractStatus, int) { - serviceContractStatus, err := model.NewServiceContractStatusSearch().SetId(id).Find() - if err != nil { - return nil, ecode.ServiceContractStatusNotExist + return nil, ecode.DBErr } return serviceContractStatus, ecode.OK } + +func (ServiceContractStatusService) DeleteServiceContractStatus(id int) int { + err := model.NewServiceContractStatusSearch().SetId(id).Delete() + if err != nil { + return ecode.DBErr + } + return ecode.OK +} + +func (ServiceContractStatusService) GetServiceContractStatusList() ([]*model.ServiceContractStatus, int64, int) { + list, total, err := model.NewServiceContractStatusSearch().Find() + if err != nil { + return nil, 0, ecode.DBErr + } + + return list, total, ecode.OK +} + +func (ServiceContractStatusService) UpdateServiceContractStatuss(ServiceContractStatuss []*request.UpdateServiceContractStatus) int { + for _, v := range ServiceContractStatuss { + // check ServiceContractStatus exist + _, err := model.NewServiceContractStatusSearch().SetId(v.Id).First() + if err != nil { + return ecode.DBErr + } + + err = model.NewServiceContractStatusSearch().SetId(v.Id).Updates(map[string]interface{}{ + + }) + if err != nil { + return ecode.DBErr + } + } + + return ecode.OK +} + +func (ServiceContractStatusService) UpdateServiceContractStatus(serviceContractStatus *model.ServiceContractStatus) int { + err := model.NewServiceContractStatusSearch().SetId(serviceContractStatus.Id).Save(serviceContractStatus) + if err != nil { + return ecode.DBErr + } + return ecode.OK +} -- Gitblit v1.8.0