package common import ( "git.rosy.net.cn/jx-callback/business/model" ) type Store4User struct { model.ModelIDCULD OriginalName string `orm:"-" json:"originalName"` Name string `orm:"size(255)" json:"name"` OpenTime1 int16 `json:"openTime1"` // 930就表示9点半,用两个的原因是为了支持中午休息,1与2的时间段不能交叉,为0表示没有 CloseTime1 int16 `json:"closeTime1"` // 格式同上 OpenTime2 int16 `json:"openTime2"` // 格式同上 CloseTime2 int16 `json:"closeTime2"` // 格式同上 Status int `json:"status"` CityCode int `orm:"default(0);null" json:"cityCode"` // todo ? DistrictCode int `orm:"default(0);null" json:"districtCode"` // todo ? Address string `orm:"size(255)" json:"address"` Tel1 string `orm:"size(32);index" json:"tel1"` Tel2 string `orm:"size(32);index" json:"tel2"` Lng int `json:"-"` // 乘了10的6次方 Lat int `json:"-"` // 乘了10的6次方 DeliveryRangeType int8 `json:"-"` // 参见相关常量定义 DeliveryRange string `orm:"type(text)" json:"-"` // 如果DeliveryRangeType为DeliveryRangeTypePolygon,则为逗号分隔坐标,分号分隔的坐标点(坐标与Lng和Lat一样,都是整数),比如 121361504,31189308;121420555,31150238。否则为半径,单位为米 FloatLng float64 `json:"lng"` FloatLat float64 `json:"lat"` CityName string `json:"cityName"` DistrictName string `json:"districtName"` Distance int `json:"distance"` WalkDistance int `json:"walkDistance"` } type Store4UserList []*Store4User func (x Store4UserList) Len() int { return len(x) } func (x Store4UserList) Less(i, j int) bool { if x[i].Status != x[j].Status { return x[i].Status > x[j].Status } if x[i].WalkDistance != x[j].WalkDistance { return x[i].WalkDistance < x[j].WalkDistance } return x[i].Distance < x[j].Distance } func (x Store4UserList) Swap(i, j int) { x[i], x[j] = x[j], x[i] } // //func GetNearSupplyGoodsStoreByStoreID(ctx *jxcontext.Context, storeID int) (store *model.Store, err error) { // var ( // stores []*model.Store // db = dao.GetDB() // ) // store2, _ := dao.GetStoreDetail(db, storeID, model.VendorIDJX) // if store2 == nil { // return nil, fmt.Errorf("该门店未绑定京西平台!storeID: %v", storeID) // } // if store2.IsSupplyGoods == model.YES { // return nil, fmt.Errorf("该门店已经是货源门店,无法从其他货源门店进货!storeID: %v", storeID) // } // sql := ` // SELECT a.* // FROM store a // JOIN store_map b ON b.store_id = a.id // JOIN store c ON c.city_code = a.city_code AND c.id = ? // WHERE a.deleted_at = ? // AND b.deleted_at = ? // AND b.vendor_id = ? // AND b.is_supply_goods = ? // AND a.status = ? // ` // sqlParams := []interface{}{ // storeID, // utils.DefaultTimeValue, utils.DefaultTimeValue, // model.VendorIDJX, model.YES, model.StoreStatusOpened, // } // err = dao.GetRows(db, &stores, sql, sqlParams) // if len(stores) > 0 { // realDistance := float64(0) // for _, v := range stores { // distance := jxutils.EarthDistance(jxutils.IntCoordinate2Standard(v.Lng), jxutils.IntCoordinate2Standard(v.Lat), jxutils.IntCoordinate2Standard(store2.Lng), jxutils.IntCoordinate2Standard(store2.Lat)) // if realDistance == 0 { // realDistance = distance // store = v // } else { // if realDistance > distance { // realDistance = distance // store = v // } // } // } // } // return store, err //} // //func GetStoreListByLocation(ctx *jxcontext.Context, lng, lat float64, maxRadius int, needWalkDistance, isJds bool) (storeList []*Store4User, err error) { // const ( // maxStoreCount4User = 5 // ) // // var ( // sql string // sqlParams []interface{} // ) // // lng2, _ := jxutils.ConvertDistanceToLogLat(lng, lat, float64(maxRadius), 90) // _, lat2 := jxutils.ConvertDistanceToLogLat(lng, lat, float64(maxRadius), 0) // lng1 := lng - (lng2 - lng) // lat1 := lat - (lat2 - lat) // // globals.SugarLogger.Debugf("%f,%f,%f,%f\n", lng1, lng2, lat1, lat2) // if !isJds { // sql = ` // SELECT t1.*, // city.name city_name // FROM store t1 // JOIN place city ON city.code = t1.city_code // JOIN store_map sm ON sm.store_id = t1.id AND sm.vendor_id = ? AND sm.deleted_at = ? AND sm.status <> ? // WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ? // AND sm.is_order <> ? // AND t1.id <> ? // ORDER BY t1.id // ` // sqlParams = []interface{}{ // model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled, // utils.DefaultTimeValue, model.StoreStatusDisabled, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2), // model.YES, // model.MatterStoreID, // } // } else { // sql = ` // SELECT t1.*, // city.name city_name // FROM store t1 // JOIN place city ON city.code = t1.city_code // JOIN store_map sm ON sm.store_id = t1.id AND sm.vendor_id = ? AND sm.deleted_at = ? AND sm.status = ? // WHERE t1.deleted_at = ? AND t1.status = ? AND t1.lng > ? AND t1.lng < ? AND t1.lat > ? AND t1.lat < ? // AND sm.is_order <> ? // AND t1.id <> ? // ORDER BY t1.id // ` // sqlParams = []interface{}{ // model.VendorIDJDShop, utils.DefaultTimeValue, model.StoreStatusOpened, // utils.DefaultTimeValue, model.StoreStatusOpened, jxutils.StandardCoordinate2Int(lng1), jxutils.StandardCoordinate2Int(lng2), jxutils.StandardCoordinate2Int(lat1), jxutils.StandardCoordinate2Int(lat2), // model.YES, // model.MatterStoreID, // } // } // var storeList1 []*Store4User // if err = dao.GetRows(dao.GetDB(), &storeList1, sql, sqlParams...); err == nil { // var storeList2 []*Store4User // for _, v := range storeList1 { // distance := jxutils.Point2StoreDistance(lng, lat, v.Lng, v.Lat, v.DeliveryRangeType, v.DeliveryRange) // if distance > 0 || (lng == jxutils.IntCoordinate2Standard(v.Lng) && lat == jxutils.IntCoordinate2Standard(v.Lat)) { // v.Distance = distance // storeList2 = append(storeList2, v) // } // } // // // 为了审核用 // if len(storeList2) == 0 { // sql2 := ` // SELECT t1.*, // city.name city_name // FROM store t1 // JOIN place city ON city.code = t1.city_code // WHERE t1.deleted_at = ? AND t1.status <> ? AND t1.id = ? // ` // sqlParams2 := []interface{}{ // // model.VendorIDJX, utils.DefaultTimeValue, model.StoreStatusDisabled, // utils.DefaultTimeValue, // model.StoreStatusDisabled, // // jxutils.StandardCoordinate2Int(0), // // jxutils.StandardCoordinate2Int(10000), // // jxutils.StandardCoordinate2Int(0), // // jxutils.StandardCoordinate2Int(10000), // // model.YES, // 102919, //商城模板店 // } // dao.GetRows(dao.GetDB(), &storeList2, sql2, sqlParams2...) // // if len(storeList2) > 1 { // // storeList2 = storeList2[:1] // // } // } // // // 如果要求以步行距离来算 // if needWalkDistance { // var coordList []*autonavi.Coordinate // for _, v := range storeList2 { // coordList = append(coordList, &autonavi.Coordinate{ // Lng: v.FloatLng, // Lat: v.FloatLat, // }) // } // if distanceList, err2 := api.AutonaviAPI.BatchWalkingDistance(lng, lat, coordList); err2 == nil { // for k, v := range storeList2 { // v.WalkDistance = int(distanceList[k]) // } // } else { // return nil, err2 // } // } // // sort.Sort(Store4UserList(storeList2)) // storeList = storeList2 // if len(storeList) > maxStoreCount4User { // storeList = storeList[:maxStoreCount4User] // } // } // return storeList, err //}