应用集成平台服务端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

660 lines
19 KiB

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