base_from_ly_index_service.go 6.5 KB

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