From b225f814eceaa92b5048f0c8c672eb81b009700f Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 31 Jul 2019 09:13:09 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E4=BA=AC=E4=B8=9C=E5=9B=9E=E8=B0=83?= =?UTF-8?q?=E6=B4=BB=E5=8A=A8=E5=88=9B=E5=BB=BA=E7=AD=895=E7=A7=92?= =?UTF-8?q?=E5=86=8D=E6=89=A7=E8=A1=8C=EF=BC=8C=E4=BB=A5=E5=85=8D=E9=80=9A?= =?UTF-8?q?=E8=BF=87API=E5=88=9B=E5=BB=BA=E6=97=B6=E9=87=8D=E5=A4=8D?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=20-=20=E9=A5=BF=E7=99=BE=E9=98=B2=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- business/jxstore/act/act.go | 39 ++++++++++++++++------------- business/model/dao/act.go | 15 +++++++++++ business/partner/purchase/jd/act.go | 20 +++++++++------ 3 files changed, 48 insertions(+), 26 deletions(-) diff --git a/business/jxstore/act/act.go b/business/jxstore/act/act.go index bf23c42fc..552b374da 100644 --- a/business/jxstore/act/act.go +++ b/business/jxstore/act/act.go @@ -726,29 +726,32 @@ func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.T if err = err2; err != nil { return nil, err } - actInfo, err2 := dao.QueryActs(db, 0, 0, -1, "", vendorID, nil, []int{model.ActCreateTypeSpider}, - nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, createdFrom, utils.DefaultTimeValue) + // actInfo, err2 := dao.QueryActs(db, 0, 0, -1, "", vendorID, nil, []int{model.ActCreateTypeSpider}, + // nil, 0, 0, 0, utils.DefaultTimeValue, utils.DefaultTimeValue, createdFrom, utils.DefaultTimeValue) + vendorActIDs, err2 := dao.GetExistVendorActIDs(db, vendorID) if err = err2; err != nil { return nil, err } - localActMap := make(map[string]*dao.ActVendorInfo) - for _, v := range actInfo.Data { - if v.VendorList[0].VendorActID != "" { - localActMap[v.VendorList[0].VendorActID] = v - } - } + localActMap := jxutils.StringList2Map(vendorActIDs) + // localActMap := make(map[string]*dao.ActVendorInfo) + // for _, v := range vendorActIDs { + // if v.VendorList[0].VendorActID != "" { + // localActMap[v.VendorList[0].VendorActID] = v + // } + // } var needAddActList []*model.Act2 - var needUpdateActList []*model.Act + // var needUpdateActList []*model.Act for _, v := range actList { localAct := localActMap[v.VendorActID] - if localAct == nil { + if localAct == 0 { if v.Status == model.ActStatusCreated { needAddActList = append(needAddActList, v) } - } else if v.Status != localAct.Status { - localAct.Status = v.Status - needUpdateActList = append(needUpdateActList, &localAct.Act) } + // else if v.Status != localAct.Status { + // localAct.Status = v.Status + // needUpdateActList = append(needUpdateActList, &localAct.Act) + // } } subTask := tasksch.NewParallelTask("RefreshPageAct Sub", nil, ctx, func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) { @@ -788,11 +791,11 @@ func RefreshPageActs(ctx *jxcontext.Context, vendorIDs []int, createdFrom time.T } } } - for _, v := range needUpdateActList { - if _, err = dao.UpdateEntity(db, v, model.FieldStatus); err != nil { - return nil, err - } - } + // for _, v := range needUpdateActList { + // if _, err = dao.UpdateEntity(db, v, model.FieldStatus); err != nil { + // return nil, err + // } + // } dao.Commit(db) } return retVal, err diff --git a/business/model/dao/act.go b/business/model/dao/act.go index 1ca9c3a68..4dcebb88c 100644 --- a/business/model/dao/act.go +++ b/business/model/dao/act.go @@ -302,6 +302,21 @@ func QueryActs(db *DaoDB, actID int, offset, pageSize int, keyword string, vendo return pagedInfo, err } +func GetExistVendorActIDs(db *DaoDB, vendorID int) (vendorActIDs []string, err error) { + // todo 不应该是全表扫描 + sql := ` + SELECT + DISTINCT t1.vendor_act_id + FROM act_store_sku_map t1 + WHERE t1.deleted_at = ? AND t.vendor_id = ?` + sqlParams := []interface{}{ + utils.DefaultTimeValue, + vendorID, + } + err = GetRows(db, &vendorActIDs, sql, sqlParams...) + return vendorActIDs, err +} + func GetEffectiveActStoreSkuInfo(db *DaoDB, actID int, vendorIDs []int, storeIDs, skuIDs []int, beginAt, endAt time.Time) (actStoreSkuList []*model.ActStoreSku2, err error) { if utils.IsTimeZero(beginAt) { return nil, fmt.Errorf("GeActStoreSkuInfo必须指定活动开始时间") diff --git a/business/partner/purchase/jd/act.go b/business/partner/purchase/jd/act.go index fad627ae1..d1119317c 100644 --- a/business/partner/purchase/jd/act.go +++ b/business/partner/purchase/jd/act.go @@ -307,15 +307,19 @@ func OnActMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { func (c *PurchaseHandler) onActMsg(msg *jdapi.CallbackOrderMsg) (retVal *jdapi.CallbackResponse) { if msg.StatusID == jdapi.PromotionStatusSingleOK || msg.StatusID == jdapi.PromotionStatusLimitTimeOK { promotionID := msg.BillID - if !partner.CurActManager.IsVendorActExist(jxcontext.AdminCtx, promotionID, model.VendorIDJD) { - act, actStoreSkuList, err := getActFromJD(promotionID) - if err == nil && len(actStoreSkuList) > 0 { - _, err = partner.CurActManager.CreateActFromVendor(jxcontext.AdminCtx, act, actStoreSkuList) + // 等几秒再执行的原因是防止通过后台自己创建时,本地还没有建好,消息就过来,导致重复记录 + // 可能的问题是在重启时丢失消息 + utils.AfterFuncWithRecover(5*time.Second, func() { + if !partner.CurActManager.IsVendorActExist(jxcontext.AdminCtx, promotionID, model.VendorIDJD) { + act, actStoreSkuList, err := getActFromJD(promotionID) + if err == nil && len(actStoreSkuList) > 0 { + _, err = partner.CurActManager.CreateActFromVendor(jxcontext.AdminCtx, act, actStoreSkuList) + } + if err != nil { + retVal = jdapi.Err2CallbackResponse(err, promotionID) + } } - if err != nil { - retVal = jdapi.Err2CallbackResponse(err, promotionID) - } - } + }) } return retVal }