应用集成平台服务端
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.
 
 
 

319 lines
9.1 KiB

package customChartes
import (
"appPlatform/api/version1/customerform"
"appPlatform/models/modelshr"
"appPlatform/models/modelssystempermission"
"appPlatform/overall"
"appPlatform/overall/publicmethod"
"strconv"
)
// 普通字段
func (c *ChartInfo) DataAnaly(x XAxisInfo, y []YAxisInfo, val interface{}, chartType string, untis []customerform.MasterStruct) (charData BarDataInfo) {
charData.XAxis.Types = "category"
charData.YAxis.Types = "value"
var timeList []string
if yVal, isOk := val.([]map[string]interface{}); isOk {
for _, mv := range yVal {
if yVal, isOk := mv[x.Field]; isOk {
pageTime := publicmethod.TypeToInterface(yVal)
if !publicmethod.IsInTrue[string](pageTime, timeList) {
timeList = append(timeList, pageTime)
}
}
}
}
charData.XAxisData(x.Field, timeList, untis)
// charData.XAxis.Data = timeList
for _, v := range y {
var seriesInfo SeriesList
seriesInfo.Name = v.OldTitle
seriesInfo.Types = chartType
if !publicmethod.IsInTrue[string](v.OldTitle, charData.Legend.Data) {
charData.Legend.Data = append(charData.Legend.Data, v.OldTitle)
}
}
charData.AggregateCalculating(x.Field, y, val, timeList, chartType)
return
}
// x轴是否要转换中文
func (b *BarDataInfo) XAxisData(xField string, timeList []string, untis []customerform.MasterStruct) {
for _, v := range untis {
if v.Name == xField {
switch v.Type {
case "pickrole":
var roleName []string
if len(timeList) > 0 {
overall.CONSTANT_DB_System_Permission.Model(&modelssystempermission.SystemRole{}).Select("`name`").Where("`id` IN ?", timeList).Find(&roleName)
}
b.XAxis.Data = roleName
case "pickpost":
var roleName []string
if len(timeList) > 0 {
overall.CONSTANT_DB_HR.Model(&modelshr.Position{}).Select("`name`").Where("`id` IN ?", timeList).Find(&roleName)
}
b.XAxis.Data = roleName
case "deptOrg":
var roleName []string
if len(timeList) > 0 {
overall.CONSTANT_DB_HR.Model(&modelshr.AdministrativeOrganization{}).Select("`name`").Where("`id` IN ?", timeList).Find(&roleName)
}
b.XAxis.Data = roleName
case "orgCentent":
var roleName []string
if len(timeList) > 0 {
overall.CONSTANT_DB_HR.Model(&modelshr.AdministrativeOrganization{}).Select("`name`").Where("`id` IN ?", timeList).Find(&roleName)
}
b.XAxis.Data = roleName
case "owner":
var roleName []string
if len(timeList) > 0 {
overall.CONSTANT_DB_HR.Model(&modelshr.PersonArchives{}).Select("`name`").Where("`key` IN ?", timeList).Find(&roleName)
}
b.XAxis.Data = roleName
case "founder":
var roleName []string
if len(timeList) > 0 {
overall.CONSTANT_DB_HR.Model(&modelshr.PersonArchives{}).Select("`name`").Where("`key` IN ?", timeList).Find(&roleName)
}
b.XAxis.Data = roleName
case "expand-user":
var roleName []string
if len(timeList) > 0 {
overall.CONSTANT_DB_HR.Model(&modelshr.PersonArchives{}).Select("`name`").Where("`key` IN ?", timeList).Find(&roleName)
}
b.XAxis.Data = roleName
case "checkbox":
if len(v.Options) > 0 {
var cbox []string
for _, tv := range timeList {
for _, ov := range v.Options {
if tv == ov.Value {
cbox = append(cbox, ov.Label)
}
}
}
b.XAxis.Data = cbox
} else {
b.XAxis.Data = timeList
}
case "radio":
if len(v.Options) > 0 {
var cbox []string
for _, tv := range timeList {
for _, ov := range v.Options {
if tv == ov.Value {
cbox = append(cbox, ov.Label)
}
}
}
b.XAxis.Data = cbox
} else {
b.XAxis.Data = timeList
}
default:
b.XAxis.Data = timeList
}
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2025-07-18 08:45:24
@ 功能: 聚合计算
# y Y轴设定
# val 查询到的值
#xField X轴字段
#chartType 图标类型
1:求和;2:平均值;3:计数;4:去重计数;5:最大值;6:最小值
当字段为时间类型时. 1:自动(原始值);2:整数;3:保留1位小数;4:保留2位小数;5:百分比;6:百分比1位小数;7:百分比2位小数;
*/
func (b *BarDataInfo) AggregateCalculating(x string, y []YAxisInfo, val interface{}, timeList []string, chartType string) {
for _, v := range y {
var seriesInfo SeriesList
seriesInfo.Name = v.OldTitle
seriesInfo.Types = chartType
switch v.Method {
case 2:
seriesInfo.AverageValuees(x, v.Field, timeList, val, v.Format)
case 3:
seriesInfo.StatisticalQuantityes(x, v.Field, timeList, val, v.Format)
case 4:
seriesInfo.RemoveDuplicateCountss(x, v.Field, timeList, val, v.Format)
case 5:
seriesInfo.maxDataes(x, v.Field, timeList, val, v.Format)
case 6:
seriesInfo.minDataes(x, v.Field, timeList, val, v.Format)
default:
seriesInfo.sumDataes(x, v.Field, timeList, val, v.Format)
}
if !publicmethod.IsInTrue[string](v.OldTitle, b.Legend.Data) {
b.Legend.Data = append(b.Legend.Data, v.OldTitle)
}
b.Series = append(b.Series, seriesInfo)
}
}
// 求平均值
func (s *SeriesList) AverageValuees(xField, yField string, xAry []string, val interface{}, format int) {
for _, v := range xAry {
var sumVal float64
if yVal, isOk := val.([]map[string]interface{}); isOk {
for _, mv := range yVal {
if xVal, isOk := mv[xField]; isOk {
if v == publicmethod.TypeToInterface(xVal) {
if vVal, isOk := mv[yField]; isOk {
minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(vVal), 64)
if err == nil {
sumVal = sumVal + minVal
}
}
}
}
}
sumValAvg := sumVal / float64(len(yVal))
jieguo := publicmethod.DataChuli(sumValAvg, format)
s.Data = append(s.Data, jieguo)
}
}
}
// 计数
func (s *SeriesList) StatisticalQuantityes(xField, yField string, xAry []string, val interface{}, format int) {
for _, v := range xAry {
var sumVal []float64
if yVal, isOk := val.([]map[string]interface{}); isOk {
for _, mv := range yVal {
if xVal, isOk := mv[xField]; isOk {
if v == publicmethod.TypeToInterface(xVal) {
if vVal, isOk := mv[yField]; isOk {
minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(vVal), 64)
if err == nil {
sumVal = append(sumVal, minVal)
}
}
}
}
}
}
// jieguo := publicmethod.DataChuli(sumVal, format)
s.Data = append(s.Data, len(sumVal))
}
}
// 去重计数
func (s *SeriesList) RemoveDuplicateCountss(xField, yField string, xAry []string, val interface{}, format int) {
for _, v := range xAry {
var sumVal []float64
if yVal, isOk := val.([]map[string]interface{}); isOk {
for _, mv := range yVal {
if xVal, isOk := mv[xField]; isOk {
if v == publicmethod.TypeToInterface(xVal) {
if vVal, isOk := mv[yField]; isOk {
minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(vVal), 64)
if err == nil {
if !publicmethod.IsInTrue[float64](minVal, sumVal) {
sumVal = append(sumVal, minVal)
}
}
}
}
}
}
}
// jieguo := publicmethod.DataChuli(sumVal, format)
s.Data = append(s.Data, len(sumVal))
}
}
// 求最大值
func (s *SeriesList) maxDataes(xField, yField string, xAry []string, val interface{}, format int) {
for _, v := range xAry {
var sumVal float64 = 0
if yVal, isOk := val.([]map[string]interface{}); isOk {
for _, mv := range yVal {
if xVal, isOk := mv[xField]; isOk {
if v == publicmethod.TypeToInterface(xVal) {
if vVal, isOk := mv[yField]; isOk {
minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(vVal), 64)
if err == nil {
if sumVal <= minVal {
sumVal = minVal
}
}
}
}
}
}
}
jieguo := publicmethod.DataChuli(sumVal, format)
s.Data = append(s.Data, jieguo)
}
}
// 求最小值
func (s *SeriesList) minDataes(xField, yField string, xAry []string, val interface{}, format int) {
for _, v := range xAry {
var sumVal float64 = 1
if yVal, isOk := val.([]map[string]interface{}); isOk {
for _, mv := range yVal {
if xVal, isOk := mv[xField]; isOk {
if v == publicmethod.TypeToInterface(xVal) {
if vVal, isOk := mv[yField]; isOk {
minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(vVal), 64)
if err == nil {
if sumVal >= minVal {
sumVal = minVal
}
}
}
}
}
}
}
jieguo := publicmethod.DataChuli(sumVal, format)
s.Data = append(s.Data, jieguo)
}
}
// 求和
/*
xField x轴字段
yField y轴字段
xAry x轴值
val 查询出来的所有值
format 取值方式
*/
func (s *SeriesList) sumDataes(xField, yField string, xAry []string, val interface{}, format int) {
for _, v := range xAry {
var sumVal float64
if yVal, isOk := val.([]map[string]interface{}); isOk {
for _, mv := range yVal {
if xVal, isOk := mv[xField]; isOk {
if v == publicmethod.TypeToInterface(xVal) {
if vVal, isOk := mv[yField]; isOk {
minVal, err := strconv.ParseFloat(publicmethod.TypeToInterface(vVal), 64)
if err == nil {
sumVal = sumVal + minVal
}
}
}
}
}
}
jieguo := publicmethod.DataChuli(sumVal, format)
s.Data = append(s.Data, jieguo)
}
}