|
|
@@ -5,64 +5,24 @@ import (
|
|
|
"iot_manager_service/app/operation/edge_service"
|
|
|
"iot_manager_service/app/operation/model"
|
|
|
"iot_manager_service/util/common"
|
|
|
- "sort"
|
|
|
)
|
|
|
|
|
|
// 归属地统计
|
|
|
var CaptureAreaService = new(captureAreaService)
|
|
|
|
|
|
type captureAreaService struct{}
|
|
|
-type tmpCaptureArea struct {
|
|
|
- Name string `json:"name"`
|
|
|
- Value int `json:"value"`
|
|
|
-}
|
|
|
-
|
|
|
-type TypeList struct {
|
|
|
- Name1 string `json:"name1"`
|
|
|
- Name2 string `json:"name2"`
|
|
|
- Name3 string `json:"name3"`
|
|
|
- Name4 string `json:"name4"`
|
|
|
- Name5 string `json:"name5"`
|
|
|
- Name6 string `json:"name6"`
|
|
|
- Name7 string `json:"name7"`
|
|
|
- Name8 string `json:"name8"`
|
|
|
- Name9 string `json:"name9"`
|
|
|
- Name10 string `json:"name10"`
|
|
|
- Value1 int `json:"value1"`
|
|
|
- Value2 int `json:"value2"`
|
|
|
- Value3 int `json:"value3"`
|
|
|
- Value4 int `json:"value4"`
|
|
|
- Value5 int `json:"value5"`
|
|
|
- Value6 int `json:"value6"`
|
|
|
- Value7 int `json:"value7"`
|
|
|
- Value8 int `json:"value8"`
|
|
|
- Value9 int `json:"value9"`
|
|
|
- Value10 int `json:"value10"`
|
|
|
-}
|
|
|
-type tmpCaptureAreas struct {
|
|
|
- tmpCaptureAreasData []tmpCaptureArea
|
|
|
- CountTime string `json:"time"`
|
|
|
- TypeList
|
|
|
-}
|
|
|
-
|
|
|
-type IntSlice []tmpCaptureArea
|
|
|
-
|
|
|
-func (p IntSlice) Len() int { return len(p) }
|
|
|
-func (p IntSlice) Less(i, j int) bool { return p[i].Value < p[j].Value }
|
|
|
-func (p IntSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
|
|
|
|
|
//得到下方前10的详细数据
|
|
|
func (s captureAreaService) GetAreaList(tenantId int, req model.RequestCaptureFilter) (interface{}, error) {
|
|
|
//得到全部数据
|
|
|
- flag, countTimes, list, forData, err := s.getData(tenantId, req)
|
|
|
+ flag, countTimes, forData, err := s.getData(tenantId, req)
|
|
|
//得到排名前10的省或城市
|
|
|
getTop10 := s.getTop10(forData, req.Type)
|
|
|
var topArr []string
|
|
|
for _, area := range getTop10 {
|
|
|
topArr = append(topArr, area.Name)
|
|
|
}
|
|
|
- mdata := make(map[string][]tmpCaptureArea)
|
|
|
- m := map[string]int{}
|
|
|
+ mdata := make(map[string][]model.TmpCapture)
|
|
|
for _, datum := range forData {
|
|
|
time := datum.Time
|
|
|
if flag == 1 {
|
|
|
@@ -72,17 +32,17 @@ func (s captureAreaService) GetAreaList(tenantId int, req model.RequestCaptureFi
|
|
|
if req.Type == 1 {
|
|
|
name = datum.Province
|
|
|
}
|
|
|
- m[name] = datum.Total
|
|
|
- mm := tmpCaptureArea{
|
|
|
+ mm := model.TmpCapture{
|
|
|
Name: name,
|
|
|
- Value: m[name],
|
|
|
+ Value: datum.Total,
|
|
|
}
|
|
|
mdata[time] = append(mdata[time], mm)
|
|
|
}
|
|
|
+ var list []model.TmpCaptures
|
|
|
//fmt.Printf("mdata = %v \n", mdata)
|
|
|
//fmt.Printf("getTop10 = %v \n", getTop10)
|
|
|
for _, countTime := range countTimes {
|
|
|
- var tmpsData []tmpCaptureArea
|
|
|
+ var tmpsData []model.TmpCapture
|
|
|
for _, area := range getTop10 {
|
|
|
value := mdata[countTime]
|
|
|
val := 0
|
|
|
@@ -92,21 +52,20 @@ func (s captureAreaService) GetAreaList(tenantId int, req model.RequestCaptureFi
|
|
|
}
|
|
|
i.Value = 0
|
|
|
}
|
|
|
- tmpsData = append(tmpsData, tmpCaptureArea{
|
|
|
+ tmpsData = append(tmpsData, model.TmpCapture{
|
|
|
Name: area.Name,
|
|
|
Value: val,
|
|
|
})
|
|
|
}
|
|
|
- list = append(list, tmpCaptureAreas{
|
|
|
- CountTime: countTime,
|
|
|
- tmpCaptureAreasData: tmpsData,
|
|
|
+ list = append(list, model.TmpCaptures{
|
|
|
+ CountTime: countTime,
|
|
|
+ TmpCapturesData: tmpsData,
|
|
|
})
|
|
|
-
|
|
|
}
|
|
|
- var list2 []tmpCaptureAreas
|
|
|
+ var list2 []model.TmpCaptures
|
|
|
for _, areas := range list {
|
|
|
- data := s.viewData(areas)
|
|
|
- if len(data.tmpCaptureAreasData) > 0 {
|
|
|
+ data := model.ViewData(areas)
|
|
|
+ if len(data.TmpCapturesData) > 0 {
|
|
|
list2 = append(list2, data)
|
|
|
}
|
|
|
}
|
|
|
@@ -116,8 +75,20 @@ func (s captureAreaService) GetAreaList(tenantId int, req model.RequestCaptureFi
|
|
|
return list2, nil
|
|
|
}
|
|
|
|
|
|
+//前10的地区 和 数量
|
|
|
+func (s captureAreaService) GetAreaTypeList(tenantId int, req model.RequestCaptureFilter) (interface{}, error) {
|
|
|
+ //得到全部数据
|
|
|
+ _, _, forData, err := s.getData(tenantId, req)
|
|
|
+ // 得到排名前10的省或城市
|
|
|
+ getTop10 := s.getTop10(forData, req.Type)
|
|
|
+ var tmp model.TmpCaptures
|
|
|
+ tmp.TmpCapturesData = getTop10
|
|
|
+ data := model.ViewData(tmp)
|
|
|
+ return data, err
|
|
|
+}
|
|
|
+
|
|
|
//得到全部数据
|
|
|
-func (s captureAreaService) getData(tenantId int, req model.RequestCaptureFilter) (int, []string, []tmpCaptureAreas, []edge_service.ForCaptureItsData, error) {
|
|
|
+func (s captureAreaService) getData(tenantId int, req model.RequestCaptureFilter) (int, []string, []edge_service.ForCaptureItsData, error) {
|
|
|
flag := 0
|
|
|
if req.QueryType == "month" {
|
|
|
flag = 1
|
|
|
@@ -135,7 +106,6 @@ func (s captureAreaService) getData(tenantId int, req model.RequestCaptureFilter
|
|
|
} else {
|
|
|
countTimes = common.GetTimeDays(req.StartTime, req.EndTime) //时间范围 天
|
|
|
}
|
|
|
- var list []tmpCaptureAreas
|
|
|
forCaptureIts := edge_service.ForCaptureIts{}
|
|
|
var forData []edge_service.ForCaptureItsData
|
|
|
var err error
|
|
|
@@ -156,63 +126,11 @@ func (s captureAreaService) getData(tenantId int, req model.RequestCaptureFilter
|
|
|
Flag: flag,
|
|
|
})
|
|
|
}
|
|
|
- return flag, countTimes, list, forData, err
|
|
|
-}
|
|
|
-
|
|
|
-//渲染出10个前10的数据
|
|
|
-func (s captureAreaService) viewData(tmp tmpCaptureAreas) tmpCaptureAreas {
|
|
|
- tmpNew := tmp
|
|
|
- for i, datum := range tmpNew.tmpCaptureAreasData {
|
|
|
- switch i + 1 {
|
|
|
- case 1:
|
|
|
- tmpNew.Name1 = datum.Name
|
|
|
- tmpNew.Value1 = datum.Value
|
|
|
- case 2:
|
|
|
- tmpNew.Name2 = datum.Name
|
|
|
- tmpNew.Value2 = datum.Value
|
|
|
- case 3:
|
|
|
- tmpNew.Name3 = datum.Name
|
|
|
- tmpNew.Value3 = datum.Value
|
|
|
- case 4:
|
|
|
- tmpNew.Name4 = datum.Name
|
|
|
- tmpNew.Value4 = datum.Value
|
|
|
- case 5:
|
|
|
- tmpNew.Name5 = datum.Name
|
|
|
- tmpNew.Value5 = datum.Value
|
|
|
- case 6:
|
|
|
- tmpNew.Name6 = datum.Name
|
|
|
- tmpNew.Value6 = datum.Value
|
|
|
- case 7:
|
|
|
- tmpNew.Name7 = datum.Name
|
|
|
- tmpNew.Value7 = datum.Value
|
|
|
- case 8:
|
|
|
- tmpNew.Name8 = datum.Name
|
|
|
- tmpNew.Value8 = datum.Value
|
|
|
- case 9:
|
|
|
- tmpNew.Name9 = datum.Name
|
|
|
- tmpNew.Value9 = datum.Value
|
|
|
- case 10:
|
|
|
- tmpNew.Name10 = datum.Name
|
|
|
- tmpNew.Value10 = datum.Value
|
|
|
- }
|
|
|
- }
|
|
|
- return tmpNew
|
|
|
-}
|
|
|
-
|
|
|
-//前10的地区 和 数量
|
|
|
-func (s captureAreaService) GetAreaTypeList(tenantId int, req model.RequestCaptureFilter) (interface{}, error) {
|
|
|
- //得到全部数据
|
|
|
- _, _, _, forData, err := s.getData(tenantId, req)
|
|
|
- // 得到排名前10的省或城市
|
|
|
- getTop10 := s.getTop10(forData, req.Type)
|
|
|
- var tmp tmpCaptureAreas
|
|
|
- tmp.tmpCaptureAreasData = getTop10
|
|
|
- data := s.viewData(tmp)
|
|
|
- return data, err
|
|
|
+ return flag, countTimes, forData, err
|
|
|
}
|
|
|
|
|
|
//得到 前10
|
|
|
-func (s captureAreaService) getTop10(data []edge_service.ForCaptureItsData, typeInt int) PairList {
|
|
|
+func (s captureAreaService) getTop10(data []edge_service.ForCaptureItsData, typeInt int) model.PairList {
|
|
|
//fmt.Printf("typeInt = %v \n", typeInt)
|
|
|
//fmt.Printf("data = %v \n", data)
|
|
|
topData := make(map[string]int)
|
|
|
@@ -223,40 +141,10 @@ func (s captureAreaService) getTop10(data []edge_service.ForCaptureItsData, type
|
|
|
topData[datum.City] += datum.Total
|
|
|
}
|
|
|
}
|
|
|
- count := rankByWordCount(topData)
|
|
|
+ count := model.RankByWordCount(topData)
|
|
|
//fmt.Printf("count = %v \n", count)
|
|
|
- if len(count) > 0 {
|
|
|
+ if len(count) >= 10 {
|
|
|
count = count[:10]
|
|
|
}
|
|
|
return count
|
|
|
}
|
|
|
-
|
|
|
-//排序功能
|
|
|
-func rankByWordCount(wordFrequencies map[string]int) PairList {
|
|
|
- pl := make(PairList, len(wordFrequencies))
|
|
|
- i := 0
|
|
|
- for k, v := range wordFrequencies {
|
|
|
- pl[i] = tmpCaptureArea{k, v}
|
|
|
- i++
|
|
|
- }
|
|
|
- //从小到大排序
|
|
|
- //sort.Sort(pl)
|
|
|
- //从大到小排序
|
|
|
- sort.Sort(sort.Reverse(pl))
|
|
|
- return pl
|
|
|
-}
|
|
|
-
|
|
|
-type PairList []tmpCaptureArea
|
|
|
-
|
|
|
-func (p PairList) Len() int { return len(p) }
|
|
|
-func (p PairList) Less(i, j int) bool { return p[i].Value < p[j].Value }
|
|
|
-func (p PairList) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
|
|
|
-
|
|
|
-func (c captureAreaService) IsContain(items []string, item string) bool {
|
|
|
- for _, eachItem := range items {
|
|
|
- if eachItem == item {
|
|
|
- return true
|
|
|
- }
|
|
|
- }
|
|
|
- return false
|
|
|
-}
|