diff --git a/business/jxstore/cms/store.go b/business/jxstore/cms/store.go index 1070124a1..51fa5c12e 100644 --- a/business/jxstore/cms/store.go +++ b/business/jxstore/cms/store.go @@ -306,11 +306,3 @@ func UpdateStoreVendorMap(db *dao.DaoDB, storeID, vendorID int, payload map[stri } return num, err } - -// 合并得到最终的门店状态 -func mergeStoreStatus(status int, vendorStatus int) int { - if status < vendorStatus { - return status - } - return vendorStatus -} diff --git a/business/jxstore/cms/sync.go b/business/jxstore/cms/sync.go index 7f7210113..6c5c1b953 100644 --- a/business/jxstore/cms/sync.go +++ b/business/jxstore/cms/sync.go @@ -52,11 +52,9 @@ func (v *VendorSync) SyncStore(db *dao.DaoDB, vendorID int, store *model.Store, } storeMapList, err := v.GetStoreMapInfo(db, store.ID) if err == nil { - copiedStore := *store for _, storeMap := range storeMapList { if (vendorID == -1 || vendorID == storeMap.VendorID) && (isForce || storeMap.SyncStatus != 0) { // 对于门店,当前只有修改标记 - copiedStore.Status = mergeStoreStatus(store.Status, storeMap.Status) - if err = GetPurchaseHandler(storeMap.VendorID).UpdateStore(storeMap.VendorStoreID, &copiedStore, userName); err == nil { + if err = GetPurchaseHandler(storeMap.VendorID).UpdateStore(store.ID); err == nil { storeMap.SyncStatus = 0 dao.UpdateEntity(db, storeMap, model.FieldSyncStatus) } diff --git a/business/jxutils/jxutils_cms.go b/business/jxutils/jxutils_cms.go new file mode 100644 index 000000000..33f2a4a42 --- /dev/null +++ b/business/jxutils/jxutils_cms.go @@ -0,0 +1,9 @@ +package jxutils + +// 合并得到最终的门店状态 +func MergeStoreStatus(status int, vendorStatus int) int { + if status < vendorStatus { + return status + } + return vendorStatus +} diff --git a/business/partner/partner.go b/business/partner/partner.go index a13385ffb..70571f022 100644 --- a/business/partner/partner.go +++ b/business/partner/partner.go @@ -63,7 +63,7 @@ type IPurchasePlatformHandler interface { //////// // Store ReadStore(vendorStoreID string) (store *model.Store, err error) - UpdateStore(vendorStoreID string, store *model.Store, userName string) error + UpdateStore(storeID int) error // EnableAutoAcceptOrder(vendorStoreID string, isEnabled bool) error // OpenStore(vendorStoreID string, userName string) error // CloseStore(vendorStoreID, closeNotice, userName string) error diff --git a/business/partner/purchase/elm/store.go b/business/partner/purchase/elm/store.go index 848ab3fe6..e25579695 100644 --- a/business/partner/purchase/elm/store.go +++ b/business/partner/purchase/elm/store.go @@ -6,7 +6,7 @@ func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) return nil, nil } -func (p *PurchaseHandler) UpdateStore(vendorStoreID string, store *model.Store, userName string) error { +func (p *PurchaseHandler) UpdateStore(storeID int) error { return nil } diff --git a/business/partner/purchase/jd/sku_test.go b/business/partner/purchase/jd/sku_test.go index 2f19fb7ae..a8ac58023 100644 --- a/business/partner/purchase/jd/sku_test.go +++ b/business/partner/purchase/jd/sku_test.go @@ -43,14 +43,12 @@ func TestReadCategories(t *testing.T) { } func TestReadSku(t *testing.T) { - skuName, sellCites, sku, err := new(PurchaseHandler).ReadSku("2018544585") + skuName, err := new(PurchaseHandler).ReadSku("2018544585") if err != nil { t.Fatal(err.Error()) } - if skuName.Name != "每日鲜*脊骨" || sellCites[0].Name != "武汉市" || sku.SpecUnit != "g" { + if skuName.Name != "每日鲜*脊骨" || skuName.Places[0] != 420100 || skuName.Skus[0].SpecUnit != "g" { t.Fatal("ReadSku return data wrong") t.Log(string(utils.MustMarshal(skuName))) - t.Log(string(utils.MustMarshal(sellCites))) - t.Log(string(utils.MustMarshal(sku))) } } diff --git a/business/partner/purchase/jd/store.go b/business/partner/purchase/jd/store.go index b794a0571..df2fbf6e5 100644 --- a/business/partner/purchase/jd/store.go +++ b/business/partner/purchase/jd/store.go @@ -14,6 +14,15 @@ import ( "git.rosy.net.cn/jx-callback/globals/api" ) +type tJdStoreInfo struct { + model.Store + JdCityCode int + JdDistrictCode int + JdStoreStatus int + VendorStoreID string `orm:"vendor_store_id"` + RealLastOperator string +} + func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) { result, err := api.JdAPI.GetStoreInfoByStationNo(vendorStoreID) if err == nil { @@ -62,31 +71,46 @@ func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) return nil, err } -func (p *PurchaseHandler) UpdateStore(vendorStoreID string, store *model.Store, userName string) (err error) { - params := map[string]interface{}{ - "outSystemId": utils.Int2Str(int(store.ID)), - "stationName": store.Name, - "stationAddress": store.Address, - "serviceTimeStart1": JxOperationTime2JdOperationTime(store.OpenTime1), - "serviceTimeEnd1": JxOperationTime2JdOperationTime(store.CloseTime1), - "deliveryRangeType": store.DeliveryRangeType, - "coordinateType": 3, // 一直用高德 - } - if store.DeliveryRangeType == model.DeliveryRangeTypePolygon { - params["coordinatePoints"] = JxRange2JdRange(store.DeliveryRange) - } else { - params["deliveryRangeRadius"] = utils.Str2Int64(store.DeliveryRange) - } +// stoerIDs为nil表示所有 +func (p *PurchaseHandler) UpdateStore(storeID int) (err error) { + db := dao.GetDB() + var store 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 + FROM store t1 + JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? + LEFT JOIN place city ON t1.city_code = city.code + LEFT JOIN place district ON t1.district_code = district.code + WHERE t1.id = ?` + if err = dao.GetRow(db, &store, sql, model.VendorIDJD, storeID); err == nil { + params := map[string]interface{}{ + "outSystemId": utils.Int2Str(int(store.ID)), // todo 直接修改这个字段可能会有问题 + "stationName": store.Name, + "stationAddress": store.Address, + "serviceTimeStart1": JxOperationTime2JdOperationTime(store.OpenTime1), + "serviceTimeEnd1": JxOperationTime2JdOperationTime(store.CloseTime1), + "deliveryRangeType": store.DeliveryRangeType, + "coordinateType": 3, // 一直用高德 + "city": store.JdCityCode, + "county": store.JdDistrictCode, + } + if store.DeliveryRangeType == model.DeliveryRangeTypePolygon { + params["coordinatePoints"] = JxRange2JdRange(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(store.Status) - // globals.SugarLogger.Debug(utils.Format4Output(params, false)) - if globals.EnableStoreWrite { - err = api.JdAPI.UpdateStoreInfo4Open(vendorStoreID, userName, 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 { + err = api.JdAPI.UpdateStoreInfo4Open(store.VendorStoreID, store.RealLastOperator, params) + } } return err } diff --git a/business/partner/purchase/jd/store_test.go b/business/partner/purchase/jd/store_test.go index 8ecf61d4c..9f0c3622f 100644 --- a/business/partner/purchase/jd/store_test.go +++ b/business/partner/purchase/jd/store_test.go @@ -3,23 +3,26 @@ package jd import ( "strings" "testing" + + "git.rosy.net.cn/baseapi/utils" ) const ( - TestStoreNo = "11736989" + TestStoreNo = 100164 + TestJdStoreNo = "11736989" ) func TestReadStore(t *testing.T) { - result, err := new(PurchaseHandler).ReadStore(TestStoreNo) + result, err := new(PurchaseHandler).ReadStore(TestJdStoreNo) if err != nil { t.Fatal(err.Error()) } - t.Log(result) + t.Log(utils.Format4Output(result, false)) } func TestUpdateStore(t *testing.T) { handler := new(PurchaseHandler) - result, err := handler.ReadStore(TestStoreNo) + result, err := handler.ReadStore(TestJdStoreNo) // result := &model.Store{} // result.ID = 100164 @@ -30,20 +33,20 @@ func TestUpdateStore(t *testing.T) { } result.Name += "h" newName := result.Name - err = handler.UpdateStore(TestStoreNo, result, "ttt") + err = handler.UpdateStore(TestStoreNo) if err != nil { t.Fatal(err.Error()) } // same - result, err = handler.ReadStore(TestStoreNo) + result, err = handler.ReadStore(TestJdStoreNo) if result.Name != newName { t.Fatalf("result is not same, desired newName:%s, newName:%s", newName, result.Name) } // restore result.Name = strings.Trim(result.Name, "h") - err = handler.UpdateStore(TestStoreNo, result, "ttt") + err = handler.UpdateStore(TestStoreNo) if err != nil { t.Fatal(err.Error()) }