-
Notifications
You must be signed in to change notification settings - Fork 0
/
map_find.go
122 lines (118 loc) · 4.14 KB
/
map_find.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
package OrgMap
import (
"errors"
MapMathConversion "github.com/fotomxq/weeekj_core/v5/map/math/conversion"
Router2SystemConfig "github.com/fotomxq/weeekj_core/v5/router2/system_config"
)
// ArgsFindMapByArea 查询GPS附件的商户信息列参数
type ArgsFindMapByArea struct {
//所属国家 国家代码
// eg: china => 86
Country int `db:"country" json:"country"`
//省份 编码
// eg: 710000
Province int `db:"province" json:"province"`
//所属城市
City int `db:"city" json:"city"`
//地图制式
// 0 WGS-84 / 1 GCJ-02 / 2 BD-09
MapType int `db:"map_type" json:"mapType"`
//中心点
Longitude float64 `db:"longitude" json:"longitude"`
Latitude float64 `db:"latitude" json:"latitude"`
//半径
Radius float64 `db:"radius" json:"radius"`
//是否包含不可点击的广告数据
// 0 不包含 / 1 包含
IncludeDisable int `db:"include_disable" json:"includeDisable"`
//搜索
Search string `json:"search" check:"search" empty:"true"`
}
// FindMapByArea 查询GPS附件的商户信息列
func FindMapByArea(args *ArgsFindMapByArea) (dataList []FieldsMap, err error) {
for k := 0; k < 3; k++ {
var result []MapMathConversion.ArgsConversionGPS
result, err = MapMathConversion.ConversionMapTypeInt(&MapMathConversion.ArgsConversionMapTypeInt{
SrcType: args.MapType,
DestType: k,
Data: []MapMathConversion.ArgsConversionGPS{
{
Longitude: args.Longitude,
Latitude: args.Latitude,
},
},
})
if err != nil {
return
}
longitudeMin := result[0].Longitude - args.Radius
longitudeMax := result[0].Longitude + args.Radius
latitudeMin := result[0].Latitude - args.Radius
latitudeMax := result[0].Latitude + args.Radius
var resultDataList []FieldsMap
err = Router2SystemConfig.MainDB.Select(&resultDataList, "SELECT id FROM org_map WHERE delete_at < to_timestamp(1000000) AND audit_at > to_timestamp(1000000) AND country = $1 AND province = $2 AND city = $3 AND map_type = $4 AND longitude >= $5 AND longitude <= $6 AND latitude >= $7 AND latitude <= $8 AND (($9 = 1 AND ad_count < ad_count_limit) OR $9 = 0) AND parent_id = 0 AND (name ILIKE '%' || $10 || '%' OR des ILIKE '%' || $10 || '%') LIMIT 100", args.Country, args.Province, args.City, k, longitudeMin, longitudeMax, latitudeMin, latitudeMax, args.IncludeDisable, args.Search)
if err != nil {
err = nil
continue
}
if len(resultDataList) < 1 {
continue
}
for _, v := range resultDataList {
vData := getMapByID(v.ID)
if vData.ID < 1 {
continue
}
dataList = append(dataList, vData)
}
}
if len(dataList) < 1 {
err = errors.New("no data")
return
}
return
}
// FindMapByAreaV2 FindMapByArea 查询GPS附件的商户信息列
func FindMapByAreaV2(args *ArgsFindMapByArea) (dataList []FieldsMap, err error) {
for k := 0; k < 3; k++ {
var result []MapMathConversion.ArgsConversionGPS
result, err = MapMathConversion.ConversionMapTypeInt(&MapMathConversion.ArgsConversionMapTypeInt{
SrcType: args.MapType,
DestType: k,
Data: []MapMathConversion.ArgsConversionGPS{
{
Longitude: args.Longitude,
Latitude: args.Latitude,
},
},
})
if err != nil {
return
}
longitudeMin := result[0].Longitude - args.Radius
longitudeMax := result[0].Longitude + args.Radius
latitudeMin := result[0].Latitude - args.Radius
latitudeMax := result[0].Latitude + args.Radius
var resultDataList []FieldsMap
err = Router2SystemConfig.MainDB.Select(&resultDataList, "SELECT id FROM org_map WHERE delete_at < to_timestamp(1000000) AND audit_at > to_timestamp(1000000) AND country = $1 AND province = $2 AND city = $3 AND map_type = $4 AND longitude >= $5 AND longitude <= $6 AND latitude >= $7 AND latitude <= $8 AND parent_id = 0 AND (name ILIKE '%' || $9 || '%' OR des ILIKE '%' || $9 || '%') LIMIT 100", args.Country, args.Province, args.City, k, longitudeMin, longitudeMax, latitudeMin, latitudeMax, args.Search)
if err != nil {
err = nil
continue
}
if len(resultDataList) < 1 {
continue
}
for _, v := range resultDataList {
vData := getMapByID(v.ID)
if vData.ID < 1 {
continue
}
dataList = append(dataList, vData)
}
}
if len(dataList) < 1 {
err = errors.New("no data")
return
}
return
}