base_from_kpler.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_index_lib/logic"
  5. "eta/eta_index_lib/models"
  6. "eta/eta_index_lib/services"
  7. "eta/eta_index_lib/utils"
  8. "fmt"
  9. "sort"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. // KplerController Kpler数据
  15. type KplerController struct {
  16. BaseAuthController
  17. }
  18. // GetData
  19. // @Title 开普勒数据-获取数据
  20. // @Description 开普勒数据-获取数据
  21. // @Success 200 {object} models.ThsHfSearchEdbReq
  22. // @router /edb_data [post]
  23. func (this *KplerController) GetData() {
  24. br := new(models.BaseResponse).Init()
  25. defer func() {
  26. if br.ErrMsg == "" {
  27. br.IsSendEmail = false
  28. }
  29. this.Data["json"] = br
  30. this.ServeJSON()
  31. }()
  32. var params models.KplerSearchEdbReq
  33. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &params); e != nil {
  34. br.Msg = "参数解析异常"
  35. br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
  36. return
  37. }
  38. params.Granularity = strings.TrimSpace(params.Granularity)
  39. if params.Granularity == "" {
  40. br.Msg = "请选择频度"
  41. return
  42. }
  43. split := strings.TrimSpace(params.Split)
  44. if split == "" {
  45. split = "Total"
  46. }
  47. unit := strings.TrimSpace(params.Unit)
  48. if unit == "" {
  49. unit = "Kbd"
  50. }
  51. flowDirection := strings.TrimSpace(params.FlowDirection)
  52. if flowDirection == "" {
  53. br.Msg = "请选择流向"
  54. return
  55. }
  56. // 根据配置获取指标数据
  57. indexes, _, _, e := services.GetKplerDataByApi(params, "")
  58. if e != nil {
  59. br.Msg = "获取失败"
  60. br.ErrMsg = fmt.Sprintf("获取开普勒高频指标失败, %v", e)
  61. return
  62. }
  63. for _, index := range indexes {
  64. //根据日期的值倒序
  65. sort.Slice(index.IndexData, func(i, j int) bool {
  66. return index.IndexData[i].DataTime > index.IndexData[j].DataTime
  67. })
  68. //只显示10条数据
  69. if len(index.IndexData) > 10 {
  70. index.IndexData = index.IndexData[:10]
  71. }
  72. }
  73. br.Data = indexes
  74. br.Ret = 200
  75. br.Success = true
  76. br.Msg = "获取成功"
  77. }
  78. // 批量新增指标
  79. // @Title 批量新增指标
  80. // @Description 批量新增指标
  81. // @Success 200 {object} models.KplerSearchEdbReq
  82. // @router /index_add [post]
  83. func (this *KplerController) IndexAdd() {
  84. br := new(models.BaseResponse).Init()
  85. defer func() {
  86. this.Data["json"] = br
  87. this.ServeJSON()
  88. }()
  89. var params models.KplerSearchEdbReq
  90. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &params); e != nil {
  91. br.Msg = "参数解析异常"
  92. br.ErrMsg = fmt.Sprintf("参数解析失败, %v", e)
  93. return
  94. }
  95. params.Granularity = strings.TrimSpace(params.Granularity)
  96. if params.Granularity == "" {
  97. br.Msg = "请选择频度"
  98. return
  99. }
  100. split := strings.TrimSpace(params.Split)
  101. if split == "" {
  102. split = "Total"
  103. }
  104. unit := strings.TrimSpace(params.Unit)
  105. if unit == "" {
  106. unit = "Kbd"
  107. }
  108. flowDirection := strings.TrimSpace(params.FlowDirection)
  109. if flowDirection == "" {
  110. br.Msg = "请选择流向"
  111. return
  112. }
  113. // 根据配置获取指标数据
  114. indexes, apiQueryUrl, terminalInfo, e := services.GetKplerDataByApi(params, "")
  115. if e != nil {
  116. br.Msg = "获取失败"
  117. br.ErrMsg = fmt.Sprintf("获取开普勒高频指标失败, %v", e)
  118. return
  119. }
  120. classifyId := 0
  121. if params.ProductNames != "" {
  122. productNames := strings.Split(params.ProductNames, ",")
  123. // 获取第一个产品的分类ID
  124. classifyObj := new(models.BaseFromKplerClassify)
  125. classifyObj, err := classifyObj.GetByProductName(productNames[0])
  126. if err != nil {
  127. br.Msg = "获取分类ID失败"
  128. br.ErrMsg = fmt.Sprintf("获取分类ID失败, %v", err)
  129. return
  130. }
  131. classifyId = classifyObj.ClassifyId
  132. }
  133. // 批量新增指标
  134. err := services.AddKplerIndexByApi(indexes, &params, apiQueryUrl, classifyId, terminalInfo.TerminalCode)
  135. if err != nil {
  136. br.Msg = "新增失败"
  137. br.ErrMsg = fmt.Sprintf("新增失败, %v", err)
  138. return
  139. }
  140. br.Ret = 200
  141. br.Success = true
  142. br.Msg = "新增成功"
  143. }
  144. // Add
  145. // @Title 新增Kpler指标接口
  146. // @Description 新增Kpler指标接口
  147. // @Success 200 {object} models.AddEdbInfoReq
  148. // @router /add [post]
  149. func (this *KplerController) Add() {
  150. br := new(models.BaseResponse).Init()
  151. var cacheKey string
  152. defer func() {
  153. this.Data["json"] = br
  154. this.ServeJSON()
  155. }()
  156. kpler := new(models.BaseFromKpler)
  157. source := kpler.GetSource()
  158. var req models.AddEdbInfoReq
  159. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  160. if err != nil {
  161. br.Msg = "参数解析异常!"
  162. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  163. return
  164. }
  165. if req.EdbCode == "" {
  166. br.Msg = "请输入指标编码!"
  167. br.ErrMsg = "请输入指标编码,指标编码为空"
  168. return
  169. }
  170. cacheKey = utils.CACHE_EDB_DATA_ADD + strconv.Itoa(source) + "_" + req.EdbCode
  171. if utils.Rc.IsExist(cacheKey) {
  172. br.Ret = 501
  173. br.Success = true
  174. br.Msg = "系统处理中,请稍后重试"
  175. return
  176. }
  177. utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
  178. defer func() {
  179. utils.Rc.Delete(cacheKey)
  180. }()
  181. err = kpler.Add(req.EdbCode)
  182. if err != nil {
  183. br.Msg = "获取指标信息失败!"
  184. br.ErrMsg = "获取指标信息失败 AddEdbDataFromKpler,Err:" + err.Error()
  185. return
  186. }
  187. br.Ret = 200
  188. br.Success = true
  189. br.Msg = "获取成功"
  190. return
  191. }
  192. // Refresh
  193. // @Title 刷新Kpler指标接口
  194. // @Description 刷新Kpler指标接口
  195. // @Success 200 {object} models.RefreshEdbInfoReq
  196. // @router /refresh [post]
  197. func (this *KplerController) Refresh() {
  198. br := new(models.BaseResponse).Init()
  199. var cacheKey string
  200. defer func() {
  201. this.Data["json"] = br
  202. this.ServeJSON()
  203. }()
  204. kpler := new(models.BaseFromKpler)
  205. source := kpler.GetSource()
  206. var req models.RefreshEdbInfoReq
  207. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  208. if err != nil {
  209. br.Msg = "参数解析异常!"
  210. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  211. return
  212. }
  213. if req.EdbCode == "" {
  214. br.Msg = "请输入指标编码!"
  215. br.ErrMsg = "请输入指标编码,指标编码为空"
  216. return
  217. }
  218. if req.EdbInfoId < 0 {
  219. br.Msg = "请输入指标ID!"
  220. br.ErrMsg = "请输入指标ID"
  221. return
  222. }
  223. // 获取指标详情
  224. edbInfo, err := models.GetEdbInfoByEdbCode(source, req.EdbCode)
  225. if err != nil {
  226. br.Msg = "指标不存在!"
  227. br.ErrMsg = "指标不存在"
  228. return
  229. }
  230. cacheKey = utils.CACHE_EDB_DATA_REFRESH + strconv.Itoa(source) + "_" + req.EdbCode
  231. if utils.Rc.IsExist(cacheKey) {
  232. br.Ret = 501
  233. br.Success = true
  234. br.Msg = "系统处理中,请稍后重试"
  235. return
  236. }
  237. utils.Rc.SetNX(cacheKey, 1, 1*time.Minute)
  238. defer func() {
  239. utils.Rc.Delete(cacheKey)
  240. }()
  241. if req.EdbInfoId <= 0 {
  242. req.EdbInfoId = edbInfo.EdbInfoId
  243. }
  244. err = kpler.Refresh(req.EdbInfoId, req.EdbCode, req.StartDate)
  245. if err != nil && !utils.IsErrNoRow(err) {
  246. br.Msg = "刷新指标信息失败!"
  247. br.ErrMsg = "刷新指标信息失败 RefreshEdbDataFromKpler,Err:" + err.Error()
  248. return
  249. }
  250. // 更新指标最大最小值
  251. err, errMsg := models.UnifiedModifyEdbInfoMaxAndMinInfo(edbInfo)
  252. if err != nil {
  253. br.Msg = errMsg
  254. br.ErrMsg = err.Error()
  255. return
  256. }
  257. // 更新ES
  258. go logic.UpdateEs(edbInfo.EdbInfoId)
  259. br.Ret = 200
  260. br.Success = true
  261. br.Msg = "获取成功"
  262. }
  263. // HandleExcelData
  264. // @Title 处理Kpler指标的接口
  265. // @Description 处理Kpler指标的接口
  266. // @Success 200 {object} models.HandleKplerExcelDataReq
  267. // @router /handle/excel_data [post]
  268. func (this *KplerController) HandleExcelData() {
  269. br := new(models.BaseResponse).Init()
  270. defer func() {
  271. this.Data["json"] = br
  272. this.ServeJSON()
  273. }()
  274. var req models.HandleKplerExcelDataReq
  275. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  276. if err != nil {
  277. br.Msg = "参数解析异常!"
  278. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  279. return
  280. }
  281. // 处理excel表数据
  282. err = services.HandleKplerIndex(&req)
  283. if err != nil {
  284. fmt.Println("HandleKplerIndex Err:" + err.Error())
  285. br.Msg = "处理失败"
  286. br.ErrMsg = "处理失败,Err:" + err.Error()
  287. return
  288. }
  289. br.Ret = 200
  290. br.Success = true
  291. br.Msg = "处理成功"
  292. }