base_from_ly_index_service.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222
  1. // Package data
  2. // @Author gmy 2024/8/12 16:44:00
  3. package data
  4. import (
  5. "eta/eta_api/models/data_manage"
  6. "eta/eta_api/utils"
  7. "fmt"
  8. "github.com/beego/beego/v2/core/logs"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. )
  11. // GetIndexPage 获取指标分页列表
  12. func GetIndexPage(classifyId string, searchParam string, currentIndex, pageSize int) (*data_manage.BaseFromLyIndexPage, error) {
  13. count, err := data_manage.GetLyIndexCount(classifyId, searchParam)
  14. if err != nil {
  15. return nil, err
  16. }
  17. lyIndexPage := data_manage.BaseFromLyIndexPage{}
  18. page := paging.GetPaging(currentIndex, pageSize, count)
  19. if count <= 0 {
  20. lyIndexPage.Paging = page
  21. return &lyIndexPage, nil
  22. }
  23. lyIndexList, err := data_manage.GetLyIndexPage(classifyId, searchParam, currentIndex, pageSize)
  24. if err != nil {
  25. return nil, err
  26. }
  27. // 获取指标编码列表
  28. var indexCodes []string
  29. for _, v := range lyIndexList {
  30. indexCodes = append(indexCodes, v.IndexCode)
  31. }
  32. // 获取指标数据
  33. lyIndexData, err := data_manage.GetLyDataLastByIndexCode(indexCodes)
  34. if err != nil {
  35. return nil, err
  36. }
  37. // 将lyIndexData转换为map
  38. lyIndexDataMap := make(map[string]*data_manage.BaseFromLyData)
  39. for _, v := range lyIndexData {
  40. lyIndexDataMap[v.IndexCode] = v
  41. }
  42. if len(lyIndexData) > 0 {
  43. for _, v := range lyIndexList {
  44. if lyIndexDataMap[v.IndexCode] != nil {
  45. v.Value = lyIndexDataMap[v.IndexCode].Value
  46. toYmd := utils.TimeFormatToYmd(lyIndexDataMap[v.IndexCode].ModifyTime)
  47. v.ModifyTimeMax = toYmd
  48. }
  49. }
  50. }
  51. lyIndexPage.List = lyIndexList
  52. lyIndexPage.Paging = page
  53. return &lyIndexPage, nil
  54. }
  55. // GetIndexDataPage 获取指标分页数据列表
  56. func GetIndexDataPage(indexId, startSize, pageSize int) (*data_manage.BaseFromLyDataPage, error) {
  57. count, err := data_manage.GetLyDataCountByIndexId(indexId)
  58. if err != nil {
  59. return nil, err
  60. }
  61. lyDataPage := data_manage.BaseFromLyDataPage{}
  62. page := paging.GetPaging(startSize, pageSize, count)
  63. if count <= 0 {
  64. lyDataPage.Paging = page
  65. return &lyDataPage, nil
  66. }
  67. dataList, err := data_manage.GetLyDataPageByIndexId(indexId, startSize, pageSize)
  68. if err != nil {
  69. return nil, err
  70. }
  71. lyDataPage.List = dataList
  72. lyDataPage.Paging = page
  73. return &lyDataPage, nil
  74. }
  75. // LyIndexAddValidate 指标添加校验
  76. func LyIndexAddValidate(indexCodes []string) (*[]data_manage.IndexCheckData, error) {
  77. // 根据指标编码获取指标库 指标信息
  78. edbInfos, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_LY, indexCodes)
  79. if err != nil {
  80. return nil, err
  81. }
  82. var respList []data_manage.IndexCheckData
  83. if len(edbInfos) > 0 {
  84. for _, ebdInfo := range edbInfos {
  85. respList = append(respList, data_manage.IndexCheckData{
  86. IndexCode: ebdInfo.EdbCode,
  87. IndexName: ebdInfo.EdbName,
  88. Unit: ebdInfo.Unit,
  89. Frequency: ebdInfo.Frequency,
  90. EdbInfoId: ebdInfo.EdbInfoId,
  91. ClassifyId: ebdInfo.ClassifyId,
  92. UniqueCode: ebdInfo.UniqueCode,
  93. })
  94. }
  95. }
  96. return &respList, nil
  97. }
  98. // LyIndexNameCheck 指标名称校验
  99. func LyIndexNameCheck(indexNames []string, resp []*data_manage.NameCheckResult) ([]*data_manage.NameCheckResult, error) {
  100. // 重名校验
  101. edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
  102. if e != nil {
  103. return nil, e
  104. }
  105. nameExists := make(map[string]bool)
  106. for _, edbInfo := range edbList {
  107. nameExists[edbInfo.EdbName] = true
  108. }
  109. if len(nameExists) > 0 {
  110. for _, v := range resp {
  111. v.Exist = nameExists[v.IndexName]
  112. }
  113. }
  114. return resp, nil
  115. }
  116. type LyIndexAddReq struct {
  117. EdbCode string `description:"指标编码"`
  118. EdbName string `description:"指标名称"`
  119. Frequency string `description:"频度"`
  120. Unit string `description:"单位"`
  121. ClassifyId int `description:"分类ID"`
  122. AdminId int `description:"管理员ID"`
  123. AdminRealName string `description:"管理员名称"`
  124. }
  125. // LyIndexAdd 批量添加指标
  126. func LyIndexAdd(req LyIndexAddReq, lang string) (edb *data_manage.EdbInfo, err error, errMsg string, skip bool) {
  127. if req.EdbCode == "" {
  128. err = fmt.Errorf("指标ID为空")
  129. return
  130. }
  131. defer func() {
  132. if err != nil {
  133. tips := fmt.Sprintf("BloombergIndexSource2Edb新增失败, Err: %s", err.Error())
  134. logs.Info(tips)
  135. utils.FileLog.Info(tips)
  136. }
  137. }()
  138. source := utils.DATA_SOURCE_LY
  139. // 是否已有指标数据
  140. dataList, e := data_manage.GetEdbDataAllByEdbCode(req.EdbCode, source, utils.DATA_SUB_SOURCE_EDB, utils.EDB_DATA_LIMIT)
  141. if e != nil {
  142. err = fmt.Errorf("获取指标数据失败, Err: %s", e.Error())
  143. return
  144. }
  145. // 新增指标数据
  146. if len(dataList) == 0 {
  147. res, e := AddEdbData(source, req.EdbCode, req.Frequency)
  148. if e != nil {
  149. err = fmt.Errorf("index_lib: 新增指标数据失败, Err: %s", e.Error())
  150. return
  151. }
  152. if res == nil {
  153. err = fmt.Errorf("index_lib: 新增指标数据失败, res nil")
  154. return
  155. }
  156. if res.Ret != 200 {
  157. err = fmt.Errorf("index_lib: 新增指标数据失败, Ret: %d", res.Ret)
  158. return
  159. }
  160. }
  161. // 是否新增过指标
  162. exist, e := data_manage.GetEdbInfoByEdbCode(source, req.EdbCode)
  163. if e != nil && e.Error() != utils.ErrNoRow() {
  164. err = fmt.Errorf("获取指标是否存在失败, err: %s", e.Error())
  165. return
  166. }
  167. if exist != nil {
  168. skip = true
  169. return
  170. }
  171. // 开始结束时间
  172. var startDate, endDate string
  173. minMax, e := data_manage.GetEdbInfoMaxAndMinInfo(source, utils.DATA_SUB_SOURCE_EDB, req.EdbCode)
  174. if e != nil && e.Error() != utils.ErrNoRow() {
  175. err = fmt.Errorf("MinMax: 获取指标极值失败, err: %s", e.Error())
  176. return
  177. }
  178. if minMax != nil {
  179. startDate = minMax.MinDate
  180. endDate = minMax.MaxDate
  181. }
  182. // 新增指标到指标库
  183. edbInfo, e, msg, _ := EdbInfoAdd(source, utils.DATA_SUB_SOURCE_EDB, req.ClassifyId, req.EdbCode, req.EdbName, req.Frequency, req.Unit, startDate, endDate, req.AdminId, req.AdminRealName, lang)
  184. if e != nil {
  185. errMsg = msg
  186. err = fmt.Errorf("EdbInfo: 新增指标失败, err: %s", e.Error())
  187. return
  188. }
  189. edb = edbInfo
  190. // 标记原始指标为已添加
  191. err = data_manage.UpdateLyIndexEdbExist(req.EdbCode, utils.IS_YES)
  192. if err != nil {
  193. err = fmt.Errorf("BaseIndex: 标记已添加指标库失败, err: %s", err.Error())
  194. return
  195. }
  196. // todo EdbInfoAdd方法已经新增es,这里不需要再新增???
  197. // 新增es
  198. // go AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
  199. return
  200. }