合并mark

This commit is contained in:
苏尹岚
2019-12-04 17:37:06 +08:00
6 changed files with 384 additions and 209 deletions

View File

@@ -8,6 +8,7 @@ import (
"time" "time"
"git.rosy.net.cn/baseapi/utils" "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"
"git.rosy.net.cn/jx-callback/business/jxutils/datares" "git.rosy.net.cn/jx-callback/business/jxutils/datares"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "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 cat.Seq = maxSeq.MaxSeq + 1
} }
if err = dao.CreateEntity(nil, cat); err == nil { dao.Begin(db)
outCat = cat defer func() {
_, err = CurVendorSync.SyncCategory(ctx, nil, cat.ID, false, userName) 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 return outCat, err
} }
@@ -119,64 +135,71 @@ func UpdateCategory(ctx *jxcontext.Context, categoryID int, payload map[string]i
syncStatus = model.SyncFlagModifiedMask syncStatus = model.SyncFlagModifiedMask
valid[model.FieldJdSyncStatus] = int8(syncStatus) | cat.JdSyncStatus 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与平台分类映射时会不必要的打上多余的标记 dao.Begin(db)
var vendorIDs []int defer func() {
syncStatus := model.SyncFlagModifiedMask if r := recover(); r != nil {
if valid["jdPricePercentage"] != nil { dao.Rollback(db)
vendorIDs = append(vendorIDs, model.VendorIDJD) panic(r)
syncStatus |= model.SyncFlagPriceMask }
} }()
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 { SetStoreCategorySyncStatus2(db, nil, []int{categoryID}, model.SyncFlagModifiedMask)
vendorIDs = append(vendorIDs, model.VendorIDEBAI) var skuIDs []int
syncStatus |= model.SyncFlagPriceMask if valid["jdCategoryID"] != nil || valid["ebaiCategoryID"] != nil || valid["mtwmCategoryID"] != nil ||
} else if valid["ebaiCategoryID"] != nil { valid["jdPricePercentage"] != nil || valid["ebaiPricePercentage"] != nil || valid["mtwmPricePercentage"] != nil {
vendorIDs = append(vendorIDs, model.VendorIDEBAI) 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 { // todo 如下逻辑在不同平台同时改pricePercentage与平台分类映射时会不必要的打上多余的标记
vendorIDs = append(vendorIDs, model.VendorIDMTWM) var vendorIDs []int
syncStatus |= model.SyncFlagPriceMask syncStatus := model.SyncFlagModifiedMask
} else if valid["mtwmCategoryID"] != nil { if valid["jdPricePercentage"] != nil {
vendorIDs = append(vendorIDs, model.VendorIDMTWM) vendorIDs = append(vendorIDs, model.VendorIDJD)
} syncStatus |= model.SyncFlagPriceMask
if len(vendorIDs) > 0 { }
SetStoreSkuSyncStatus2(db, nil, vendorIDs, skuIDs, syncStatus)
} 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 { _, err = CurVendorSync.SyncCategory(ctx, db, categoryID, false, userName)
CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, true, true, userName) if len(skuIDs) > 0 {
} CurVendorSync.SyncSkus(ctx, db, nil, skuIDs, true, true, userName)
} }
} }
return num, err return num, err
} }
func SetStoreCategorySyncStatus2(db *dao.DaoDB, storeIDs []int, catIDs []int, syncStatus int) (num int64, err error) { 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() { for _, vendorID := range partner.GetSingleStoreVendorIDs() {
num2, err2 := dao.SetStoreCategorySyncStatus(db, vendorID, storeIDs, catIDs, syncStatus) num2, err2 := dao.SetStoreCategorySyncStatus(db, vendorID, storeIDs, catIDs, syncStatus)
if err = err2; err != nil { if err = err2; err != nil {
@@ -184,43 +207,52 @@ func SetStoreCategorySyncStatus2(db *dao.DaoDB, storeIDs []int, catIDs []int, sy
} }
num += num2 num += num2
} }
// dao.Commit(db)
return num, nil return num, nil
} }
func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int, userName string) (err error) { func ReorderCategories(ctx *jxcontext.Context, parentID int, categoryIDs []int, userName string) (err error) {
var cats []*model.SkuCategory var cats []*model.SkuCategory
parentCat := &model.SkuCategory{}
parentCat.ID = parentID
db := dao.GetDB() db := dao.GetDB()
if parentID != 0 { if err = dao.GetEntitiesByKV(db, &cats, utils.Params2Map(model.FieldParentID, parentID), false); err == nil {
err = dao.GetEntity(db, parentCat) catsLen := len(cats)
} else { if catsLen != len(categoryIDs) {
parentCat = nil return ErrInputCatsDoesntMatch
} }
if err == nil { catsMap := make(map[int]*model.SkuCategory, catsLen)
if err = dao.GetEntitiesByKV(db, &cats, utils.Params2Map(model.FieldParentID, parentID), false); err == nil { for _, cat := range cats {
catsLen := len(cats) catsMap[cat.ID] = cat
if catsLen != len(categoryIDs) { }
return ErrInputCatsDoesntMatch
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 { for k, v := range categoryIDs {
catsMap[cat.ID] = cat 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].Seq = k catsMap[v].LastOperator = ctx.GetUserName()
catsMap[v].LastOperator = ctx.GetUserName() if _, err = dao.UpdateEntity(db, catsMap[v]); err != nil {
if _, err = dao.UpdateEntity(db, catsMap[v]); err != nil { dao.Rollback(db)
break return err
}
} }
SetStoreCategorySyncStatus2(db, nil, categoryIDs, model.SyncFlagModifiedMask) if err = OnUpdateThing(db, int64(catsMap[v].ID), model.ThingTypeCategory); err != nil {
if err == nil { dao.Rollback(db)
_, err = CurVendorSync.SyncReorderCategories(ctx, db, parentID, false, userName) return err
CurVendorSync.SyncStoresCategory(ctx, db, nil, nil, false, true, true)
} }
} }
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 return err
} }
@@ -252,14 +284,25 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu
} }
dao.Begin(db) dao.Begin(db)
defer func() { defer func() {
dao.Rollback(db) if r := recover(); r != nil {
}() dao.Rollback(db)
if _, err = DeleteCategoryMap(ctx, db, categoryID); err == nil { panic(r)
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 _, 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 return num, err
} }
@@ -620,6 +663,10 @@ func AddSkuName(ctx *jxcontext.Context, skuNameExt *model.SkuNameExt, userName s
dao.Rollback(db) dao.Rollback(db)
return nil, err 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 { for _, sku := range skuNameExt.Skus {
dao.WrapAddIDCULDEntity(sku, userName) dao.WrapAddIDCULDEntity(sku, userName)
sku.NameID = skuNameExt.ID 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 valid[model.FieldJdSyncStatus] = model.SyncFlagModifiedMask | skuName.JdSyncStatus
if num, err = dao.UpdateEntityLogically(db, skuName, valid, userName, nil); err == nil { 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 {
dao.Rollback(db) 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 return num, err
} }
@@ -793,33 +860,57 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int
db := dao.GetDB() db := dao.GetDB()
dao.Begin(db) dao.Begin(db)
defer func() { defer func() {
dao.Rollback(db) if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}() }()
if _, err := dao.DeleteSkuNamePlace(db, nameID, nil); err != nil { if _, err := dao.DeleteSkuNamePlace(db, nameID, nil); err != nil {
dao.Rollback(db)
return 0, err return 0, err
} }
if _, err = DeleteStoreSku(ctx, db, nameID, 0); err != nil { if _, err = DeleteStoreSku(ctx, db, nameID, 0); err != nil {
dao.Rollback(db)
return 0, err return 0, err
} }
numSku, err := dao.DeleteEntityLogically(db, &model.Sku{}, map[string]interface{}{
model.FieldJdSyncStatus: model.SyncFlagDeletedMask, skuList, err2 := dao.GetSkus(db, nil, []int{nameID}, nil, nil)
model.FieldStatus: model.SkuStatusDeleted, if err = err2; err == nil {
}, userName, map[string]interface{}{ for _, v := range skuList {
model.FieldNameID: nameID, sku := &v.Sku
}) if _, err = dao.DeleteEntityLogically(db, sku, map[string]interface{}{
if err != nil { 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 return 0, err
} }
skuName := &model.SkuName{} skuName := &model.SkuName{}
skuName.ID = nameID skuName.ID = nameID
if num, err = dao.DeleteEntityLogically(db, skuName, map[string]interface{}{ if num, err = dao.DeleteEntityLogically(db, skuName, map[string]interface{}{
model.FieldJdSyncStatus: model.SyncFlagDeletedMask, model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
model.FieldStatus: model.SkuStatusDeleted, model.FieldStatus: model.SkuStatusDeleted,
}, userName, nil); err != nil { }, userName, nil); err != nil {
dao.Rollback(db)
return 0, err return 0, err
} }
dao.Commit(db) dao.Commit(db)
if numSku > 0 {
if len(skuList) > 0 {
_, err = CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, false, userName) _, err = CurVendorSync.SyncSku(ctx, db, skuName.ID, -1, false, false, userName)
} }
return num, err return num, err
@@ -840,15 +931,31 @@ func AddSku(ctx *jxcontext.Context, nameID int, sku *model.Sku, userName string)
sku.JdSyncStatus = model.SyncFlagNewMask sku.JdSyncStatus = model.SyncFlagNewMask
sku.JdID = 0 sku.JdID = 0
sku.NameID = nameID sku.NameID = nameID
if err = dao.CreateEntity(db, sku); err == nil {
result, err2 := GetSkuNames(ctx, "", false, utils.Params2Map("skuID", sku.ID), 0, 0) dao.Begin(db)
if err = err2; err == nil { defer func() {
if result.TotalCount == 1 { if r := recover(); r != nil {
outSkuNameExt = result.SkuNames[0] dao.Rollback(db)
_, err = CurVendorSync.SyncSku(ctx, db, outSkuNameExt.SkuName.ID, sku.ID, false, false, userName) panic(r)
} else { }
err = ErrEntityNotExist }()
} 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 return outSkuNameExt, err
@@ -877,31 +984,43 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}
maskValue |= model.SyncFlagSpecMask maskValue |= model.SyncFlagSpecMask
} }
valid[model.FieldJdSyncStatus] = maskValue | sku.JdSyncStatus valid[model.FieldJdSyncStatus] = maskValue | sku.JdSyncStatus
if num, err = dao.UpdateEntityLogically(db, sku, valid, userName, nil); err == nil { if num, err = dao.UpdateEntityLogically(db, sku, valid, userName, nil); err != nil || num == 0 {
if num == 1 { dao.Rollback(db)
if num, err = dao.ExecuteSQL(db, ` if err == nil {
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 {
err = ErrEntityNotExist err = ErrEntityNotExist
} }
return 0, err
} }
if err == nil { if num, err = dao.ExecuteSQL(db, `
dao.Commit(db) UPDATE sku_name t1
_, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName) JOIN sku t2 ON t1.id = t2.name_id
} else { 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) 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 return num, err
} }
@@ -940,23 +1059,33 @@ func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, e
db := dao.GetDB() db := dao.GetDB()
dao.Begin(db) dao.Begin(db)
defer func() { defer func() {
dao.Rollback(db) if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}() }()
if _, err = DeleteStoreSku(ctx, db, 0, skuID); err == nil { if _, err = DeleteStoreSku(ctx, db, 0, skuID); err != nil {
sku := &model.Sku{} dao.Rollback(db)
sku.ID = skuID return 0, err
if num, err = dao.DeleteEntityLogically(db, sku, map[string]interface{}{ }
model.FieldStatus: model.SkuStatusDeleted, if err = OnDeleteThing(db, int64(skuID), model.ThingTypeSku); err != nil {
model.FieldJdSyncStatus: model.SyncFlagDeletedMask, dao.Rollback(db)
}, userName, nil); err == nil { return 0, err
dao.Commit(db) }
if num == 1 { sku := &model.Sku{}
_, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, false, userName) sku.ID = skuID
} else { if num, err = dao.DeleteEntityLogically(db, sku, map[string]interface{}{
err = ErrEntityNotExist 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 return num, err
} }
@@ -1008,9 +1137,25 @@ func AddSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName str
PlaceCode: placeCode, PlaceCode: placeCode,
} }
dao.WrapAddIDCULEntity(placeBind, userName) 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 return placeBind, err
} }
@@ -1019,13 +1164,28 @@ func DeleteSkuNamePlace(ctx *jxcontext.Context, nameID, placeCode int, userName
placeBind := &model.SkuNamePlaceBind{} placeBind := &model.SkuNamePlaceBind{}
placeBind.NameID = nameID placeBind.NameID = nameID
placeBind.PlaceCode = placeCode placeBind.PlaceCode = placeCode
if num, err = dao.DeleteEntity(db, placeBind, model.FieldNameID, model.FieldPlaceCode); err == nil {
if num == 1 { dao.Begin(db)
_, err = CurVendorSync.SyncSku(ctx, db, nameID, -1, false, false, userName) defer func() {
} else { 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 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 return num, err
} }
@@ -1058,9 +1218,7 @@ func SortCategorySkus(ctx *jxcontext.Context, catID int, skuIDList []int) (err e
defer func() { defer func() {
if r := recover(); r != nil { if r := recover(); r != nil {
dao.Rollback(db) dao.Rollback(db)
if r != nil { panic(r)
panic(r)
}
} }
}() }()
nameIDList := []int{} nameIDList := []int{}
@@ -1087,6 +1245,5 @@ func SortCategorySkus(ctx *jxcontext.Context, catID int, skuIDList []int) (err e
dao.Rollback(db) dao.Rollback(db)
} }
} }
return err return err
} }

View File

@@ -806,3 +806,14 @@ func (d *SyncErrResultLock) AppendData(syncErrResult SyncErrResult) {
defer d.locker.Unlock() defer d.locker.Unlock()
d.syncErrResult = append(d.syncErrResult, syncErrResult) 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
}

View File

@@ -206,7 +206,6 @@ func GetDirtyStoreCategories(db *DaoDB, vendorID, storeID int, level int) (cats
} }
// 以store_sku_bind为基础来做同步正常情况下使用 // 以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) { func GetStoreSkus2(db *DaoDB, vendorID, storeID int, skuIDs []int, mustDirty bool) (skus []*StoreSkuSyncInfo, err error) {
if vendorID < 0 { if vendorID < 0 {

View File

@@ -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 { type SkuName struct {
ModelIDCULD ModelIDCULD

View File

@@ -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"},
}
}

View File

@@ -32,7 +32,7 @@ func Init() {
orm.RegisterModel(&model.Store{}, &model.StoreSub{}, &model.StoreMap{}, &model.StoreCourierMap{}) 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.SkuVendorCategory{}, &model.StoreSkuCategoryMap{}, &model.SkuName{}, &model.Sku{}, &model.SkuNamePlaceBind{}, &model.StoreSkuBind{})
orm.RegisterModel(&model.SkuCategory{}) orm.RegisterModel(&model.SkuCategory{})
// orm.RegisterModel(&model.SkuCategoryMap{}) // orm.RegisterModel(&model.ThingMap{})
orm.RegisterModel(&model.AuthBind{}, &model.User{}) orm.RegisterModel(&model.AuthBind{}, &model.User{})