base_from_kpler.go 7.3 KB

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