package data_manage import ( "eta/eta_hub/utils" "fmt" "strings" "time" "github.com/beego/beego/v2/client/orm" "github.com/rdlucklib/rdluck_tools/paging" ) // ChartInfo 图库主表 type ChartInfo struct { ChartInfoId int `orm:"column(chart_info_id);pk"` ChartName string `description:"来源名称"` ChartNameEn string `description:"英文图表名称"` ChartClassifyId int `description:"图表分类id"` SysUserId int `description:"创建人ID"` SysUserRealName string `description:"创建人姓名"` UniqueCode string `description:"图表唯一编码"` DateType int `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:21年至今,5:自定义时间,6:起始日期至今,7:18年至今,8:19年至今,9:20年至今,11:22年至今,20:最近N年"` StartDate string `description:"自定义开始日期"` EndDate string `description:"自定义结束日期"` IsSetName int `description:"设置名称"` EdbInfoIds string `description:"指标id"` ChartType int `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图"` Calendar string `description:"公历/农历"` SeasonStartDate string `description:"季节性图开始日期"` SeasonEndDate string `description:"季节性图结束日期"` ChartImage string `description:"图表图片"` Sort int `description:"排序字段,数字越小越排前面"` LeftMin string `description:"图表左侧最小值"` LeftMax string `description:"图表左侧最大值"` RightMin string `description:"图表右侧最小值"` RightMax string `description:"图表右侧最大值"` Disabled int `description:"是否禁用,0:启用,1:禁用,默认:0"` BarConfig string `description:"柱方图的配置,json数据"` Source int `description:"1:ETA图库;2:商品价格曲线"` ExtraConfig string `description:"图表额外配置,json数据"` SeasonExtraConfig string `description:"季节性图表中的配置,json数据"` StartYear int `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"` CreateTime time.Time `json:"-"description:"创建时间"` ModifyTime time.Time `json:"-"description:"更新时间"` } func (m *ChartInfo) GetItemsByCondition(cond string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartInfo, err error) { o := orm.NewOrmUsingDB("data") fields := strings.Join(fieldArr, ",") if len(fieldArr) == 0 { fields = `*` } order := `ORDER BY create_time DESC` if orderRule != "" { order = ` ORDER BY ` + orderRule } sql := fmt.Sprintf(`SELECT %s FROM chart_info WHERE 1=1 %s %s`, fields, cond, order) _, err = o.Raw(sql, pars).QueryRows(&items) return } func (m *ChartInfo) GetItemTotal(cond string, pars []interface{}) (total int, err error) { o := orm.NewOrmUsingDB("data") sql := fmt.Sprintf(`SELECT COUNT(*) FROM chart_info WHERE 1=1 %s`, cond) err = o.Raw(sql, pars).QueryRow(&total) return } func (m *ChartInfo) GetItemsPageByCondition(cond string, pars []interface{}, fieldArr []string, orderRule string, startSize, pageSize int) (items []*ChartInfo, err error) { o := orm.NewOrmUsingDB("data") fields := strings.Join(fieldArr, ",") if len(fieldArr) == 0 { fields = `*` } order := `ORDER BY create_time DESC` if orderRule != "" { order = ` ORDER BY ` + orderRule } sql := fmt.Sprintf(`SELECT %s FROM chart_info WHERE 1=1 %s %s`, fields, cond, order) sql += fmt.Sprintf(` LIMIT %d,%d`, startSize, pageSize) _, err = o.Raw(sql, pars).QueryRows(&items) return } func (m *ChartInfo) GetItemByCode(code string) (item *ChartInfo, err error) { o := orm.NewOrmUsingDB("data") sql := fmt.Sprintf(`SELECT * FROM chart_info WHERE unique_code = ? LIMIT 1`) err = o.Raw(sql, code).QueryRow(&item) return } // ChartInfoItem 图表信息 type ChartInfoItem struct { ChartInfoId int `description:"图表ID"` ChartName string `description:"来源名称"` ChartNameEn string `description:"英文图表名称"` ChartClassifyId int `description:"图表分类id"` UniqueCode string `description:"图表唯一编码"` DateType int `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间" json:"-"` StartDate string `description:"自定义开始日期"` EndDate string `description:"自定义结束日期"` ChartType int `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图"` Calendar string `description:"公历/农历"` SeasonStartDate string `description:"季节性图开始日期" json:"-"` SeasonEndDate string `description:"季节性图开始日期" json:"-"` ChartImage string `description:"图表图片"` Sort int `description:"排序字段,数字越小越排前面"` LeftMin string `description:"图表左侧最小值" json:"-"` LeftMax string `description:"图表左侧最大值" json:"-"` RightMin string `description:"图表右侧最小值" json:"-"` RightMax string `description:"图表右侧最大值" json:"-"` BarConfig string `description:"柱方图的配置,json数据" json:"-"` Source int `description:"1:ETA图库;2:商品价格曲线" json:"-"` ExtraConfig string `description:"图表额外配置,json数据" json:"-"` SeasonExtraConfig string `description:"季节性图表中的配置,json数据" json:"-"` StartYear int `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N" json:"-"` CreateTime string `description:"创建时间"` ModifyTime string `description:"更新时间"` } type ChartInfoItemResp struct { List []*ChartInfoItem `description:"图表信息"` Paging *paging.PagingItem `description:"分页信息"` } func FormatChartInfo2Item(origin *ChartInfo) (item *ChartInfoItem) { if origin == nil { return } item = new(ChartInfoItem) item.ChartInfoId = origin.ChartInfoId item.ChartName = origin.ChartName item.ChartNameEn = origin.ChartNameEn item.ChartClassifyId = origin.ChartClassifyId item.UniqueCode = origin.UniqueCode item.DateType = origin.DateType item.StartDate = origin.StartDate item.EndDate = origin.EndDate item.ChartType = origin.ChartType item.Calendar = origin.Calendar item.SeasonStartDate = origin.SeasonStartDate item.SeasonEndDate = origin.SeasonEndDate item.ChartImage = origin.ChartImage item.Sort = origin.Sort item.LeftMin = origin.LeftMin item.LeftMax = origin.LeftMax item.RightMin = origin.RightMin item.RightMax = origin.RightMax item.BarConfig = origin.BarConfig item.Source = origin.Source item.ExtraConfig = origin.ExtraConfig item.SeasonExtraConfig = origin.SeasonExtraConfig item.StartYear = origin.StartYear item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime) item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime) return } type ChartInfoDetailResp struct { ChartInfo *ChartInfo `description:"图表信息"` Status bool `description:"true:图表存在,false:图表不存在" json:"-"` EdbInfoList []*ChartEdbInfoMapping `description:"指标信息"` XEdbIdValue []int `description:"柱方图的x轴数据,指标id"` YDataList []YData `description:"柱方图的y轴数据"` XDataList []XData `description:"商品价格曲线的X轴数据"` BarChartInfo BarChartInfoReq `description:"柱方图的配置"` CorrelationChartInfo *CorrelationInfo `description:"相关性图表信息"` DataResp interface{} `description:"图表数据,根据图的类型而定的,没有确定的数据格式"` } // XData 商品价格曲线的的x轴数据 type XData struct { Name string `description:"别名"` NameEn string `description:"英文别名"` } // YData 柱方图的y轴数据 type YData struct { Date string `description:"数据日期"` ConfigDate time.Time `description:"配置的日期" json:"-"` Color string `description:"数据颜色"` Name string `description:"别名"` NameEn string `description:"英文别名"` Value []float64 `description:"每个指标的值"` NoDataEdbList []int `description:"没有数据的指标列表"` XEdbInfoIdList []int `description:"对应X轴的指标id列表"` NameList []string `description:"每个值对应的名称"` EnNameList []string `description:"每个值对应的英文名称"` EdbValMap map[int]float64 `description:"指标与值的对应" json:"-"` M []int `description:"对应开始日期的间隔值" json:"-"` Unit string `description:"中文单位名称"` UnitEn string `description:"英文单位名称"` } // BarChartInfoReq 柱方图预览请求数据 type BarChartInfoReq struct { EdbInfoIdList []BarChartInfoEdbItemReq `description:"指标信息"` DateList []BarChartInfoDateReq `description:"日期配置"` Sort BarChartInfoSortReq `description:"排序"` XEdbList []BarChartInfoEdbItemReq `description:"X轴选择的指标列表"` YEdbList []BarChartInfoEdbItemReq `description:"Y轴选择的指标列表"` Unit string `description:"中文单位"` UnitEn string `description:"英文单位"` } // BarChartInfoEdbItemReq 柱方图预览请求数据(指标相关) type BarChartInfoEdbItemReq struct { EdbInfoId int `description:"指标ID"` Name string `description:"别名"` NameEn string `description:"英文别名"` Source int `description:"1:ETA图库;2:商品价格"` } // BarChartInfoDateReq 柱方图预览请求数据(日期相关) type BarChartInfoDateReq struct { Type int `description:"配置类型"` Date string `description:"固定日期"` Value int `description:"N天的值"` Color string `description:"颜色"` Name string `description:"别名"` } // BarChartInfoSortReq 柱方图预览请求数据(排序相关) type BarChartInfoSortReq struct { Sort int `description:"排序类型,0:默认,1:升序,2:降序"` DateIndex int `description:"日期数据的下标,从0开始"` } type CorrelationInfo struct { LeadValue int `description:"领先值"` LeadUnit string `description:"领先单位"` CalculateValue int `description:"计算窗口"` CalculateUnit string `description:"计算频度"` StartDate string `description:"开始日期"` EndDate string `description:"结束日期"` EdbInfoIdFirst int `description:"A指标ID"` EdbInfoIdSecond int `description:"B指标ID"` PeriodData string `description:"X轴-期数数据"` CorrelationData string `description:"Y轴-相关性系数"` } type ChartInfoView struct { ChartInfoId int `orm:"column(chart_info_id);pk"` ChartName string `description:"来源名称"` ChartNameEn string `description:"英文图表名称"` Unit string `description:"中文单位名称"` UnitEn string `description:"英文单位名称"` ChartClassifyId int `description:"图表分类id"` ChartClassifyName string `description:"图表名称"` SysUserId int SysUserRealName string UniqueCode string `description:"图表唯一编码"` CreateTime time.Time ModifyTime time.Time DateType int `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间"` StartDate string `description:"自定义开始日期"` EndDate string `description:"自定义结束日期"` IsSetName int `description:"设置名称"` EdbInfoIds string `description:"指标id"` ChartType int `description:"生成样式:1:曲线图,2:季节性图"` Calendar string `description:"公历/农历"` SeasonStartDate string `description:"季节性图开始日期"` SeasonEndDate string `description:"季节性图开始日期"` ChartImage string `description:"图表图片"` Sort int `description:"排序字段,数字越小越排前面"` IsAdd bool `description:"true:已加入我的图库,false:未加入我的图库"` MyChartId int MyChartClassifyId string `description:"我的图表分类,多个用逗号隔开"` ChartClassify []*ChartClassifyView EdbEndDate string `description:"指标最新更新日期"` LeftMin string `description:"图表左侧最小值"` LeftMax string `description:"图表左侧最大值"` RightMin string `description:"图表右侧最小值"` RightMax string `description:"图表右侧最大值"` IsEdit bool `description:"是否有编辑权限"` IsEnChart bool `description:"是否展示英文标识"` WarnMsg string `description:"错误信息"` Disabled int `description:"是否禁用,0:启用,1:禁用,默认:0"` BarConfig string `description:"柱方图的配置,json数据" json:"-"` Source int `description:"1:ETA图库;2:商品价格曲线;3:相关性图表"` //CorrelationLeadUnit string `description:"相关性图表-领先单位"` ExtraConfig string `description:"图表额外配置,json数据"` Button ChartViewButton `description:"操作按钮" json:"-"` SeasonExtraConfig string `description:"季节性图表中的配置,json数据"` StartYear int `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"` } type ChartViewButton struct { IsEdit bool `description:"是否有编辑权限"` IsEnChart bool `description:"是否展示英文标识"` IsAdd bool `description:"true:已加入我的图库,false:未加入我的图库"` IsCopy bool `description:"是否有另存为按钮"` IsSetName int `description:"设置名称"` } // SectionScatterReq 截面散点请求 //type SectionScatterReq struct { // XName string `description:"x轴名称"` // XNameEn string `description:"x轴名称(英文)"` // XUnitName string `description:"x轴单位名称"` // XUnitNameEn string `description:"x轴单位名称(英文)"` // YName string `description:"y轴名称"` // YNameEn string `description:"y轴名称(英文)"` // YUnitName string `description:"y轴单位名称"` // YUnitNameEn string `description:"y轴单位名称(英文)"` // XMinValue string `description:"X轴的最小值"` // XMaxValue string `description:"X轴的最大值"` // YMinValue string `description:"Y轴的最小值"` // YMaxValue string `description:"Y轴的最大值"` // //EdbList []SectionScatterEdbItemReq `description:"指标数据"` // SeriesList []SectionScatterSeriesItemReq `description:"系列数据"` //} // SectionScatterSeriesItemReq 系列的请求 //type SectionScatterSeriesItemReq struct { // Name string `description:"系列名"` // NameEn string `description:"系列名(英文名)"` // IsNameDefault bool `description:"是否使用默认的系列名 false修改过 true默认 影响自动更新"` // Color string `description:"颜色"` // EdbInfoList []SectionScatterEdbItemReq // ShowTrendLine bool `description:"是否展示趋势线"` // ShowFitEquation bool `description:"是否展示方程式"` // ShowRSquare bool `description:"是否展示R平方"` //} // SectionScatterEdbItemReq 截面散点请求的指标 //type SectionScatterEdbItemReq struct { // XEdbInfoId int `description:"X轴的指标ID"` // YEdbInfoId int `description:"Y轴的指标ID"` // Name string `description:"别名"` // NameEn string `description:"英文别名"` // XDateType int `description:"X轴的日期配置类型"` // XDate string `description:"X轴的日期固定日期"` // XDateValue int `description:"X轴的日期N天的值"` // YDateType int `description:"Y轴的日期配置类型"` // YDate string `description:"Y轴的日期固定日期"` // YDateValue int `description:"Y轴的日期N天的值"` // IsShow bool `description:"是否展示"` //} // SectionScatterInfoResp 截面散点图数据 //type SectionScatterInfoResp struct { // XName string `description:"x轴名称"` // XNameEn string `description:"x轴名称(英文)"` // XUnitName string `description:"x轴单位名称"` // XUnitNameEn string `description:"x轴单位名称(英文)"` // YName string `description:"y轴名称"` // YNameEn string `description:"y轴名称(英文)"` // YUnitName string `description:"y轴单位名称"` // YUnitNameEn string `description:"y轴单位名称(英文)"` // XMinValue string `description:"X轴的最小值"` // XMaxValue string `description:"X轴的最大值"` // YMinValue string `description:"Y轴的最小值"` // YMaxValue string `description:"Y轴的最大值"` // DataList []SectionScatterSeriesItemResp `description:"数据列"` //} // SectionScatterSeriesItemResp 系列的返回 //type SectionScatterSeriesItemResp struct { // Name string `description:"系列名"` // NameEn string `description:"系列名(英文)"` // IsNameDefault bool `description:"是否使用默认的系列名 false修改过 true默认 影响自动更新"` // Color string `description:"颜色"` // EdbInfoList []SectionScatterEdbItemResp // ShowTrendLine bool `description:"是否展示趋势线"` // ShowFitEquation bool `description:"是否展示方程式"` // ShowRSquare bool `description:"是否展示R平方"` // TrendLine string `description:"方程式"` // RSquare string `description:"R平方的值(决定系数R2)"` // TrendLimitData []CoordinatePoint `description:"趋势线的前后坐标点"` //} // SectionScatterEdbItemResp 截面散点的返回参数 //type SectionScatterEdbItemResp struct { // XEdbInfoId int `description:"X轴指标id"` // XDate string `description:"X轴指标实际日期"` // XName string `description:"X轴指标名称"` // XNameEn string `description:"X轴指标英文名称"` // XValue float64 `description:"X轴实际值"` // YEdbInfoId int `description:"Y轴指标id"` // YDate string `description:"Y轴指标实际日期"` // YName string `description:"Y轴指标名称"` // YNameEn string `description:"Y轴指标英文名称"` // YValue float64 `description:"Y轴实际值"` // IsShow bool `description:"是否展示"` // Name string `description:"标签名称"` // NameEn string `description:"英文标签名称"` //} // CoordinatePoint 坐标点 //type CoordinatePoint struct { // X float64 // Y float64 //} // RollingCorrelationChartDataResp 滚动相关性图 //type RollingCorrelationChartDataResp struct { // XDateTimeValue []string `description:"滚动相关性图的x轴数据,日期数据"` // YDataList []YData `description:"滚动相关性图的y轴数据"` //} //type EdbDataList struct { // EdbDataId int `description:" 指标数据ID"` // EdbInfoId int `description:"指标ID"` // DataTime string //`json:"-" description:"数据日期"` // DataTimestamp int64 `description:"数据日期"` // Value float64 `description:"数据值"` //} // EditChartInfoExtraConfig 修改 ETA图库 的 图表额外配置 //func EditChartInfoExtraConfig(chartId int, extraConfig string) (err error) { // o := orm.NewOrmUsingDB("data") // var pars []interface{} // pars = append(pars, extraConfig) // // sql := ` UPDATE chart_info // SET // modify_time = NOW(), // extra_config = ? // ` // sql += `WHERE chart_info_id = ?` // // pars = append(pars, chartId) // _, err = o.Raw(sql, pars).Exec() // if err != nil { // fmt.Println("UPDATE chart_info Err:", err.Error()) // return err // } // // return //} //type SeasonExtraItem struct { // ChartLegend []SeasonChartLegend `description:"自定义的图例名称"` // XStartDate string `description:"横坐标显示的起始日"` // XEndDate string `description:"横坐标显示的截止日"` // JumpYear int `description:"横坐标日期是否跨年,1跨年,0不跨年"` //} //type SeasonChartLegend struct { // Name string // Value string //} type QuarterData struct { Year int DataList []*EdbDataList CuttingDataTimestamp int64 `description:"切割的时间戳"` ChartLegend string Years string } type QuarterXDateItem struct { StartDate time.Time EndDate time.Time ShowName string ChartLegend string CuttingDataTimestamp int64 `description:"切割的时间戳"` } type QuarterDataList []*QuarterData func (m QuarterDataList) Len() int { return len(m) } func (m QuarterDataList) Less(i, j int) bool { return m[i].Years < m[j].Years } func (m QuarterDataList) Swap(i, j int) { m[i], m[j] = m[j], m[i] } // ChartDetailApiResponse 图表详情接口响应体 type ChartDetailApiResponse struct { Ret int Msg string ErrMsg string Data *ChartInfoDetailResp }