Files
jx-callback/controllers/net_spider.go
suyl 5b928a3e39 aa
2021-05-12 17:59:35 +08:00

177 lines
7.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package controllers
import (
"fmt"
"git.rosy.net.cn/jx-callback/business/jxstore/cms"
"sort"
"git.rosy.net.cn/baseapi/utils"
"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/netspider"
"github.com/astaxie/beego/server/web"
)
type NetSpiderController struct {
web.Controller
}
// @Title 从网页拉取平台门店信息
// @Description 从网页拉取平台门店信息
// @Param token header string true "认证token"
// @Param vendorIDs formData string false "厂商ID列表"
// @Param cityCodes formData string false "城市列表,缺省为后台启用了的城市"
// @Param radius formData int false "区域半径市或街道的半径会自动增加或缩小单位为米缺省8000米"
// @Param gridWith formData int false "网格大小单位为米缺省为2000米"
// @Param isShuffle formData bool false "是否将城市列表随机打乱"
// @Param isAsync formData bool false "是否异步"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /GetAndStoreCitiesShops [post]
func (c *NetSpiderController) GetAndStoreCitiesShops() {
c.callGetAndStoreCitiesShops(func(params *tNetspiderGetAndStoreCitiesShopsParams) (retVal interface{}, errCode string, err error) {
var vendorIDs, cityCodes []int
err = jxutils.Strings2Objs(params.VendorIDs, &vendorIDs, params.CityCodes, &cityCodes)
if err == nil {
retVal, err = netspider.GetAndStoreCitiesShops(params.Ctx, vendorIDs, cityCodes, params.Radius, params.GridWith, params.IsShuffle, params.IsAsync)
}
return retVal, "", err
})
}
// @Title 同步商家商品信息
// @Description 同步商家商品信息
// @Param token header string true "认证token"
// @Param offset query int false "列表起始序号以0开始缺省为0"
// @Param pageSize query int false "列表页大小缺省为50-1表示全部"
// @Param keyword query string false "查询关键字(可以为空,为空表示不限制)"
// @Param vendorStoreID query string false "门店号"
// @Param vendorID query int false "平台ID"
// @Param cityCode query int false "城市代码"
// @Param districtCode query int false "行政区代码"
// @Param tel query string false "手机号"
// @Param minShopScore query float64 false "门店分值最小值"
// @Param minRecentOrderNum query int false "最近单量最小值"
// @Param minSkuCount query int false "SKU数量最小值"
// @Param radius query int false "关注点半径(米)"
// @Param lng query string false "关注点经度"
// @Param lat query string false "关注点纬度"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /QueryPageStores [get]
func (c *NetSpiderController) QueryPageStores() {
c.callQueryPageStores(func(params *tNetspiderQueryPageStoresParams) (retVal interface{}, errCode string, err error) {
if params.MapData["vendorID"] == nil {
params.VendorID = -1
}
var lng, lat, lng1, lat1, lng2, lat2 float64
params.Offset = jxutils.FormalizePageOffset(params.Offset)
params.PageSize = jxutils.FormalizePageSize(params.PageSize)
offset := params.Offset
pageSize := params.PageSize
if params.Radius > 0 {
lng = utils.Str2Float64WithDefault(params.Lng, 0)
lat = utils.Str2Float64WithDefault(params.Lat, 0)
if lng == 0 || lat == 0 {
return nil, "", fmt.Errorf("坐标信息%s,%s不合法", params.Lng, params.Lat)
}
lng2, _ = jxutils.ConvertDistanceToLogLat(lng, lat, float64(params.Radius), 90)
_, lat2 = jxutils.ConvertDistanceToLogLat(lng, lat, float64(params.Radius), 0)
lng1 = lng - (lng2 - lng)
lat1 = lat - (lat2 - lat)
offset = 0
pageSize = model.UnlimitedPageSize
}
pagedInfo, err := cms.QueryPageStores2(dao.GetDB(), pageSize, offset, params.Keyword, params.VendorStoreID, params.VendorID,
params.CityCode, params.DistrictCode, params.Tel, float32(params.MinShopScore), params.MinRecentOrderNum, params.MinSkuCount,
lng1, lat1, lng2, lat2)
if err == nil {
if params.Radius > 0 && (params.Offset != 0 || params.PageSize != model.UnlimitedPageSize) {
shopList2, _ := pagedInfo.Data.([]*dao.PageShopWithPlaceName)
var shopList []*dao.PageShopWithPlaceName
pagedInfo.TotalCount = 0
if len(shopList2) > 0 {
for _, v := range shopList2 {
v.Distance = int(jxutils.EarthDistance(v.Lng, v.Lat, lng, lat) * 1000)
if v.Distance < 0 {
v.Distance = 0
}
if v.Distance <= params.Radius {
shopList = append(shopList, v)
}
}
pagedInfo.TotalCount = len(shopList)
if pagedInfo.TotalCount > 0 {
sort.Sort(PageShopList(shopList))
if params.Offset < len(shopList) {
index := params.Offset + params.PageSize
if index > len(shopList) {
index = len(shopList)
}
shopList = shopList[params.Offset:index]
} else {
shopList = nil
}
}
}
pagedInfo.Data = shopList
}
retVal = pagedInfo
}
return retVal, "", err
})
}
type PageShopList []*dao.PageShopWithPlaceName
func (l PageShopList) Len() int {
return len(l)
}
func (l PageShopList) Less(i, j int) bool {
return l[i].Distance < l[j].Distance
}
func (l PageShopList) Swap(i, j int) {
l[i], l[j] = l[j], l[i]
}
// @Title 刷新网页门店信息
// @Description 刷新网页门店信息
// @Param token header string true "认证token"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /RefreshPageShops [post]
func (c *NetSpiderController) RefreshPageShops() {
c.callRefreshPageShops(func(params *tNetspiderRefreshPageShopsParams) (retVal interface{}, errCode string, err error) {
err = netspider.RefreshPageShops(params.Ctx)
return retVal, "", err
})
}
// @Title 参考信息,商品搜索
// @Description 参考信息,商品搜索
// @Param token header string true "认证token"
// @Param vendorID query int false "平台ID"
// @Param vendorStoreIDs query string false "门店ID"
// @Param keyword query string false "关键字"
// @Param cityCode query int false "城市"
// @Param lng query string false "关注点经度"
// @Param lat query string false "关注点纬度"
// @Param radius query int false "半径(米)"
// @Param sortType query int false "1表示销量 正是升序,负是倒序"
// @Param offset query int false "列表起始序号以0开始缺省为0"
// @Param pageSize query int false "列表页大小缺省为50-1表示全部"
// @Success 200 {object} controllers.CallResult
// @Failure 200 {object} controllers.CallResult
// @router /QueryPageSkus [get]
func (c *NetSpiderController) QueryPageSkus() {
c.callQueryPageSkus(func(params *tNetspiderQueryPageSkusParams) (retVal interface{}, errCode string, err error) {
var vendorStoreIDs []string
jxutils.Strings2Objs(params.VendorStoreIDs, &vendorStoreIDs)
retVal, err = cms.QueryPageSkus(params.Ctx, params.VendorID, vendorStoreIDs, params.Keyword, params.CityCode, utils.Str2Float64WithDefault(params.Lng, 0), utils.Str2Float64WithDefault(params.Lat, 0), params.Radius, params.SortType, params.Offset, params.PageSize)
return retVal, "", err
})
}