chart_series.go 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261
  1. package models
  2. import (
  3. "encoding/json"
  4. "eta/eta_forum_hub/utils"
  5. "fmt"
  6. "github.com/beego/beego/v2/client/orm"
  7. "time"
  8. )
  9. type ChartSeries struct {
  10. ChartSeriesId int `orm:"column(chart_series_id);pk"`
  11. SeriesName string `description:"系列名称"`
  12. SeriesNameEn string `description:"系列英文名称"`
  13. ChartInfoId int `description:"图表ID"`
  14. ChartStyle string `description:"图表类型"`
  15. ChartColor string `description:"颜色"`
  16. ChartWidth int `description:"线条大小"`
  17. IsPoint int `description:"是否用数据点展示(0 否,1是)"`
  18. IsNumber int `description:"是否用数值展示(0 否,1是)"`
  19. IsAxis int `description:"1:左轴,0:右轴"`
  20. MaxData float64 `description:"上限"`
  21. MinData float64 `description:"下限"`
  22. IsOrder bool `description:"true:正序,false:逆序"`
  23. CreateTime time.Time `description:"创建时间"`
  24. ModifyTime time.Time `description:"修改时间"`
  25. }
  26. func (c *ChartSeries) TableName() string {
  27. return "chart_series"
  28. }
  29. func GetChartSeriesByChartInfoId(chartInfoId int) (items []*ChartSeries, err error) {
  30. o := orm.NewOrm()
  31. sql := "SELECT * FROM chart_series WHERE chart_info_id = ?"
  32. _, err = o.Raw(sql, chartInfoId).QueryRows(&items)
  33. return
  34. }
  35. // EditChartSeriesAndEdbMapping
  36. func EditChartSeriesAndEdbMapping(seriesList []*ChartSeries, seriesEdbInfoList []*ChartSeriesEdbMapping, chartInfoId int) (err error) {
  37. o := orm.NewOrm()
  38. to, err := o.Begin()
  39. if err != nil {
  40. return
  41. }
  42. defer func() {
  43. if err != nil {
  44. _ = to.Rollback()
  45. } else {
  46. _ = to.Commit()
  47. }
  48. }()
  49. // 获取已经存在的系列
  50. series, err := GetChartSeriesByChartInfoId(chartInfoId)
  51. if err != nil {
  52. return
  53. }
  54. //整理成系列map
  55. seriesMap := make(map[string]int)
  56. seriesDeleteMap := make(map[string]struct{})
  57. for _, v := range series {
  58. seriesMap[v.SeriesName] = v.ChartSeriesId
  59. seriesDeleteMap[v.SeriesName] = struct{}{}
  60. }
  61. // 删除所有的指标映射
  62. _, err = o.Raw("DELETE FROM chart_series_edb_mapping WHERE chart_info_id = ?", chartInfoId).Exec()
  63. if err != nil {
  64. return
  65. }
  66. seriesEdbMap := make(map[int][]*ChartSeriesEdbMapping)
  67. for _, v := range seriesEdbInfoList {
  68. seriesEdbMap[v.ChartSeriesId] = append(seriesEdbMap[v.ChartSeriesId], v)
  69. }
  70. for _, v := range seriesList {
  71. tmp := &ChartSeries{
  72. SeriesName: v.SeriesName,
  73. SeriesNameEn: v.SeriesNameEn,
  74. ChartInfoId: chartInfoId,
  75. ChartStyle: v.ChartStyle,
  76. ChartColor: v.ChartColor,
  77. ChartWidth: v.ChartWidth,
  78. IsPoint: v.IsPoint,
  79. IsNumber: v.IsNumber,
  80. IsAxis: v.IsAxis,
  81. MaxData: v.MaxData,
  82. MinData: v.MinData,
  83. ModifyTime: time.Now(),
  84. }
  85. seriesId, ok := seriesMap[v.SeriesName]
  86. if !ok {
  87. //新增
  88. tmp.CreateTime = time.Now()
  89. seriesIdTmp, e := to.Insert(tmp)
  90. if e != nil {
  91. err = fmt.Errorf("AddChartSeries Err:" + e.Error())
  92. return
  93. }
  94. seriesId = int(seriesIdTmp)
  95. } else {
  96. //编辑
  97. tmp.ChartSeriesId = seriesId
  98. delete(seriesDeleteMap, v.SeriesName)
  99. _, e := to.Update(tmp)
  100. if e != nil {
  101. err = fmt.Errorf("UpdateChartSeries Err:" + e.Error())
  102. return
  103. }
  104. }
  105. addSeriesEdbList := make([]*ChartSeriesEdbMapping, 0)
  106. mappingList, ok := seriesEdbMap[v.ChartSeriesId]
  107. if ok {
  108. for _, edbItem := range mappingList {
  109. dateConfStrByte, e := json.Marshal(edbItem.DateConf)
  110. if e != nil {
  111. err = e
  112. return
  113. }
  114. dateConfStr := string(dateConfStrByte)
  115. edbTmp := &ChartSeriesEdbMapping{
  116. ChartSeriesId: seriesId, //todo 系列ID
  117. ChartInfoId: chartInfoId, //todo 表图ID
  118. EdbInfoId: edbItem.EdbInfoId,
  119. //EdbAliasName: "",
  120. //EdbAliasNameEn: "",
  121. DateConfName: edbItem.DateConfName,
  122. DateConf: dateConfStr,
  123. DateConfType: edbItem.DateConfType,
  124. CreateTime: time.Now(),
  125. ModifyTime: time.Now(),
  126. }
  127. addSeriesEdbList = append(addSeriesEdbList, edbTmp)
  128. }
  129. if len(addSeriesEdbList) > 0 {
  130. _, err = to.InsertMulti(len(addSeriesEdbList), addSeriesEdbList)
  131. if err != nil {
  132. err = fmt.Errorf("AddChartSeries Err:" + err.Error())
  133. return
  134. }
  135. }
  136. }
  137. }
  138. //删除旧的系列和ID
  139. seriesNames := make([]string, 0)
  140. for name, _ := range seriesDeleteMap {
  141. seriesNames = append(seriesNames, name)
  142. }
  143. if len(seriesNames) > 0 {
  144. sql := `DELETE FROM chart_series WHERE series_name IN (` + utils.GetOrmInReplace(len(seriesNames)) + `) and chart_info_id=?`
  145. _, err = to.Raw(sql, seriesNames, chartInfoId).Exec()
  146. if err != nil {
  147. err = fmt.Errorf("删除系列失败 Err:" + err.Error())
  148. return
  149. }
  150. }
  151. return
  152. }
  153. func AddChartSeriesAndEdbMapping(seriesList []*ChartSeries, seriesEdbInfoList []*ChartSeriesEdbMapping, chartInfoId int) (err error) {
  154. o := orm.NewOrm()
  155. to, err := o.Begin()
  156. if err != nil {
  157. return
  158. }
  159. defer func() {
  160. if err != nil {
  161. _ = to.Rollback()
  162. } else {
  163. _ = to.Commit()
  164. }
  165. }()
  166. seriesEdbMap := make(map[int][]*ChartSeriesEdbMapping)
  167. for _, v := range seriesEdbInfoList {
  168. seriesEdbMap[v.ChartSeriesId] = append(seriesEdbMap[v.ChartSeriesId], v)
  169. }
  170. for _, v := range seriesList {
  171. tmp := &ChartSeries{
  172. SeriesName: v.SeriesName,
  173. SeriesNameEn: v.SeriesNameEn,
  174. ChartInfoId: chartInfoId,
  175. ChartStyle: v.ChartStyle,
  176. ChartColor: v.ChartColor,
  177. ChartWidth: v.ChartWidth,
  178. IsPoint: v.IsPoint,
  179. IsNumber: v.IsNumber,
  180. IsAxis: v.IsAxis,
  181. MaxData: v.MaxData,
  182. MinData: v.MinData,
  183. CreateTime: time.Now(),
  184. ModifyTime: time.Now(),
  185. }
  186. seriesIdTmp, e := to.Insert(tmp)
  187. if e != nil {
  188. err = fmt.Errorf("AddChartSeries Err:" + e.Error())
  189. return
  190. }
  191. seriesId := int(seriesIdTmp)
  192. addSeriesEdbList := make([]*ChartSeriesEdbMapping, 0)
  193. mappingList, ok := seriesEdbMap[v.ChartSeriesId]
  194. if ok {
  195. for _, edbItem := range mappingList {
  196. dateConfStrByte, e := json.Marshal(edbItem.DateConf)
  197. if e != nil {
  198. err = e
  199. return
  200. }
  201. dateConfStr := string(dateConfStrByte)
  202. edbTmp := &ChartSeriesEdbMapping{
  203. ChartSeriesId: seriesId, //todo 系列ID
  204. ChartInfoId: chartInfoId, //todo 表图ID
  205. EdbInfoId: edbItem.EdbInfoId,
  206. //EdbAliasName: "",
  207. //EdbAliasNameEn: "",
  208. DateConfName: edbItem.DateConfName,
  209. DateConfType: edbItem.DateConfType,
  210. DateConf: dateConfStr,
  211. CreateTime: time.Now(),
  212. ModifyTime: time.Now(),
  213. }
  214. addSeriesEdbList = append(addSeriesEdbList, edbTmp)
  215. }
  216. if len(addSeriesEdbList) > 0 {
  217. _, e = to.InsertMulti(len(addSeriesEdbList), addSeriesEdbList)
  218. if e != nil {
  219. err = fmt.Errorf("AddChartSeries Err:" + e.Error())
  220. return
  221. }
  222. }
  223. }
  224. }
  225. return
  226. }
  227. func DeleteChartSeriesAndEdbMapping(chartInfoId int) (err error) {
  228. o := orm.NewOrm()
  229. to, err := o.Begin()
  230. if err != nil {
  231. return
  232. }
  233. defer func() {
  234. if err != nil {
  235. _ = to.Rollback()
  236. } else {
  237. _ = to.Commit()
  238. }
  239. }()
  240. sql := ` DELETE FROM chart_series WHERE chart_info_id=? `
  241. _, err = to.Raw(sql, chartInfoId).Exec()
  242. if err != nil {
  243. return
  244. }
  245. sql = ` DELETE FROM chart_series_edb_mapping WHERE chart_info_id=? `
  246. _, err = to.Raw(sql, chartInfoId).Exec()
  247. return
  248. }