package customChartesing import ( "appPlatform/api/version1/customerform" "appPlatform/overall/publicmethod" "fmt" "strconv" "time" ) /* * @ 作者: 秦东 @ 时间: 2025-07-23 09:39:25 @ 功能: 指标数据处理 */ func (c *ChartInfo) TargetChart(val interface{}, untis []customerform.MasterStruct, chartType string) (snedMap interface{}) { for _, v := range c.XAxis { // fmt.Printf("\n\nc.X ===1==> %v =====> %v\n\n", v.Type, v) switch v.Type { case 3: snedMap = c.TargetTimeDataAnaly(v, c.YAxis, val, chartType) default: snedMap = c.TargetDataAnaly(v, c.YAxis, val, chartType, untis) } } return } /* * @ 作者: 秦东 @ 时间: 2025-07-23 10:19:15 @ 功能: 指标时间维度计算 */ func (c *ChartInfo) TargetTimeDataAnaly(x XAxisInfo, y []YAxisInfo, val interface{}, chartType string) (charData []TargetInfo) { tayTime := time.Now().Unix() switch x.TimeType { case "year": yearVal := publicmethod.UnixTimeToDay(tayTime, 16) startTime := publicmethod.DateToTimeStampOld(fmt.Sprintf("%v-01-01 00:00:00", yearVal)) endTime := publicmethod.DateToTimeStampOld(fmt.Sprintf("%v-12-31 23:59:59", yearVal)) var newVal []map[string]interface{} if yVal, isOk := val.([]map[string]interface{}); isOk { for _, mv := range yVal { if xVal, isOk := mv[x.Field]; isOk { pageTime, _ := publicmethod.StringToInt64(xVal) if publicmethod.GetIntLength(pageTime) >= 13 { startTime = startTime * 1000 endTime = endTime * 1000 } if startTime <= pageTime && pageTime <= endTime { newVal = append(newVal, mv) } } } } var charInfo TargetInfo charInfo.Title = fmt.Sprintf("%v年", yearVal) charInfo.AnalyRadarDataTime(y, newVal) charData = append(charData, charInfo) case "day": yearVal := int(time.Now().Year()) tayTime := int(time.Now().Month()) dayTime := int(time.Now().Day()) for i := 1; i <= tayTime; i++ { for j := 1; j <= dayTime; j++ { var charInfo TargetInfo charInfo.Title = fmt.Sprintf("%v年%v月%v日", yearVal, i, j) createTime := fmt.Sprintf("%v-%v-%v 00:00:00", yearVal, i, j) if i < 10 { if j < 10 { createTime = fmt.Sprintf("%v-0%v-0%v 00:00:00", yearVal, i, j) } else { createTime = fmt.Sprintf("%v-0%v-%v 00:00:00", yearVal, i, j) } } else { if j < 10 { createTime = fmt.Sprintf("%v-%v-0%v 00:00:00", yearVal, i, j) } else { createTime = fmt.Sprintf("%v-%v-%v 00:00:00", yearVal, i, j) } } tayTime := publicmethod.DateToTimeStampOld(createTime) startTime, endTime := publicmethod.TimeUnixDayStartAndEnd(tayTime) var newVal []map[string]interface{} if yVal, isOk := val.([]map[string]interface{}); isOk { for _, mv := range yVal { if xVal, isOk := mv[x.Field]; isOk { pageTime, _ := publicmethod.StringToInt64(xVal) if publicmethod.GetIntLength(pageTime) >= 13 { startTime = startTime * 1000 endTime = endTime * 1000 } if startTime <= pageTime && pageTime <= endTime { newVal = append(newVal, mv) } } } } charInfo.AnalyRadarDataTime(y, newVal) charData = append(charData, charInfo) } } case "hour": tayTime := time.Now().Unix() ymdhVal := publicmethod.UnixTimeToDay(tayTime, 14) for i := 0; i <= 23; i++ { createTime := fmt.Sprintf("%v %v:00:00", ymdhVal, i) if i < 10 { createTime = fmt.Sprintf("%v 0%v:00:00", ymdhVal, i) } tayTime := publicmethod.DateToTimeStampOld(createTime) startTime, endTime := publicmethod.TimeUnixDayStartAndEnd(tayTime) var newVal []map[string]interface{} if yVal, isOk := val.([]map[string]interface{}); isOk { for _, mv := range yVal { if xVal, isOk := mv[x.Field]; isOk { pageTime, _ := publicmethod.StringToInt64(xVal) if publicmethod.GetIntLength(pageTime) >= 13 { startTime = startTime * 1000 endTime = endTime * 1000 } if startTime <= pageTime && pageTime <= endTime { newVal = append(newVal, mv) } } } } var charInfo TargetInfo charInfo.Title = fmt.Sprintf("%v %v", ymdhVal, i) charInfo.AnalyRadarDataTime(y, newVal) charData = append(charData, charInfo) } case "minute": tayTime := time.Now().Unix() ymdhVal := publicmethod.UnixTimeToDay(tayTime, 13) for i := 0; i <= 60; i++ { createTime := fmt.Sprintf("%v %v:00", ymdhVal, i) if i < 10 { createTime = fmt.Sprintf("%v 0%v:00", ymdhVal, i) } tayTime := publicmethod.DateToTimeStampOld(createTime) startTime, endTime := publicmethod.TimeUnixDayStartAndEnd(tayTime) var newVal []map[string]interface{} if yVal, isOk := val.([]map[string]interface{}); isOk { for _, mv := range yVal { if xVal, isOk := mv[x.Field]; isOk { pageTime, _ := publicmethod.StringToInt64(xVal) if publicmethod.GetIntLength(pageTime) >= 13 { startTime = startTime * 1000 endTime = endTime * 1000 } if startTime <= pageTime && pageTime <= endTime { newVal = append(newVal, mv) } } } } var charInfo TargetInfo charInfo.Title = fmt.Sprintf("%v :%v", ymdhVal, i) charInfo.AnalyRadarDataTime(y, newVal) charData = append(charData, charInfo) } case "second": tayTime := time.Now().Unix() ymdhVal := publicmethod.UnixTimeToDay(tayTime, 12) for i := 0; i <= 60; i++ { createTime := fmt.Sprintf("%v %v", ymdhVal, i) if i < 10 { createTime = fmt.Sprintf("%v 0%v", ymdhVal, i) } tayTime := publicmethod.DateToTimeStampOld(createTime) startTime, endTime := publicmethod.TimeUnixDayStartAndEnd(tayTime) var newVal []map[string]interface{} if yVal, isOk := val.([]map[string]interface{}); isOk { for _, mv := range yVal { if xVal, isOk := mv[x.Field]; isOk { pageTime, _ := publicmethod.StringToInt64(xVal) if publicmethod.GetIntLength(pageTime) >= 13 { startTime = startTime * 1000 endTime = endTime * 1000 } if startTime <= pageTime && pageTime <= endTime { newVal = append(newVal, mv) } } } } var charInfo TargetInfo charInfo.Title = fmt.Sprintf("%v :%v", ymdhVal, i) charInfo.AnalyRadarDataTime(y, newVal) charData = append(charData, charInfo) } case "ymdhms": tayTime := time.Now().Unix() ymdhVal := publicmethod.UnixTimeToDay(tayTime, 12) for i := 0; i <= 60; i++ { createTime := fmt.Sprintf("%v %v", ymdhVal, i) if i < 10 { createTime = fmt.Sprintf("%v 0%v", ymdhVal, i) } tayTime := publicmethod.DateToTimeStampOld(createTime) startTime, endTime := publicmethod.TimeUnixDayStartAndEnd(tayTime) var newVal []map[string]interface{} if yVal, isOk := val.([]map[string]interface{}); isOk { for _, mv := range yVal { if xVal, isOk := mv[x.Field]; isOk { pageTime, _ := publicmethod.StringToInt64(xVal) if publicmethod.GetIntLength(pageTime) >= 13 { startTime = startTime * 1000 endTime = endTime * 1000 } if startTime <= pageTime && pageTime <= endTime { newVal = append(newVal, mv) } } } } var charInfo TargetInfo charInfo.Title = fmt.Sprintf("%v :%v", ymdhVal, i) charInfo.AnalyRadarDataTime(y, newVal) charData = append(charData, charInfo) } default: yearVal := publicmethod.UnixTimeToDay(tayTime, 16) yearValInt, _ := strconv.Atoi(yearVal) tayMonthTime := int(time.Now().Month()) for i := 1; i <= tayMonthTime; i++ { var charInfo TargetInfo createTime := fmt.Sprintf("%v-%v-01 00:00:00", yearVal, i) if i < 10 { createTime = fmt.Sprintf("%v-0%v-01 00:00:00", yearVal, i) } charInfo.Title = fmt.Sprintf("%v年%v月", yearVal, i) startTime := publicmethod.DateToTimeStampOld(createTime) endTime := publicmethod.GetDaysInMonth(yearValInt, i) var newVal []map[string]interface{} if yVal, isOk := val.([]map[string]interface{}); isOk { for _, mv := range yVal { if xVal, isOk := mv[x.Field]; isOk { pageTime, _ := publicmethod.StringToInt64(xVal) if publicmethod.GetIntLength(pageTime) >= 13 { startTime = startTime * 1000 endTime.AllTime = endTime.AllTime * 1000 } if startTime <= pageTime && pageTime <= endTime.AllTime { newVal = append(newVal, mv) } } } } charInfo.AnalyRadarDataTime(y, newVal) charData = append(charData, charInfo) } } return } /* * @ 作者: 秦东 @ 时间: 2025-07-22 11:22:34 @ 功能: 解析雷达数据 #xField x轴设定 w # y Y轴设定 # val 查询到的值 #chartType 图标类型 1:求和;2:平均值;3:计数;4:去重计数;5:最大值;6:最小值 当字段为时间类型时. 1:自动(原始值);2:整数;3:保留1位小数;4:保留2位小数;5:百分比;6:百分比1位小数;7:百分比2位小数; */ func (t *TargetInfo) AnalyRadarDataTime(y []YAxisInfo, val interface{}) { for _, v := range y { switch v.Method { case 2: t.TimeAverageValuees(v, val, v.Format) case 3: t.TimeStatisticalQuantityes(v, val, v.Format) case 4: t.TimeRemoveDuplicateCountss(v, val, v.Format) case 5: t.TimemaxDataes(v, val, v.Format) case 6: t.TimeminDataes(v, val, v.Format) default: t.TimesumDataes(v, val, v.Format) } } } // 平均值 func (t *TargetInfo) TimeAverageValuees(y YAxisInfo, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle jibuqi := 1 for _, mv := range yVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { sumVal = sumVal + minVal jibuqi++ } } } if jibuqi > 0 { sumValAvg := sumVal / float64(jibuqi) lianHua.Value = publicmethod.DataChuli(sumValAvg, format) t.List = append(t.List, lianHua) } else { lianHua.Value = 0 t.List = append(t.List, lianHua) } } } // 计数 func (t *TargetInfo) TimeStatisticalQuantityes(y YAxisInfo, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal []float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { sumVal = append(sumVal, minVal) } } } lianHua.Value = len(sumVal) t.List = append(t.List, lianHua) } } // 去重计数 func (t *TargetInfo) TimeRemoveDuplicateCountss(y YAxisInfo, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal []float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { if !publicmethod.IsInTrue[float64](minVal, sumVal) { sumVal = append(sumVal, minVal) } } } } lianHua.Value = len(sumVal) t.List = append(t.List, lianHua) } } // 最大值 func (t *TargetInfo) TimemaxDataes(y YAxisInfo, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { if sumVal <= minVal { sumVal = minVal } } } } lianHua.Value = publicmethod.DataChuli(sumVal, format) t.List = append(t.List, lianHua) } } // 最小值 func (t *TargetInfo) TimeminDataes(y YAxisInfo, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { if sumVal >= minVal { sumVal = minVal } } } } lianHua.Value = publicmethod.DataChuli(sumVal, format) t.List = append(t.List, lianHua) } } // 求和 func (t *TargetInfo) TimesumDataes(y YAxisInfo, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { sumVal = sumVal + minVal } } } lianHua.Value = publicmethod.DataChuli(sumVal, format) t.List = append(t.List, lianHua) } } /* * @ 作者: 秦东 @ 时间: 2025-07-23 09:41:50 @ 功能: 指标普通维度计算 */ func (c *ChartInfo) TargetDataAnaly(x XAxisInfo, y []YAxisInfo, val interface{}, chartType string, untis []customerform.MasterStruct) (charData []TargetInfo) { var timeList []string //根据维度分组 if yVal, isOk := val.([]map[string]interface{}); isOk { for _, mv := range yVal { if xVal, isOk := mv[x.Field]; isOk { // fmt.Printf("人员--->%v\n\n", xVal) pageTime := publicmethod.TypeToInterface(xVal) if !publicmethod.IsInTrue[string](pageTime, timeList) { timeList = append(timeList, pageTime) } } } } for _, v := range timeList { var charInfo TargetInfo pickName := DimensionToChinaName(x.Field, v, untis) charInfo.Title = pickName charInfo.AnalyRadarData(x.Field, v, y, val) charData = append(charData, charInfo) } return } /* * @ 作者: 秦东 @ 时间: 2025-07-22 11:22:34 @ 功能: 解析雷达数据 #xField x轴设定 w # y Y轴设定 # val 查询到的值 #chartType 图标类型 1:求和;2:平均值;3:计数;4:去重计数;5:最大值;6:最小值 当字段为时间类型时. 1:自动(原始值);2:整数;3:保留1位小数;4:保留2位小数;5:百分比;6:百分比1位小数;7:百分比2位小数; */ func (t *TargetInfo) AnalyRadarData(xField, xVal string, y []YAxisInfo, val interface{}) { for _, v := range y { switch v.Method { case 2: t.AverageValuees(v, xField, xVal, val, v.Format) case 3: t.StatisticalQuantityes(v, xField, xVal, val, v.Format) case 4: t.RemoveDuplicateCountss(v, xField, xVal, val, v.Format) case 5: t.maxDataes(v, xField, xVal, val, v.Format) case 6: t.minDataes(v, xField, xVal, val, v.Format) default: t.sumDataes(v, xField, xVal, val, v.Format) } } } // 平均值 func (t *TargetInfo) AverageValuees(y YAxisInfo, xField, xVal string, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle jibuqi := 1 for _, mv := range yVal { if xVal, isOk := mv[xField]; isOk { xValStr := publicmethod.TypeToInterface(xVal) if xValStr == xVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { sumVal = sumVal + minVal jibuqi++ } } } } } sumValAvg := sumVal / float64(jibuqi) lianHua.Value = publicmethod.DataChuli(sumValAvg, format) t.List = append(t.List, lianHua) } } // 计数 func (t *TargetInfo) StatisticalQuantityes(y YAxisInfo, xField, xVal string, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal []float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if xValx, isOk := mv[xField]; isOk { xValStr := publicmethod.TypeToInterface(xValx) if xValStr == xVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { sumVal = append(sumVal, minVal) } } } } } lianHua.Value = len(sumVal) t.List = append(t.List, lianHua) } } // 去重计数 func (t *TargetInfo) RemoveDuplicateCountss(y YAxisInfo, xField, xVal string, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal []float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if xValx, isOk := mv[xField]; isOk { xValStr := publicmethod.TypeToInterface(xValx) if xValStr == xVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { if !publicmethod.IsInTrue[float64](minVal, sumVal) { sumVal = append(sumVal, minVal) } } } } } } lianHua.Value = len(sumVal) t.List = append(t.List, lianHua) } } // 最大值 func (t *TargetInfo) maxDataes(y YAxisInfo, xField, xVal string, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if xValx, isOk := mv[xField]; isOk { xValStr := publicmethod.TypeToInterface(xValx) if xValStr == xVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { if sumVal <= minVal { sumVal = minVal } } } } } } lianHua.Value = publicmethod.DataChuli(sumVal, format) t.List = append(t.List, lianHua) } } // 最小值 func (t *TargetInfo) minDataes(y YAxisInfo, xField, xVal string, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if xValx, isOk := mv[xField]; isOk { xValStr := publicmethod.TypeToInterface(xValx) if xValStr == xVal { if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { if sumVal >= minVal { sumVal = minVal } } } } } } lianHua.Value = publicmethod.DataChuli(sumVal, format) t.List = append(t.List, lianHua) } } // 求和 func (t *TargetInfo) sumDataes(y YAxisInfo, xField, xVal string, val interface{}, format int) { if yVal, isOk := val.([]map[string]interface{}); isOk { var sumVal float64 var lianHua PicChartInfo lianHua.Name = y.OldTitle for _, mv := range yVal { if xValx, isOk := mv[xField]; isOk { xValStr := publicmethod.TypeToInterface(xValx) if xValStr == xVal { // fmt.Printf("指标秋毫---->%v---->%v\n\n\n", xValStr, y.Field) if yval, isOk := mv[y.Field]; isOk { minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(yval), 64) if err == nil { sumVal = sumVal + minVal } } } } } lianHua.Value = publicmethod.DataChuli(sumVal, format) t.List = append(t.List, lianHua) } }