重构sku,skuname,category的CUD

This commit is contained in:
gazebo
2019-12-04 12:11:57 +08:00
parent a255acb4f1
commit e6004bea32
2 changed files with 225 additions and 110 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"
@@ -292,11 +293,11 @@ func DeleteCategory(ctx *jxcontext.Context, categoryID int, userName string) (nu
dao.Rollback(db) dao.Rollback(db)
return 0, err 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) dao.Rollback(db)
return 0, err 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) dao.Rollback(db)
return 0, err return 0, err
} }
@@ -662,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
@@ -770,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
} }
@@ -835,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
@@ -882,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
@@ -919,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
} }
@@ -982,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
} }
@@ -1050,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
} }
@@ -1061,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
} }
@@ -1100,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{}
@@ -1129,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

@@ -2,7 +2,7 @@ package model
const ( const (
ThingTypeCategory = 1 ThingTypeCategory = 1
ThingTypSkuName = 2 ThingTypeSkuName = 2
ThingTypeSku = 3 ThingTypeSku = 3
) )