diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index d015d21ca..f01878ff2 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -480,7 +480,7 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf if num, err = dao.UpdateEntityLogically(db, skuName, valid, userName, nil); err == nil && num == 1 { if utils.Interface2Int64WithDefault(payload["isGlobal"], 0) == 0 && payload["places"] != nil { if places, ok := payload["places"].([]interface{}); ok { - if _, err = dao.ExecuteSQL(db, "DELETE FROM sku_name_place_bind WHERE name_id = ?", nameID); err == nil { + if _, err = dao.DeleteSkuNamePlace(db, nameID, nil); err == nil { for _, placeCode := range places { placeBind := &model.SkuNamePlaceBind{} placeBind.PlaceCode = int(utils.Interface2Int64WithDefault(placeCode, 0)) @@ -520,32 +520,32 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int db := dao.GetDB() dao.Begin(db) defer func() { - if r := recover(); r != nil { - dao.Rollback(db) - panic(r) - } + dao.Rollback(db) }() - 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 - } - } + if _, err := dao.DeleteSkuNamePlace(db, nameID, nil); err != nil { + return 0, err + } + if _, err = DeleteStoreSku(ctx, db, nameID, 0); err != nil { + return 0, err + } + numSku, err := dao.DeleteEntityLogically(db, &model.Sku{}, map[string]interface{}{ + model.FieldJdSyncStatus: model.SyncFlagDeletedMask, + model.FieldStatus: model.SkuStatusDeleted, + }, userName, map[string]interface{}{ + model.FieldNameID: nameID, + }) + if err != nil { + return 0, err + } + skuName := &model.SkuName{} + skuName.ID = nameID + if num, err = dao.DeleteEntityLogically(db, skuName, nil, userName, nil); err != nil { + return 0, err + } + dao.Commit(db) + if numSku > 0 { + _, err = CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, userName) } - dao.Rollback(db) return num, err } diff --git a/business/jxutils/jxutils.go b/business/jxutils/jxutils.go index 4dd14dab4..951062656 100644 --- a/business/jxutils/jxutils.go +++ b/business/jxutils/jxutils.go @@ -281,6 +281,7 @@ func FlatMap(in map[string]interface{}) map[string]interface{} { maps := []map[string]interface{}{} for k, v := range in { if vMap, ok := v.(map[string]interface{}); ok { + vMap = FlatMap(vMap) maps = append(maps, vMap) keys = append(keys, k) } diff --git a/business/model/dao/sku.go b/business/model/dao/sku.go index 6999c7c23..610dbe003 100644 --- a/business/model/dao/sku.go +++ b/business/model/dao/sku.go @@ -18,3 +18,19 @@ func GetSellCities(db *DaoDB, nameID int, vendorID int) (cities []*model.Place, } return cities, GetRows(db, &cities, sql, nameID) } + +func DeleteSkuNamePlace(db *DaoDB, nameID int, placeCodes []int) (num int64, err error) { + sql := ` + DELETE + FROM sku_name_place_bind + WHERE name_id = ? + ` + sqlParams := []interface{}{ + nameID, + } + if len(placeCodes) > 0 { + sql += " AND place_code IN (" + GenQuestionMarks(len(placeCodes)) + ")" + sqlParams = append(sqlParams, placeCodes) + } + return ExecuteSQL(db, sql, sqlParams...) +}