Ver Fonte

智慧交流-归属地统计 代码优化

sixian há 2 anos atrás
pai
commit
5efd2f21a2

+ 40 - 0
app/operation/controller/captureController.go

@@ -95,3 +95,43 @@ func (c captureCtl) AreaTypeList(ctx *gin.Context) {
 	}
 	ctx.JSON(http.StatusOK, common.SuccessResponse(common.Succeeded, records))
 }
+
+// VehicleTypeEx 车型 列表 查询
+func (c captureCtl) VehicleTypeEx(ctx *gin.Context) {
+	value, _ := ctx.Get(middleware.Authorization)
+	claims := value.(*middleware.Claims)
+	var req model.RequestCaptureFilter
+	err := ctx.ShouldBindQuery(&req)
+	if err != nil {
+		ctx.JSON(http.StatusOK, err)
+		return
+	}
+	var records interface{}
+	err = nil
+	records, err = service.CaptureVehicleTypeExService.GetVehicleTypeEx(claims.TenantId, req)
+	if err != nil {
+		ctx.JSON(http.StatusOK, err)
+		return
+	}
+	ctx.JSON(http.StatusOK, common.SuccessResponse(common.Succeeded, records))
+}
+
+// 车型 line线图数据
+func (c captureCtl) VehicleTypeList(ctx *gin.Context) {
+	value, _ := ctx.Get(middleware.Authorization)
+	claims := value.(*middleware.Claims)
+	var req model.RequestCaptureFilter
+	err := ctx.ShouldBindQuery(&req)
+	if err != nil {
+		ctx.JSON(http.StatusOK, err)
+		return
+	}
+	var records interface{}
+	err = nil
+	records, err = service.CaptureVehicleTypeExService.GetVehicleTypeList(claims.TenantId, req)
+	if err != nil {
+		ctx.JSON(http.StatusOK, err)
+		return
+	}
+	ctx.JSON(http.StatusOK, common.SuccessResponse(common.Succeeded, records))
+}

+ 6 - 0
app/operation/edge_service/forCaptureItsService.go

@@ -54,6 +54,12 @@ func (f ForCaptureIts) City(reqPostData ForCaptureItsReq) ([]ForCaptureItsData,
 	return f.pubPost(reqPostData, api)
 }
 
+// Vehicletypeex 车型统计
+func (f ForCaptureIts) Vehicletypeex(reqPostData ForCaptureItsReq) ([]ForCaptureItsData, error) {
+	api := "/data/v1/its/vehicletypeex"
+	return f.pubPost(reqPostData, api)
+}
+
 //公用 post请求
 func (f ForCaptureIts) pubPost(reqPostData ForCaptureItsReq, api string) ([]ForCaptureItsData, error) {
 	cfg := config.Instance()

+ 116 - 0
app/operation/model/capture.go

@@ -1,5 +1,7 @@
 package model
 
+import "sort"
+
 type RequestCaptureFilter struct {
 	StartTime string `form:"queryStartDate"`
 	EndTime   string `form:"queryEndDate"`
@@ -18,3 +20,117 @@ type ResponseCaptureSuggestSpeed struct {
 	CaptureDirection int    `json:"captureDirection"` //方向
 	WayName          string `json:"wayName"`          //名称
 }
+
+type TmpCapture 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"`
+	Name11  string `json:"name11"`
+	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"`
+	Value11 int    `json:"value11"`
+}
+type TmpCaptures struct {
+	TmpCapturesData []TmpCapture
+	CountTime       string `json:"time"`
+	TypeList
+}
+
+type IntSlice []TmpCapture
+
+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个前10的数据
+func ViewData(tmp TmpCaptures) TmpCaptures {
+	tmpNew := tmp
+	for i, datum := range tmpNew.TmpCapturesData {
+		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
+		case 11:
+			tmpNew.Name11 = datum.Name
+			tmpNew.Value11 = datum.Value
+		}
+	}
+	return tmpNew
+}
+
+//排序功能
+func RankByWordCount(wordFrequencies map[string]int) PairList {
+	pl := make(PairList, len(wordFrequencies))
+	i := 0
+	for k, v := range wordFrequencies {
+		pl[i] = TmpCapture{k, v}
+		i++
+	}
+	//从小到大排序
+	//sort.Sort(pl)
+	//从大到小排序
+	sort.Sort(sort.Reverse(pl))
+	return pl
+}
+
+type PairList []TmpCapture
+
+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 IsContain(items []string, item string) bool {
+	for _, eachItem := range items {
+		if eachItem == item {
+			return true
+		}
+	}
+	return false
+}

+ 30 - 142
app/operation/service/captureAreaService.go

@@ -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
-}

+ 2 - 0
router/router.go

@@ -613,6 +613,8 @@ func InitRouter(engine *gin.Engine) {
 		captureGroup.POST("speed/getSuggestSpeed", operation.Capture.SuggestSpeed)
 		captureGroup.GET("affiliation/list", operation.Capture.AreaList)
 		captureGroup.GET("affiliation/type-list", operation.Capture.AreaTypeList)
+		captureGroup.GET("model/list", operation.Capture.VehicleTypeEx)
+		captureGroup.GET("model/type-list", operation.Capture.VehicleTypeList)
 	}
 
 }