拉取门店
This commit is contained in:
@@ -2,6 +2,8 @@ package misc
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -13,8 +15,15 @@ import (
|
|||||||
"git.rosy.net.cn/jx-callback/business/model/dao"
|
"git.rosy.net.cn/jx-callback/business/model/dao"
|
||||||
"git.rosy.net.cn/jx-callback/business/partner"
|
"git.rosy.net.cn/jx-callback/business/partner"
|
||||||
"git.rosy.net.cn/jx-callback/globals"
|
"git.rosy.net.cn/jx-callback/globals"
|
||||||
|
"git.rosy.net.cn/jx-callback/globals/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type CityCenter struct {
|
||||||
|
Lng float64
|
||||||
|
Lat float64
|
||||||
|
CityName string
|
||||||
|
}
|
||||||
|
|
||||||
func StartRefreshEbaiRealMobile() {
|
func StartRefreshEbaiRealMobile() {
|
||||||
if globals.ReallyCallPlatformAPI {
|
if globals.ReallyCallPlatformAPI {
|
||||||
utils.AfterFuncWithRecover(5*time.Second, func() {
|
utils.AfterFuncWithRecover(5*time.Second, func() {
|
||||||
@@ -78,3 +87,225 @@ func RefreshRealMobile(ctx *jxcontext.Context, vendorID int, fromTime, toTime ti
|
|||||||
}
|
}
|
||||||
return hint, err
|
return hint, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func StartGetCityStoreInfo() {
|
||||||
|
cityCenters := make([]*CityCenter, 0)
|
||||||
|
guiyang := &CityCenter{
|
||||||
|
Lng: 106.713478,
|
||||||
|
Lat: 26.578343,
|
||||||
|
CityName: "贵阳市",
|
||||||
|
}
|
||||||
|
cityCenters = append(cityCenters, guiyang)
|
||||||
|
GetCityStoreInfo(cityCenters)
|
||||||
|
// countries, err := api.AutonaviAPI.GetDistricts(2, "")
|
||||||
|
// if err == nil {
|
||||||
|
// cityCenters := make([]*CityCenter, 0)
|
||||||
|
// country := countries[0]
|
||||||
|
// districts := country.Districts
|
||||||
|
// for _, province := range districts { // 省
|
||||||
|
// for _, city := range province.Districts { // 市
|
||||||
|
// // globals.SugarLogger.Debug(utils.Format4Output(city.Name, false))
|
||||||
|
// cityCenter := &CityCenter{
|
||||||
|
// Lng: city.Lng,
|
||||||
|
// Lat: city.Lat,
|
||||||
|
// CityName: city.Name,
|
||||||
|
// }
|
||||||
|
// // globals.SugarLogger.Debug(utils.Format4Output(cityCenter, false))
|
||||||
|
// cityCenters = append(cityCenters, cityCenter)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// // globals.SugarLogger.Debug(utils.Format4Output(cityCenters, false))
|
||||||
|
// GetCityStoreInfo(cityCenters)
|
||||||
|
// }
|
||||||
|
// utils.AfterFuncWithRecover(12*time.Hour, func() {
|
||||||
|
// StartGetCityStoreInfo()
|
||||||
|
// })
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetCityStoreInfo(cityCenters []*CityCenter) {
|
||||||
|
utils.CallFuncAsync(func() {
|
||||||
|
for i := 0; i < len(cityCenters); i++ {
|
||||||
|
cityCenter := cityCenters[i]
|
||||||
|
cityPoints := GetCityPoints(cityCenter.Lng, cityCenter.Lat, cityCenter.CityName)
|
||||||
|
for j := 0; j < len(cityPoints); j++ {
|
||||||
|
point := cityPoints[j]
|
||||||
|
SaveJdPointsStores(point)
|
||||||
|
SaveEbaiPointsStores(point)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func SaveJdPointsStores(point []string) {
|
||||||
|
retVal, err := api.JdAPI.GetStoreList(point[0], point[1])
|
||||||
|
if err == nil {
|
||||||
|
retVal2 := retVal["data"].(map[string]interface{})
|
||||||
|
storeList := retVal2["data"].([]interface{})
|
||||||
|
for _, x := range storeList {
|
||||||
|
xMap := x.(map[string]interface{})
|
||||||
|
floorCellData := xMap["floorCellData"].(map[string]interface{})
|
||||||
|
storeId := floorCellData["storeId"].(string)
|
||||||
|
sql := `
|
||||||
|
SELECT *
|
||||||
|
FROM store_info
|
||||||
|
WHERE vendor_id = ? AND vendor_store_id = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
model.VendorIDJD,
|
||||||
|
storeId,
|
||||||
|
}
|
||||||
|
var storeList []*model.StoreInfo
|
||||||
|
db := dao.GetDB()
|
||||||
|
if err = dao.GetRows(db, &storeList, sql, sqlParams...); err == nil && len(storeList) == 0 {
|
||||||
|
SaveJdStoreInfo(storeId, point[2])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SaveJdStoreInfo(storeId, cityName string) {
|
||||||
|
retVal, err := api.JdAPI.GetStoreInfo(storeId)
|
||||||
|
if err == nil {
|
||||||
|
store := retVal["storeInfo"].(map[string]interface{})
|
||||||
|
storeCommentVO := retVal["storeCommentVO"].(map[string]interface{})
|
||||||
|
storeInfo := &model.StoreInfo{
|
||||||
|
VendorID: model.VendorIDJD,
|
||||||
|
VendorStoreID: utils.Interface2String(store["storeId"]),
|
||||||
|
CityName: cityName,
|
||||||
|
StoreName: utils.Interface2String(store["storeName"]),
|
||||||
|
Address: utils.Interface2String(store["storeAddress"]),
|
||||||
|
ShopScore: utils.Interface2Float64WithDefault(storeCommentVO["scoreAvg"], 0),
|
||||||
|
Tel: utils.Interface2String(store["storeTel"]),
|
||||||
|
RecentOrderNum: utils.Interface2String(store["monthSaleNum"]),
|
||||||
|
SkuCount: utils.Interface2String(store["inSaleNum"]),
|
||||||
|
BusinessType: utils.Interface2String(store["industry"]),
|
||||||
|
}
|
||||||
|
db := dao.GetDB()
|
||||||
|
dao.CreateEntity(db, storeInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SaveEbaiPointsStores(point []string) {
|
||||||
|
retVal, err := api.EbaiAPI.GetStoreList(point[0], point[1])
|
||||||
|
if err == nil {
|
||||||
|
storeList := retVal["shop_list"].([]interface{})
|
||||||
|
for _, x := range storeList {
|
||||||
|
xMap := x.(map[string]interface{})
|
||||||
|
shopInfo := xMap["shop_info"].(map[string]interface{})
|
||||||
|
storeId := shopInfo["wid"].(string)
|
||||||
|
sql := `
|
||||||
|
SELECT *
|
||||||
|
FROM store_info
|
||||||
|
WHERE vendor_id = ? AND vendor_store_id = ?
|
||||||
|
`
|
||||||
|
sqlParams := []interface{}{
|
||||||
|
model.VendorIDEBAI,
|
||||||
|
storeId,
|
||||||
|
}
|
||||||
|
var storeList []*model.StoreInfo
|
||||||
|
db := dao.GetDB()
|
||||||
|
if err = dao.GetRows(db, &storeList, sql, sqlParams...); err == nil && len(storeList) == 0 {
|
||||||
|
SaveEbaiStoreInfo(storeId, point[2])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func SaveEbaiStoreInfo(storeId, cityName string) {
|
||||||
|
store, err := api.EbaiAPI.GetStoreInfo(storeId)
|
||||||
|
if err == nil {
|
||||||
|
storeInfo := &model.StoreInfo{
|
||||||
|
VendorID: model.VendorIDEBAI,
|
||||||
|
VendorStoreID: utils.Interface2String(store["shop_id"]),
|
||||||
|
CityName: cityName,
|
||||||
|
}
|
||||||
|
if store["storeIsUnderfind"] == nil {
|
||||||
|
storeInfo.StoreName = utils.Interface2String(store["name"])
|
||||||
|
storeInfo.Address = utils.Interface2String(store["address"])
|
||||||
|
storeInfo.ShopScore = utils.Interface2Float64WithDefault(store["shop_score"], 0)
|
||||||
|
storeInfo.Tel = utils.Interface2String(store["phone"])
|
||||||
|
storeInfo.RecentOrderNum = utils.Int64ToStr(utils.Interface2Int64WithDefault(store["recent_order_num"], 0))
|
||||||
|
storeInfo.SkuCount = utils.Int64ToStr(utils.Interface2Int64WithDefault(store["sku_count"], 0))
|
||||||
|
storeInfo.BusinessType = utils.Interface2String(store["category"])
|
||||||
|
}
|
||||||
|
db := dao.GetDB()
|
||||||
|
dao.CreateEntity(db, storeInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// func GetCityStoreInfo(cityCenters []*CityCenter, i int) {
|
||||||
|
// cityCenter := cityCenters[i]
|
||||||
|
// cityPoints := GetCityPoints(cityCenter.lng, cityCenter.lat)
|
||||||
|
// GetJdCityPointsStores(jxcontext.AdminCtx, cityPoints, true, true)
|
||||||
|
// utils.AfterFuncWithRecover(10*time.Minute, func() {
|
||||||
|
// GetEbaiCityPointsStores(jxcontext.AdminCtx, cityPoints, true, true)
|
||||||
|
// utils.AfterFuncWithRecover(10*time.Minute, func() {
|
||||||
|
// i++
|
||||||
|
// if i < len(cityCenters) {
|
||||||
|
// GetCityStoreInfo(cityCenters, i)
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
// })
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func GetJdCityPointsStores(ctx *jxcontext.Context, cityPoints [][]string, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
|
// if len(cityPoints) > 0 {
|
||||||
|
// task := tasksch.NewParallelTask("misc GetJdCityPointsStores", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
|
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
// // globals.SugarLogger.Debug(batchItemList)
|
||||||
|
// point := batchItemList[0].([]string)
|
||||||
|
// err2 := jd.OnSaveStoreListInfo(point[0], point[1])
|
||||||
|
// if err = err2; err != nil {
|
||||||
|
// globals.SugarLogger.Infof("GetJdCityPointsStores point:%s,%s failed with error:%v", point[0], point[1], err)
|
||||||
|
// }
|
||||||
|
// return nil, err
|
||||||
|
// }, cityPoints)
|
||||||
|
// // globals.SugarLogger.Debug(utils.Format4Output(task, false))
|
||||||
|
// tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
// hint = task.ID
|
||||||
|
// if !isAsync {
|
||||||
|
// _, err = task.GetResult(0)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return hint, err
|
||||||
|
// }
|
||||||
|
|
||||||
|
// func GetEbaiCityPointsStores(ctx *jxcontext.Context, cityPoints [][]string, isAsync, isContinueWhenError bool) (hint string, err error) {
|
||||||
|
// if len(cityPoints) > 0 {
|
||||||
|
// task := tasksch.NewParallelTask("misc GetEbaiCityPointsStores", tasksch.NewParallelConfig().SetIsContinueWhenError(isContinueWhenError), ctx,
|
||||||
|
// func(task *tasksch.ParallelTask, batchItemList []interface{}, params ...interface{}) (retVal interface{}, err error) {
|
||||||
|
// point := batchItemList[0].([]interface{})
|
||||||
|
// err2 := ebai.OnSaveStoreListInfo(point[0].(string), point[1].(string))
|
||||||
|
// if err = err2; err != nil {
|
||||||
|
// globals.SugarLogger.Infof("GetEbaiCityPointsStores point:%s,%s failed with error:%v", point[0].(string), point[1].(string), err)
|
||||||
|
// }
|
||||||
|
// return nil, err
|
||||||
|
// }, cityPoints)
|
||||||
|
// tasksch.HandleTask(task, nil, true).Run()
|
||||||
|
// hint = task.ID
|
||||||
|
// if !isAsync {
|
||||||
|
// _, err = task.GetResult(0)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return hint, err
|
||||||
|
// }
|
||||||
|
|
||||||
|
func GetCityPoints(lng float64, lat float64, cityName string) (cityPoints [][]string) {
|
||||||
|
oneDu := 111319.55
|
||||||
|
for a := 0; a <= 80; a++ {
|
||||||
|
distance := float64(a*2000 - 80000)
|
||||||
|
angle := float64(math.Pi / 2)
|
||||||
|
newLng := strconv.FormatFloat(lng+(distance*math.Sin(angle*math.Pi/180))/(oneDu*math.Cos(lat*math.Pi/180)), 'f', -1, 64)
|
||||||
|
for b := 0; b <= 80; b++ {
|
||||||
|
distance2 := float64(b*2000 - 80000)
|
||||||
|
angle2 := float64(0)
|
||||||
|
newLat := strconv.FormatFloat(lat+(distance2*math.Cos(angle2*math.Pi/180))/oneDu, 'f', -1, 64)
|
||||||
|
point := make([]string, 0)
|
||||||
|
point = append(point, newLng)
|
||||||
|
point = append(point, newLat)
|
||||||
|
point = append(point, cityName)
|
||||||
|
cityPoints = append(cityPoints, point)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return cityPoints
|
||||||
|
}
|
||||||
|
|||||||
21
business/model/store_page.go
Normal file
21
business/model/store_page.go
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
type StoreInfo struct {
|
||||||
|
ID int64 `orm:"column(id)" json:"id"`
|
||||||
|
VendorID int `orm:"column(vendor_id)" json:"vendorID"` // 平台
|
||||||
|
VendorStoreID string `orm:"column(vendor_store_id);size(48)" json:"vendorStoreID"` // 店铺ID
|
||||||
|
CityName string `orm:"size(48)" json:"cityName"` // 店铺所在城市
|
||||||
|
StoreName string `orm:"size(48)" json:"storeName"` // 店铺名称
|
||||||
|
Address string `orm:"size(255)" json:"address"` // 店铺地址
|
||||||
|
ShopScore float64 `json:"shopScore"` // 店铺评分
|
||||||
|
Tel string `orm:"size(48)" json:"tel"` // 店铺电话
|
||||||
|
RecentOrderNum string `orm:"size(48)" json:"recentOrderNum"` // 月订单量
|
||||||
|
SkuCount string `orm:"size(48)" json:"skuCount"` // 商品总量
|
||||||
|
BusinessType string `orm:"size(48)" json:"businessType"` // 经营范围
|
||||||
|
}
|
||||||
|
|
||||||
|
func (o *StoreInfo) TableUnique() [][]string {
|
||||||
|
return [][]string{
|
||||||
|
[]string{"VendorStoreID", "VendorID"},
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -36,6 +36,8 @@ func Init() {
|
|||||||
orm.RegisterModel(&model.Promotion{}, &model.PromotionStore{}, &model.PromotionSku{})
|
orm.RegisterModel(&model.Promotion{}, &model.PromotionStore{}, &model.PromotionSku{})
|
||||||
orm.RegisterModel(&model.AuthBind{}, &model.User{})
|
orm.RegisterModel(&model.AuthBind{}, &model.User{})
|
||||||
|
|
||||||
|
orm.RegisterModel(&model.StoreInfo{})
|
||||||
|
|
||||||
// orm.RegisterModel(&model.ActivityForSku{})
|
// orm.RegisterModel(&model.ActivityForSku{})
|
||||||
// orm.RegisterModel(&legacymodel.JxBadComments2{})
|
// orm.RegisterModel(&legacymodel.JxBadComments2{})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user