base_from_fenwei_index_service.go 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. // Package data
  2. // @Author gmy 2024/8/22 9:44:00
  3. package data
  4. import (
  5. "eta/eta_api/models/data_manage"
  6. "eta/eta_api/utils"
  7. "fmt"
  8. "github.com/rdlucklib/rdluck_tools/paging"
  9. )
  10. // FenWeiIndexAddValidate 指标添加校验
  11. func FenWeiIndexAddValidate(indexCodes []string) (*[]data_manage.FenWeiIndexCheckData, error) {
  12. // 根据指标编码获取指标库 指标信息
  13. edbInfos, err := data_manage.GetEdbInfoByEdbCodeList(utils.DATA_SOURCE_FENWEI, indexCodes)
  14. if err != nil {
  15. return nil, err
  16. }
  17. var respList []data_manage.FenWeiIndexCheckData
  18. if len(edbInfos) > 0 {
  19. for _, ebdInfo := range edbInfos {
  20. respList = append(respList, data_manage.FenWeiIndexCheckData{
  21. IndexCode: ebdInfo.EdbCode,
  22. IndexName: ebdInfo.EdbName,
  23. Unit: ebdInfo.Unit,
  24. Frequency: ebdInfo.Frequency,
  25. EdbInfoId: ebdInfo.EdbInfoId,
  26. ClassifyId: ebdInfo.ClassifyId,
  27. UniqueCode: ebdInfo.UniqueCode,
  28. })
  29. }
  30. }
  31. return &respList, nil
  32. }
  33. // FenWeiIndexNameCheck 指标名称校验
  34. func FenWeiIndexNameCheck(indexNames []string, resp []*data_manage.FenWeiNameCheckResult) ([]*data_manage.FenWeiNameCheckResult, error) {
  35. // 重名校验
  36. edbList, e := data_manage.GetEdbInfoByNameArr(indexNames, utils.EDB_INFO_TYPE)
  37. if e != nil {
  38. return nil, e
  39. }
  40. nameExists := make(map[string]bool)
  41. for _, edbInfo := range edbList {
  42. nameExists[edbInfo.EdbName] = true
  43. }
  44. if len(nameExists) > 0 {
  45. for _, v := range resp {
  46. v.Exist = nameExists[v.IndexName]
  47. }
  48. }
  49. return resp, nil
  50. }
  51. // FenWeiIndexAdd 批量添加指标
  52. func FenWeiIndexAdd(req data_manage.FenWeiIndexAddReq, lang string) (edb *data_manage.EdbInfo, err error, errMsg string, skip bool) {
  53. if req.EdbCode == "" {
  54. err = fmt.Errorf("指标ID为空")
  55. return
  56. }
  57. defer func() {
  58. if err != nil {
  59. tips := fmt.Sprintf("BloombergIndexSource2Edb新增失败, Err: %s", err.Error())
  60. utils.FileLog.Info(tips)
  61. }
  62. }()
  63. source := utils.DATA_SOURCE_FENWEI
  64. // 是否已有指标数据
  65. dataList, e := data_manage.GetEdbDataAllByEdbCode(req.EdbCode, source, utils.DATA_SUB_SOURCE_EDB, utils.EDB_DATA_LIMIT)
  66. if e != nil {
  67. err = fmt.Errorf("获取指标数据失败, Err: %s", e.Error())
  68. return
  69. }
  70. // 新增指标数据
  71. if len(dataList) == 0 {
  72. res, e := AddEdbData(source, req.EdbCode, req.Frequency)
  73. if e != nil {
  74. err = fmt.Errorf("index_lib: 新增指标数据失败, Err: %s", e.Error())
  75. return
  76. }
  77. if res == nil {
  78. err = fmt.Errorf("index_lib: 新增指标数据失败, res nil")
  79. return
  80. }
  81. if res.Ret != 200 {
  82. err = fmt.Errorf("index_lib: 新增指标数据失败, Ret: %d", res.Ret)
  83. return
  84. }
  85. }
  86. // 是否新增过指标
  87. exist, e := data_manage.GetEdbInfoByEdbCode(source, req.EdbCode)
  88. if e != nil && e.Error() != utils.ErrNoRow() {
  89. err = fmt.Errorf("获取指标是否存在失败, err: %s", e.Error())
  90. return
  91. }
  92. if exist != nil {
  93. skip = true
  94. return
  95. }
  96. // 开始结束时间
  97. var startDate, endDate string
  98. minMax, e := data_manage.GetEdbInfoMaxAndMinInfo(source, utils.DATA_SUB_SOURCE_EDB, req.EdbCode)
  99. if e != nil && e.Error() != utils.ErrNoRow() {
  100. err = fmt.Errorf("MinMax: 获取指标极值失败, err: %s", e.Error())
  101. return
  102. }
  103. if minMax != nil {
  104. startDate = minMax.MinDate
  105. endDate = minMax.MaxDate
  106. }
  107. // 新增指标到指标库
  108. 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)
  109. if e != nil {
  110. errMsg = msg
  111. err = fmt.Errorf("EdbInfo: 新增指标失败, err: %s", e.Error())
  112. return
  113. }
  114. edb = edbInfo
  115. // todo EdbInfoAdd方法已经新增es,这里不需要再新增???
  116. // 新增es
  117. // go AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
  118. return
  119. }
  120. // GetFenWeiIndexInfo 获取指标信息-分页
  121. func GetFenWeiIndexInfo(keyWord string, classifyIdList []string, frequencyList []string, currentIndex int, pageSize int) (baseFromFenWeiIndexPage *data_manage.BaseFromFenWeiIndexPage, err error) {
  122. // 获取指标
  123. var condition string
  124. var pars []interface{}
  125. if keyWord != "" {
  126. condition += ` AND CONCAT(index_name,index_code) LIKE '%` + keyWord + `%'`
  127. }
  128. if len(classifyIdList) > 0 {
  129. condition += ` AND classify_id IN (`
  130. for _, v := range classifyIdList {
  131. condition += `?,`
  132. pars = append(pars, v)
  133. }
  134. condition = condition[:len(condition)-1] + `)`
  135. }
  136. if len(frequencyList) > 0 {
  137. condition += ` AND frequency IN (`
  138. for _, v := range frequencyList {
  139. condition += `?,`
  140. pars = append(pars, v)
  141. }
  142. condition = condition[:len(condition)-1] + `)`
  143. }
  144. count, err := data_manage.GetFenWeiIndexInfoCount(condition, pars)
  145. if err != nil {
  146. return
  147. }
  148. page := paging.GetPaging(currentIndex, pageSize, count)
  149. if count <= 0 {
  150. baseFromFenWeiIndexPage = &data_manage.BaseFromFenWeiIndexPage{
  151. List: []*data_manage.BaseFromFenweiIndex{},
  152. Paging: page,
  153. }
  154. return
  155. }
  156. startSize := utils.StartIndex(currentIndex, pageSize)
  157. fenWeiIndexInfoList, err := data_manage.GetFenWeiIndexInfoPage(condition, pars, startSize, pageSize)
  158. if err != nil {
  159. return
  160. }
  161. baseFromFenWeiIndexPage = &data_manage.BaseFromFenWeiIndexPage{
  162. List: fenWeiIndexInfoList,
  163. Paging: page,
  164. }
  165. return
  166. }