package service import ( "aps_crm/model" "aps_crm/pkg/ecode" "gorm.io/gorm" ) type SaleChanceService struct{} func (SaleChanceService) AddSaleChance(saleChange *model.SaleChance) int { err := model.NewSaleChanceSearch().Create(saleChange) if err != nil { return ecode.SaleChanceExist } return ecode.OK } func (SaleChanceService) UpdateSaleChance(saleChange *model.SaleChance) int { // update saleChange old, err := model.NewSaleChanceSearch().SetId(saleChange.Id).Find() if err != nil { return ecode.SaleChanceNotExist } newProducts, removedProducts := NewProductsService().PickDiffProducts(saleChange.Products, old.Products) err = model.WithTransaction(func(db *gorm.DB) error { err = model.NewSaleChanceSearch().SetId(saleChange.Id).Update(saleChange) if err != nil { return err } if len(removedProducts) > 0 { removedProductIds := make([]uint, 0, len(removedProducts)) for _, product := range removedProducts { removedProductIds = append(removedProductIds, product.Id) } err = model.NewProductSearch(db).SetIds(removedProductIds).Delete() if err != nil { return err } } if len(newProducts) > 0 { for _, p := range newProducts { p.Id = 0 } err = model.NewProductSearch(db).CreateBatch(newProducts) if err != nil { return err } var rel []*model.SaleChanceProduct for _, p := range newProducts { rel = append(rel, &model.SaleChanceProduct{ SaleChanceId: saleChange.Id, ProductId: p.Id, }) } err = model.NewSaleChanceProductSearch().CreateBatch(rel) if err != nil { return err } } return nil }) if err != nil { return ecode.SaleChanceUpdateErr } return ecode.OK } // CheckSaleChangeExist check saleChange exist func CheckSaleChangeExist(id int) int { tmp, err := model.NewSaleChanceSearch().SetId(id).Find() if err != nil { return ecode.SaleChanceNotExist } if tmp.Id == 0 { return ecode.SaleChanceNotExist } return ecode.OK } func (SaleChanceService) GetSaleChanceList(page, pageSize int, data map[string]interface{}) ([]*model.SaleChance, int64, int) { // get contact list contacts, total, err := model.NewSaleChanceSearch().SetPage(page, pageSize).SetSearchMap(data).FindAll() if err != nil { return nil, 0, ecode.SaleChanceListErr } return contacts, total, ecode.OK } // push func (SaleChanceService) PushSaleChance(id, step int) int { // check saleChange exist errCode := CheckSaleChangeExist(id) if errCode != ecode.OK { return errCode } // check step _, err := model.NewSaleStageSearch().SetId(step).Find() if err != nil { return ecode.SaleStageNotExist } // push saleChange err = model.NewSaleChanceSearch().SetId(id).Update(&model.SaleChance{SaleStageId: step}) if err != nil { return ecode.SaleChanceUpdateErr } return ecode.OK } func (SaleChanceService) DeleteSaleChance(ids []int) int { // delete client err := model.NewSaleChanceSearch().SetIds(ids).Delete() if err != nil { return ecode.SaleChanceDeleteErr } return ecode.OK }