diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 80d721982..eefa3a8d1 100644 --- a/business/jxstore/cms/sku.go +++ b/business/jxstore/cms/sku.go @@ -97,10 +97,25 @@ func AddCategory(ctx *jxcontext.Context, cat *model.SkuCategory, userName string } cat.Seq = maxSeq.MaxSeq + 1 } - if err = dao.CreateEntity(nil, cat); err == nil { - outCat = cat - _, err = CurVendorSync.SyncCategory(ctx, nil, cat.ID, false, userName) + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + if err = dao.CreateEntity(db, cat); err != nil { + dao.Rollback(db) + return nil, err } + if err = OnCreateThing(db, int64(cat.ID), model.ThingTypeCategory); err != nil { + dao.Rollback(db) + return nil, err + } + dao.Commit(db) + outCat = cat + + _, err = CurVendorSync.SyncCategory(ctx, nil, cat.ID, false, userName) return outCat, err } @@ -119,64 +134,71 @@ func UpdateCategory(ctx *jxcontext.Context, categoryID int, payload map[string]i syncStatus = model.SyncFlagModifiedMask valid[model.FieldJdSyncStatus] = int8(syncStatus) | cat.JdSyncStatus } - if num, err = dao.UpdateEntityLogically(db, cat, valid, userName, nil); err == nil { - SetStoreCategorySyncStatus2(db, nil, []int{categoryID}, model.SyncFlagModifiedMask) - var skuIDs []int - if valid["jdCategoryID"] != nil || valid["ebaiCategoryID"] != nil || valid["mtwmCategoryID"] != nil || - valid["jdPricePercentage"] != nil || valid["ebaiPricePercentage"] != nil || valid["mtwmPricePercentage"] != nil { - if skuList, err2 := dao.GetSkuByCats(db, []int{categoryID}); err2 == nil && len(skuList) > 0 { - for _, sku := range skuList { - skuIDs = append(skuIDs, sku.ID) - } - if valid["jdCategoryID"] != nil { - dao.SetSkuSyncStatus(db, model.VendorIDJD, skuIDs, model.SyncFlagModifiedMask) - } - // todo 如下逻辑,在不同平台同时改pricePercentage与平台分类映射时,会不必要的打上多余的标记 - var vendorIDs []int - syncStatus := model.SyncFlagModifiedMask - if valid["jdPricePercentage"] != nil { - vendorIDs = append(vendorIDs, model.VendorIDJD) - syncStatus |= model.SyncFlagPriceMask - } + dao.Begin(db) + defer func() { + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) + } + }() + if num, err = dao.UpdateEntityLogically(db, cat, valid, userName, nil); err != nil { + dao.Rollback(db) + return 0, err + } + if err = OnUpdateThing(db, int64(categoryID), model.ThingTypeCategory); err != nil { + dao.Rollback(db) + return 0, err + } + dao.Commit(db) - if valid["ebaiPricePercentage"] != nil { - vendorIDs = append(vendorIDs, model.VendorIDEBAI) - syncStatus |= model.SyncFlagPriceMask - } else if valid["ebaiCategoryID"] != nil { - vendorIDs = append(vendorIDs, model.VendorIDEBAI) - } + SetStoreCategorySyncStatus2(db, nil, []int{categoryID}, model.SyncFlagModifiedMask) + var skuIDs []int + if valid["jdCategoryID"] != nil || valid["ebaiCategoryID"] != nil || valid["mtwmCategoryID"] != nil || + valid["jdPricePercentage"] != nil || valid["ebaiPricePercentage"] != nil || valid["mtwmPricePercentage"] != nil { + if skuList, err2 := dao.GetSkuByCats(db, []int{categoryID}); err2 == nil && len(skuList) > 0 { + for _, sku := range skuList { + skuIDs = append(skuIDs, sku.ID) + } + if valid["jdCategoryID"] != nil { + dao.SetSkuSyncStatus(db, model.VendorIDJD, skuIDs, model.SyncFlagModifiedMask) + } - if valid["mtwmPricePercentage"] != nil { - vendorIDs = append(vendorIDs, model.VendorIDMTWM) - syncStatus |= model.SyncFlagPriceMask - } else if valid["mtwmCategoryID"] != nil { - vendorIDs = append(vendorIDs, model.VendorIDMTWM) - } - if len(vendorIDs) > 0 { - SetStoreSkuSyncStatus2(db, nil, vendorIDs, skuIDs, syncStatus) - } + // todo 如下逻辑,在不同平台同时改pricePercentage与平台分类映射时,会不必要的打上多余的标记 + var vendorIDs []int + syncStatus := model.SyncFlagModifiedMask + if valid["jdPricePercentage"] != nil { + vendorIDs = append(vendorIDs, model.VendorIDJD) + syncStatus |= model.SyncFlagPriceMask + } + + if valid["ebaiPricePercentage"] != nil { + vendorIDs = append(vendorIDs, model.VendorIDEBAI) + syncStatus |= model.SyncFlagPriceMask + } else if valid["ebaiCategoryID"] != nil { + vendorIDs = append(vendorIDs, model.VendorIDEBAI) + } + + if valid["mtwmPricePercentage"] != nil { + vendorIDs = append(vendorIDs, model.VendorIDMTWM) + syncStatus |= model.SyncFlagPriceMask + } else if valid["mtwmCategoryID"] != nil { + vendorIDs = append(vendorIDs, model.VendorIDMTWM) + } + if len(vendorIDs) > 0 { + SetStoreSkuSyncStatus2(db, nil, vendorIDs, skuIDs, syncStatus) } } - _, err = CurVendorSync.SyncCategory(ctx, db, categoryID, false, userName) - if len(skuIDs) > 0 { - CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, true, true, userName) - } + } + _, err = CurVendorSync.SyncCategory(ctx, db, categoryID, false, userName) + if len(skuIDs) > 0 { + CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, true, true, userName) } } return num, err } func SetStoreCategorySyncStatus2(db *dao.DaoDB, storeIDs []int, catIDs []int, syncStatus int) (num int64, err error) { - // dao.Begin(db) - // defer func() { - // if r := recover(); r != nil || err != nil { - // dao.Rollback(db) - // if r != nil { - // panic(r) - // } - // } - // }() for _, vendorID := range partner.GetSingleStoreVendorIDs() { num2, err2 := dao.SetStoreCategorySyncStatus(db, vendorID, storeIDs, catIDs, syncStatus) if err = err2; err != nil { @@ -184,7 +206,6 @@ func SetStoreCategorySyncStatus2(db *dao.DaoDB, storeIDs []int, catIDs []int, sy } num += num2 } - // dao.Commit(db) return num, nil } @@ -252,14 +273,25 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu } 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) + if r := recover(); r != nil { + dao.Rollback(db) + panic(r) } + }() + if _, err = DeleteCategoryMap(ctx, db, categoryID); err != nil { + dao.Rollback(db) + return 0, err } + if num, err = dao.DeleteEntityLogically(db, cat, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask), userName, nil); err != nil { + dao.Rollback(db) + return 0, err + } + if err = OnDeleteThing(db, int64(categoryID), model.ThingTypeCategory); err != nil { + dao.Rollback(db) + return 0, err + } + dao.Commit(db) + _, err = CurVendorSync.SyncCategory(ctx, db, cat.ID, false, userName) } return num, err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 14498bcfa..9999de846 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -715,3 +715,15 @@ func GetTimeMixByInt(begin1, end1, begin2, end2 int16) (beginAt, endAt int16) { } return beginAt, endAt } + +func OnCreateThing(db *dao.DaoDB, thingID int64, thingType int8) (err error) { + return err +} + +func OnUpdateThing(db *dao.DaoDB, thingID int64, thingType int8) (err error) { + return err +} + +func OnDeleteThing(db *dao.DaoDB, thingID int64, thingType int8) (err error) { + return err +} diff --git a/business/model/sku.go b/business/model/sku.go index 70a727723..8015321be 100644 --- a/business/model/sku.go +++ b/business/model/sku.go @@ -157,24 +157,6 @@ func (*SkuCategory) TableIndex() [][]string { } } -type SkuCategoryMap struct { - ModelIDCULD - - CatID int `orm:"column(cat_id)" json:"catID"` - VendorID int `orm:"column(vendor_id)" json:"vendorID"` - VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 - - VendorCatID string `orm:"size(32);column(vendor_cat_id)" json:"vendorCatID"` - SyncStatus int8 `orm:"default(2)"` -} - -func (*SkuCategoryMap) TableUnique() [][]string { - return [][]string{ - []string{"CatID", "VendorID", "VendorOrgCode", "DeletedAt"}, - []string{"VendorCatID", "VendorID", "VendorOrgCode", "DeletedAt"}, - } -} - type SkuName struct { ModelIDCULD diff --git a/business/model/sync_map.go b/business/model/sync_map.go new file mode 100644 index 000000000..58c26f851 --- /dev/null +++ b/business/model/sync_map.go @@ -0,0 +1,26 @@ +package model + +const ( + ThingTypeCategory = 1 + ThingTypSkuName = 2 + ThingTypeSku = 3 +) + +type ThingMap struct { + ModelIDCULD + + ThingID int64 `orm:"column(thing_id)" json:"thingID"` + ThingType int8 `json:"thingType"` + VendorID int `orm:"column(vendor_id)" json:"vendorID"` + VendorOrgCode string `orm:"size(32)" json:"vendorOrgCode"` // 同一平台下不同的商户代码,如果只有一个,可以为空 + + VendorThingID string `orm:"size(32);column(vendor_thing_id)" json:"vendorThingID"` + SyncStatus int8 `orm:"default(2)"` +} + +func (*ThingMap) TableUnique() [][]string { + return [][]string{ + []string{"ThingID", "ThingType", "VendorID", "VendorOrgCode", "DeletedAt"}, + []string{"VendorThingID", "ThingType", "VendorID", "VendorOrgCode", "DeletedAt"}, + } +} diff --git a/globals/beegodb/beegodb.go b/globals/beegodb/beegodb.go index 8b200cec3..28b108a3b 100644 --- a/globals/beegodb/beegodb.go +++ b/globals/beegodb/beegodb.go @@ -32,7 +32,7 @@ func Init() { orm.RegisterModel(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}, &model.StoreCourierMap{}) orm.RegisterModel(&model.SkuVendorCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{}) orm.RegisterModel(&model.SkuCategory{}) - // orm.RegisterModel(&model.SkuCategoryMap{}) + // orm.RegisterModel(&model.ThingMap{}) orm.RegisterModel(&model.AuthBind{}, &model.User{})