edb_info_es.go 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282
  1. package data
  2. import (
  3. "eta_gn/eta_api/models/data_manage"
  4. "eta_gn/eta_api/models/data_manage/request"
  5. "eta_gn/eta_api/services/data/data_manage_permission"
  6. "eta_gn/eta_api/services/elastic"
  7. "eta_gn/eta_api/utils"
  8. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. "strconv"
  11. "strings"
  12. )
  13. // AddOrEditEdbInfoToEs 添加/修改ES中的指标
  14. func AddOrEditEdbInfoToEs(edbInfoId int) {
  15. var err error
  16. defer func() {
  17. if err != nil {
  18. utils.FileLog.Error("添加/修改ES中的指标失败; err:%s", err.Error())
  19. }
  20. }()
  21. //添加es
  22. itemInfo, err := data_manage.GetEdbInfoEsByCondition("AND edb_info_id=?", []interface{}{edbInfoId})
  23. if err != nil {
  24. return
  25. }
  26. obj := data_manage.EdbInfoShare{}
  27. list, _ := obj.GetListByEdbInfoId(edbInfoId)
  28. sharedList := make([]int, 0)
  29. for _, v := range list {
  30. sharedList = append(sharedList, v.SysUserId)
  31. }
  32. itemInfo.SharedUserIdList = sharedList
  33. err = elastic.EsAddOrEditEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(itemInfo.EdbInfoId), itemInfo)
  34. }
  35. // AddOrEditAllEdbInfoToEs 修复ES中的所有指标
  36. func AddOrEditAllEdbInfoToEs() {
  37. //添加es
  38. total, itemInfoList, _ := data_manage.GetEsEdbInfo("", []interface{}{}, 0, 100000)
  39. obj := data_manage.EdbInfoShare{}
  40. for k, itemInfo := range itemInfoList {
  41. list, _ := obj.GetListByEdbInfoId(itemInfo.EdbInfoId)
  42. sharedList := make([]int, 0)
  43. for _, v := range list {
  44. sharedList = append(sharedList, v.SysUserId)
  45. }
  46. itemInfo.SharedUserIdList = sharedList
  47. elastic.EsAddOrEditEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(itemInfo.EdbInfoId), itemInfo)
  48. fmt.Println("剩余", int(total)-k-1, "条指标数据")
  49. }
  50. }
  51. // DeleteEdbInfoToEs 删除ES中的指标
  52. func DeleteEdbInfoToEs(edbInfoId int) {
  53. //添加es
  54. go elastic.EsDeleteEdbInfoData(utils.DATA_INDEX_NAME, strconv.Itoa(edbInfoId))
  55. }
  56. // GetGeneralEdbEsSearchParams
  57. // @Description: 指标通用es搜索参数匹配
  58. // @author: Roc
  59. // @datetime 2024-12-23 11:10:42
  60. // @param edbTypeStr string
  61. // @param sysUserId int
  62. // @param reqEdbAuth int
  63. // @param edbCollect int
  64. // @param classifyId int
  65. // @return source int
  66. // @return frequency string
  67. // @return noPermissionEdbInfoIdList []int
  68. // @return noPermissionEdbClassifyIdList []int
  69. // @return collectEdbInfoIdList []int
  70. // @return searchClassifyIdList []int
  71. // @return searchPublicClassifyIdList []int
  72. // @return edbTypeList []int
  73. // @return edbInfoType int
  74. // @return edbAuth int
  75. // @return searchUserId int
  76. // @return err error
  77. // @return errMsg string
  78. func GetGeneralEdbEsSearchParams(edbTypeStr string, sysUserId, reqEdbAuth, edbCollect, classifyId int) (source int, frequency string, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, searchClassifyIdList, searchPublicClassifyIdList, edbTypeList []int, edbInfoType, edbAuth, searchUserId int, err error, errMsg string) {
  79. // 指标类型数组:1-基础指标;2-计算指标;3-预测指标
  80. edbTypeList = make([]int, 0)
  81. edbInfoType = -1 // 指标范围
  82. // 搜索用户id
  83. searchUserId = sysUserId
  84. {
  85. if edbTypeStr == `` || edbTypeStr == `0` {
  86. edbTypeList = []int{1, 2}
  87. edbInfoType = 0
  88. } else if edbTypeStr == `1` { // 数据查看(基础指标),不应该固定创建人的
  89. edbTypeList = []int{1}
  90. edbInfoType = 0
  91. searchUserId = 0
  92. } else {
  93. var hasEdb, hasPredictEdb bool
  94. tmpEdbTypeList := strings.Split(edbTypeStr, `,`)
  95. for _, v := range tmpEdbTypeList {
  96. edbType, tmpErr := strconv.Atoi(v)
  97. if tmpErr != nil {
  98. err = tmpErr
  99. errMsg = "EdbType异常"
  100. return
  101. }
  102. // 指标类型
  103. switch edbType {
  104. case 1, 2:
  105. hasEdb = true
  106. edbTypeList = append(edbTypeList, edbType)
  107. case 3:
  108. hasPredictEdb = true
  109. edbTypeList = []int{1, 2}
  110. }
  111. }
  112. // 只有数据查看和指标加工
  113. if hasEdb && !hasPredictEdb {
  114. edbInfoType = 0
  115. } else if !hasEdb && hasPredictEdb {
  116. // 只有预测指标
  117. edbInfoType = 1
  118. }
  119. }
  120. }
  121. edbAuth = reqEdbAuth
  122. // 筛选分类id列表
  123. searchClassifyIdList = make([]int, 0)
  124. searchPublicClassifyIdList = make([]int, 0)
  125. // 父级分类id
  126. if classifyId > 0 {
  127. switch edbAuth {
  128. case 1: // 1-我的;2-公共
  129. allChildClassifyItemList, tmpErr, _ := GetAllChildClassifyByParentId(classifyId)
  130. if tmpErr != nil {
  131. err = tmpErr
  132. return
  133. }
  134. searchClassifyIdList = append(searchClassifyIdList, classifyId)
  135. for _, v := range allChildClassifyItemList {
  136. searchClassifyIdList = append(searchClassifyIdList, v.ClassifyId)
  137. }
  138. case 2: // 1-我的;2-公共
  139. obj := data_manage.EdbPublicClassify{}
  140. allChildClassifyItemList, tmpErr, _ := obj.GetAllChildClassifyByParentId(classifyId)
  141. if tmpErr != nil {
  142. err = tmpErr
  143. return
  144. }
  145. searchPublicClassifyIdList = append(searchPublicClassifyIdList, classifyId)
  146. for _, v := range allChildClassifyItemList {
  147. searchPublicClassifyIdList = append(searchPublicClassifyIdList, v.EdbPublicClassifyId)
  148. }
  149. default:
  150. if edbTypeStr == `1` { // 如果仅仅是基础指标,那么也需要查询分类
  151. allChildClassifyItemList, tmpErr, _ := GetAllChildClassifyByParentId(classifyId)
  152. if tmpErr != nil {
  153. err = tmpErr
  154. return
  155. }
  156. searchClassifyIdList = append(searchClassifyIdList, classifyId)
  157. for _, v := range allChildClassifyItemList {
  158. searchClassifyIdList = append(searchClassifyIdList, v.ClassifyId)
  159. }
  160. }
  161. }
  162. }
  163. // 无权限指标 和 无权限指标分类id(只考虑)
  164. noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, err = data_manage_permission.GetUserAllEdbAndClassifyNoPermissionListV2(sysUserId)
  165. if err != nil {
  166. return
  167. }
  168. // 收藏的指标id
  169. collectEdbInfoIdList = make([]int, 0)
  170. if edbCollect == 1 {
  171. collectEdbInfoIdList, err = data_manage.GetUserAllCollectEdbInfoIdList(sysUserId)
  172. if err != nil {
  173. return
  174. }
  175. }
  176. return
  177. }
  178. // GetAllGeneralEdbInfoListByGeneralEdbEsSearchReq
  179. // @Description: 获取所有指标列表(通用)
  180. // @author: Roc
  181. // @datetime 2024-12-23 11:31:51
  182. // @param req request.GeneralEdbEsSearchReq
  183. // @param userId int
  184. // @return edbInfoList []*data_manage.EdbInfoList
  185. // @return err error
  186. // @return errMsg string
  187. func GetAllGeneralEdbInfoListByGeneralEdbEsSearchReq(req request.GeneralEdbEsSearchReq, userId int) (edbInfoList []*data_manage.EdbInfoList, err error, errMsg string) {
  188. keyword := req.Keyword
  189. if keyword == `` {
  190. keyword = req.KeyWord
  191. }
  192. // 获取es搜索参数
  193. source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, searchClassifyIdList, searchPublicClassifyIdList, edbTypeList, edbInfoType, edbAuth, searchUserId, err, errMsg := GetGeneralEdbEsSearchParams(req.EdbType, userId, req.EdbAuth, req.EdbCollect, req.ClassifyId)
  194. if err != nil {
  195. return
  196. }
  197. sortMap := make(map[string]string)
  198. // 如果没有搜索关键词,则默认根据指标编码倒序排序
  199. if keyword == `` {
  200. sortMap["EdbInfoId"] = `desc`
  201. }
  202. _, edbInfoList, err = getAllEdbInfoDataByGeneralEdbEsSearch(keyword, 1, req.FilterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, searchClassifyIdList, searchPublicClassifyIdList, edbTypeList, edbInfoType, edbAuth, searchUserId, sortMap)
  203. if err != nil {
  204. return
  205. }
  206. return
  207. }
  208. // getAllEdbInfoDataByGeneralEdbEsSearch
  209. // @Description: 获取所有的指标列表(通用es搜索接口)
  210. // @author: Roc
  211. // @datetime 2024-12-23 11:30:33
  212. // @param keyword string
  213. // @param currPage int
  214. // @param filterSource int
  215. // @param source int
  216. // @param frequency string
  217. // @param noPermissionEdbInfoIdList []int
  218. // @param noPermissionEdbClassifyIdList []int
  219. // @param collectEdbInfoIdList []int
  220. // @param searchClassifyIdList []int
  221. // @param searchPublicClassifyIdList []int
  222. // @param edbTypeList []int
  223. // @param edbInfoType int
  224. // @param edbAuth int
  225. // @param sysUserId int
  226. // @param sortMap map[string]string
  227. // @return total int64
  228. // @return list []*data_manage.EdbInfoList
  229. // @return err error
  230. func getAllEdbInfoDataByGeneralEdbEsSearch(keyword string, currPage, filterSource, source int, frequency string, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, searchClassifyIdList, searchPublicClassifyIdList, edbTypeList []int, edbInfoType, edbAuth, sysUserId int, sortMap map[string]string) (total int64, list []*data_manage.EdbInfoList, err error) {
  231. // 每页获取数据的数量
  232. pageSize := 5000
  233. var startSize int
  234. if currPage <= 0 {
  235. currPage = 1
  236. }
  237. startSize = paging.StartIndex(currPage, pageSize)
  238. // 普通的搜索
  239. total, list, err = elastic.SearchEdbInfoData(keyword, startSize, pageSize, filterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, searchClassifyIdList, searchPublicClassifyIdList, edbTypeList, edbInfoType, edbAuth, sysUserId, sortMap)
  240. if err != nil {
  241. return
  242. }
  243. page := paging.GetPaging(currPage, pageSize, int(total))
  244. if !page.IsEnd {
  245. _, nextList, tmpErr := getAllEdbInfoDataByGeneralEdbEsSearch(keyword, page.NextIndex, filterSource, source, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, collectEdbInfoIdList, searchClassifyIdList, searchPublicClassifyIdList, edbTypeList, edbInfoType, edbAuth, sysUserId, sortMap)
  246. if tmpErr != nil {
  247. err = tmpErr
  248. return
  249. }
  250. list = append(list, nextList...)
  251. }
  252. return
  253. }