diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index eefa3a8d1..88500ab3c 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -211,37 +211,47 @@ func SetStoreCategorySyncStatus2(db *dao.DaoDB, storeIDs []int, catIDs []int, sy func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int, userName string) (err error) { var cats []*model.SkuCategory - parentCat := &model.SkuCategory{} - parentCat.ID = parentID db := dao.GetDB() - if parentID != 0 { - err = dao.GetEntity(db, parentCat) - } else { - parentCat = nil - } - if err == nil { - if err = dao.GetEntitiesByKV(db, &cats, utils.Params2Map(model.FieldParentID, parentID), false); err == nil { - catsLen := len(cats) - if catsLen != len(categoryIDs) { - return ErrInputCatsDoesntMatch + if err = dao.GetEntitiesByKV(db, &cats, utils.Params2Map(model.FieldParentID, parentID), false); err == nil { + catsLen := len(cats) + if catsLen != len(categoryIDs) { + return ErrInputCatsDoesntMatch + } + catsMap := make(map[int]*model.SkuCategory, catsLen) + for _, cat := range cats { + catsMap[cat.ID] = cat + } + + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) } - catsMap := make(map[int]*model.SkuCategory, catsLen) - for _, cat := range cats { - catsMap[cat.ID] = cat + }() + for k, v := range categoryIDs { + if catsMap[v] == nil { + dao.Rollback(db) + return fmt.Errorf("分类:%d不在%d分类下", v, parentID) } - for k, v := range categoryIDs { - catsMap[v].Seq = k - catsMap[v].LastOperator = ctx.GetUserName() - if _, err = dao.UpdateEntity(db, catsMap[v]); err != nil { - break - } + catsMap[v].Seq = k + catsMap[v].LastOperator = ctx.GetUserName() + if _, err = dao.UpdateEntity(db, catsMap[v]); err != nil { + dao.Rollback(db) + return err } - SetStoreCategorySyncStatus2(db, nil, categoryIDs, model.SyncFlagModifiedMask) - if err == nil { - _, err = CurVendorSync.SyncReorderCategories(ctx, db, parentID, false, userName) - CurVendorSync.SyncStoresCategory(ctx, db, nil, nil, false, true, true) + if err = OnUpdateThing(db, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil { + dao.Rollback(db) + return err } } + dao.Commit(db) + + SetStoreCategorySyncStatus2(db, nil, categoryIDs, model.SyncFlagModifiedMask) + if err == nil { + _, err = CurVendorSync.SyncReorderCategories(ctx, db, parentID, false, userName) + CurVendorSync.SyncStoresCategory(ctx, db, nil, nil, false, true, true) + } } return err }