edb_info_share.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta_gn/eta_api/controllers"
  5. "eta_gn/eta_api/models"
  6. "eta_gn/eta_api/models/data_manage"
  7. "eta_gn/eta_api/models/data_manage/request"
  8. "eta_gn/eta_api/models/data_manage/response"
  9. "eta_gn/eta_api/services/data/data_manage_permission"
  10. "eta_gn/eta_api/services/elastic"
  11. "eta_gn/eta_api/utils"
  12. "github.com/rdlucklib/rdluck_tools/paging"
  13. "strings"
  14. "time"
  15. )
  16. // EdbInfoShareController 数据管理
  17. type EdbInfoShareController struct {
  18. controllers.BaseAuthController
  19. }
  20. // UserList
  21. // @Title 获取指标设置共享的详情
  22. // @Description 获取指标详情接口
  23. // @Param EdbInfoId query int true "指标id"
  24. // @Success 200 {object} data_manage.EdbInfo
  25. // @router /edb_info/share/user_list [get]
  26. func (c *EdbInfoShareController) UserList() {
  27. br := new(models.BaseResponse).Init()
  28. defer func() {
  29. c.Data["json"] = br
  30. c.ServeJSON()
  31. }()
  32. sysUser := c.SysUser
  33. if sysUser == nil {
  34. br.Msg = "请登录"
  35. br.ErrMsg = "请登录,SysUser Is Empty"
  36. br.Ret = 408
  37. return
  38. }
  39. edbInfoId, _ := c.GetInt("EdbInfoId")
  40. if edbInfoId <= 0 {
  41. br.Msg = "参数错误"
  42. br.ErrMsg = "参数错误"
  43. return
  44. }
  45. _, err := data_manage.GetEdbInfoById(edbInfoId)
  46. if err != nil {
  47. br.Msg = "获取失败"
  48. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  49. return
  50. }
  51. //// TODO 权限校验
  52. //{
  53. // classifyMap := make(map[int]*data_manage.EdbClassifyIdItems)
  54. // for _, v := range classifyList {
  55. // classifyMap[v.ClassifyId] = v
  56. // }
  57. // if currClassify, ok := classifyMap[edbInfo.ClassifyId]; ok {
  58. // haveOperaAuth, err := data_manage_permission.CheckEdbPermission(edbInfo.IsJoinPermission, currClassify.IsJoinPermission, c.SysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
  59. // if err != nil {
  60. // br.Msg = err.Error()
  61. // br.ErrMsg = "校验指标权限失败,err:" + err.Error()
  62. // return
  63. // }
  64. // resp.HaveOperaAuth = haveOperaAuth
  65. // }
  66. //}
  67. resp := response.EdbInfoShareUserResp{}
  68. obj := data_manage.EdbInfoShare{}
  69. list, err := obj.GetListByEdbInfoId(edbInfoId)
  70. if err != nil {
  71. br.Msg = `获取失败`
  72. br.ErrMsg = `获取失败:` + err.Error()
  73. return
  74. }
  75. resp.List = list
  76. if len(list) > 0 {
  77. resp.ShareType = list[0].ShareType
  78. }
  79. br.Ret = 200
  80. br.Success = true
  81. br.Msg = "获取成功"
  82. br.Data = resp
  83. }
  84. // Save
  85. // @Title 保存指标指标设置共享的详情
  86. // @Description 获取指标详情接口
  87. // @Param request body request.SetEdbInfoShareReq true "type json string"
  88. // @Success 200 {object} data_manage.EdbInfo
  89. // @router /edb_info/share/save [post]
  90. func (c *EdbInfoShareController) Save() {
  91. br := new(models.BaseResponse).Init()
  92. defer func() {
  93. c.Data["json"] = br
  94. c.ServeJSON()
  95. }()
  96. sysUser := c.SysUser
  97. if sysUser == nil {
  98. br.Msg = "请登录"
  99. br.ErrMsg = "请登录,SysUser Is Empty"
  100. br.Ret = 408
  101. return
  102. }
  103. var req request.SetEdbInfoShareReq
  104. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  105. if err != nil {
  106. br.Msg = "参数解析异常!"
  107. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  108. return
  109. }
  110. resp := response.EdbInfoShareUserResp{}
  111. obj := data_manage.EdbInfoShare{}
  112. err = obj.SaveEdbInfoShare([]int{req.EdbInfoId}, req.UserIdList, req.ShareType)
  113. if err != nil {
  114. br.Msg = `保存失败`
  115. br.ErrMsg = `保存失败:` + err.Error()
  116. return
  117. }
  118. br.Ret = 200
  119. br.Success = true
  120. br.Msg = "保存成功"
  121. br.Data = resp
  122. }
  123. // EdbInfoFilterByEs
  124. // @Title 指标筛选接口
  125. // @Description 指标筛选接口
  126. // @Param KeyWord query string false "搜索关键词:指标ID/指标名称"
  127. // @Param FilterSource query int false "搜索来源:1:其他搜索,2:累计值转月值搜索,3:变频,4:基础指标,5:同比"
  128. // @Param Frequency query string false "频度"
  129. // @Param IsAddPredictEdb query bool false "是否查询添加预测指标"
  130. // @Param PageSize query int true "每页数据条数"
  131. // @Param CurrentIndex query int true "当前页页码,从1开始"
  132. // @Param EdbType query int false "指标类型:0-基础和计算;1-基础指标;2-计算指标"
  133. // @Success 200 {object} data_manage.EdbInfoList
  134. // @router /edb_info/share [get]
  135. func (c *EdbInfoShareController) EdbInfoFilterByEs() {
  136. br := new(models.BaseResponse).Init()
  137. defer func() {
  138. c.Data["json"] = br
  139. c.ServeJSON()
  140. }()
  141. pageSize, _ := c.GetInt("PageSize")
  142. currentIndex, _ := c.GetInt("CurrentIndex")
  143. var total int64
  144. var startSize int
  145. if pageSize <= 0 {
  146. pageSize = utils.PageSize20
  147. }
  148. if currentIndex <= 0 {
  149. currentIndex = 1
  150. }
  151. startSize = paging.StartIndex(currentIndex, pageSize)
  152. keyWord := c.GetString("KeyWord")
  153. keyWord = strings.TrimSpace(keyWord) //移除字符串首尾空格
  154. filterSource, _ := c.GetInt("FilterSource")
  155. if filterSource <= 0 {
  156. filterSource = 1
  157. }
  158. //指标来源
  159. source, _ := c.GetInt("Source")
  160. frequency := c.GetString("Frequency") //频度
  161. isAddPredictEdb, _ := c.GetBool("IsAddPredictEdb") //是否查询添加预测指标
  162. edbType, _ := c.GetInt("EdbType", 0) // 指标类型:0-基础和计算;1-基础指标;2-计算指标
  163. var edbInfoList []*data_manage.EdbInfoList
  164. var err error
  165. // 无权限指标 和 无权限指标分类id
  166. noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, err := data_manage_permission.GetUserAllEdbAndClassifyNoPermissionList(c.SysUser.AdminId, utils.EDB_INFO_TYPE, edbType)
  167. if err != nil {
  168. br.Msg = "获取失败"
  169. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  170. return
  171. }
  172. // 是否走ES
  173. isEs := false
  174. if keyWord != "" {
  175. var keyWordArr []string
  176. keyWordArr = append(keyWordArr, keyWord)
  177. newKeyWord := strings.Split(keyWord, " ")
  178. keyWordArr = append(keyWordArr, newKeyWord...)
  179. // 普通的搜索
  180. if !isAddPredictEdb {
  181. total, edbInfoList, err = elastic.SearchEdbInfoData(utils.DATA_INDEX_NAME, keyWord, startSize, pageSize, filterSource, source, 0, frequency, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, edbType)
  182. } else {
  183. // 允许添加预测指标的搜索
  184. total, edbInfoList, err = elastic.SearchAddPredictEdbInfoData(utils.DATA_INDEX_NAME, keyWord, noPermissionEdbInfoIdList, noPermissionEdbClassifyIdList, startSize, pageSize, edbType)
  185. }
  186. isEs = true
  187. } else {
  188. var condition string
  189. var pars []interface{}
  190. // 普通指标
  191. condition += ` AND edb_info_type = ? `
  192. pars = append(pars, 0)
  193. // 无权限指标id
  194. lenNoPermissionEdbInfoIdList := len(noPermissionEdbInfoIdList)
  195. if lenNoPermissionEdbInfoIdList > 0 {
  196. condition += ` AND edb_info_id not in (` + utils.GetOrmInReplace(lenNoPermissionEdbInfoIdList) + `) `
  197. pars = append(pars, noPermissionEdbInfoIdList)
  198. }
  199. // 无权限指标分类id
  200. lenNoPermissionEdbClassifyIdList := len(noPermissionEdbClassifyIdList)
  201. if lenNoPermissionEdbClassifyIdList > 0 {
  202. condition += ` AND classify_id not in (` + utils.GetOrmInReplace(lenNoPermissionEdbClassifyIdList) + `) `
  203. pars = append(pars, noPermissionEdbClassifyIdList)
  204. }
  205. switch filterSource {
  206. case 2:
  207. condition += ` AND frequency='月度' `
  208. case 3:
  209. condition += ` AND frequency <> '日度' `
  210. case 4:
  211. condition += ` AND edb_type = 1 `
  212. case 5:
  213. condition += ` AND source = 6 ` //来源(同比值)
  214. case 6:
  215. condition += ` AND frequency != ? `
  216. pars = append(pars, "年度")
  217. }
  218. //频度
  219. if frequency != "" {
  220. condition += ` AND frequency = ? `
  221. pars = append(pars, frequency)
  222. }
  223. if source > 0 && filterSource != 5 {
  224. condition += ` AND source = ? `
  225. pars = append(pars, source)
  226. }
  227. // 查询只允许添加预测指标的搜索
  228. if isAddPredictEdb {
  229. condition += ` AND frequency in ("日度","周度","月度") `
  230. }
  231. // 基础指标/计算指标
  232. if edbType > 0 {
  233. condition += ` AND edb_type = ? `
  234. pars = append(pars, edbType)
  235. }
  236. total, edbInfoList, err = data_manage.GetEdbInfoFilterList(condition, pars, startSize, pageSize)
  237. }
  238. if err != nil {
  239. edbInfoList = make([]*data_manage.EdbInfoList, 0)
  240. }
  241. page := paging.GetPaging(currentIndex, pageSize, int(total))
  242. edbInfoListLen := len(edbInfoList)
  243. classifyIdList := make([]int, 0)
  244. for i := 0; i < edbInfoListLen; i++ {
  245. edbInfoList[i].ConvertToResp()
  246. edbInfoList[i].EdbNameAlias = edbInfoList[i].EdbName
  247. classifyIdList = append(classifyIdList, edbInfoList[i].ClassifyId)
  248. }
  249. // 当前列表中的分类map
  250. classifyMap := make(map[int]*data_manage.EdbClassify)
  251. if edbInfoListLen > 0 {
  252. classifyList, err := data_manage.GetEdbClassifyByIdList(classifyIdList)
  253. if err != nil {
  254. br.Msg = "获取失败"
  255. br.ErrMsg = "获取分类列表失败,Err:" + err.Error()
  256. return
  257. }
  258. for _, v := range classifyList {
  259. classifyMap[v.ClassifyId] = v
  260. }
  261. // 获取所有有权限的指标和分类
  262. permissionEdbIdList, permissionClassifyIdList, err := data_manage_permission.GetUserEdbAndClassifyPermissionList(c.SysUser.AdminId, 0, 0)
  263. if err != nil {
  264. br.Msg = "获取失败"
  265. br.ErrMsg = "获取所有有权限的指标和分类失败,Err:" + err.Error()
  266. return
  267. }
  268. // 如果是ES的话,需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  269. if isEs {
  270. edbInfoIdList := make([]int, 0)
  271. for i := 0; i < edbInfoListLen; i++ {
  272. edbInfoIdList = append(edbInfoIdList, edbInfoList[i].EdbInfoId)
  273. tmpEdbInfo := edbInfoList[i]
  274. if currClassify, ok := classifyMap[tmpEdbInfo.ClassifyId]; ok {
  275. edbInfoList[i].HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(tmpEdbInfo.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfo.EdbInfoId, tmpEdbInfo.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
  276. }
  277. }
  278. tmpEdbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  279. if err != nil {
  280. br.Msg = "获取失败"
  281. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  282. return
  283. }
  284. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  285. for _, v := range tmpEdbList {
  286. edbInfoMap[v.EdbInfoId] = v
  287. }
  288. for i := 0; i < edbInfoListLen; i++ {
  289. tmpEdbInfo, ok := edbInfoMap[edbInfoList[i].EdbInfoId]
  290. if !ok {
  291. continue
  292. }
  293. edbInfoList[i].IsJoinPermission = tmpEdbInfo.IsJoinPermission
  294. }
  295. }
  296. // 权限校验
  297. for i := 0; i < edbInfoListLen; i++ {
  298. tmpEdbInfoItem := edbInfoList[i]
  299. if currClassify, ok := classifyMap[tmpEdbInfoItem.ClassifyId]; ok {
  300. edbInfoList[i].HaveOperaAuth = data_manage_permission.CheckEdbPermissionByPermissionIdList(tmpEdbInfoItem.IsJoinPermission, currClassify.IsJoinPermission, tmpEdbInfoItem.EdbInfoId, tmpEdbInfoItem.ClassifyId, permissionEdbIdList, permissionClassifyIdList)
  301. }
  302. }
  303. }
  304. for i := 0; i < edbInfoListLen; i++ {
  305. for j := 0; j < edbInfoListLen; j++ {
  306. if (edbInfoList[i].EdbNameAlias == edbInfoList[j].EdbNameAlias) &&
  307. (edbInfoList[i].EdbInfoId != edbInfoList[j].EdbInfoId) &&
  308. !(strings.Contains(edbInfoList[i].EdbName, edbInfoList[i].SourceName)) {
  309. edbInfoList[i].EdbName = edbInfoList[i].EdbName + "(" + edbInfoList[i].SourceName + ")"
  310. }
  311. }
  312. }
  313. //新增搜索词记录
  314. {
  315. searchKeyword := new(data_manage.SearchKeyword)
  316. searchKeyword.KeyWord = keyWord
  317. searchKeyword.CreateTime = time.Now()
  318. go data_manage.AddSearchKeyword(searchKeyword)
  319. }
  320. // 不返回无权限的指标
  321. respList := make([]*data_manage.EdbInfoList, 0)
  322. for _, v := range edbInfoList {
  323. if v.HaveOperaAuth {
  324. respList = append(respList, v)
  325. }
  326. }
  327. resp := data_manage.EdbInfoFilterDataResp{
  328. Paging: page,
  329. List: respList,
  330. }
  331. br.Ret = 200
  332. br.Success = true
  333. br.Msg = "获取成功"
  334. br.Data = resp
  335. }