package service import ( "iot_manager_service/app/device/dao" "iot_manager_service/app/operation/edge_service" "iot_manager_service/app/operation/model" "iot_manager_service/util/common" ) // 归属地统计 var CaptureAreaService = new(captureAreaService) type captureAreaService struct{} //得到下方前10的详细数据 func (s captureAreaService) GetAreaList(tenantId int, req model.RequestCaptureFilter) (interface{}, error) { //得到全部数据 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][]model.TmpCapture) for _, datum := range forData { time := datum.Time if flag == 1 { time += "-01" } name := datum.City if req.Type == 1 { name = datum.Province } mm := model.TmpCapture{ Name: 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 []model.TmpCapture for _, area := range getTop10 { value := mdata[countTime] val := 0 for _, i := range value { if area.Name == i.Name { val += i.Value } i.Value = 0 } tmpsData = append(tmpsData, model.TmpCapture{ Name: area.Name, Value: val, }) } list = append(list, model.TmpCaptures{ CountTime: countTime, TmpCapturesData: tmpsData, }) } var list2 []model.TmpCaptures for _, areas := range list { data := model.ViewData(areas) if len(data.TmpCapturesData) > 0 { list2 = append(list2, data) } } if err != nil { return nil, err } 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, []edge_service.ForCaptureItsData, error) { flag := 0 if req.QueryType == "month" { flag = 1 } unit := dao.CaptureUnit{ TenantId: tenantId, ID: req.CaptureId, } unit.GetDevice() var codes []string codes = append(codes, unit.CaptureSn) var countTimes []string if flag == 1 { countTimes = common.GetTimeMonths(req.StartTime, req.EndTime) //时间范围 月 } else { countTimes = common.GetTimeDays(req.StartTime, req.EndTime) //时间范围 天 } forCaptureIts := edge_service.ForCaptureIts{} var forData []edge_service.ForCaptureItsData var err error if req.Type == 1 { //按省 forData, err = forCaptureIts.Province(edge_service.ForCaptureItsReq{ Codes: codes, Start: req.StartTime, End: req.EndTime, Flag: flag, }) } else { //按城市 forData, err = forCaptureIts.City(edge_service.ForCaptureItsReq{ Codes: codes, Start: req.StartTime, End: req.EndTime, Flag: flag, }) } return flag, countTimes, forData, err } //得到 前10 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) for _, datum := range data { if typeInt == 1 { topData[datum.Province] += datum.Total } else { topData[datum.City] += datum.Total } } count := model.RankByWordCount(topData) //fmt.Printf("count = %v \n", count) if len(count) >= 10 { count = count[:10] } return count }