chart_info.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. package data_manage
  2. import (
  3. "eta/eta_hub/utils"
  4. "fmt"
  5. "github.com/beego/beego/v2/client/orm"
  6. "strings"
  7. "time"
  8. )
  9. // ChartInfo 图库主表
  10. type ChartInfo struct {
  11. ChartInfoId int `orm:"column(chart_info_id);pk"`
  12. ChartName string `description:"来源名称"`
  13. ChartNameEn string `description:"英文图表名称"`
  14. ChartClassifyId int `description:"图表分类id"`
  15. SysUserId int `description:"创建人ID"`
  16. SysUserRealName string `description:"创建人姓名"`
  17. UniqueCode string `description:"图表唯一编码"`
  18. DateType int `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:21年至今,5:自定义时间,6:起始日期至今,7:18年至今,8:19年至今,9:20年至今,11:22年至今,20:最近N年"`
  19. StartDate string `description:"自定义开始日期"`
  20. EndDate string `description:"自定义结束日期"`
  21. IsSetName int `description:"设置名称"`
  22. EdbInfoIds string `description:"指标id"`
  23. ChartType int `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图"`
  24. Calendar string `description:"公历/农历"`
  25. SeasonStartDate string `description:"季节性图开始日期"`
  26. SeasonEndDate string `description:"季节性图结束日期"`
  27. ChartImage string `description:"图表图片"`
  28. Sort int `description:"排序字段,数字越小越排前面"`
  29. LeftMin string `description:"图表左侧最小值"`
  30. LeftMax string `description:"图表左侧最大值"`
  31. RightMin string `description:"图表右侧最小值"`
  32. RightMax string `description:"图表右侧最大值"`
  33. Disabled int `description:"是否禁用,0:启用,1:禁用,默认:0"`
  34. BarConfig string `description:"柱方图的配置,json数据"`
  35. Source int `description:"1:ETA图库;2:商品价格曲线"`
  36. ExtraConfig string `description:"图表额外配置,json数据"`
  37. SeasonExtraConfig string `description:"季节性图表中的配置,json数据"`
  38. StartYear int `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"`
  39. CreateTime time.Time `json:"-"description:"创建时间"`
  40. ModifyTime time.Time `json:"-"description:"更新时间"`
  41. }
  42. func (m *ChartInfo) GetItemsByCondition(cond string, pars []interface{}, fieldArr []string, orderRule string) (items []*ChartInfo, err error) {
  43. o := orm.NewOrmUsingDB("data")
  44. fields := strings.Join(fieldArr, ",")
  45. if len(fieldArr) == 0 {
  46. fields = `*`
  47. }
  48. order := `ORDER BY create_time DESC`
  49. if orderRule != "" {
  50. order = ` ORDER BY ` + orderRule
  51. }
  52. sql := fmt.Sprintf(`SELECT %s FROM chart_info WHERE 1=1 %s %s`, fields, cond, order)
  53. _, err = o.Raw(sql, pars).QueryRows(&items)
  54. return
  55. }
  56. func (m *ChartInfo) GetItemByCode(code string) (item *ChartInfo, err error) {
  57. o := orm.NewOrmUsingDB("data")
  58. sql := fmt.Sprintf(`SELECT * FROM chart_info WHERE unique_code = ? LIMIT 1`)
  59. err = o.Raw(sql, code).QueryRow(&item)
  60. return
  61. }
  62. // ChartInfoItem 图表信息
  63. type ChartInfoItem struct {
  64. ChartInfoId int `description:"图表ID"`
  65. ChartName string `description:"来源名称"`
  66. ChartNameEn string `description:"英文图表名称"`
  67. ChartClassifyId int `description:"图表分类id"`
  68. UniqueCode string `description:"图表唯一编码"`
  69. DateType int `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间" json:"-"`
  70. StartDate string `description:"自定义开始日期"`
  71. EndDate string `description:"自定义结束日期"`
  72. ChartType int `description:"生成样式:1:曲线图,2:季节性图,3:面积图,4:柱状图,5:散点图,6:组合图,7:柱方图,8:商品价格曲线图,9:相关性图"`
  73. Calendar string `description:"公历/农历"`
  74. SeasonStartDate string `description:"季节性图开始日期" json:"-"`
  75. SeasonEndDate string `description:"季节性图开始日期" json:"-"`
  76. ChartImage string `description:"图表图片"`
  77. Sort int `description:"排序字段,数字越小越排前面"`
  78. LeftMin string `description:"图表左侧最小值" json:"-"`
  79. LeftMax string `description:"图表左侧最大值" json:"-"`
  80. RightMin string `description:"图表右侧最小值" json:"-"`
  81. RightMax string `description:"图表右侧最大值" json:"-"`
  82. BarConfig string `description:"柱方图的配置,json数据" json:"-"`
  83. Source int `description:"1:ETA图库;2:商品价格曲线" json:"-"`
  84. ExtraConfig string `description:"图表额外配置,json数据" json:"-"`
  85. SeasonExtraConfig string `description:"季节性图表中的配置,json数据" json:"-"`
  86. StartYear int `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N" json:"-"`
  87. CreateTime string `description:"创建时间"`
  88. ModifyTime string `description:"更新时间"`
  89. }
  90. func FormatChartInfo2Item(origin *ChartInfo) (item *ChartInfoItem) {
  91. if origin == nil {
  92. return
  93. }
  94. item = new(ChartInfoItem)
  95. item.ChartInfoId = origin.ChartInfoId
  96. item.ChartName = origin.ChartName
  97. item.ChartNameEn = origin.ChartNameEn
  98. item.ChartClassifyId = origin.ChartClassifyId
  99. item.UniqueCode = origin.UniqueCode
  100. item.DateType = origin.DateType
  101. item.StartDate = origin.StartDate
  102. item.EndDate = origin.EndDate
  103. item.ChartType = origin.ChartType
  104. item.Calendar = origin.Calendar
  105. item.SeasonStartDate = origin.SeasonStartDate
  106. item.SeasonEndDate = origin.SeasonEndDate
  107. item.ChartImage = origin.ChartImage
  108. item.Sort = origin.Sort
  109. item.LeftMin = origin.LeftMin
  110. item.LeftMax = origin.LeftMax
  111. item.RightMin = origin.RightMin
  112. item.RightMax = origin.RightMax
  113. item.BarConfig = origin.BarConfig
  114. item.Source = origin.Source
  115. item.ExtraConfig = origin.ExtraConfig
  116. item.SeasonExtraConfig = origin.SeasonExtraConfig
  117. item.StartYear = origin.StartYear
  118. item.CreateTime = utils.TimeTransferString(utils.FormatDateTime, origin.CreateTime)
  119. item.ModifyTime = utils.TimeTransferString(utils.FormatDateTime, origin.ModifyTime)
  120. return
  121. }
  122. type ChartInfoDetailResp struct {
  123. ChartInfo *ChartInfo `description:"图表信息"`
  124. Status bool `description:"true:图表存在,false:图表不存在" json:"-"`
  125. EdbInfoList []*ChartEdbInfoMapping `description:"指标信息"`
  126. XEdbIdValue []int `description:"柱方图的x轴数据,指标id"`
  127. YDataList []YData `description:"柱方图的y轴数据"`
  128. XDataList []XData `description:"商品价格曲线的X轴数据"`
  129. BarChartInfo BarChartInfoReq `description:"柱方图的配置"`
  130. CorrelationChartInfo *CorrelationInfo `description:"相关性图表信息"`
  131. DataResp interface{} `description:"图表数据,根据图的类型而定的,没有确定的数据格式"`
  132. }
  133. // XData 商品价格曲线的的x轴数据
  134. type XData struct {
  135. Name string `description:"别名"`
  136. NameEn string `description:"英文别名"`
  137. }
  138. // YData 柱方图的y轴数据
  139. type YData struct {
  140. Date string `description:"数据日期"`
  141. ConfigDate time.Time `description:"配置的日期" json:"-"`
  142. Color string `description:"数据颜色"`
  143. Name string `description:"别名"`
  144. NameEn string `description:"英文别名"`
  145. Value []float64 `description:"每个指标的值"`
  146. NoDataEdbList []int `description:"没有数据的指标列表"`
  147. XEdbInfoIdList []int `description:"对应X轴的指标id列表"`
  148. NameList []string `description:"每个值对应的名称"`
  149. EnNameList []string `description:"每个值对应的英文名称"`
  150. EdbValMap map[int]float64 `description:"指标与值的对应" json:"-"`
  151. M []int `description:"对应开始日期的间隔值" json:"-"`
  152. Unit string `description:"中文单位名称"`
  153. UnitEn string `description:"英文单位名称"`
  154. }
  155. // BarChartInfoReq 柱方图预览请求数据
  156. type BarChartInfoReq struct {
  157. EdbInfoIdList []BarChartInfoEdbItemReq `description:"指标信息"`
  158. DateList []BarChartInfoDateReq `description:"日期配置"`
  159. Sort BarChartInfoSortReq `description:"排序"`
  160. XEdbList []BarChartInfoEdbItemReq `description:"X轴选择的指标列表"`
  161. YEdbList []BarChartInfoEdbItemReq `description:"Y轴选择的指标列表"`
  162. Unit string `description:"中文单位"`
  163. UnitEn string `description:"英文单位"`
  164. }
  165. // BarChartInfoEdbItemReq 柱方图预览请求数据(指标相关)
  166. type BarChartInfoEdbItemReq struct {
  167. EdbInfoId int `description:"指标ID"`
  168. Name string `description:"别名"`
  169. NameEn string `description:"英文别名"`
  170. Source int `description:"1:ETA图库;2:商品价格"`
  171. }
  172. // BarChartInfoDateReq 柱方图预览请求数据(日期相关)
  173. type BarChartInfoDateReq struct {
  174. Type int `description:"配置类型"`
  175. Date string `description:"固定日期"`
  176. Value int `description:"N天的值"`
  177. Color string `description:"颜色"`
  178. Name string `description:"别名"`
  179. }
  180. // BarChartInfoSortReq 柱方图预览请求数据(排序相关)
  181. type BarChartInfoSortReq struct {
  182. Sort int `description:"排序类型,0:默认,1:升序,2:降序"`
  183. DateIndex int `description:"日期数据的下标,从0开始"`
  184. }
  185. type CorrelationInfo struct {
  186. LeadValue int `description:"领先值"`
  187. LeadUnit string `description:"领先单位"`
  188. CalculateValue int `description:"计算窗口"`
  189. CalculateUnit string `description:"计算频度"`
  190. StartDate string `description:"开始日期"`
  191. EndDate string `description:"结束日期"`
  192. EdbInfoIdFirst int `description:"A指标ID"`
  193. EdbInfoIdSecond int `description:"B指标ID"`
  194. PeriodData string `description:"X轴-期数数据"`
  195. CorrelationData string `description:"Y轴-相关性系数"`
  196. }
  197. type ChartInfoView struct {
  198. ChartInfoId int `orm:"column(chart_info_id);pk"`
  199. ChartName string `description:"来源名称"`
  200. ChartNameEn string `description:"英文图表名称"`
  201. Unit string `description:"中文单位名称"`
  202. UnitEn string `description:"英文单位名称"`
  203. ChartClassifyId int `description:"图表分类id"`
  204. ChartClassifyName string `description:"图表名称"`
  205. SysUserId int
  206. SysUserRealName string
  207. UniqueCode string `description:"图表唯一编码"`
  208. CreateTime time.Time
  209. ModifyTime time.Time
  210. DateType int `description:"日期类型:1:00年至今,2:10年至今,3:15年至今,4:年初至今,5:自定义时间"`
  211. StartDate string `description:"自定义开始日期"`
  212. EndDate string `description:"自定义结束日期"`
  213. IsSetName int `description:"设置名称"`
  214. EdbInfoIds string `description:"指标id"`
  215. ChartType int `description:"生成样式:1:曲线图,2:季节性图"`
  216. Calendar string `description:"公历/农历"`
  217. SeasonStartDate string `description:"季节性图开始日期"`
  218. SeasonEndDate string `description:"季节性图开始日期"`
  219. ChartImage string `description:"图表图片"`
  220. Sort int `description:"排序字段,数字越小越排前面"`
  221. IsAdd bool `description:"true:已加入我的图库,false:未加入我的图库"`
  222. MyChartId int
  223. MyChartClassifyId string `description:"我的图表分类,多个用逗号隔开"`
  224. ChartClassify []*ChartClassifyView
  225. EdbEndDate string `description:"指标最新更新日期"`
  226. LeftMin string `description:"图表左侧最小值"`
  227. LeftMax string `description:"图表左侧最大值"`
  228. RightMin string `description:"图表右侧最小值"`
  229. RightMax string `description:"图表右侧最大值"`
  230. IsEdit bool `description:"是否有编辑权限"`
  231. IsEnChart bool `description:"是否展示英文标识"`
  232. WarnMsg string `description:"错误信息"`
  233. Disabled int `description:"是否禁用,0:启用,1:禁用,默认:0"`
  234. BarConfig string `description:"柱方图的配置,json数据" json:"-"`
  235. Source int `description:"1:ETA图库;2:商品价格曲线;3:相关性图表"`
  236. //CorrelationLeadUnit string `description:"相关性图表-领先单位"`
  237. ExtraConfig string `description:"图表额外配置,json数据"`
  238. Button ChartViewButton `description:"操作按钮" json:"-"`
  239. SeasonExtraConfig string `description:"季节性图表中的配置,json数据"`
  240. StartYear int `description:"当选择的日期类型为最近N年类型时,即date_type=20, 用start_year表示N"`
  241. }
  242. type ChartViewButton struct {
  243. IsEdit bool `description:"是否有编辑权限"`
  244. IsEnChart bool `description:"是否展示英文标识"`
  245. IsAdd bool `description:"true:已加入我的图库,false:未加入我的图库"`
  246. IsCopy bool `description:"是否有另存为按钮"`
  247. IsSetName int `description:"设置名称"`
  248. }
  249. // SectionScatterReq 截面散点请求
  250. //type SectionScatterReq struct {
  251. // XName string `description:"x轴名称"`
  252. // XNameEn string `description:"x轴名称(英文)"`
  253. // XUnitName string `description:"x轴单位名称"`
  254. // XUnitNameEn string `description:"x轴单位名称(英文)"`
  255. // YName string `description:"y轴名称"`
  256. // YNameEn string `description:"y轴名称(英文)"`
  257. // YUnitName string `description:"y轴单位名称"`
  258. // YUnitNameEn string `description:"y轴单位名称(英文)"`
  259. // XMinValue string `description:"X轴的最小值"`
  260. // XMaxValue string `description:"X轴的最大值"`
  261. // YMinValue string `description:"Y轴的最小值"`
  262. // YMaxValue string `description:"Y轴的最大值"`
  263. // //EdbList []SectionScatterEdbItemReq `description:"指标数据"`
  264. // SeriesList []SectionScatterSeriesItemReq `description:"系列数据"`
  265. //}
  266. // SectionScatterSeriesItemReq 系列的请求
  267. //type SectionScatterSeriesItemReq struct {
  268. // Name string `description:"系列名"`
  269. // NameEn string `description:"系列名(英文名)"`
  270. // IsNameDefault bool `description:"是否使用默认的系列名 false修改过 true默认 影响自动更新"`
  271. // Color string `description:"颜色"`
  272. // EdbInfoList []SectionScatterEdbItemReq
  273. // ShowTrendLine bool `description:"是否展示趋势线"`
  274. // ShowFitEquation bool `description:"是否展示方程式"`
  275. // ShowRSquare bool `description:"是否展示R平方"`
  276. //}
  277. // SectionScatterEdbItemReq 截面散点请求的指标
  278. //type SectionScatterEdbItemReq struct {
  279. // XEdbInfoId int `description:"X轴的指标ID"`
  280. // YEdbInfoId int `description:"Y轴的指标ID"`
  281. // Name string `description:"别名"`
  282. // NameEn string `description:"英文别名"`
  283. // XDateType int `description:"X轴的日期配置类型"`
  284. // XDate string `description:"X轴的日期固定日期"`
  285. // XDateValue int `description:"X轴的日期N天的值"`
  286. // YDateType int `description:"Y轴的日期配置类型"`
  287. // YDate string `description:"Y轴的日期固定日期"`
  288. // YDateValue int `description:"Y轴的日期N天的值"`
  289. // IsShow bool `description:"是否展示"`
  290. //}
  291. // SectionScatterInfoResp 截面散点图数据
  292. //type SectionScatterInfoResp struct {
  293. // XName string `description:"x轴名称"`
  294. // XNameEn string `description:"x轴名称(英文)"`
  295. // XUnitName string `description:"x轴单位名称"`
  296. // XUnitNameEn string `description:"x轴单位名称(英文)"`
  297. // YName string `description:"y轴名称"`
  298. // YNameEn string `description:"y轴名称(英文)"`
  299. // YUnitName string `description:"y轴单位名称"`
  300. // YUnitNameEn string `description:"y轴单位名称(英文)"`
  301. // XMinValue string `description:"X轴的最小值"`
  302. // XMaxValue string `description:"X轴的最大值"`
  303. // YMinValue string `description:"Y轴的最小值"`
  304. // YMaxValue string `description:"Y轴的最大值"`
  305. // DataList []SectionScatterSeriesItemResp `description:"数据列"`
  306. //}
  307. // SectionScatterSeriesItemResp 系列的返回
  308. //type SectionScatterSeriesItemResp struct {
  309. // Name string `description:"系列名"`
  310. // NameEn string `description:"系列名(英文)"`
  311. // IsNameDefault bool `description:"是否使用默认的系列名 false修改过 true默认 影响自动更新"`
  312. // Color string `description:"颜色"`
  313. // EdbInfoList []SectionScatterEdbItemResp
  314. // ShowTrendLine bool `description:"是否展示趋势线"`
  315. // ShowFitEquation bool `description:"是否展示方程式"`
  316. // ShowRSquare bool `description:"是否展示R平方"`
  317. // TrendLine string `description:"方程式"`
  318. // RSquare string `description:"R平方的值(决定系数R2)"`
  319. // TrendLimitData []CoordinatePoint `description:"趋势线的前后坐标点"`
  320. //}
  321. // SectionScatterEdbItemResp 截面散点的返回参数
  322. //type SectionScatterEdbItemResp struct {
  323. // XEdbInfoId int `description:"X轴指标id"`
  324. // XDate string `description:"X轴指标实际日期"`
  325. // XName string `description:"X轴指标名称"`
  326. // XNameEn string `description:"X轴指标英文名称"`
  327. // XValue float64 `description:"X轴实际值"`
  328. // YEdbInfoId int `description:"Y轴指标id"`
  329. // YDate string `description:"Y轴指标实际日期"`
  330. // YName string `description:"Y轴指标名称"`
  331. // YNameEn string `description:"Y轴指标英文名称"`
  332. // YValue float64 `description:"Y轴实际值"`
  333. // IsShow bool `description:"是否展示"`
  334. // Name string `description:"标签名称"`
  335. // NameEn string `description:"英文标签名称"`
  336. //}
  337. // CoordinatePoint 坐标点
  338. //type CoordinatePoint struct {
  339. // X float64
  340. // Y float64
  341. //}
  342. // RollingCorrelationChartDataResp 滚动相关性图
  343. //type RollingCorrelationChartDataResp struct {
  344. // XDateTimeValue []string `description:"滚动相关性图的x轴数据,日期数据"`
  345. // YDataList []YData `description:"滚动相关性图的y轴数据"`
  346. //}
  347. //type EdbDataList struct {
  348. // EdbDataId int `description:" 指标数据ID"`
  349. // EdbInfoId int `description:"指标ID"`
  350. // DataTime string //`json:"-" description:"数据日期"`
  351. // DataTimestamp int64 `description:"数据日期"`
  352. // Value float64 `description:"数据值"`
  353. //}
  354. // EditChartInfoExtraConfig 修改 ETA图库 的 图表额外配置
  355. //func EditChartInfoExtraConfig(chartId int, extraConfig string) (err error) {
  356. // o := orm.NewOrmUsingDB("data")
  357. // var pars []interface{}
  358. // pars = append(pars, extraConfig)
  359. //
  360. // sql := ` UPDATE chart_info
  361. // SET
  362. // modify_time = NOW(),
  363. // extra_config = ?
  364. // `
  365. // sql += `WHERE chart_info_id = ?`
  366. //
  367. // pars = append(pars, chartId)
  368. // _, err = o.Raw(sql, pars).Exec()
  369. // if err != nil {
  370. // fmt.Println("UPDATE chart_info Err:", err.Error())
  371. // return err
  372. // }
  373. //
  374. // return
  375. //}
  376. //type SeasonExtraItem struct {
  377. // ChartLegend []SeasonChartLegend `description:"自定义的图例名称"`
  378. // XStartDate string `description:"横坐标显示的起始日"`
  379. // XEndDate string `description:"横坐标显示的截止日"`
  380. // JumpYear int `description:"横坐标日期是否跨年,1跨年,0不跨年"`
  381. //}
  382. //type SeasonChartLegend struct {
  383. // Name string
  384. // Value string
  385. //}
  386. //type QuarterData struct {
  387. // Year int
  388. // DataList []*EdbDataList
  389. // CuttingDataTimestamp int64 `description:"切割的时间戳"`
  390. // ChartLegend string
  391. // Years string
  392. //}
  393. //type QuarterXDateItem struct {
  394. // StartDate time.Time
  395. // EndDate time.Time
  396. // ShowName string
  397. // ChartLegend string
  398. // CuttingDataTimestamp int64 `description:"切割的时间戳"`
  399. //}
  400. //type QuarterDataList []*QuarterData
  401. //
  402. //func (m QuarterDataList) Len() int {
  403. // return len(m)
  404. //}
  405. //
  406. //func (m QuarterDataList) Less(i, j int) bool {
  407. // return m[i].Years < m[j].Years
  408. //}
  409. //
  410. //func (m QuarterDataList) Swap(i, j int) {
  411. // m[i], m[j] = m[j], m[i]
  412. //}
  413. // ChartDetailApiResponse 图表详情接口响应体
  414. type ChartDetailApiResponse struct {
  415. Ret int
  416. Msg string
  417. ErrMsg string
  418. Data *ChartInfoDetailResp
  419. }