chart.go 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hongze_chart_lib/models"
  6. "hongze/hongze_chart_lib/models/data_manage"
  7. "hongze/hongze_chart_lib/services/data"
  8. "hongze/hongze_chart_lib/utils"
  9. "strconv"
  10. "time"
  11. )
  12. //图表
  13. type ChartController struct {
  14. BaseAuthController
  15. }
  16. // ChartInfoDetail
  17. // @Title 获取图表详情
  18. // @Description 获取图表详情接口
  19. // @Param UniqueCode query string true "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  20. // @Success 200 {object} data_manage.ChartInfoDetailResp
  21. // @router /detail [get]
  22. func (this *ChartController) ChartInfoDetail() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. uniqueCode := this.GetString("UniqueCode")
  29. if uniqueCode == "" {
  30. br.Msg = "参数错误"
  31. br.ErrMsg = "参数错误,uniqueCode is empty"
  32. return
  33. }
  34. key := utils.HZ_CHART_LIB_DETAIL + uniqueCode
  35. resp := new(models.ChartInfoDetailResp)
  36. //判断是否有缓存
  37. if utils.Re == nil {
  38. if utils.Re == nil && utils.Rc.IsExist(key) {
  39. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  40. err := json.Unmarshal(data, &resp)
  41. if err == nil && resp != nil {
  42. br.Ret = 200
  43. br.Success = true
  44. br.Msg = "获取成功"
  45. br.Data = resp
  46. fmt.Println("source redis")
  47. return
  48. }
  49. }
  50. }
  51. }
  52. chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
  53. if err != nil {
  54. if err.Error() == utils.ErrNoRow() {
  55. br.Msg = "该图已被删除,请刷新页面"
  56. br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
  57. return
  58. }
  59. br.Msg = "获取失败"
  60. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  61. return
  62. }
  63. chartInfoId := chartInfo.ChartInfoId
  64. dateType := chartInfo.DateType
  65. if dateType <= 0 {
  66. dateType = 3
  67. }
  68. startDate := chartInfo.StartDate
  69. endDate := chartInfo.EndDate
  70. seasonStartDate := chartInfo.SeasonStartDate
  71. seasonEndDate := chartInfo.SeasonEndDate
  72. calendar := chartInfo.Calendar
  73. chartType := chartInfo.ChartType
  74. if calendar == "" {
  75. calendar = "公历"
  76. }
  77. switch dateType {
  78. case 1:
  79. startDate = "2000-01-01"
  80. //endDate = time.Now().Format(utils.FormatDate)
  81. endDate = ""
  82. case 2:
  83. startDate = "2010-01-01"
  84. //endDate = time.Now().Format(utils.FormatDate)
  85. endDate = ""
  86. case 3:
  87. startDate = "2015-01-01"
  88. //endDate = time.Now().Format(utils.FormatDate)
  89. endDate = ""
  90. case 4:
  91. startDate = strconv.Itoa(time.Now().Year()) + "-01-01"
  92. startDate = "2021-01-01"
  93. //endDate = time.Now().Format(utils.FormatDate)
  94. endDate = ""
  95. case 5:
  96. startDate = startDate + "-01"
  97. endDate = endDate + "-01"
  98. case 6:
  99. startDate = startDate + "-01"
  100. //endDate = time.Now().Format(utils.FormatDate)
  101. endDate = ""
  102. case 7:
  103. startDate = "2018-01-01"
  104. //endDate = time.Now().Format(utils.FormatDate)
  105. endDate = ""
  106. case 8:
  107. startDate = "2019-01-01"
  108. //endDate = time.Now().Format(utils.FormatDate)
  109. endDate = ""
  110. case 9:
  111. startDate = "2020-01-01"
  112. //endDate = time.Now().Format(utils.FormatDate)
  113. endDate = ""
  114. case 11:
  115. startDate = "2022-01-01"
  116. endDate = ""
  117. }
  118. if chartType == 2 {
  119. if seasonStartDate != "" {
  120. startDate = seasonStartDate + "-01-01"
  121. } else {
  122. fivePre := time.Now().AddDate(-4, 0, 0).Year()
  123. startDate = strconv.Itoa(fivePre) + "-01-01"
  124. }
  125. if seasonEndDate != "" {
  126. endDate = seasonEndDate + "-12-31"
  127. } else {
  128. //endDate = time.Now().Format(utils.FormatDate)
  129. endDate = ""
  130. }
  131. }
  132. mappingList, err := models.GetChartEdbMappingList(chartInfoId)
  133. if err != nil {
  134. br.Msg = "获取失败"
  135. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  136. return
  137. }
  138. var barConfig data_manage.BarChartInfoReq
  139. barChartInfoDateList := make([]data_manage.BarChartInfoDateReq, 0)
  140. barChartInfoSort := data_manage.BarChartInfoSortReq{}
  141. // 柱方图的一些配置
  142. if chartInfo != nil && chartInfo.ChartType == 7 {
  143. if chartInfo.BarConfig == `` {
  144. br.Msg = "柱方图未配置"
  145. br.ErrMsg = "柱方图未配置"
  146. return
  147. }
  148. err := json.Unmarshal([]byte(chartInfo.BarConfig), &barConfig)
  149. if err != nil {
  150. br.Msg = "柱方图配置异常"
  151. br.ErrMsg = "柱方图配置异常"
  152. return
  153. }
  154. barChartInfoDateList = barConfig.DateList
  155. barChartInfoSort = barConfig.Sort
  156. // 指标别名
  157. for _, v := range mappingList {
  158. for _, confEdb := range barConfig.EdbInfoIdList {
  159. if v.EdbInfoId == confEdb.EdbInfoId {
  160. v.EdbAliasName = confEdb.Name
  161. }
  162. }
  163. }
  164. }
  165. edbList, xEdbIdValue, yDataList, err := data.GetChartEdbData(chartInfoId, chartType, calendar, startDate, endDate, mappingList, barChartInfoDateList, barChartInfoSort)
  166. if err != nil {
  167. br.Msg = "获取失败"
  168. br.ErrMsg = "获取图表,指标信息失败,Err:" + err.Error()
  169. return
  170. }
  171. for _, v := range edbList {
  172. // 指标别名
  173. if barConfig.EdbInfoIdList != nil && len(barConfig.EdbInfoIdList) > 0 {
  174. for _, reqEdb := range barConfig.EdbInfoIdList {
  175. if v.EdbInfoId == reqEdb.EdbInfoId {
  176. v.EdbAliasName = reqEdb.Name
  177. }
  178. }
  179. }
  180. }
  181. resp.ChartInfo = chartInfo
  182. resp.EdbInfoList = edbList
  183. resp.XEdbIdValue = xEdbIdValue
  184. resp.YDataList = yDataList
  185. if utils.Re == nil {
  186. data, _ := json.Marshal(resp)
  187. utils.Rc.Put(key, data, 10*time.Minute)
  188. }
  189. br.Ret = 200
  190. br.Success = true
  191. br.Msg = "获取成功"
  192. br.Data = resp
  193. }
  194. // ChartInfoRefresh
  195. // @Title 图表刷新接口
  196. // @Description 图表刷新接口
  197. // @Param UniqueCode query string true "图表唯一编码,如果是管理后台访问,传固定字符串:7c69b590249049942070ae9dcd5bf6dc"
  198. // @Success Ret=200 刷新成功
  199. // @router /refresh [get]
  200. func (this *ChartController) ChartInfoRefresh() {
  201. br := new(models.BaseResponse).Init()
  202. chartId := 0
  203. defer func() {
  204. // 添加日志
  205. if chartId > 0 {
  206. shareChartRefreshLogInfo := &models.ShareChartRefreshLog{
  207. Ip: this.Ctx.Input.IP(),
  208. ChartId: chartId,
  209. CreateTime: time.Now(),
  210. }
  211. models.AddShareChartRefreshLog(shareChartRefreshLogInfo)
  212. }
  213. this.Data["json"] = br
  214. this.ServeJSON()
  215. }()
  216. uniqueCode := this.GetString("UniqueCode")
  217. if uniqueCode == "" {
  218. br.Msg = "参数错误"
  219. br.ErrMsg = "参数错误,uniqueCode is empty"
  220. return
  221. }
  222. chartInfo, err := models.GetChartInfoByUniqueCode(uniqueCode)
  223. if err != nil {
  224. if err.Error() == utils.ErrNoRow() {
  225. br.Msg = "该图已被删除,请刷新页面"
  226. br.ErrMsg = "该图已被删除,请刷新页面,Err:" + err.Error()
  227. return
  228. }
  229. br.Msg = "获取失败"
  230. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  231. return
  232. }
  233. chartId = chartInfo.ChartInfoId
  234. //err = data.ChartInfoRefresh(chartInfo.ChartInfoId)
  235. //if err != nil {
  236. // br.Msg = "刷新失败"
  237. // br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  238. // return
  239. //}
  240. err = data.ChartInfoRefreshV2(chartInfo.ChartInfoId)
  241. if err != nil {
  242. br.Msg = "刷新失败"
  243. br.ErrMsg = "刷新图表关联指标信息失败,Err:" + err.Error()
  244. return
  245. }
  246. //清除数据缓存
  247. key := utils.HZ_CHART_LIB_DETAIL + uniqueCode
  248. if utils.Re == nil {
  249. utils.Rc.Delete(key)
  250. }
  251. br.Ret = 200
  252. br.Success = true
  253. br.Msg = "刷新成功"
  254. }
  255. // 获取频度的英文版
  256. func GetFrequencyEn(frequency string) (frequencyEn string) {
  257. switch frequency {
  258. case "日度":
  259. frequencyEn = "day"
  260. return
  261. case "周度":
  262. frequencyEn = "week"
  263. return
  264. case "旬度":
  265. frequencyEn = "ten days"
  266. return
  267. case "月度":
  268. frequencyEn = "month"
  269. return
  270. case "季度":
  271. frequencyEn = "quarter"
  272. return
  273. case "年度":
  274. frequencyEn = "year"
  275. return
  276. }
  277. return
  278. }
  279. func GetLeadUnitEn(unit string) (unitEn string) {
  280. switch unit {
  281. case "天":
  282. unitEn = "day"
  283. return
  284. case "周":
  285. unitEn = "week"
  286. return
  287. case "月":
  288. unitEn = "month"
  289. return
  290. case "季":
  291. unitEn = "quarter"
  292. return
  293. case "年":
  294. unitEn = "year"
  295. return
  296. }
  297. return
  298. }