excel_chart_edb.go 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  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. "strconv"
  8. "strings"
  9. "time"
  10. )
  11. type ExcelChartEdb struct {
  12. ExcelChartEdbId int `orm:"column(excel_chart_edb_id);pk"`
  13. ExcelInfoId int `description:"表格id"`
  14. ChartInfoId int `description:"图表id"`
  15. EdbCode string `description:"指标编码"`
  16. EdbName string `description:"指标名称"`
  17. DateSequence string `description:"日期序列选区"`
  18. DataSequence string `description:"数据序列选区"`
  19. SysUserId int `description:"创建人"`
  20. SysUserRealName string `description:"创建人姓名"`
  21. MaxData float64 `description:"上限"`
  22. MinData float64 `description:"下限"`
  23. IsOrder bool `description:"true:正序,false:逆序"`
  24. IsAxis int `description:"true:左轴,false:右轴"`
  25. EdbInfoType int `description:"true:标准指标,false:领先指标"`
  26. LeadValue int `description:"领先值"`
  27. LeadUnit string `description:"领先单位"`
  28. FromTag string `description:"标签"`
  29. ModifyTime time.Time `description:"修改时间"`
  30. CreateTime time.Time `description:"创建时间"`
  31. }
  32. func (e *ExcelChartEdb) TableName() string {
  33. return "excel_chart_edb"
  34. }
  35. // 新增
  36. func (e *ExcelChartEdb) Add() (err error) {
  37. o := orm.NewOrmUsingDB("data")
  38. _, err = o.Insert(e)
  39. return
  40. }
  41. // 修改
  42. func (e *ExcelChartEdb) Update(cols []string) (err error) {
  43. o := orm.NewOrmUsingDB("data")
  44. _, err = o.Update(e, cols...)
  45. return
  46. }
  47. // 删除
  48. func (e *ExcelChartEdb) Delete() (err error) {
  49. o := orm.NewOrmUsingDB("data")
  50. _, err = o.Delete(e)
  51. return
  52. }
  53. type AddChartEdbAndDataItem struct {
  54. ChartEdb *ExcelChartEdb
  55. DateList []string `description:"日期列表"`
  56. ValList []float64 `description:"数据列表"`
  57. }
  58. // 同时添加指标和指标数据
  59. func (e *ExcelChartEdb) AddChartEdbAndData(list []*AddChartEdbAndDataItem, chartInfo *data_manage.ChartInfo, deleteEdbIds []int) (err error) {
  60. o, err := orm.NewOrmUsingDB("data").Begin()
  61. if err != nil {
  62. return
  63. }
  64. defer func() {
  65. if err != nil {
  66. _ = o.Rollback()
  67. } else {
  68. _ = o.Commit()
  69. }
  70. }()
  71. // 先删除原先的绑定的指标
  72. if len(deleteEdbIds) > 0 && chartInfo.ChartInfoId > 0 {
  73. sql := `DELETE FROM excel_chart_edb WHERE excel_chart_info_id = ? AND excel_chart_edb_id in (` + utils.GetOrmInReplace(len(deleteEdbIds)) + `)`
  74. _, err = o.Raw(sql, chartInfo.ChartInfoId, deleteEdbIds).Exec()
  75. if err != nil {
  76. err = fmt.Errorf("删除原先的指标失败:%v", err)
  77. return
  78. }
  79. }
  80. // 图表指标信息入库
  81. updateIds := make([]int, 0)
  82. var edbInfoIdArrStr []string
  83. for _, item := range list {
  84. err = addChartEdbAndData(o, item.ChartEdb, item.DateList, item.ValList)
  85. if err != nil {
  86. return
  87. }
  88. updateIds = append(updateIds, item.ChartEdb.ExcelChartEdbId)
  89. edbInfoIdArrStr = append(edbInfoIdArrStr, strconv.Itoa(item.ChartEdb.ExcelChartEdbId))
  90. }
  91. //新增图表
  92. chartInfoId := chartInfo.ChartInfoId
  93. if chartInfo.ChartInfoId <= 0 {
  94. lastId, e := o.Insert(chartInfo)
  95. if e != nil {
  96. err = fmt.Errorf("新增图表失败,AddChartEdbAndData: %v", e)
  97. return
  98. }
  99. chartInfoId = int(lastId)
  100. } else {
  101. _, err = o.Update(chartInfo)
  102. if err != nil {
  103. err = fmt.Errorf("更新图表失败,AddChartEdbAndData: %v", e)
  104. return
  105. }
  106. }
  107. //更新图表id
  108. sql := `update excel_chart_edb set chart_info_id = ? where excel_chart_edb_id in (` + utils.GetOrmInReplace(len(updateIds)) + `)`
  109. _, err = o.Raw(sql, chartInfoId, updateIds).Exec()
  110. if len(edbInfoIdArrStr) > 0 {
  111. edbInfoIdStr := strings.Join(edbInfoIdArrStr, ",")
  112. //更新图表关联的指标id
  113. sql = `update chart_info set edb_info_ids = ? where chart_info_id = ?`
  114. _, err = o.Raw(sql, edbInfoIdStr, chartInfoId).Exec()
  115. }
  116. return
  117. }
  118. func addChartEdbAndData(o orm.TxOrmer, chartEdb *ExcelChartEdb, dateList []string, valList []float64) (err error) {
  119. // 图表指标信息入库
  120. excelChartEdbId := chartEdb.ExcelChartEdbId
  121. if chartEdb.ExcelChartEdbId <= 0 {
  122. lastId, e := o.Insert(chartEdb)
  123. if e != nil {
  124. err = fmt.Errorf("新增指标失败,addChartEdbAndData: %v", e)
  125. return
  126. }
  127. excelChartEdbId = int(lastId)
  128. } else {
  129. _, e := o.Update(chartEdb)
  130. if e != nil {
  131. err = fmt.Errorf("更新指标失败,addChartEdbAndData: %v", e)
  132. return
  133. }
  134. //如果有数据则删除所有的数据
  135. sql := `delete from excel_chart_data where excel_chart_edb_id = ?`
  136. _, err = o.Raw(sql, excelChartEdbId).Exec()
  137. if err != nil {
  138. return
  139. }
  140. }
  141. chartEdb.ExcelChartEdbId = excelChartEdbId
  142. // 图表指标数据入库
  143. addList := make([]*ExcelChartData, 0)
  144. if len(dateList) > 0 && len(valList) > 0 {
  145. for k, v := range dateList {
  146. chartData := &ExcelChartData{
  147. ExcelInfoId: chartEdb.ExcelInfoId,
  148. ExcelChartEdbId: chartEdb.ExcelChartEdbId,
  149. DataTime: v,
  150. Value: valList[k],
  151. ModifyTime: time.Now(),
  152. CreateTime: time.Now(),
  153. }
  154. //时间戳
  155. currentDate, er := time.Parse(utils.FormatDate, v)
  156. if er != nil {
  157. err = fmt.Errorf("时间格式化失败 err:%v", er)
  158. return
  159. }
  160. timestamp := currentDate.UnixNano() / 1e6
  161. chartData.DataTimestamp = timestamp
  162. addList = append(addList, chartData)
  163. // data信息入库
  164. if len(addList) > 1000 {
  165. _, err = o.InsertMulti(len(addList), len(addList))
  166. if err != nil {
  167. return
  168. }
  169. addList = addList[:0]
  170. }
  171. }
  172. }
  173. // data信息入库
  174. if len(addList) > 0 {
  175. _, err = o.InsertMulti(len(addList), len(addList))
  176. if err != nil {
  177. return
  178. }
  179. }
  180. return
  181. }
  182. func GetExcelChartEdbMappingByExcelInfoId(excelInfoId int) (list []*ExcelChartEdb, err error) {
  183. o := orm.NewOrmUsingDB("data")
  184. sql := ` SELECT *
  185. FROM excel_chart_edb
  186. WHERE excel_info_id=?
  187. ORDER BY excel_chart_edb_id ASC `
  188. _, err = o.Raw(sql, excelInfoId).QueryRows(&list)
  189. return
  190. }
  191. func GetExcelChartEdbById(id int) (item *ExcelChartEdb, err error) {
  192. o := orm.NewOrmUsingDB("data")
  193. sql := ` SELECT * FROM excel_chart_edb WHERE excel_chart_edb_id=? `
  194. err = o.Raw(sql, id).QueryRow(&item)
  195. return
  196. }
  197. func GetExcelChartEdbMappingByChartInfoId(chartInfoId int) (list []*ExcelChartEdb, err error) {
  198. o := orm.NewOrmUsingDB("data")
  199. sql := ` SELECT *
  200. FROM excel_chart_edb
  201. WHERE chart_info_id=?
  202. ORDER BY excel_chart_edb_id ASC `
  203. _, err = o.Raw(sql, chartInfoId).QueryRows(&list)
  204. return
  205. }