From e6004bea32f6b3861d50950ffa7f8fd0b72c30fe Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 4 Dec 2019 12:11:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84sku,skuname,category=E7=9A=84?= =?UTF-8?q?CUD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/cms/sku.go | 333 ++++++++++++++++++++++++------------ business/model/sync_map.go | 2 +- 2 files changed, 225 insertions(+), 110 deletions(-) diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 88500ab3c..f4a4b0e8a 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -8,6 +8,7 @@ import ( "time" "git.rosy.net.cn/baseapi/utils" + "git.rosy.net.cn/baseapi/utils/errlist" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils/datares" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" @@ -292,11 +293,11 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu dao.Rollback(db) return 0, err } - if num, err = dao.DeleteEntityLogically(db, cat, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask), userName, nil); err != nil { + if err = OnDeleteThing(db, int64(categoryID), model.ThingTypeCategory); err != nil { dao.Rollback(db) return 0, err } - if err = OnDeleteThing(db, int64(categoryID), model.ThingTypeCategory); err != nil { + if num, err = dao.DeleteEntityLogically(db, cat, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask), userName, nil); err != nil { dao.Rollback(db) return 0, err } @@ -662,6 +663,10 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s dao.Rollback(db) return nil, err } + if err = OnCreateThing(db, int64(skuNameExt.SkuName.ID), model.ThingTypeSkuName); err != nil { + dao.Rollback(db) + return nil, err + } for _, sku := range skuNameExt.Skus { dao.WrapAddIDCULDEntity(sku, userName) sku.NameID = skuNameExt.ID @@ -770,52 +775,72 @@ func UpdateSkuName(ctx *jxcontext.Context, nameID int, payload map[string]interf } }() valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask | skuName.JdSyncStatus - if num, err = dao.UpdateEntityLogically(db, skuName, valid, userName, nil); err == nil { - if utils.Interface2Int64WithDefault(payload["isGlobal"], 0) == 0 && payload["places"] != nil { - if places, ok := payload["places"].([]interface{}); ok { - if _, err = dao.DeleteSkuNamePlace(db, nameID, nil); err == nil { - for _, placeCode := range places { - placeBind := &model.SkuNamePlaceBind{} - placeBind.PlaceCode = int(utils.Interface2Int64WithDefault(placeCode, 0)) - if placeBind.PlaceCode > 0 { - dao.WrapAddIDCULEntity(placeBind, userName) - placeBind.NameID = nameID - err = dao.CreateEntity(db, placeBind) - } else { - dao.Rollback(db) - return 0, errors.New("地点代码非法") - } - } - } - } - } - if err == nil { - skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil) - if err = err2; err == nil { - for _, v := range skuList { - sku := &v.Sku - sku.JdSyncStatus |= model.SyncFlagModifiedMask - sku.LastOperator = userName - sku.UpdatedAt = time.Now() - dao.UpdateEntity(db, sku) - } - } - if err == nil { - skuIDs, err2 := dao.GetSkuIDByNames(db, []int{nameID}) - if err = err2; err == nil && len(skuIDs) > 0 { - _, err = SetStoreSkuSyncStatus2(db, nil, partner.GetSingleStoreVendorIDs(), skuIDs, model.SyncFlagModifiedMask) - } - } - } - if err == nil { - dao.Commit(db) - _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) - } else { - dao.Rollback(db) - } - } else { + if num, err = dao.UpdateEntityLogically(db, skuName, valid, userName, nil); err != nil { dao.Rollback(db) + return 0, err } + if err = OnUpdateThing(db, int64(nameID), model.ThingTypeSkuName); err != nil { + dao.Rollback(db) + return 0, err + } + if utils.Interface2Int64WithDefault(payload["isGlobal"], 0) == 0 && payload["places"] != nil { + if places, ok := payload["places"].([]interface{}); ok { + if _, err = dao.DeleteSkuNamePlace(db, nameID, nil); err != nil { + dao.Rollback(db) + return 0, err + } + for _, placeCode := range places { + placeBind := &model.SkuNamePlaceBind{} + placeBind.PlaceCode = int(utils.Interface2Int64WithDefault(placeCode, 0)) + if placeBind.PlaceCode > 0 { + dao.WrapAddIDCULEntity(placeBind, userName) + placeBind.NameID = nameID + err = dao.CreateEntity(db, placeBind) + } else { + dao.Rollback(db) + return 0, errors.New("地点代码非法") + } + } + } + } + + skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil) + if err = err2; err == nil { + for _, v := range skuList { + sku := &v.Sku + sku.JdSyncStatus |= model.SyncFlagModifiedMask + sku.LastOperator = userName + sku.UpdatedAt = time.Now() + if _, err = dao.UpdateEntity(db, sku); err != nil { + dao.Rollback(db) + return 0, err + } + + if err = OnUpdateThing(db, int64(v.ID), model.ThingTypeSku); err != nil { + dao.Rollback(db) + return 0, err + } + } + } + + skuIDs, err2 := dao.GetSkuIDByNames(db, []int{nameID}) + if err = err2; err != nil { + dao.Rollback(db) + return 0, err + } + if len(skuIDs) > 0 { + if _, err = SetStoreSkuSyncStatus2(db, nil, partner.GetSingleStoreVendorIDs(), skuIDs, model.SyncFlagModifiedMask); err != nil { + dao.Rollback(db) + return 0, err + } + } + dao.Commit(db) + + errList := errlist.New() + errList.AddErr(err) + _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) + errList.AddErr(err) + err = errList.GetErrListAsOne() } return num, err } @@ -835,33 +860,57 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int db := dao.GetDB() dao.Begin(db) defer func() { - dao.Rollback(db) + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } }() + if _, err := dao.DeleteSkuNamePlace(db, nameID, nil); err != nil { + dao.Rollback(db) return 0, err } if _, err = DeleteStoreSku(ctx, db, nameID, 0); err != nil { + dao.Rollback(db) 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 { + + skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil) + if err = err2; err == nil { + for _, v := range skuList { + sku := &v.Sku + if _, err = dao.DeleteEntityLogically(db, sku, map[string]interface{}{ + model.FieldJdSyncStatus: model.SyncFlagDeletedMask, + model.FieldStatus: model.SkuStatusDeleted, + }, userName, nil); err != nil { + dao.Rollback(db) + return 0, err + } + + if err = OnDeleteThing(db, int64(v.ID), model.ThingTypeSku); err != nil { + dao.Rollback(db) + return 0, err + } + } + } + + if err = OnDeleteThing(db, int64(nameID), model.ThingTypeSkuName); err != nil { + dao.Rollback(db) return 0, err } + skuName := &model.SkuName{} skuName.ID = nameID if num, err = dao.DeleteEntityLogically(db, skuName, map[string]interface{}{ model.FieldJdSyncStatus: model.SyncFlagDeletedMask, model.FieldStatus: model.SkuStatusDeleted, }, userName, nil); err != nil { + dao.Rollback(db) return 0, err } dao.Commit(db) - if numSku > 0 { + + if len(skuList) > 0 { _, err = CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, false, userName) } return num, err @@ -882,15 +931,31 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string) sku.JdSyncStatus = model.SyncFlagNewMask sku.JdID = 0 sku.NameID = nameID - if err = dao.CreateEntity(db, sku); err == nil { - result, err2 := GetSkuNames(ctx, "", false, utils.Params2Map("skuID", sku.ID), 0, 0) - if err = err2; err == nil { - if result.TotalCount == 1 { - outSkuNameExt = result.SkuNames[0] - _, err = CurVendorSync.SyncSku(ctx, db, outSkuNameExt.SkuName.ID, sku.ID, false, false, userName) - } else { - err = ErrEntityNotExist - } + + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + if err = dao.CreateEntity(db, sku); err != nil { + dao.Rollback(db) + return nil, err + } + if err = OnCreateThing(db, int64(sku.ID), model.ThingTypeSku); err != nil { + dao.Rollback(db) + return nil, err + } + dao.Commit(db) + + result, err2 := GetSkuNames(ctx, "", false, utils.Params2Map("skuID", sku.ID), 0, 0) + if err = err2; err == nil { + if result.TotalCount == 1 { + outSkuNameExt = result.SkuNames[0] + _, err = CurVendorSync.SyncSku(ctx, db, outSkuNameExt.SkuName.ID, sku.ID, false, false, userName) + } else { + err = ErrEntityNotExist } } return outSkuNameExt, err @@ -919,31 +984,43 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{} maskValue |= model.SyncFlagSpecMask } valid[model.FieldJdSyncStatus] = maskValue | sku.JdSyncStatus - if num, err = dao.UpdateEntityLogically(db, sku, valid, userName, nil); err == nil { - if num == 1 { - if num, err = dao.ExecuteSQL(db, ` - UPDATE sku_name t1 - JOIN sku t2 ON t1.id = t2.name_id - SET t1.spec_quality = t2.spec_quality, - t1.spec_unit = t2.spec_unit - WHERE t1.deleted_at = ? AND t2.id = ? AND t1.unit <> ? - `, utils.DefaultTimeValue, skuID, model.SpecialUnit); err == nil { - if _, err = SetStoreSkuSyncStatus2(db, nil, partner.GetSingleStoreVendorIDs(), []int{skuID}, model.SyncFlagModifiedMask); err == nil { - if maskValue&model.SyncFlagSpecMask != 0 { - err = refreshStoreSkuPrice(ctx, db, skuID) - } - } - } - } else { + if num, err = dao.UpdateEntityLogically(db, sku, valid, userName, nil); err != nil || num == 0 { + dao.Rollback(db) + if err == nil { err = ErrEntityNotExist } + return 0, err } - if err == nil { - dao.Commit(db) - _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName) - } else { + if num, err = dao.ExecuteSQL(db, ` + UPDATE sku_name t1 + JOIN sku t2 ON t1.id = t2.name_id + SET t1.spec_quality = t2.spec_quality, + t1.spec_unit = t2.spec_unit + WHERE t1.deleted_at = ? AND t2.id = ? AND t1.unit <> ? + `, utils.DefaultTimeValue, skuID, model.SpecialUnit); err != nil || num == 0 { dao.Rollback(db) + if err == nil { + err = ErrEntityNotExist + } + return 0, err } + if err = OnUpdateThing(db, int64(skuID), model.ThingTypeSku); err != nil { + dao.Rollback(db) + return 0, err + } + dao.Commit(db) + + if _, err = SetStoreSkuSyncStatus2(db, nil, partner.GetSingleStoreVendorIDs(), []int{skuID}, model.SyncFlagModifiedMask); err == nil { + if maskValue&model.SyncFlagSpecMask != 0 { + err = refreshStoreSkuPrice(ctx, db, skuID) + } + } + + errList := errlist.New() + errList.AddErr(err) + _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName) + errList.AddErr(err) + err = errList.GetErrListAsOne() } return num, err } @@ -982,23 +1059,33 @@ func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, e db := dao.GetDB() dao.Begin(db) defer func() { - dao.Rollback(db) + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } }() - 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, false, userName) - } else { - err = ErrEntityNotExist - } - } + if _, err = DeleteStoreSku(ctx, db, 0, skuID); err != nil { + dao.Rollback(db) + return 0, err + } + if err = OnDeleteThing(db, int64(skuID), model.ThingTypeSku); err != nil { + dao.Rollback(db) + return 0, err + } + 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.Rollback(db) + return 0, err + } + dao.Commit(db) + + if num == 1 { + _, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName) } return num, err } @@ -1050,9 +1137,25 @@ func AddSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName str PlaceCode: placeCode, } dao.WrapAddIDCULEntity(placeBind, userName) - if err = dao.CreateEntity(db, placeBind); err == nil { - _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) + + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + if err = dao.CreateEntity(db, placeBind); err != nil { + dao.Rollback(db) + return nil, err } + if err = OnUpdateThing(db, int64(nameID), model.ThingTypeSkuName); err != nil { + dao.Rollback(db) + return nil, err + } + dao.Commit(db) + + _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) return placeBind, err } @@ -1061,13 +1164,28 @@ func DeleteSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName placeBind := &model.SkuNamePlaceBind{} placeBind.NameID = nameID placeBind.PlaceCode = placeCode - if num, err = dao.DeleteEntity(db, placeBind, model.FieldNameID, model.FieldPlaceCode); err == nil { - if num == 1 { - _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) - } else { + + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + if num, err = dao.DeleteEntity(db, placeBind, model.FieldNameID, model.FieldPlaceCode); err != nil || num == 0 { + dao.Rollback(db) + if err == nil { err = ErrEntityNotExist } + return 0, err } + if err = OnUpdateThing(db, int64(nameID), model.ThingTypeSkuName); err != nil { + dao.Rollback(db) + return 0, err + } + dao.Commit(db) + + _, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) return num, err } @@ -1100,9 +1218,7 @@ func SortCategorySkus(ctx *jxcontext.Context, catID int, skuIDList []int) (err e defer func() { if r := recover(); r != nil { dao.Rollback(db) - if r != nil { - panic(r) - } + panic(r) } }() nameIDList := []int{} @@ -1129,6 +1245,5 @@ func SortCategorySkus(ctx *jxcontext.Context, catID int, skuIDList []int) (err e dao.Rollback(db) } } - return err } diff --git a/business/model/sync_map.go b/business/model/sync_map.go index 58c26f851..2577356df 100644 --- a/business/model/sync_map.go +++ b/business/model/sync_map.go @@ -2,7 +2,7 @@ package model const ( ThingTypeCategory = 1 - ThingTypSkuName = 2 + ThingTypeSkuName = 2 ThingTypeSku = 3 )