From 508a9490063062a444ae72366033e68d5dfeaab6 Mon Sep 17 00:00:00 2001 From: gazebo Date: Wed, 24 Oct 2018 14:54:20 +0800 Subject: [PATCH] - check store_map --- business/jxstore/cms/sync.go | 2 +- business/partner/purchase/ebai/store.go | 72 +++++++++++---------- business/partner/purchase/jd/store.go | 79 ++++++++++++----------- business/partner/purchase/jd/store_sku.go | 35 +++++----- 4 files changed, 100 insertions(+), 88 deletions(-) diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 8715c6ac2..68a75920d 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -328,7 +328,7 @@ func (v *VendorSync) LoopSingleStoreVendors(ctx *jxcontext.Context, db *dao.DaoD if err = dao.GetRows(db, &storeMaps, ` SELECT * FROM store_map - WHERE vendor_id IN (`+dao.GenQuestionMarks(len(v.SingleStoreVendorIDs))+")", v.SingleStoreVendorIDs); err == nil { + WHERE deleted_at = ? AND vendor_id IN (`+dao.GenQuestionMarks(len(v.SingleStoreVendorIDs))+")", utils.DefaultTimeValue, v.SingleStoreVendorIDs); err == nil { task := tasksch.NewParallelTask(taskName, nil, userName, handler, storeMaps) ctx.SetTaskOrAddChild(task, nil) tasksch.ManageTask(task).Run() diff --git a/business/partner/purchase/ebai/store.go b/business/partner/purchase/ebai/store.go index 96dd6d64f..17d1b1a06 100644 --- a/business/partner/purchase/ebai/store.go +++ b/business/partner/purchase/ebai/store.go @@ -49,13 +49,13 @@ func (p *PurchaseHandler) CreateStore(db *dao.DaoDB, storeID int, userName strin IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status, province.ebai_code province_id, city.ebai_code city_id, district.ebai_code district_id FROM store t1 - LEFT JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? + LEFT JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND t2.deleted_at = ? JOIN place district ON t1.district_code = district.code JOIN place city ON t1.city_code = city.code JOIN place province ON city.parent_code = province.code WHERE t1.id = ? AND t2.id IS NULL; ` - if err = dao.GetRow(db, &store, sql, model.VendorIDEBAI, storeID); err == nil { + if err = dao.GetRow(db, &store, sql, model.VendorIDEBAI, utils.DefaultTimeValue, storeID); err == nil { params := genStoreMapFromStore(&store) params["shop_id"] = store.ID params["business_form_id"] = "179" @@ -135,44 +135,50 @@ func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) } func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { - var store tEbaiStoreInfo + var stores []*tEbaiStoreInfo sql := ` SELECT t1.*, t2.status ebai_store_status, t2.vendor_store_id, IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status FROM store t1 - JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? - WHERE t1.id = ?; + JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ? OR t2.sync_status <> 0) + WHERE t1.id = ? + ORDER BY t2.updated_at ` - if err = dao.GetRow(db, &store, sql, model.VendorIDEBAI, storeID); err == nil { - params := genStoreMapFromStore(&store) - // globals.SugarLogger.Debug(utils.Format4Output(params, false)) - if globals.EnableStoreWrite { - if err = api.EbaiAPI.ShopUpdate(params); err == nil { - shopID := 0 - if store.SyncStatus&model.SyncFlagDeletedMask == 0 { - shopID = store.ID - } - store2, err2 := p.ReadStore(store.VendorStoreID) - if err = err2; err == nil { - if store2.ID == store.ID { - shopID = -1 + if err = dao.GetRow(db, &stores, sql, model.VendorIDEBAI, utils.DefaultTimeValue, storeID); err == nil { + for _, store := range stores { + params := genStoreMapFromStore(store) + // globals.SugarLogger.Debug(utils.Format4Output(params, false)) + if globals.EnableStoreWrite { + if err = api.EbaiAPI.ShopUpdate(params); err == nil { + shopID := 0 + if store.SyncStatus&model.SyncFlagDeletedMask == 0 { + shopID = store.ID } - } - if err == nil { - if shopID > 0 { - err = api.EbaiAPI.ShopIDBatchUpdate([]string{store.VendorStoreID}, []string{utils.Int2Str(shopID)}) - } else if shopID == 0 { - // todo remove out shop id + store2, err2 := p.ReadStore(store.VendorStoreID) + if err = err2; err == nil { + if store2.ID == store.ID { + shopID = -1 + } } - } - if err == nil { - mergeStatus := jxutils.MergeStoreStatus(store.Status, store.EbaiStoreStatus) - if mergeStatus == model.StoreStatusOpened { - err = api.EbaiAPI.ShopOnline("", utils.Str2Int64(store.VendorStoreID)) - } else if mergeStatus == model.StoreStatusClosed { - err = api.EbaiAPI.ShopOffline("", utils.Str2Int64(store.VendorStoreID)) - } else if mergeStatus == model.StoreStatusClosed { - err = api.EbaiAPI.ShopClose("", utils.Str2Int64(store.VendorStoreID)) + if err == nil { + if shopID > 0 { + err = api.EbaiAPI.ShopIDBatchUpdate([]string{store.VendorStoreID}, []string{utils.Int2Str(shopID)}) + } else if shopID == 0 { + // todo remove out shop id + } + } + if err == nil { + mergeStatus := jxutils.MergeStoreStatus(store.Status, store.EbaiStoreStatus) + if mergeStatus == model.StoreStatusOpened { + err = api.EbaiAPI.ShopOnline("", utils.Str2Int64(store.VendorStoreID)) + } else if mergeStatus == model.StoreStatusClosed { + err = api.EbaiAPI.ShopOffline("", utils.Str2Int64(store.VendorStoreID)) + } else if mergeStatus == model.StoreStatusClosed { + err = api.EbaiAPI.ShopClose("", utils.Str2Int64(store.VendorStoreID)) + } + if err != nil { + return err + } } } } diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index e2c142457..b6296bca8 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -86,53 +86,56 @@ func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) // stoerIDs为nil表示所有 func (p *PurchaseHandler) UpdateStore(db *dao.DaoDB, storeID int, userName string) (err error) { - var store tJdStoreInfo + var stores []*tJdStoreInfo sql := ` SELECT t1.*, city.jd_code jd_city_code, district.jd_code jd_district_code, t2.status jd_store_status, t2.vendor_store_id, IF(t1.updated_at > t2.updated_at, t1.last_operator, t2.last_operator) real_last_operator, t2.sync_status FROM store t1 - JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? + JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? AND (t2.deleted_at = ? OR t2.sync_status <> 0) LEFT JOIN place city ON t1.city_code = city.code LEFT JOIN place district ON t1.district_code = district.code WHERE t1.id = ? - ORDER BY t2.updated_at DESC - LIMIT 1; + ORDER BY t2.updated_at ` - if err = dao.GetRow(db, &store, sql, model.VendorIDJD, storeID); err == nil { - outSystemID := "" - if store.SyncStatus&model.SyncFlagDeletedMask == 0 { - outSystemID = utils.Int2Str(int(store.ID)) - } - params := map[string]interface{}{ - "outSystemId": outSystemID, // todo 直接修改这个字段可能会有问题 - "stationName": jxutils.ComposeStoreName(store.Name, partner.StoreNameSeparator, VendorStorePrefix), - "stationAddress": store.Address, - "serviceTimeStart1": JxOperationTime2JdOperationTime(store.OpenTime1), - "serviceTimeEnd1": JxOperationTime2JdOperationTime(store.CloseTime1), - "deliveryRangeType": store.DeliveryRangeType, - "coordinateType": 3, // 一直用高德 - "lng": jxutils.IntCoordinate2Standard(store.Lng), - "lat": jxutils.IntCoordinate2Standard(store.Lat), - "city": store.JdCityCode, - "county": store.JdDistrictCode, - "phone": store.Tel1, - "mobile": store.Tel2, - } - if store.DeliveryRangeType == model.DeliveryRangeTypePolygon { - params["coordinatePoints"] = store.DeliveryRange - } else { - params["deliveryRangeRadius"] = utils.Str2Int64(store.DeliveryRange) - } + if err = dao.GetRows(db, &stores, sql, model.VendorIDJD, utils.DefaultTimeValue, storeID); err == nil { + for _, store := range stores { + outSystemID := "" + if store.SyncStatus&model.SyncFlagDeletedMask == 0 { + outSystemID = utils.Int2Str(int(store.ID)) + } + params := map[string]interface{}{ + "outSystemId": outSystemID, // todo 直接修改这个字段可能会有问题 + "stationName": jxutils.ComposeStoreName(store.Name, partner.StoreNameSeparator, VendorStorePrefix), + "stationAddress": store.Address, + "serviceTimeStart1": JxOperationTime2JdOperationTime(store.OpenTime1), + "serviceTimeEnd1": JxOperationTime2JdOperationTime(store.CloseTime1), + "deliveryRangeType": store.DeliveryRangeType, + "coordinateType": 3, // 一直用高德 + "lng": jxutils.IntCoordinate2Standard(store.Lng), + "lat": jxutils.IntCoordinate2Standard(store.Lat), + "city": store.JdCityCode, + "county": store.JdDistrictCode, + "phone": store.Tel1, + "mobile": store.Tel2, + } + if store.DeliveryRangeType == model.DeliveryRangeTypePolygon { + params["coordinatePoints"] = store.DeliveryRange + } else { + params["deliveryRangeRadius"] = utils.Str2Int64(store.DeliveryRange) + } - openTime2 := JxOperationTime2JdOperationTime(store.OpenTime2) - if openTime2 != 0 { - params["serviceTimeStart2"] = openTime2 - params["serviceTimeEnd2"] = JxOperationTime2JdOperationTime(store.CloseTime2) - } - _, params["closeStatus"] = JxStoreStatus2JdStatus(jxutils.MergeStoreStatus(store.Status, store.JdStoreStatus)) - // globals.SugarLogger.Debug(utils.Format4Output(params, false)) - if globals.EnableStoreWrite { - err = api.JdAPI.UpdateStoreInfo4Open(store.VendorStoreID, store.RealLastOperator, params) + openTime2 := JxOperationTime2JdOperationTime(store.OpenTime2) + if openTime2 != 0 { + params["serviceTimeStart2"] = openTime2 + params["serviceTimeEnd2"] = JxOperationTime2JdOperationTime(store.CloseTime2) + } + _, params["closeStatus"] = JxStoreStatus2JdStatus(jxutils.MergeStoreStatus(store.Status, store.JdStoreStatus)) + // globals.SugarLogger.Debug(utils.Format4Output(params, false)) + if globals.EnableStoreWrite { + if err = api.JdAPI.UpdateStoreInfo4Open(store.VendorStoreID, store.RealLastOperator, params); err != nil { + return err + } + } } } return err diff --git a/business/partner/purchase/jd/store_sku.go b/business/partner/purchase/jd/store_sku.go index 505df782a..80b8c781f 100644 --- a/business/partner/purchase/jd/store_sku.go +++ b/business/partner/purchase/jd/store_sku.go @@ -29,23 +29,30 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ } task := tasksch.RunManagedParallelTask("SyncStoresSkus", tasksch.NewParallelConfig().SetParallelCount(parallelCount), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { storeID := batchItemList[0].(int) - sqlParams := []interface{}{ + sqlWhere := ` + WHERE (t1.deleted_at = ? OR t1.jd_sync_status <> 0) AND t1.store_id = ? + ` + sqlWhereParams := []interface{}{ utils.DefaultTimeValue, storeID, } + + if skuIDs != nil && len(skuIDs) > 0 { + sqlWhere += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" + sqlWhereParams = append(sqlWhereParams, skuIDs) + } + sql := ` SELECT t1.*, t2.price_percentage FROM store_sku_bind t1 - JOIN store_map t2 ON t1.store_id = t2.store_id - WHERE (t1.deleted_at = ? OR t1.jd_sync_status <> 0) AND t1.store_id = ? - ` - if skuIDs != nil && len(skuIDs) > 0 { - sql += " AND t1.sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" - sqlParams = append(sqlParams, skuIDs) - } + JOIN store_map t2 ON t1.store_id = t2.store_id AND t2.vendor_id = ? AND t2.deleted_at = ? + ` + sqlWhere var storeSkus []*tStoreSkuBindExt - // globals.SugarLogger.Debug(sql, sqlParams) - if err = dao.GetRows(db, &storeSkus, sql, sqlParams); err == nil { + sqlParams := []interface{}{ + model.VendorIDJD, + utils.DefaultTimeValue, + } + if err = dao.GetRows(db, &storeSkus, sql, append(sqlParams, sqlWhereParams...)...); err == nil { outStationNo := utils.Int2Str(storeID) task := tasksch.RunParallelTask("SyncStoresSkus inner", tasksch.NewParallelConfig().SetBatchSize(MaxSkuBatchSize), userName, func(t *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (interface{}, error) { var skuPriceInfoList []*jdapi.SkuPriceInfo @@ -101,12 +108,8 @@ func (p *PurchaseHandler) SyncStoresSkus(db *dao.DaoDB, storeIDs []int, skuIDs [ sql := ` UPDATE store_sku_bind t1 SET t1.jd_sync_status = 0 - WHERE (t1.deleted_at = ? OR t1.jd_sync_status <> 0) AND t1.store_id = ? - ` - if skuIDs != nil && len(skuIDs) > 0 { - sql += " AND sku_id IN (" + dao.GenQuestionMarks(len(skuIDs)) + ")" - } - _, err = dao.ExecuteSQL(db, sql, sqlParams) + ` + sqlWhere + _, err = dao.ExecuteSQL(db, sql, sqlWhereParams...) } } return nil, err