chart_theme.go 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. package services
  2. import (
  3. "encoding/json"
  4. "eta/eta_forum_hub/models"
  5. "eta/eta_forum_hub/models/chart_theme/request"
  6. "eta/eta_forum_hub/utils"
  7. "fmt"
  8. "time"
  9. )
  10. func AddOrUpdateChartTheme(req models.ChartTheme) (err error) {
  11. // 查询主题信息是否存在
  12. chartTheme := new(models.ChartTheme)
  13. if req.ChartThemeId > 0 {
  14. var e error
  15. chartTheme, e = models.GetChartThemeId(req.ChartThemeId)
  16. if e != nil && e.Error() != utils.ErrNoRow() {
  17. err = fmt.Errorf("查询主题信息失败 %v", e)
  18. return
  19. }
  20. if e == nil {
  21. if chartTheme.BusinessCode != chartTheme.BusinessCode {
  22. err = fmt.Errorf("更新主题信息失败")
  23. }
  24. chartTheme.ChartThemeName = req.ChartThemeName
  25. chartTheme.ChartThemeTypeId = req.ChartThemeTypeId
  26. chartTheme.Config = req.Config
  27. chartTheme.ChartImage = req.ChartImage
  28. chartTheme.IsDelete = req.IsDelete
  29. chartTheme.SysUserId = req.SysUserId
  30. chartTheme.SysUserRealName = req.SysUserRealName
  31. chartTheme.ModifyTime = time.Now()
  32. // 添加入库
  33. err = chartTheme.Update([]string{})
  34. if err != nil {
  35. err = fmt.Errorf("添加或更新图表主题失败,%v", err)
  36. return
  37. }
  38. return
  39. }
  40. }
  41. chartTheme = &models.ChartTheme{
  42. ChartThemeId: req.ChartThemeId,
  43. ChartThemeName: req.ChartThemeName,
  44. ChartThemeTypeId: req.ChartThemeTypeId,
  45. Config: req.Config,
  46. ChartImage: req.ChartImage,
  47. IsDelete: req.IsDelete,
  48. SysUserId: req.SysUserId,
  49. SysUserRealName: req.SysUserRealName,
  50. ModifyTime: time.Now(),
  51. CreateTime: time.Now(),
  52. BusinessCode: req.BusinessCode,
  53. }
  54. // 添加入库
  55. err = chartTheme.Add()
  56. if err != nil {
  57. err = fmt.Errorf("添加或更新图表主题失败,%v", err)
  58. return
  59. }
  60. return
  61. }
  62. func AddOrUpdateChartThemeType(req models.ChartThemeType) (err error) {
  63. // 查询主题信息是否存在
  64. chartThemeType := new(models.ChartThemeType)
  65. if req.ChartThemeTypeId > 0 {
  66. var e error
  67. chartThemeType, e = models.GetChartThemeTypeById(req.ChartThemeTypeId)
  68. if e != nil && e.Error() != utils.ErrNoRow() {
  69. err = fmt.Errorf("查询主题信息失败 %v", e)
  70. return
  71. }
  72. if e == nil {
  73. // 添加入库
  74. chartThemeType.ChartTypeName = req.ChartTypeName
  75. chartThemeType.ChartType = req.ChartType
  76. chartThemeType.DefaultChartThemeId = req.DefaultChartThemeId
  77. chartThemeType.ChartSource = req.ChartSource
  78. chartThemeType.ModifyTime = time.Now()
  79. err = chartThemeType.Update([]string{})
  80. if err != nil {
  81. err = fmt.Errorf("添加或更新图表主题失败,%v", err)
  82. return
  83. }
  84. return
  85. }
  86. }
  87. chartThemeType = &models.ChartThemeType{
  88. ChartTypeName: req.ChartTypeName,
  89. ChartType: req.ChartType,
  90. ChartSource: req.ChartSource,
  91. DefaultChartThemeId: req.DefaultChartThemeId,
  92. ModifyTime: time.Now(),
  93. CreateTime: time.Now(),
  94. }
  95. // 添加入库
  96. err = chartThemeType.Add()
  97. if err != nil {
  98. err = fmt.Errorf("添加或更新图表主题失败,%v", err)
  99. return
  100. }
  101. return
  102. }
  103. // GetChartThemeConfig
  104. // @Description: 根据主题id获取主题信息,如果获取不到的话,那么就获取默认的主题
  105. // @author: Roc
  106. // @datetime 2023-12-19 14:31:17
  107. // @param chartThemeId int
  108. // @param chartType int
  109. // @param source int
  110. // @return chartTheme *models.ChartTheme
  111. // @return err error
  112. func GetChartThemeConfig(chartThemeId, source, chartType int) (chartTheme *models.ChartTheme, err error) {
  113. chartTheme, err = models.GetChartThemeId(chartThemeId)
  114. if err != nil && err.Error() != utils.ErrNoRow() {
  115. return
  116. }
  117. err = nil
  118. // 如果找到了,那么就返回
  119. if chartTheme != nil {
  120. // 兼容历史数据,加入新字段LineOptionList
  121. newConfig, e := ConvertOldChartOptions(chartTheme.Config)
  122. if e == nil {
  123. chartTheme.Config = newConfig
  124. }
  125. return
  126. }
  127. // 没有找到的话,那么就找默认的主题
  128. // 查找主题类型id
  129. chartThemeType, err := models.GetChartThemeTypeByChartTypeAndSource(chartType, source)
  130. if err != nil {
  131. return
  132. }
  133. // 寻找默认的主题id
  134. chartTheme, err = models.GetChartThemeId(chartThemeType.DefaultChartThemeId)
  135. if err != nil && err.Error() != utils.ErrNoRow() {
  136. return
  137. }
  138. err = nil
  139. // 如果找到了,那么就返回
  140. if chartTheme != nil {
  141. // 兼容历史数据,加入新字段LineOptionList
  142. newConfig, e := ConvertOldChartOptions(chartTheme.Config)
  143. if e == nil {
  144. chartTheme.Config = newConfig
  145. }
  146. return
  147. }
  148. // 如果还是没找到,那就系统的主题id
  149. chartTheme, err = models.GetSystemChartTheme(chartThemeType.ChartThemeTypeId)
  150. // 兼容历史数据,加入新字段LineOptionList
  151. newConfig, e := ConvertOldChartOptions(chartTheme.Config)
  152. if e == nil {
  153. chartTheme.Config = newConfig
  154. }
  155. return
  156. }
  157. // 兼容历史数据,加入新字段LineOptionList
  158. func ConvertOldChartOptions(config string) (newConfig string, err error) {
  159. var oldTheme request.OldChartOptions
  160. var newTheme request.NewChartOptions
  161. err = json.Unmarshal([]byte(config), &oldTheme)
  162. if err != nil {
  163. return
  164. }
  165. if oldTheme.LineOptionList != nil && len(oldTheme.LineOptionList) > 0 {
  166. newConfig = config
  167. return
  168. }
  169. newTheme.OldChartOptions = oldTheme
  170. for i := 0; i < 10; i++ {
  171. newLineOption := request.NewLineOptions{
  172. LineOptions: oldTheme.LineOptions,
  173. Color: oldTheme.ColorsOptions[i],
  174. DataMark: "none",
  175. MarkType: "square",
  176. MarkSize: 5,
  177. MarkColor: oldTheme.ColorsOptions[i],
  178. }
  179. newTheme.LineOptionList = append(newTheme.LineOptionList, newLineOption)
  180. }
  181. newThemeStr, _ := json.Marshal(newTheme)
  182. newConfig = string(newThemeStr)
  183. return
  184. }