From 81249ae3b731c10cdbcc33480ec24730ad0d1c07 Mon Sep 17 00:00:00 2001 From: gazebo Date: Thu, 21 Nov 2019 11:40:35 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BA=AC=E4=B8=9C=E6=B4=BB=E5=8A=A8=E5=8D=B3?= =?UTF-8?q?=E4=BD=BF=E5=88=9B=E5=BB=BA=E5=A4=B1=E8=B4=A5=EF=BC=8C=E4=B9=9F?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E5=B9=B3=E5=8F=B0=E6=B4=BB=E5=8A=A8ID=20?= =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=B4=BB=E5=8A=A8=E5=95=86=E5=93=81=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E5=A6=82=E6=9E=9C=E4=B9=8B=E5=89=8D=E6=98=AF=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=A4=B1=E8=B4=A5=E7=8A=B6=E6=80=81=EF=BC=8C=E4=B8=8D?= =?UTF-8?q?=E8=B0=83=E7=94=A8SyncAct?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 30 +++++++++++++++++------------ business/jxstore/act/act_test.go | 2 +- business/partner/purchase/jd/act.go | 6 +++++- controllers/act.go | 2 +- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index da94f2567..b7f2a4e15 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -613,7 +613,7 @@ func GetActStoreSkuInfo(ctx *jxcontext.Context, actID int, vendorIDs []int, keyw func CancelAct(ctx *jxcontext.Context, actID int) (err error) { db := dao.GetDB() - if err = DeleteActStoreSkuBind(ctx, db, actID, nil); err != nil { + if _, err = DeleteActStoreSkuBind(ctx, db, actID, nil); err != nil { return err } _, err = SyncAct(ctx, nil, actID, nil, false) @@ -621,22 +621,26 @@ func CancelAct(ctx *jxcontext.Context, actID int) (err error) { } // actStoreSkuParam为空,不会删除act_store_sku,但会删除act_store_sku_map -func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, actStoreSkuParam []*ActStoreSkuParam) (err error) { +func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, actStoreSkuParam []*ActStoreSkuParam) (originSyncStatus int8, err error) { actMap, err := dao.GetActVendorInfo(db, actID, nil) if err != nil { - return err + return 0, err } if len(actMap) == 0 { - return fmt.Errorf("找不到活动:%d,或已被取消", actID) + return 0, fmt.Errorf("找不到活动:%d,或已被取消", actID) + } + if actMap[0].Status != model.ActStatusCreated { + // 如果不是正常状态直接跳过 + return 0, nil } actStoreSkuMap, err := dao.GetActStoreSkuVendorInfo(db, actID, nil, nil, nil) if err != nil { - return err + return 0, err } act := actMap[partner.GetVendorIDsFromActMap(actMap)[0]] if act.Status != model.ActStatusCreated || time.Now().Sub(act.EndAt) > 0 { - return fmt.Errorf("当前活动状态:%s,不能进行此操作,或已过期", model.ActStatusName[act.Status]) + return 0, fmt.Errorf("当前活动状态:%s,不能进行此操作,或已过期", model.ActStatusName[act.Status]) } dao.Begin(db) @@ -657,12 +661,13 @@ func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, act model.FieldStoreID: v.StoreID, model.FieldSkuID: v.SkuID, }); err != nil { - return err + return 0, err } } isNeedCancelAct := true for vendorID, act := range actMap { + originSyncStatus |= act.SyncStatus isDeleteAll := true isDeleteAtLeastOne := false if actStoreSkuParam != nil { @@ -684,7 +689,7 @@ func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, act }, ctx.GetUserName(), nil) } if err != nil { - return err + return 0, err } isDeleteAtLeastOne = true } else { @@ -708,7 +713,7 @@ func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, act map[string]interface{}{ model.FieldSyncStatus: syncStatus, }, ctx.GetUserName(), nil); err != nil { - return err + return 0, err } } } @@ -724,11 +729,11 @@ func DeleteActStoreSkuBind(ctx *jxcontext.Context, db *dao.DaoDB, actID int, act map[string]interface{}{ model.FieldStatus: model.ActStatusCanceled, }, ctx.GetUserName(), nil); err != nil { - return err + return 0, err } } dao.Commit(db) - return err + return originSyncStatus, err } // todo 当前逻辑要求传入活动的全部SKU信息(以便低层做一些判断,比如全部删除时要取消,所以暂时删除storeIDs与skuIDs这两个参数 @@ -914,7 +919,8 @@ func DeleteSkusFromAct(ctx *jxcontext.Context, vendorID int, skuIDs []int, isAsy } if len(deleteList) > 0 { // globals.SugarLogger.Debug(utils.Format4Output(deleteList, false)) - if err = DeleteActStoreSkuBind(ctx, db, actID, deleteList); err == nil { + originSyncStatus, err2 := DeleteActStoreSkuBind(ctx, db, actID, deleteList) + if err = err2; err == nil && originSyncStatus == 0 { if _, err = SyncAct(ctx, task, actID, nil, false); err == nil { retVal = deleteList } diff --git a/business/jxstore/act/act_test.go b/business/jxstore/act/act_test.go index 55da0e276..670c21a76 100644 --- a/business/jxstore/act/act_test.go +++ b/business/jxstore/act/act_test.go @@ -121,7 +121,7 @@ func TestCancelAct(t *testing.T) { } func TestDeleteActStoreBind(t *testing.T) { - err := DeleteActStoreSkuBind(jxcontext.AdminCtx, dao.GetDB(), 1, []*ActStoreSkuParam{ + _, err := DeleteActStoreSkuBind(jxcontext.AdminCtx, dao.GetDB(), 1, []*ActStoreSkuParam{ // &ActStoreSkuParam{ // ActStoreSku: model.ActStoreSku{ // StoreID: 100119, diff --git a/business/partner/purchase/jd/act.go b/business/partner/purchase/jd/act.go index a9c3c96f7..2f69f6afd 100644 --- a/business/partner/purchase/jd/act.go +++ b/business/partner/purchase/jd/act.go @@ -242,6 +242,7 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa } } } + db := dao.GetDB() err = func() (err error) { if model.IsSyncStatusDelete(act.SyncStatus) { for vendorActID := range vendorActInfoMap { @@ -257,6 +258,10 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa updateItems = append(updateItems, partner.Act2Update(act, model.SyncFlagModifiedMask)) } else if model.IsSyncStatusNew(act.SyncStatus) { if act.VendorActID, err = createSkuAct(ctx, act, actStoreSkuList4Create); err != nil { + if act.VendorActID != "" { + actMap := partner.Act2ActMap(act) + dao.UpdateEntity(db, actMap, "VendorActID") + } return err } updateItems = append(updateItems, partner.ActStoreSku2Update(actStoreSkuList4Create, model.SyncFlagNewMask)...) @@ -289,7 +294,6 @@ func (c *PurchaseHandler) SyncAct(ctx *jxcontext.Context, parentTask tasksch.ITa } return err }() - db := dao.GetDB() // globals.SugarLogger.Debug(utils.Format4Output(updateItems, false)) _, err2 := dao.BatchUpdateEntityByKV(db, updateItems) if err == nil { diff --git a/controllers/act.go b/controllers/act.go index edf33804d..77c892d54 100644 --- a/controllers/act.go +++ b/controllers/act.go @@ -243,7 +243,7 @@ func (c *ActController) UpdateActStoreSkuBind() { } } if len(actStoreSkuDeleteList) > 0 { - if err = act.DeleteActStoreSkuBind(params.Ctx, db, params.ActID, actStoreSkuDeleteList); err != nil { + if _, err = act.DeleteActStoreSkuBind(params.Ctx, db, params.ActID, actStoreSkuDeleteList); err != nil { dao.Rollback(db) return }