excel_chart_edb.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  1. package excel
  2. import (
  3. "eta/eta_api/models/data_manage"
  4. "eta/eta_api/utils"
  5. "fmt"
  6. "github.com/beego/beego/v2/client/orm"
  7. "time"
  8. )
  9. type ExcelChartEdb struct {
  10. ExcelChartEdbId int `orm:"column(excel_chart_edb_id);pk"`
  11. ExcelInfoId int `description:"表格id"`
  12. ChartInfoId int `description:"图表id"`
  13. EdbCode string `description:"指标编码"`
  14. EdbName string `description:"指标名称"`
  15. DateSequence string `description:"日期序列选区"`
  16. DataSequence string `description:"数据序列选区"`
  17. SysUserId int `description:"创建人"`
  18. SysUserRealName string `description:"创建人姓名"`
  19. MaxData float64 `description:"上限"`
  20. MinData float64 `description:"下限"`
  21. IsOrder bool `description:"true:正序,false:逆序"`
  22. IsAxis int `description:"true:左轴,false:右轴"`
  23. EdbInfoType int `description:"true:标准指标,false:领先指标"`
  24. LeadValue int `description:"领先值"`
  25. LeadUnit string `description:"领先单位"`
  26. FromTag string `description:"标签"`
  27. ModifyTime time.Time `description:"修改时间"`
  28. CreateTime time.Time `description:"创建时间"`
  29. }
  30. func (e *ExcelChartEdb) TableName() string {
  31. return "excel_chart_edb"
  32. }
  33. // 新增
  34. func (e *ExcelChartEdb) Add() (err error) {
  35. o := orm.NewOrmUsingDB("data")
  36. _, err = o.Insert(e)
  37. return
  38. }
  39. // 修改
  40. func (e *ExcelChartEdb) Update(cols []string) (err error) {
  41. o := orm.NewOrmUsingDB("data")
  42. _, err = o.Update(e, cols...)
  43. return
  44. }
  45. // 删除
  46. func (e *ExcelChartEdb) Delete() (err error) {
  47. o := orm.NewOrmUsingDB("data")
  48. _, err = o.Delete(e)
  49. return
  50. }
  51. type AddChartEdbAndDataItem struct {
  52. ChartEdb *ExcelChartEdb
  53. DateList []string `description:"日期列表"`
  54. ValList []float64 `description:"数据列表"`
  55. }
  56. // 同时添加指标和指标数据
  57. func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *data_manage.ChartInfo) (err error) {
  58. o, err := orm.NewOrmUsingDB("data").Begin()
  59. if err != nil {
  60. return
  61. }
  62. defer func() {
  63. if err != nil {
  64. _ = o.Rollback()
  65. } else {
  66. _ = o.Commit()
  67. }
  68. }()
  69. // 图表指标信息入库
  70. updateIds := make([]int, 0)
  71. for _, item := range list {
  72. err = addChartEdbAndData(o, item.ChartEdb, item.DateList, item.ValList)
  73. if err != nil {
  74. return
  75. }
  76. updateIds = append(updateIds, item.ChartEdb.ExcelChartEdbId)
  77. }
  78. //新增图表
  79. chartInfoId, err := o.Insert(chartInfo)
  80. if err != nil {
  81. return
  82. }
  83. //更新图表id
  84. sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `)`
  85. _, err = o.Raw(sql, chartInfoId).Exec()
  86. return
  87. }
  88. func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dateList []string, valList []float64) (err error) {
  89. // 图表指标信息入库
  90. lastId, err := o.Insert(chartEdb)
  91. if err != nil {
  92. return
  93. }
  94. chartEdb.ExcelChartEdbId = int(lastId)
  95. // 图表指标数据入库
  96. addList := make([]*ExcelChartData, 0)
  97. if len(dateList) > 0 && len(valList) > 0 {
  98. for k, v := range dateList {
  99. chartData := &ExcelChartData{
  100. ExcelInfoId: chartEdb.ExcelInfoId,
  101. ExcelChartEdbId: chartEdb.ExcelChartEdbId,
  102. DataTime: v,
  103. Value: valList[k],
  104. ModifyTime: time.Now(),
  105. CreateTime: time.Now(),
  106. }
  107. //时间戳
  108. currentDate, er := time.Parse(utils.FormatDate, v)
  109. if er != nil {
  110. err = fmt.Errorf("时间格式化失败 err:%v", er)
  111. return
  112. }
  113. timestamp := currentDate.UnixNano() / 1e6
  114. chartData.DataTimestamp = timestamp
  115. addList = append(addList, chartData)
  116. // data信息入库
  117. if len(addList) > 1000 {
  118. _, err = o.InsertMulti(len(addList), len(addList))
  119. if err != nil {
  120. return
  121. }
  122. addList = addList[:0]
  123. }
  124. }
  125. }
  126. // data信息入库
  127. if len(addList) > 0 {
  128. _, err = o.InsertMulti(len(addList), len(addList))
  129. if err != nil {
  130. return
  131. }
  132. }
  133. return
  134. }