- when delete category or sku, delete store sku and store category info also.

This commit is contained in:
gazebo
2018-11-19 10:36:50 +08:00
parent 743f2c5588
commit a2ce997a0b

View File

@@ -158,13 +158,34 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu
} else if countInfos[2].Ct != 0 {
return 0, errors.New("还有商品类别使用此类别,不能删除")
}
if num, err = dao.DeleteEntityLogically(db, cat, utils.Params2Map(model.FieldJdSyncStatus, model.SyncFlagDeletedMask), userName, nil); err == nil && num == 1 {
_, err = CurVendorSync.SyncCategory(ctx, db, cat.ID, false, userName)
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)
}
}
}
return num, err
}
func DeleteCategoryMap(ctx *jxcontext.Context, db *dao.DaoDB, categoryID int) (num int64, err error) {
if db == nil {
db = dao.GetDB()
}
catMap := &model.StoreSkuCategoryMap{}
return dao.DeleteEntityLogically(db, catMap, map[string]interface{}{
model.FieldElmSyncStatus: model.SyncFlagDeletedMask,
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
}, ctx.GetUserName(), map[string]interface{}{
model.FieldCategoryID: categoryID,
model.FieldDeletedAt: utils.DefaultTimeValue,
})
}
func GetSkuNames(ctx *jxcontext.Context, keyword string, params map[string]interface{}, offset, pageSize int) (skuNamesInfo *SkuNamesInfo, err error) {
db := dao.GetDB()
sql := `
@@ -504,22 +525,24 @@ func DeleteSkuName(ctx *jxcontext.Context, nameID int, userName string) (num int
panic(r)
}
}()
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)
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
}
return num, err
}
}
dao.Rollback(db)
@@ -588,16 +611,64 @@ func UpdateSku(ctx *jxcontext.Context, skuID int, payload map[string]interface{}
func DeleteSku(ctx *jxcontext.Context, skuID int, userName string) (num int64, err error) {
db := dao.GetDB()
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 {
if num == 1 {
_, err = CurVendorSync.SyncSku(ctx, db, -1, sku.ID, false, userName)
} else {
err = ErrEntityNotExist
dao.Begin(db)
defer func() {
dao.Rollback(db)
}()
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, userName)
} else {
err = ErrEntityNotExist
}
}
}
return num, err
}
func DeleteStoreSku(ctx *jxcontext.Context, db *dao.DaoDB, nameID, skuID int) (num int64, err error) {
if db == nil {
db = dao.GetDB()
}
sql := `
SELECT *
FROM sku t1
WHERE 1 = 1
`
sqlParams := []interface{}{}
if nameID > 0 {
sql += " AND t1.name_id = ?"
sqlParams = append(sqlParams, nameID)
} else {
sql += " AND t1.sku_id = ?"
sqlParams = append(sqlParams, skuID)
}
var skuList []*model.Sku
if err = dao.GetRows(db, &skuList, sql, sqlParams); err == nil {
num = int64(len(skuList))
for _, v := range skuList {
storeSkuBind := &model.StoreSkuBind{}
_, err = dao.DeleteEntityLogically(db, storeSkuBind, map[string]interface{}{
model.FieldJdSyncStatus: model.SyncFlagDeletedMask,
model.FieldElmSyncStatus: model.SyncFlagDeletedMask,
model.FieldEbaiSyncStatus: model.SyncFlagDeletedMask,
}, ctx.GetUserName(), map[string]interface{}{
model.FieldSkuID: v.ID,
model.FieldDeletedAt: utils.DefaultTimeValue,
})
if err != nil {
break
}
}
}
return num, err