diff --git a/business/jxstore/cms/sku.go b/business/jxstore/cms/sku.go index 80d721982..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" @@ -97,10 +98,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 +135,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,43 +207,52 @@ func SetStoreCategorySyncStatus2(db *dao.DaoDB, storeIDs []int, catIDs []int, sy } num += num2 } - // dao.Commit(db) return num, nil } 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 } @@ -252,14 +284,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 err = OnDeleteThing(db, int64(categoryID), model.ThingTypeCategory); 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 + } + dao.Commit(db) + _, err = CurVendorSync.SyncCategory(ctx, db, cat.ID, false, userName) } return num, err } @@ -620,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 @@ -728,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 } @@ -793,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 @@ -840,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 @@ -877,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 } @@ -940,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 } @@ -1008,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 } @@ -1019,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 } @@ -1058,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{} @@ -1087,6 +1245,5 @@ func SortCategorySkus(ctx *jxcontext.Context, catID int, skuIDList []int) (err e dao.Rollback(db) } } - return err } diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index d15797789..7777ca685 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -806,3 +806,14 @@ func (d *SyncErrResultLock) AppendData(syncErrResult SyncErrResult) { defer d.locker.Unlock() d.syncErrResult = append(d.syncErrResult, syncErrResult) } +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/dao/store_sku.go b/business/model/dao/store_sku.go index 2f92b29f7..d1778ca30 100644 --- a/business/model/dao/store_sku.go +++ b/business/model/dao/store_sku.go @@ -206,7 +206,6 @@ func GetDirtyStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats } // 以store_sku_bind为基础来做同步,正常情况下使用 -// !!! 此函数不要将store_sku_bind中的vendor_price取出来放到StoreSkuSyncInfo.VendorPrice中,因为之后会依赖这个VendorPrice进行重算 // 单多门店模式厂商通用 func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty bool) (skus []*StoreSkuSyncInfo, err error) { if vendorID < 0 { 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..2577356df --- /dev/null +++ b/business/model/sync_map.go @@ -0,0 +1,26 @@ +package model + +const ( + ThingTypeCategory = 1 + ThingTypeSkuName = 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{})