edb_info_share.go 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741
  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/models/system"
  10. "eta_gn/eta_api/services/data"
  11. "eta_gn/eta_api/services/elastic"
  12. "eta_gn/eta_api/utils"
  13. "fmt"
  14. "github.com/rdlucklib/rdluck_tools/paging"
  15. "strconv"
  16. "strings"
  17. )
  18. // EdbInfoShareController 数据管理
  19. type EdbInfoShareController struct {
  20. controllers.BaseAuthController
  21. }
  22. // UserList
  23. // @Title 获取指标设置共享的详情
  24. // @Description 获取指标详情接口
  25. // @Param EdbInfoId query int true "指标id"
  26. // @Success 200 {object} response.EdbInfoShareUserResp
  27. // @router /edb_info/share/user_list [get]
  28. func (c *EdbInfoShareController) UserList() {
  29. br := new(models.BaseResponse).Init()
  30. defer func() {
  31. c.Data["json"] = br
  32. c.ServeJSON()
  33. }()
  34. sysUser := c.SysUser
  35. if sysUser == nil {
  36. br.Msg = "请登录"
  37. br.ErrMsg = "请登录,SysUser Is Empty"
  38. br.Ret = 408
  39. return
  40. }
  41. edbInfoId, _ := c.GetInt("EdbInfoId")
  42. if edbInfoId <= 0 {
  43. br.Msg = "参数错误"
  44. br.ErrMsg = "参数错误"
  45. return
  46. }
  47. _, err := data_manage.GetEdbInfoById(edbInfoId)
  48. if err != nil {
  49. br.Msg = "获取失败"
  50. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  51. return
  52. }
  53. //// TODO 权限校验
  54. //{
  55. // classifyMap := make(map[int]*data_manage.EdbClassifyIdItems)
  56. // for _, v := range classifyList {
  57. // classifyMap[v.ClassifyId] = v
  58. // }
  59. // if currClassify, ok := classifyMap[edbInfo.ClassifyId]; ok {
  60. // haveOperaAuth, err := data_manage_permission.CheckEdbPermission(edbInfo.IsJoinPermission, currClassify.IsJoinPermission, c.SysUser.AdminId, edbInfo.EdbInfoId, edbInfo.ClassifyId)
  61. // if err != nil {
  62. // br.Msg = err.Error()
  63. // br.ErrMsg = "校验指标权限失败,err:" + err.Error()
  64. // return
  65. // }
  66. // resp.HaveOperaAuth = haveOperaAuth
  67. // }
  68. //}
  69. resp := response.EdbInfoShareUserResp{}
  70. obj := data_manage.EdbInfoShare{}
  71. list, err := obj.GetListByEdbInfoId(edbInfoId)
  72. if err != nil {
  73. br.Msg = `获取失败`
  74. br.ErrMsg = `获取失败:` + err.Error()
  75. return
  76. }
  77. resp.List = list
  78. br.Ret = 200
  79. br.Success = true
  80. br.Msg = "获取成功"
  81. br.Data = resp
  82. }
  83. // Save
  84. // @Title 单个指标设置共享
  85. // @Description 单个指标设置共享
  86. // @Param request body request.SetEdbInfoShareReq true "type json string"
  87. // @Success 200 {object} data_manage.EdbInfo
  88. // @router /edb_info/share/save [post]
  89. func (c *EdbInfoShareController) Save() {
  90. br := new(models.BaseResponse).Init()
  91. defer func() {
  92. c.Data["json"] = br
  93. c.ServeJSON()
  94. }()
  95. sysUser := c.SysUser
  96. if sysUser == nil {
  97. br.Msg = "请登录"
  98. br.ErrMsg = "请登录,SysUser Is Empty"
  99. br.Ret = 408
  100. return
  101. }
  102. var req request.SetEdbInfoShareReq
  103. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  104. if err != nil {
  105. br.Msg = "参数解析异常!"
  106. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  107. return
  108. }
  109. if req.EdbInfoId <= 0 {
  110. br.Msg = `请选择指标`
  111. br.IsSendEmail = false
  112. return
  113. }
  114. edbItem, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  115. if err != nil {
  116. br.Msg = "查找指标失败"
  117. br.ErrMsg = "查找指标失败,Err:" + err.Error()
  118. return
  119. }
  120. if edbItem.EdbInfoId <= 0 {
  121. br.Msg = "指标不存在"
  122. br.ErrMsg = "指标不存在,ChartInfoId:" + strconv.Itoa(req.EdbInfoId)
  123. br.IsSendEmail = false
  124. return
  125. }
  126. if edbItem.SysUserId != c.SysUser.AdminId {
  127. br.Msg = "您没有权限设置共享"
  128. br.ErrMsg = "您没有权限设置共享,EdbInfoId:" + strconv.Itoa(req.EdbInfoId)
  129. br.IsSendEmail = false
  130. return
  131. }
  132. obj := data_manage.EdbInfoShare{}
  133. err = obj.SaveEdbInfoShare([]int{req.EdbInfoId}, req.UserIdList, req.ShareType)
  134. if err != nil {
  135. br.Msg = `保存失败`
  136. br.ErrMsg = `保存失败:` + err.Error()
  137. return
  138. }
  139. // 更新es
  140. data.AddOrEditEdbInfoToEs(req.EdbInfoId)
  141. br.Ret = 200
  142. br.Success = true
  143. br.Msg = "保存成功"
  144. }
  145. // Tree
  146. // @Title 获取共享指标的分类/指标树
  147. // @Description 获取共享指标的分类/指标树
  148. // @Success 200 {object} response.EdbShareListResp
  149. // @router /edb_info/share/tree [get]
  150. func (c *EdbInfoShareController) Tree() {
  151. br := new(models.BaseResponse).Init()
  152. defer func() {
  153. c.Data["json"] = br
  154. c.ServeJSON()
  155. }()
  156. sysUser := c.SysUser
  157. if sysUser == nil {
  158. br.Msg = "请登录"
  159. br.ErrMsg = "请登录,SysUser Is Empty"
  160. br.Ret = 408
  161. return
  162. }
  163. resp := response.EdbShareListResp{}
  164. // 我共享的
  165. {
  166. sendList, err := data.GetAllShareEdbListByFromUserId(sysUser.AdminId)
  167. if err != nil {
  168. br.Msg = "获取失败"
  169. br.ErrMsg = "获取我共享的指标列表信息失败,Err:" + err.Error()
  170. return
  171. }
  172. nodeList, err := data.GetEdbClassifyItemListByShareEdbInfoQueryList(sendList)
  173. if err != nil {
  174. br.Msg = "获取失败"
  175. br.ErrMsg = "获取我共享出去的指标列表分类结构信息失败,Err:" + err.Error()
  176. return
  177. }
  178. resp.Send = nodeList
  179. }
  180. // TODO 不确定加了用户这个顶级,会不会对前端造成一定影响
  181. // 我收到的
  182. {
  183. sendList, err := data.GetAllShareEdbListByReceivedUserId(sysUser.AdminId)
  184. if err != nil {
  185. br.Msg = "获取失败"
  186. br.ErrMsg = "获取我共享的指标列表信息失败,Err:" + err.Error()
  187. return
  188. }
  189. nodeList, err := data.GetEdbClassifyItemListByShareEdbInfoQueryList(sendList)
  190. if err != nil {
  191. br.Msg = "获取失败"
  192. br.ErrMsg = "获取我收到共享的指标列表分类结构信息失败,Err:" + err.Error()
  193. return
  194. }
  195. receivedMap := make(map[int]int)
  196. var receivedList data_manage.UserShareEdbClassifyItemList
  197. for _, v := range nodeList {
  198. index, ok := receivedMap[v.SysUserId]
  199. if !ok {
  200. index = len(receivedMap)
  201. item := &data_manage.UserShareEdbClassifyItem{
  202. UserId: v.SysUserId,
  203. UserName: v.SysUserRealName,
  204. EdbInfoId: 0,
  205. ClassifyId: v.SysUserId,
  206. ClassifyName: v.SysUserRealName,
  207. ClassifyType: 0,
  208. ClassifyNameEn: "",
  209. ParentId: 0,
  210. RootId: 0,
  211. Level: 0,
  212. Sort: 0,
  213. UniqueCode: utils.MD5(fmt.Sprint(v.SysUserId, "_", v.SysUserRealName)),
  214. Source: 0,
  215. SourceName: "",
  216. SysUserId: v.SysUserId,
  217. SysUserRealName: v.SysUserRealName,
  218. StartDate: "",
  219. EdbCode: "",
  220. EdbType: 0,
  221. Children: []*data_manage.UserShareEdbClassifyItem{},
  222. Button: data_manage.EdbClassifyItemsButton{},
  223. IsJoinPermission: 0,
  224. HaveOperaAuth: true,
  225. ClassifyIdPath: "",
  226. }
  227. receivedList = append(receivedList, item)
  228. }
  229. receivedList[index].Children = append(receivedList[index].Children, v)
  230. receivedMap[v.SysUserId] = index
  231. }
  232. resp.Received = receivedList
  233. }
  234. br.Ret = 200
  235. br.Success = true
  236. br.Msg = "获取成功"
  237. br.Data = resp
  238. }
  239. // List
  240. // @Title 指标列表接口
  241. // @Description 指标列表接口
  242. // @Param PageSize query int true "每页数据条数"
  243. // @Param CurrentIndex query int true "当前页页码,从1开始"
  244. // @Param ClassifyId query int true "分类id"
  245. // @Param FilterSource query int false "共享指标的列表数据来源,0:我共享的;1:别人共享给我的"
  246. // @Success 200 {object} response.EdbInfoChartListResp
  247. // @router /edb_info/share/list [get]
  248. func (c *EdbInfoShareController) List() {
  249. br := new(models.BaseResponse).Init()
  250. defer func() {
  251. if br.ErrMsg == "" {
  252. br.IsSendEmail = false
  253. }
  254. c.Data["json"] = br
  255. c.ServeJSON()
  256. }()
  257. sysUser := c.SysUser
  258. if sysUser == nil {
  259. br.Msg = "请登录"
  260. br.ErrMsg = "请登录,SysUser Is Empty"
  261. br.Ret = 408
  262. return
  263. }
  264. // 分页
  265. pageSize, _ := c.GetInt("PageSize")
  266. currentIndex, _ := c.GetInt("CurrentIndex")
  267. filterSource, _ := c.GetInt("FilterSource")
  268. var total int
  269. page := paging.GetPaging(currentIndex, pageSize, total)
  270. var startSize int
  271. if pageSize <= 0 {
  272. pageSize = utils.PageSize20
  273. }
  274. if currentIndex <= 0 {
  275. currentIndex = 1
  276. }
  277. startSize = paging.StartIndex(currentIndex, pageSize)
  278. // 基础指标
  279. var condition string
  280. var pars []interface{}
  281. condition += ` AND edb_info_type = ? `
  282. pars = append(pars, 0)
  283. // 指标类型
  284. edbType, _ := c.GetInt("EdbType", 0)
  285. if edbType > 0 {
  286. condition += ` AND edb_type = ? `
  287. pars = append(pars, edbType)
  288. }
  289. // 用户筛选
  290. userId, _ := c.GetInt("UserId")
  291. if userId > 0 {
  292. condition += ` AND b.sys_user_id = ? `
  293. pars = append(pars, userId)
  294. }
  295. // 分类筛选
  296. classifyId, _ := c.GetInt("ClassifyId")
  297. if classifyId > 0 {
  298. childClassify, e, _ := data.GetChildClassifyByClassifyId(classifyId)
  299. if e != nil && !utils.IsErrNoRow(e) {
  300. br.Msg = "获取失败"
  301. br.ErrMsg = "获取分类信息失败, GetEdbClassify,Err:" + e.Error()
  302. return
  303. }
  304. var classifyIds []int
  305. for _, v := range childClassify {
  306. classifyIds = append(classifyIds, v.ClassifyId)
  307. }
  308. condition += fmt.Sprintf(` AND b.classify_id IN (%s) `, utils.GetOrmInReplace(len(classifyIds)))
  309. pars = append(pars, classifyIds)
  310. }
  311. switch filterSource {
  312. case 1: // 别人共享给我的
  313. condition += ` AND a.sys_user_id = ? AND b.sys_user_id != ? `
  314. pars = append(pars, sysUser.AdminId, sysUser.AdminId)
  315. default: // 我共享的
  316. condition += ` AND b.sys_user_id = ? `
  317. pars = append(pars, sysUser.AdminId)
  318. }
  319. obj := data_manage.EdbInfoShare{}
  320. dataCount, respList, err := obj.GetShareEdbInfoListPageList(condition, pars, startSize, pageSize)
  321. if err != nil {
  322. br.Msg = "获取失败"
  323. br.ErrMsg = fmt.Sprintf("获取分享指标列表失败, %v", err)
  324. return
  325. }
  326. editShareEdbInfoIdMap, err := data.GetAllEditSharedEdbInfoIdMapByReceivedUserId(c.SysUser.AdminId)
  327. if err != nil {
  328. br.Msg = "获取失败"
  329. br.ErrMsg = "获取所有有编辑权限的分享指标失败,Err:" + err.Error()
  330. return
  331. }
  332. for _, edbInfo := range respList {
  333. edbInfo.Button = data.GetEdbOpButton(c.SysUser, edbInfo.SysUserId, edbInfo.EdbInfoId, edbInfo.EdbType, edbInfo.EdbInfoType, true, editShareEdbInfoIdMap)
  334. }
  335. page = paging.GetPaging(currentIndex, pageSize, int(dataCount))
  336. resp := response.EdbInfoChartListResp{
  337. Paging: page,
  338. List: respList,
  339. }
  340. br.Ret = 200
  341. br.Success = true
  342. br.Msg = "获取成功"
  343. br.Data = resp
  344. }
  345. // ListByEs
  346. // @Title 指标筛选接口
  347. // @Description 指标筛选接口
  348. // @Success 200 {object} data_manage.EdbInfoList
  349. // @Param request body request.SearchEdbInfoShareReq true "type json string"
  350. // @Success 200 {object} data_manage.EdbInfoFilterDataResp
  351. // @router /edb_info/share/list/es [post]
  352. func (c *EdbInfoShareController) ListByEs() {
  353. br := new(models.BaseResponse).Init()
  354. defer func() {
  355. c.Data["json"] = br
  356. c.ServeJSON()
  357. }()
  358. var req request.SearchEdbInfoShareReq
  359. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  360. if err != nil {
  361. br.Msg = "参数解析异常!"
  362. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  363. return
  364. }
  365. pageSize := req.PageSize
  366. currentIndex := req.CurrentIndex
  367. var total int64
  368. var startSize int
  369. if pageSize <= 0 {
  370. pageSize = utils.PageSize20
  371. }
  372. if currentIndex <= 0 {
  373. currentIndex = 1
  374. }
  375. startSize = paging.StartIndex(currentIndex, pageSize)
  376. keyword := req.Keyword
  377. keyword = strings.TrimSpace(keyword) //移除字符串首尾空格
  378. //指标来源
  379. sourceList := req.SourceList
  380. edbInfoType := 0 // 普通指标
  381. edbTypeList := []int{utils.EdbTypeCalculate} // 普通指标中的计算指标
  382. // 指标分享状态:1-未共享;2-已共享。可多选,多选用英文,隔开;默认是未全部
  383. edbShareList := req.EdbShareList
  384. if len(edbShareList) <= 0 {
  385. edbShareList = []int{}
  386. }
  387. edbShare := 0 // 0:全部,1:未共享,2:已共享
  388. lenEdbShareList := len(edbShareList)
  389. if len(edbShareList) > 0 {
  390. if lenEdbShareList > 1 {
  391. edbShare = 0
  392. } else {
  393. edbShare = edbShareList[0]
  394. }
  395. }
  396. // 直指标所属分类id
  397. edbClassifyIdList := req.ClassifyIdList
  398. edbAuth := 1 // 选择范围是:只有我的指标
  399. var edbInfoList []*data_manage.EdbInfoList
  400. sortMap := make(map[string]string)
  401. // 如果没有搜索关键词,则默认根据指标编码倒序排序
  402. if keyword == `` {
  403. sortMap["EdbInfoId"] = `desc`
  404. }
  405. total, edbInfoList, err = elastic.SearchEdbInfoDataByShared(keyword, startSize, pageSize, edbShare, sourceList, edbClassifyIdList, edbTypeList, edbInfoType, edbAuth, c.SysUser.AdminId, sortMap)
  406. if err != nil {
  407. edbInfoList = make([]*data_manage.EdbInfoList, 0)
  408. }
  409. page := paging.GetPaging(currentIndex, pageSize, int(total))
  410. edbInfoListLen := len(edbInfoList)
  411. // 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  412. if len(edbInfoList) > 0 {
  413. sysUserIdList := make([]int, 0)
  414. edbInfoIdList := make([]int, 0)
  415. for _, v := range edbInfoList {
  416. v.ConvertToResp()
  417. v.EdbNameAlias = v.EdbName
  418. v.HaveOperaAuth = true
  419. edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
  420. if v.SharedUserIdList != nil && len(v.SharedUserIdList) > 0 {
  421. sysUserIdList = append(sysUserIdList, v.SharedUserIdList...)
  422. }
  423. }
  424. // 获取指标数据
  425. tmpEdbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  426. if err != nil {
  427. br.Msg = "获取失败"
  428. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  429. return
  430. }
  431. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  432. for _, v := range tmpEdbList {
  433. edbInfoMap[v.EdbInfoId] = v
  434. }
  435. // 获取用户数据
  436. sysUserMap := make(map[int]string)
  437. if len(sysUserIdList) > 0 {
  438. sysUserList, err := system.GetAdminListByIdList(sysUserIdList)
  439. if err != nil {
  440. br.Msg = "获取失败"
  441. br.ErrMsg = "获取分享用户列表失败,Err:" + err.Error()
  442. return
  443. }
  444. for _, v := range sysUserList {
  445. sysUserMap[v.AdminId] = v.RealName
  446. }
  447. }
  448. for _, v := range edbInfoList {
  449. tmpEdbInfo, ok := edbInfoMap[v.EdbInfoId]
  450. if !ok {
  451. continue
  452. }
  453. v.IsJoinPermission = tmpEdbInfo.IsJoinPermission
  454. // 分享人
  455. shareUserName := ``
  456. shareUserNameList := make([]string, 0)
  457. shareUserNameMap := make(map[int]bool)
  458. for _, userId := range v.SharedUserIdList {
  459. userName, ok := sysUserMap[userId]
  460. if !ok {
  461. continue
  462. }
  463. if _, ok = shareUserNameMap[userId]; ok {
  464. continue
  465. }
  466. shareUserNameMap[userId] = true
  467. shareUserNameList = append(shareUserNameList, userName)
  468. }
  469. if len(shareUserNameList) > 0 {
  470. shareUserName = strings.Join(shareUserNameList, `,`)
  471. }
  472. v.SharedUserName = shareUserName
  473. }
  474. }
  475. for i := 0; i < edbInfoListLen; i++ {
  476. for j := 0; j < edbInfoListLen; j++ {
  477. if (edbInfoList[i].EdbNameAlias == edbInfoList[j].EdbNameAlias) &&
  478. (edbInfoList[i].EdbInfoId != edbInfoList[j].EdbInfoId) &&
  479. !(strings.Contains(edbInfoList[i].EdbName, edbInfoList[i].SourceName)) {
  480. edbInfoList[i].EdbName = edbInfoList[i].EdbName + "(" + edbInfoList[i].SourceName + ")"
  481. }
  482. }
  483. }
  484. resp := data_manage.EdbInfoFilterDataResp{
  485. Paging: page,
  486. List: edbInfoList,
  487. }
  488. br.Ret = 200
  489. br.Success = true
  490. br.Msg = "获取成功"
  491. br.Data = resp
  492. }
  493. // BatchSave
  494. // @Title 批量指标设置共享
  495. // @Description 批量指标设置共享
  496. // @Param request body request.SetEdbSharePermissionReq true "type json string"
  497. // @Success 200 {object} data_manage.EdbInfo
  498. // @router /edb_info/share/batch_save [post]
  499. func (c *EdbInfoShareController) BatchSave() {
  500. br := new(models.BaseResponse).Init()
  501. defer func() {
  502. c.Data["json"] = br
  503. c.ServeJSON()
  504. }()
  505. sysUser := c.SysUser
  506. if sysUser == nil {
  507. br.Msg = "请登录"
  508. br.ErrMsg = "请登录,SysUser Is Empty"
  509. br.Ret = 408
  510. return
  511. }
  512. var req request.SetEdbSharePermissionReq
  513. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  514. if err != nil {
  515. br.Msg = "参数解析异常!"
  516. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  517. return
  518. }
  519. // 选中的指标id列表
  520. selectEdbInfoIdList := make([]int, 0)
  521. // 选择所有指标,所以需要通过es获取数据
  522. if req.IsSelectAll {
  523. allEsEdbInfoIdList, err := getAllEdbInfoIdListByShared(req, c.SysUser.AdminId)
  524. if err != nil {
  525. br.Msg = "设置失败!"
  526. br.ErrMsg = "设置失败,Err:" + err.Error()
  527. return
  528. }
  529. if len(req.NoEdbIdList) <= 0 {
  530. selectEdbInfoIdList = allEsEdbInfoIdList
  531. } else {
  532. noEdbIdMap := make(map[int]bool)
  533. for _, v := range req.NoEdbIdList {
  534. noEdbIdMap[v] = true
  535. }
  536. for _, v := range allEsEdbInfoIdList {
  537. if _, ok := noEdbIdMap[v]; !ok {
  538. // 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
  539. selectEdbInfoIdList = append(selectEdbInfoIdList, v)
  540. }
  541. }
  542. }
  543. } else {
  544. selectEdbInfoIdList = req.EdbIdList
  545. }
  546. num := len(selectEdbInfoIdList)
  547. if num > 30 {
  548. br.Msg = `指标数量不能超过30个`
  549. br.IsSendEmail = false
  550. return
  551. }
  552. // 设置
  553. if num > 0 {
  554. obj := data_manage.EdbInfoShare{}
  555. err = obj.SaveEdbInfoShare(selectEdbInfoIdList, req.UserIdList, req.ShareType)
  556. if err != nil {
  557. br.Msg = `保存失败`
  558. br.ErrMsg = `保存失败:` + err.Error()
  559. return
  560. }
  561. // 更新es
  562. for _, edbInfoId := range selectEdbInfoIdList {
  563. data.AddOrEditEdbInfoToEs(edbInfoId)
  564. }
  565. }
  566. br.Ret = 200
  567. br.Success = true
  568. br.Msg = "保存成功"
  569. }
  570. // getAllEdbInfoIdListByShared
  571. // @Description: 获取所有的指标id列表
  572. // @author: Roc
  573. // @datetime 2024-12-04 15:43:14
  574. // @param req request.SetEdbChartPermissionReq
  575. // @param userId int
  576. // @return edbInfoIdList []int
  577. // @return err error
  578. func getAllEdbInfoIdListByShared(req request.SetEdbSharePermissionReq, userId int) (edbInfoIdList []int, err error) {
  579. keyword := req.Keyword
  580. keyword = strings.TrimSpace(keyword) //移除字符串首尾空格
  581. //指标来源
  582. sourceList := req.SourceList
  583. edbInfoType := 0 // 普通指标
  584. edbTypeList := []int{utils.EdbTypeCalculate} // 普通指标中的计算指标
  585. // 指标分享状态:1-未共享;2-已共享。可多选,多选用英文,隔开;默认是未共享
  586. edbShareList := req.EdbShareList
  587. if len(edbShareList) <= 0 {
  588. edbShareList = []int{1}
  589. }
  590. edbShare := 1 // 0:全部,1:未共享,2:已共享
  591. lenEdbShareList := len(edbShareList)
  592. if len(edbShareList) > 0 {
  593. if lenEdbShareList > 1 {
  594. edbShare = 0
  595. } else {
  596. edbShare = edbShareList[0]
  597. }
  598. }
  599. // 指标分享状态:1-未共享;2-已共享。可多选,多选用英文,隔开;默认是未共享
  600. edbClassifyIdList := req.ClassifyIdList
  601. edbAuth := 1 // 选择范围是:只有我的指标
  602. sortMap := make(map[string]string)
  603. // 如果没有搜索关键词,则默认根据指标编码倒序排序
  604. if keyword == `` {
  605. sortMap["EdbInfoId"] = `desc`
  606. }
  607. _, edbInfoList, err := getAllEdbInfoDataByShared(keyword, 1, edbShare, sourceList, edbClassifyIdList, edbTypeList, edbInfoType, edbAuth, userId, sortMap)
  608. if err != nil {
  609. return
  610. }
  611. // 返回指标id列表
  612. for _, v := range edbInfoList {
  613. edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
  614. }
  615. return
  616. }
  617. // getAllEdbInfoDataByShared
  618. // @Description: 获取所有的指标列表(设置共享的时候)
  619. // @author: Roc
  620. // @datetime 2024-12-04 15:27:53
  621. // @param keyword string
  622. // @param currPage int
  623. // @param edbShare int
  624. // @param sourceList []int
  625. // @param classifyIdList []int
  626. // @param edbTypeList []int
  627. // @param edbInfoType int
  628. // @param edbAuth int
  629. // @param sysUserId int
  630. // @param sortMap map[string]string
  631. // @return total int64
  632. // @return list []*data_manage.EdbInfoList
  633. // @return err error
  634. func getAllEdbInfoDataByShared(keyword string, currPage, edbShare int, sourceList, classifyIdList, edbTypeList []int, edbInfoType, edbAuth, sysUserId int, sortMap map[string]string) (total int64, list []*data_manage.EdbInfoList, err error) {
  635. // 每页获取数据的数量
  636. pageSize := 5000
  637. var startSize int
  638. if currPage <= 0 {
  639. currPage = 1
  640. }
  641. startSize = paging.StartIndex(currPage, pageSize)
  642. total, list, err = elastic.SearchEdbInfoDataByShared(keyword, startSize, pageSize, edbShare, sourceList, classifyIdList, edbTypeList, edbInfoType, edbAuth, sysUserId, sortMap)
  643. if err != nil {
  644. return
  645. }
  646. page := paging.GetPaging(currPage, pageSize, int(total))
  647. if !page.IsEnd {
  648. _, nextList, tmpErr := getAllEdbInfoDataByShared(keyword, page.NextIndex, edbShare, sourceList, classifyIdList, edbTypeList, edbInfoType, edbAuth, sysUserId, sortMap)
  649. if tmpErr != nil {
  650. err = tmpErr
  651. return
  652. }
  653. list = append(list, nextList...)
  654. }
  655. return
  656. }