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 }