package controllers import ( "fmt" "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" ) type NetSpiderController struct { beego.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 orgCode query string false "连锁品牌名" // @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 := dao.QueryPageStores(dao.GetDB(), pageSize, offset, params.Keyword, params.VendorStoreID, params.VendorID, params.OrgCode, 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 }) }