- 京东回调活动创建等5秒再执行,以免通过API创建时重复创建
- 饿百防重复创建
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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必须指定活动开始时间")
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user