- refactor

This commit is contained in:
gazebo
2019-06-20 18:01:54 +08:00
parent df7d58c50d
commit 18073dc157
5 changed files with 100 additions and 69 deletions

View File

@@ -7,7 +7,6 @@ import (
"git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/baseapi/utils"
"git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/jxutils"
"git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/business/partner"
"git.rosy.net.cn/jx-callback/globals"
"git.rosy.net.cn/jx-callback/business/jxutils/jxcontext" "git.rosy.net.cn/jx-callback/business/jxutils/jxcontext"
"git.rosy.net.cn/jx-callback/business/jxutils/tasksch" "git.rosy.net.cn/jx-callback/business/jxutils/tasksch"
@@ -34,19 +33,6 @@ type ActDetail struct {
model.Act2 model.Act2
} }
func ActStoreSkuParam2Map(actStoreSku []*ActStoreSkuParam) (actStoreSkuMap map[int][]*ActStoreSkuParam) {
if len(actStoreSku) > 0 {
for _, v := range actStoreSku {
actStoreSkuMap[v.StoreID] = append(actStoreSkuMap[v.StoreID], v)
}
}
return actStoreSkuMap
}
func genStoreSkuMapKey(storeID, skuID int) int64 {
return int64(storeID) + int64(skuID)*1000000
}
func ActStoreSkuParam2Model(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, actStoreSku []*ActStoreSkuParam) (actMapList []*model.ActMap, actStoreMapList []*model.ActStoreMap, actStoreSkuList []*model.ActStoreSku, actStoreSkuMapList []*model.ActStoreSkuMap, err error) { func ActStoreSkuParam2Model(ctx *jxcontext.Context, act *model.Act, vendorIDs []int, actStoreSku []*ActStoreSkuParam) (actMapList []*model.ActMap, actStoreMapList []*model.ActStoreMap, actStoreSkuList []*model.ActStoreSku, actStoreSkuMapList []*model.ActStoreSkuMap, err error) {
if len(actStoreSku) > 0 { if len(actStoreSku) > 0 {
storeIDMap := make(map[int]int) storeIDMap := make(map[int]int)
@@ -65,7 +51,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, act *model.Act, vendorIDs []
} }
storeSkuMap := make(map[int64]*model.StoreSkuBind) storeSkuMap := make(map[int64]*model.StoreSkuBind)
for _, v := range storeSkuList { for _, v := range storeSkuList {
storeSkuMap[genStoreSkuMapKey(v.StoreID, v.SkuID)] = v storeSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = v
} }
wholeValidVendorMap := make(map[int]int) wholeValidVendorMap := make(map[int]int)
@@ -76,7 +62,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, act *model.Act, vendorIDs []
storeDetail, err2 := dao.GetStoreDetail(db, storeID, vendorID) storeDetail, err2 := dao.GetStoreDetail(db, storeID, vendorID)
if err = err2; err == nil { if err = err2; err == nil {
for _, v := range oneStoreSkuParam { for _, v := range oneStoreSkuParam {
if storeSkuInfo := storeSkuMap[genStoreSkuMapKey(v.StoreID, v.SkuID)]; storeSkuInfo != nil { if storeSkuInfo := storeSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)]; storeSkuInfo != nil {
validVendorMap[vendorID] = 1 validVendorMap[vendorID] = 1
validSkuMap[v.SkuID] = 1 validSkuMap[v.SkuID] = 1
actSkuMap := &model.ActStoreSkuMap{ actSkuMap := &model.ActStoreSkuMap{
@@ -110,7 +96,7 @@ func ActStoreSkuParam2Model(ctx *jxcontext.Context, act *model.Act, vendorIDs []
for _, v := range oneStoreSkuParam { for _, v := range oneStoreSkuParam {
if validSkuMap[v.SkuID] == 1 { if validSkuMap[v.SkuID] == 1 {
if storeSkuInfo := storeSkuMap[genStoreSkuMapKey(v.StoreID, v.SkuID)]; storeSkuInfo != nil { if storeSkuInfo := storeSkuMap[jxutils.Combine2Int(v.StoreID, v.SkuID)]; storeSkuInfo != nil {
storeSku := &v.ActStoreSku storeSku := &v.ActStoreSku
storeSku.ActID = act.ID storeSku.ActID = act.ID
storeSku.OriginalPrice = int64(storeSkuInfo.Price) storeSku.OriginalPrice = int64(storeSkuInfo.Price)
@@ -211,46 +197,24 @@ func GetActDetail(ctx *jxcontext.Context, actID int) (actDetail *ActDetail, err
// return err // return err
// } // }
func parseActStoreSkuParam(actStoreSku []*ActStoreSkuParam) {
}
func UpdateAct(ctx *jxcontext.Context, act *model.Act, actRules []*ActOrderRuleParam, actStoreSku []*ActStoreSkuParam) (err error) { func UpdateAct(ctx *jxcontext.Context, act *model.Act, actRules []*ActOrderRuleParam, actStoreSku []*ActStoreSkuParam) (err error) {
return err return err
} }
func CancelAct(ctx *jxcontext.Context, actID int) (err error) { func CancelAct(ctx *jxcontext.Context, actID int) (err error) {
db := dao.GetDB() db := dao.GetDB()
act := &model.Act{} if err = deleteActStoreBind(ctx, db, actID, nil); err != nil {
act.ID = actID
if err = dao.GetEntity(db, act); err != nil {
return err return err
} }
dao.Begin(db) err = SyncAct(ctx, actID, nil, nil, nil)
defer func() {
if r := recover(); r != nil {
dao.Rollback(db)
panic(r)
}
}()
dao.UpdateEntityLogically(db, act, map[string]interface{}{
model.FieldStatus: model.ActStatusCanceled,
}, ctx.GetUserName(), nil)
_, err = dao.UpdateEntityLogicallyAndUpdateSyncStatus(db, &model.ActMap{}, nil, ctx.GetUserName(), map[string]interface{}{
model.FieldActID: actID,
}, model.FieldSyncStatus, model.SyncFlagModifiedMask)
if err == nil {
dao.Commit(db)
globals.SugarLogger.Debugf("CancelAct track:%s", ctx.GetTrackInfo())
err = SyncAct(ctx, actID, nil, nil, nil)
} else {
dao.Rollback(db)
}
return err return err
} }
func DeleteActStoreBind(ctx *jxcontext.Context, actID int, actStoreSku []*ActStoreSkuParam) (err error) { func DeleteActStoreBind(ctx *jxcontext.Context, actID int, actStoreSku []*ActStoreSkuParam) (err error) {
return deleteActStoreBind(ctx, dao.GetDB(), actID, actStoreSku)
}
func deleteActStoreBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, actStoreSku []*ActStoreSkuParam) (err error) {
storeIDMap := make(map[int]int) storeIDMap := make(map[int]int)
skuIDMap := make(map[int]int) skuIDMap := make(map[int]int)
actStoreSkuParamMap := make(map[int64]*ActStoreSkuParam) actStoreSkuParamMap := make(map[int64]*ActStoreSkuParam)
@@ -259,9 +223,18 @@ func DeleteActStoreBind(ctx *jxcontext.Context, actID int, actStoreSku []*ActSto
skuIDMap[v.SkuID] = 1 skuIDMap[v.SkuID] = 1
actStoreSkuParamMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = v actStoreSkuParamMap[jxutils.Combine2Int(v.StoreID, v.SkuID)] = v
} }
storeIDs := jxutils.IntMap2List(storeIDMap)
skuIDs := jxutils.IntMap2List(skuIDMap)
db := dao.GetDB() actMap, err := dao.GetActVendorInfo(db, actID, nil)
actStoreSkuMap, err := dao.GetActStoreSkuVendorInfo(db, actID, nil, jxutils.IntMap2List(storeIDMap), jxutils.IntMap2List(skuIDMap)) if err != nil {
return err
}
actStoreMap, err := dao.GetActStoreVendorInfo(db, actID, nil, storeIDs)
if err != nil {
return err
}
actStoreSkuMap, err := dao.GetActStoreSkuVendorInfo(db, actID, nil, storeIDs, skuIDs)
if err != nil { if err != nil {
return err return err
} }
@@ -274,14 +247,56 @@ func DeleteActStoreBind(ctx *jxcontext.Context, actID int, actStoreSku []*ActSto
} }
} }
}() }()
for _, v := range actStoreSkuMap {
for _, storeSku := range v { isNeedCancelAct := true
storeSku.SyncStatus |= model.SyncFlagDeletedMask for vendorID, act := range actMap {
if param := actStoreSkuParamMap[jxutils.Combine2Int(storeSku.StoreID, storeSku.SkuID)]; param != nil { actStoreMap := partner.SplitActStore(actStoreMap[vendorID])
if _, err = dao.UpdateEntity(db, storeSku); err != nil { actStoreSkuMap := partner.SplitActStoreSku(actStoreSkuMap[vendorID])
return err isStoreAllDeleted := true
for _, actStore := range actStoreMap {
isStoreSkuAllDeleted := true
for _, actStoreSku := range actStoreSkuMap[actStore.StoreID] {
if actStoreSku == nil || actStoreSkuParamMap[jxutils.Combine2Int(actStoreSku.StoreID, actStoreSku.SkuID)] != nil {
objActStoreSkuMap := &model.ActStoreSkuMap{}
objActStoreSkuMap.ID = actStoreSku.MapID
if _, err = dao.UpdateEntityLogically(db, objActStoreSkuMap, map[string]interface{}{
model.FieldSyncStatus: actStoreSku.SyncStatus | model.SyncFlagDeletedMask,
}, ctx.GetUserName(), nil); err != nil {
return err
}
} else {
isStoreSkuAllDeleted = false
} }
} }
if isStoreSkuAllDeleted {
if _, err = dao.UpdateEntityLogically(db, &actStore.ActStoreMap, map[string]interface{}{
model.FieldSyncStatus: actStore.SyncStatus | model.SyncFlagDeletedMask,
}, ctx.GetUserName(), nil); err != nil {
return err
}
} else {
isStoreAllDeleted = false
isNeedCancelAct = false
}
}
if isStoreAllDeleted {
objActMap := &model.ActMap{}
objActMap.ID = act.MapID
if _, err = dao.UpdateEntityLogically(db, objActMap, map[string]interface{}{
model.FieldSyncStatus: act.SyncStatus | model.SyncFlagDeletedMask,
}, ctx.GetUserName(), nil); err != nil {
return err
}
}
}
if isNeedCancelAct {
act := &model.Act{}
act.ID = actID
if _, err = dao.UpdateEntityLogically(db, act, map[string]interface{}{
model.FieldStatus: model.ActStatusCanceled,
}, ctx.GetUserName(), nil); err != nil {
return err
} }
} }
dao.Commit(db) dao.Commit(db)

View File

@@ -31,20 +31,28 @@ func TestCreateAct(t *testing.T) {
PricePercentage: 80, PricePercentage: 80,
}, []int{0, 1, 3}, nil, []*ActStoreSkuParam{ }, []int{0, 1, 3}, nil, []*ActStoreSkuParam{
&ActStoreSkuParam{ &ActStoreSkuParam{
StoreID: 100119, ActStoreSku: model.ActStoreSku{
SkuID: 30828, StoreID: 100119,
SkuID: 30828,
},
}, },
&ActStoreSkuParam{ &ActStoreSkuParam{
StoreID: 100119, ActStoreSku: model.ActStoreSku{
SkuID: 30827, StoreID: 100119,
SkuID: 30827,
},
}, },
&ActStoreSkuParam{ &ActStoreSkuParam{
StoreID: 100118, ActStoreSku: model.ActStoreSku{
SkuID: 30592, StoreID: 100118,
SkuID: 30592,
},
}, },
&ActStoreSkuParam{ &ActStoreSkuParam{
StoreID: 100118, ActStoreSku: model.ActStoreSku{
SkuID: 30565, StoreID: 100118,
SkuID: 30565,
},
}, },
}) })
if err != nil { if err != nil {

View File

@@ -15,10 +15,18 @@ type IPurchasePlatformPromotionHandler interface {
CancelAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) CancelAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error)
} }
func ActStoreSku2Map(actStoreSku []*model.ActStoreSku2) (actStoreSkuMap map[int][]*model.ActStoreSku2) { func SplitActStore(actStoreList []*model.ActStore2) (actStoreMap map[int]*model.ActStore2) {
actStoreMap = make(map[int]*model.ActStore2)
for _, v := range actStoreList {
actStoreMap[v.StoreID] = v
}
return actStoreMap
}
func SplitActStoreSku(actStoreSkuList []*model.ActStoreSku2) (actStoreSkuMap map[int][]*model.ActStoreSku2) {
actStoreSkuMap = make(map[int][]*model.ActStoreSku2) actStoreSkuMap = make(map[int][]*model.ActStoreSku2)
for _, storeSku := range actStoreSku { for _, v := range actStoreSkuList {
actStoreSkuMap[storeSku.StoreID] = append(actStoreSkuMap[storeSku.StoreID], storeSku) actStoreSkuMap[v.StoreID] = append(actStoreSkuMap[v.StoreID], v)
} }
return actStoreSkuMap return actStoreSkuMap
} }

View File

@@ -105,7 +105,7 @@ func ActivitySkuUpdateBatch(activityID int64, actSkuInfoList []*ebaiapi.Activity
func (c *PurchaseHandler) CreateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) { func (c *PurchaseHandler) CreateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) {
activity := act2EbaiActivity(act, actOrderRules) activity := act2EbaiActivity(act, actOrderRules)
if act.Type < model.ActOrderBegin { if act.Type < model.ActOrderBegin {
actStoreSkuMap := partner.ActStoreSku2Map(actStoreSku) actStoreSkuMap := partner.SplitActStoreSku(actStoreSku)
task := tasksch.NewParallelTask("ebai CreateAct", nil, ctx, task := tasksch.NewParallelTask("ebai CreateAct", nil, ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
store := batchItemList[0].(*model.ActStore2) store := batchItemList[0].(*model.ActStore2)
@@ -122,7 +122,7 @@ func (c *PurchaseHandler) CreateAct(ctx *jxcontext.Context, parentTask tasksch.I
func (c *PurchaseHandler) UpdateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap2Remove, actStoreMap2Add, actStoreMap2Update []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) { func (c *PurchaseHandler) UpdateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap2Remove, actStoreMap2Add, actStoreMap2Update []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) {
if act.Type < model.ActOrderBegin { if act.Type < model.ActOrderBegin {
actStoreSkuMap := partner.ActStoreSku2Map(actStoreSku) actStoreSkuMap := partner.SplitActStoreSku(actStoreSku)
if len(actStoreMap2Remove) > 0 { if len(actStoreMap2Remove) > 0 {
if err = c.CancelAct(ctx, parentTask, act, actStoreMap2Remove, nil); err != nil { if err = c.CancelAct(ctx, parentTask, act, actStoreMap2Remove, nil); err != nil {
return err return err

View File

@@ -89,7 +89,7 @@ func createOneShopAct(act *model.Act2, storeMap *model.ActStore2, actStoreSku []
func (c *PurchaseHandler) CreateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) { func (c *PurchaseHandler) CreateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) {
globals.SugarLogger.Debugf("mtwm CreateAct actID:%d", act.ID) globals.SugarLogger.Debugf("mtwm CreateAct actID:%d", act.ID)
if act.Type < model.ActOrderBegin { if act.Type < model.ActOrderBegin {
actStoreSkuMap := partner.ActStoreSku2Map(actStoreSku) actStoreSkuMap := partner.SplitActStoreSku(actStoreSku)
task := tasksch.NewParallelTask("mtwm CreateAct", nil, ctx, task := tasksch.NewParallelTask("mtwm CreateAct", nil, ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
store := batchItemList[0].(*model.ActStore2) store := batchItemList[0].(*model.ActStore2)
@@ -106,7 +106,7 @@ func (c *PurchaseHandler) CreateAct(ctx *jxcontext.Context, parentTask tasksch.I
func (c *PurchaseHandler) UpdateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap2Remove, actStoreMap2Add, actStoreMap2Update []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) { func (c *PurchaseHandler) UpdateAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actOrderRules []*model.ActOrderRule, actStoreMap2Remove, actStoreMap2Add, actStoreMap2Update []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) {
if act.Type < model.ActOrderBegin { if act.Type < model.ActOrderBegin {
actStoreSkuMap := partner.ActStoreSku2Map(actStoreSku) actStoreSkuMap := partner.SplitActStoreSku(actStoreSku)
if len(actStoreMap2Remove) > 0 { if len(actStoreMap2Remove) > 0 {
if err = c.CancelAct(ctx, parentTask, act, actStoreMap2Remove, nil); err != nil { if err = c.CancelAct(ctx, parentTask, act, actStoreMap2Remove, nil); err != nil {
return err return err
@@ -148,7 +148,7 @@ func (c *PurchaseHandler) UpdateAct(ctx *jxcontext.Context, parentTask tasksch.I
func (c *PurchaseHandler) CancelAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) { func (c *PurchaseHandler) CancelAct(ctx *jxcontext.Context, parentTask tasksch.ITask, act *model.Act2, actStoreMap []*model.ActStore2, actStoreSku []*model.ActStoreSku2) (err error) {
if act.Type < model.ActOrderBegin { if act.Type < model.ActOrderBegin {
actStoreSkuMap := partner.ActStoreSku2Map(actStoreSku) actStoreSkuMap := partner.SplitActStoreSku(actStoreSku)
task := tasksch.NewParallelTask("mtwm DeleteAct", nil, ctx, task := tasksch.NewParallelTask("mtwm DeleteAct", nil, ctx,
func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
v := batchItemList[0].(*model.ActStore2) v := batchItemList[0].(*model.ActStore2)