package ebai import ( "fmt" "strings" "git.rosy.net.cn/baseapi/platformapi/autonavi" "git.rosy.net.cn/baseapi/platformapi/ebaiapi" "git.rosy.net.cn/baseapi/utils" "git.rosy.net.cn/jx-callback/business/jxcallback/scheduler" "git.rosy.net.cn/jx-callback/business/jxutils" "git.rosy.net.cn/jx-callback/business/model" "git.rosy.net.cn/jx-callback/business/model/dao" "git.rosy.net.cn/jx-callback/business/partner" "git.rosy.net.cn/jx-callback/globals" "git.rosy.net.cn/jx-callback/globals/api" ) const ( VendorStorePrefix = "好菜鲜生" ) type tEbaiStoreInfo struct { model.Store VendorStoreID string `orm:"column(vendor_store_id)"` RealLastOperator string EbaiStoreStatus int } func (p *PurchaseHandler) ReadStore(vendorStoreID string) (*model.Store, error) { baiduShopID := utils.Str2Int64(vendorStoreID) result, err := api.EbaiAPI.ShopGet("", baiduShopID) if err == nil { retVal := &model.Store{ Address: utils.Interface2String(result["address"]), Tel1: utils.Interface2String(result["phone"]), } _, retVal.Name = jxutils.SplitStoreName(utils.Interface2String(result["name"]), partner.StoreNameSeparator, VendorStorePrefix) retVal.DeliveryType = EbaiDeliveryType2Jx(utils.Interface2String(result["delivery_type"])) businessTime := result["business_time"].([]interface{}) btime := businessTime[0].(map[string]interface{}) retVal.OpenTime1 = jxutils.StrTime2JxOperationTime(utils.Interface2String(btime["start"].(string)), 700) retVal.CloseTime1 = jxutils.StrTime2JxOperationTime(utils.Interface2String(btime["end"].(string)), 2000) if len(businessTime) > 1 { btime = businessTime[1].(map[string]interface{}) retVal.OpenTime2 = jxutils.StrTime2JxOperationTime(utils.Interface2String(btime["start"].(string)), 700) retVal.CloseTime2 = jxutils.StrTime2JxOperationTime(utils.Interface2String(btime["end"].(string)), 2000) } if ebaiStatus, err2 := api.EbaiAPI.ShopBusStatusGet("", baiduShopID, ebaiapi.PlatformFlagBaidu); err2 == nil { retVal.Status = EbaiBusStatus2JxStatus(ebaiStatus) } tel2 := utils.Interface2String(result["ivr_phone"]) if tel2 != "" && tel2 != retVal.Tel1 { retVal.Tel2 = tel2 } db := dao.GetDB() if city, err2 := dao.GetPlaceByName(db, utils.Interface2String(result["city"]), model.PlaceLevelCity, 0); err2 == nil { retVal.CityCode = city.Code if district, err2 := dao.GetPlaceByName(db, utils.Interface2String(result["county"]), model.PlaceLevelDistrict, city.Code); err2 == nil { retVal.DistrictCode = district.Code } } lng := utils.MustInterface2Float64(result["longitude"]) lat := utils.MustInterface2Float64(result["latitude"]) if utils.Interface2String(result["coord_type"]) == ebaiapi.CoordTypeBaidu { var err2 error if lng, lat, err2 = api.AutonaviAPI.CoordinateConvert(lng, lat, autonavi.CoordSysBaidu); err2 != nil { return nil, err2 } } retVal.Lng = jxutils.StandardCoordinate2Int(lng) retVal.Lat = jxutils.StandardCoordinate2Int(lat) retVal.ID = int(utils.Str2Int64WithDefault(utils.Interface2String(result["shop_id"]), 0)) retVal.DeliveryRangeType = model.DeliveryRangeTypePolygon retVal.DeliveryRange = EbaiDeliveryRegion2Jx(result["delivery_region"]) return retVal, nil } return nil, err } func (p *PurchaseHandler) UpdateStore(storeID int, userName string) (err error) { db := dao.GetDB() var store 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 FROM store t1 JOIN store_map t2 ON t1.id = t2.store_id AND t2.vendor_id = ? WHERE t1.id = ?` if err = dao.GetRow(db, &store, sql, model.VendorIDJD, storeID); err == nil { params := map[string]interface{}{ "name": jxutils.ComposeStoreName(store.Name, partner.StoreNameSeparator, VendorStorePrefix), "address": store.Address, "coord_type": ebaiapi.CoordTypeAutonavi, // 一直用高德 } // globals.SugarLogger.Debug(utils.Format4Output(params, false)) if globals.EnableStoreWrite { err = api.JdAPI.UpdateStoreInfo4Open(store.VendorStoreID, store.RealLastOperator, params) } } return err } func EbaiDeliveryType2Jx(deliveryType string) int8 { spIndex := strings.Index(deliveryType, "|") baiduDeliveryType := utils.Str2Int64(deliveryType[spIndex+1:]) switch baiduDeliveryType { case ebaiapi.DeliveryTypeBaiduLogistics: return scheduler.StoreDeliveryTypeByPlatform case ebaiapi.DeliveryTypeBaiduDeliveryBySelf: return scheduler.StoreDeliveryTypeByStore case ebaiapi.DeliveryTypeBaiduCrowdSourcing: return scheduler.StoreDeliveryTypeCrowdSourcing default: return scheduler.StoreDeliveryTypeCrowdSourcing } } func EbaiDeliveryRegion2Jx(deliveryRegion interface{}) string { region := deliveryRegion.([]interface{})[0].(map[string]interface{})["region"].([]interface{})[0].([]interface{}) coords := make([]string, len(region)) for k, v := range region { mapV := v.(map[string]interface{}) coords[k] = fmt.Sprintf("%d,%d", jxutils.StandardCoordinate2Int(utils.MustInterface2Float64(mapV["longitude"])), jxutils.StandardCoordinate2Int(utils.MustInterface2Float64(mapV["latitude"]))) } return strings.Join(coords, ";") } func JxDeliveryRegion2Ebai(coords string) string { return "" }