From a2ce997a0be21d854f5f8ab5c61b1616244b07c3 Mon Sep 17 00:00:00 2001 From: gazebo Date: Mon, 19 Nov 2018 10:36:50 +0800 Subject: [PATCH] - when delete category or sku, delete store sku and store category info also. --- business/jxstore/cms/sku.go | 125 ++++++++++++++++++++++++++++-------- 1 file changed, 98 insertions(+), 27 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index e77b0e638..d015d21ca 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -158,13 +158,34 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu } else if countInfos[2].Ct != 0 { return 0, errors.New("还有商品类别使用此类别,不能删除") } - if num, err = dao.DeleteEntityLogically(db, cat, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask), userName, nil); err == nil && num == 1 { - _, err = CurVendorSync.SyncCategory(ctx, db, cat.ID, false, userName) + dao.Begin(db) + defer func() { + dao.Rollback(db) + }() + if _, err = DeleteCategoryMap(ctx, db, categoryID); err == nil { + if num, err = dao.DeleteEntityLogically(db, cat, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask), userName, nil); err == nil && num == 1 { + dao.Commit(db) + _, err = CurVendorSync.SyncCategory(ctx, db, cat.ID, false, userName) + } } } return num, err } +func DeleteCategoryMap(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int) (num int64, err error) { + if db == nil { + db = dao.GetDB() + } + catMap := &model.StoreSkuCategoryMap{} + return dao.DeleteEntityLogically(db, catMap, map[string]interface{}{ + model.FieldElmSyncStatus: model.SyncFlagDeletedMask, + model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask, + }, ctx.GetUserName(), map[string]interface{}{ + model.FieldCategoryID: categoryID, + model.FieldDeletedAt: utils.DefaultTimeValue, + }) +} + func GetSkuNames(ctx *jxcontext.Context, keyword string, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *SkuNamesInfo, err error) { db := dao.GetDB() sql := ` @@ -504,22 +525,24 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int panic(r) } }() - skuName := &model.SkuName{} - skuName.ID = nameID - if num, err = dao.DeleteEntityLogically(db, skuName, nil, userName, nil); err == nil && num == 1 { - dummy := &model.Sku{} - num2, err2 := dao.DeleteEntityLogically(db, dummy, map[string]interface{}{ - model.FieldJdSyncStatus: model.SyncFlagDeletedMask, - model.FieldStatus: model.SkuStatusDeleted, - }, userName, map[string]interface{}{ - model.FieldNameID: nameID, - }) - if err2 == nil { - dao.Commit(db) - if num2 > 0 { - _, err = CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, userName) + if _, err = DeleteStoreSku(ctx, db, nameID, 0); err == nil { + skuName := &model.SkuName{} + skuName.ID = nameID + if num, err = dao.DeleteEntityLogically(db, skuName, nil, userName, nil); err == nil && num == 1 { + dummy := &model.Sku{} + num2, err2 := dao.DeleteEntityLogically(db, dummy, map[string]interface{}{ + model.FieldJdSyncStatus: model.SyncFlagDeletedMask, + model.FieldStatus: model.SkuStatusDeleted, + }, userName, map[string]interface{}{ + model.FieldNameID: nameID, + }) + if err2 == nil { + dao.Commit(db) + if num2 > 0 { + _, err = CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, userName) + } + return num, err } - return num, err } } dao.Rollback(db) @@ -588,16 +611,64 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, err error) { db := dao.GetDB() - sku := &model.Sku{} - sku.ID = skuID - if num, err = dao.DeleteEntityLogically(db, sku, map[string]interface{}{ - model.FieldStatus: model.SkuStatusDeleted, - model.FieldJdSyncStatus: model.SyncFlagDeletedMask, - }, userName, nil); err == nil { - if num == 1 { - _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, userName) - } else { - err = ErrEntityNotExist + dao.Begin(db) + defer func() { + dao.Rollback(db) + }() + + if _, err = DeleteStoreSku(ctx, db, 0, skuID); err == nil { + sku := &model.Sku{} + sku.ID = skuID + if num, err = dao.DeleteEntityLogically(db, sku, map[string]interface{}{ + model.FieldStatus: model.SkuStatusDeleted, + model.FieldJdSyncStatus: model.SyncFlagDeletedMask, + }, userName, nil); err == nil { + dao.Commit(db) + if num == 1 { + _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, userName) + } else { + err = ErrEntityNotExist + } + } + } + return num, err +} + +func DeleteStoreSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int) (num int64, err error) { + if db == nil { + db = dao.GetDB() + } + + sql := ` + SELECT * + FROM sku t1 + WHERE 1 = 1 + ` + sqlParams := []interface{}{} + if nameID > 0 { + sql += " AND t1.name_id = ?" + sqlParams = append(sqlParams, nameID) + } else { + sql += " AND t1.sku_id = ?" + sqlParams = append(sqlParams, skuID) + } + + var skuList []*model.Sku + if err = dao.GetRows(db, &skuList, sql, sqlParams); err == nil { + num = int64(len(skuList)) + for _, v := range skuList { + storeSkuBind := &model.StoreSkuBind{} + _, err = dao.DeleteEntityLogically(db, storeSkuBind, map[string]interface{}{ + model.FieldJdSyncStatus: model.SyncFlagDeletedMask, + model.FieldElmSyncStatus: model.SyncFlagDeletedMask, + model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask, + }, ctx.GetUserName(), map[string]interface{}{ + model.FieldSkuID: v.ID, + model.FieldDeletedAt: utils.DefaultTimeValue, + }) + if err != nil { + break + } } } return num, err