diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index 99ea30607..145806d75 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -21,9 +21,10 @@ type tStoreSkuBindExt struct { // 京东到家,以有库存表示关注(认领) func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasksch.ITask, storeID int, skuIDs []int, isAsync, isContinueWhenError bool) (hint string, err error) { globals.SugarLogger.Debugf("jd SyncStoresSkus, storeID:%d, skuIDs:%v", storeID, skuIDs) - sqlWhere := ` + sqlWhere0 := ` WHERE (t1.jd_sync_status <> 0) AND t1.store_id = ? ` + sqlWhere := sqlWhere0 sqlWhereParams := []interface{}{ storeID, } @@ -52,10 +53,12 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks var skuVendibilityList []*jdapi.StockVendibility var skuStockList []*jdapi.SkuStock stationNo := batchItemList[0].(*tStoreSkuBindExt).VendorStoreID + var batchSkuIDs []int for _, v := range batchItemList { storeSku := v.(*tStoreSkuBindExt) alreadyAddStock := false if storeSku.JdSyncStatus&model.SyncFlagChangedMask != 0 { + batchSkuIDs = append(batchSkuIDs, storeSku.SkuID) if storeSku.JdSyncStatus&(model.SyncFlagDeletedMask|model.SyncFlagNewMask) != 0 { // 关注或取消关注 stock := &jdapi.SkuStock{ OutSkuId: utils.Int2Str(storeSku.SkuID), @@ -105,16 +108,20 @@ func (p *PurchaseHandler) SyncStoreSkus(ctx *jxcontext.Context, parentTask tasks _, err = api.JdAPI.BatchUpdateCurrentQtys("", stationNo, skuStockList, ctx.GetUserName()) } } + if err == nil && len(batchSkuIDs) > 0 { + db := dao.GetDB() // 多线程问题 + sql := ` + UPDATE store_sku_bind t1 + SET t1.jd_sync_status = 0 + ` + sqlWhere0 + " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(batchSkuIDs)) + ")" + _, err = dao.ExecuteSQL(db, sql, storeID, batchSkuIDs) + } return nil, err }, storeSkus) ctx.SetTaskOrAddChild(task, parentTask) task.Run() - if _, err = task.GetResult(0); err == nil { - sql := ` - UPDATE store_sku_bind t1 - SET t1.jd_sync_status = 0 - ` + sqlWhere - _, err = dao.ExecuteSQL(db, sql, sqlWhereParams...) + if !isAsync { + _, err = task.GetResult(0) } return task.ID, err }