edb_info_share.go 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981
  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. // TODO 取消共享的时候,需要清除对应用户的收藏状态
  19. // EdbInfoShareController 数据管理
  20. type EdbInfoShareController struct {
  21. controllers.BaseAuthController
  22. }
  23. // UserList
  24. // @Title 获取指标设置共享的详情
  25. // @Description 获取指标详情接口
  26. // @Param EdbInfoId query int true "指标id"
  27. // @Success 200 {object} response.EdbInfoShareUserResp
  28. // @router /edb_info/share/user_list [get]
  29. func (c *EdbInfoShareController) UserList() {
  30. br := new(models.BaseResponse).Init()
  31. defer func() {
  32. c.Data["json"] = br
  33. c.ServeJSON()
  34. }()
  35. sysUser := c.SysUser
  36. if sysUser == nil {
  37. br.Msg = "请登录"
  38. br.ErrMsg = "请登录,SysUser Is Empty"
  39. br.Ret = 408
  40. return
  41. }
  42. edbInfoId, _ := c.GetInt("EdbInfoId")
  43. if edbInfoId <= 0 {
  44. br.Msg = "参数错误"
  45. br.ErrMsg = "参数错误"
  46. return
  47. }
  48. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  49. if err != nil {
  50. br.Msg = "获取失败"
  51. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  52. return
  53. }
  54. if edbInfo.SysUserId != sysUser.AdminId {
  55. br.Msg = "您没有权限设置共享"
  56. br.ErrMsg = "您没有权限设置共享,EdbInfoId:" + strconv.Itoa(edbInfo.EdbInfoId)
  57. br.IsSendEmail = false
  58. return
  59. }
  60. resp := response.EdbInfoShareUserResp{}
  61. obj := data_manage.EdbInfoShare{}
  62. list, err := obj.GetListByEdbInfoId(edbInfoId)
  63. if err != nil {
  64. br.Msg = `获取失败`
  65. br.ErrMsg = `获取失败:` + err.Error()
  66. return
  67. }
  68. resp.List = list
  69. br.Ret = 200
  70. br.Success = true
  71. br.Msg = "获取成功"
  72. br.Data = resp
  73. }
  74. // Save
  75. // @Title 单个指标设置共享
  76. // @Description 单个指标设置共享
  77. // @Param request body request.SetEdbInfoShareReq true "type json string"
  78. // @Success 200 {object} data_manage.EdbInfo
  79. // @router /edb_info/share/save [post]
  80. func (c *EdbInfoShareController) Save() {
  81. br := new(models.BaseResponse).Init()
  82. defer func() {
  83. c.Data["json"] = br
  84. c.ServeJSON()
  85. }()
  86. sysUser := c.SysUser
  87. if sysUser == nil {
  88. br.Msg = "请登录"
  89. br.ErrMsg = "请登录,SysUser Is Empty"
  90. br.Ret = 408
  91. return
  92. }
  93. var req request.SetEdbInfoShareReq
  94. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  95. if err != nil {
  96. br.Msg = "参数解析异常!"
  97. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  98. return
  99. }
  100. if req.EdbInfoId <= 0 {
  101. br.Msg = `请选择指标`
  102. br.IsSendEmail = false
  103. return
  104. }
  105. edbItem, err := data_manage.GetEdbInfoById(req.EdbInfoId)
  106. if err != nil {
  107. br.Msg = "查找指标失败"
  108. br.ErrMsg = "查找指标失败,Err:" + err.Error()
  109. return
  110. }
  111. if edbItem.EdbInfoId <= 0 {
  112. br.Msg = "指标不存在"
  113. br.ErrMsg = "指标不存在,ChartInfoId:" + strconv.Itoa(req.EdbInfoId)
  114. br.IsSendEmail = false
  115. return
  116. }
  117. if edbItem.SysUserId != c.SysUser.AdminId {
  118. br.Msg = "您没有权限设置共享"
  119. br.ErrMsg = "您没有权限设置共享,EdbInfoId:" + strconv.Itoa(req.EdbInfoId)
  120. br.IsSendEmail = false
  121. return
  122. }
  123. obj := data_manage.EdbInfoShare{}
  124. // 如果指标未公开,则判断是否被其他用户使用
  125. if edbItem.PublicStatus != utils.DataPublicSuccess {
  126. checkUserIdList := []int{sysUser.AdminId}
  127. if len(req.UserIdList) > 0 {
  128. checkUserIdList = append(checkUserIdList, req.UserIdList...)
  129. }
  130. {
  131. userIdList, err := obj.GetAllUserIdListByEdbInfoIdAndNoShareType(req.EdbInfoId, req.ShareType)
  132. if err != nil {
  133. br.Msg = "设置失败!"
  134. br.ErrMsg = "设置失败,Err:" + err.Error()
  135. return
  136. }
  137. if len(userIdList) > 0 {
  138. checkUserIdList = append(checkUserIdList, userIdList...)
  139. }
  140. }
  141. noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(edbItem.EdbInfoType, []int{edbItem.EdbInfoId}, checkUserIdList)
  142. if err != nil {
  143. br.Msg = "保存失败"
  144. if tips != "" {
  145. br.Msg = tips
  146. }
  147. br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
  148. return
  149. }
  150. if !noReferenced {
  151. userNameStr := ``
  152. if len(otherUserIdList) > 0 {
  153. userNameList := make([]string, 0)
  154. userList, err := system.GetAdminListByIdList(otherUserIdList)
  155. if err != nil {
  156. br.Msg = "保存失败"
  157. if tips != "" {
  158. br.Msg = tips
  159. }
  160. br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
  161. return
  162. }
  163. for _, userInfo := range userList {
  164. userNameList = append(userNameList, userInfo.RealName)
  165. }
  166. userNameStr = strings.Join(userNameList, "、")
  167. }
  168. msg := `指标被其他用户使用,无法设置共享`
  169. if userNameStr != "" {
  170. msg = fmt.Sprintf(`指标被用户%s使用,无法设置共享`, userNameStr)
  171. }
  172. if tips != "" {
  173. msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
  174. }
  175. br.Msg = msg
  176. br.ErrMsg = "指标被其他用户共享,无法设置共享,EdbInfoId:" + strconv.Itoa(req.EdbInfoId)
  177. br.IsSendEmail = false
  178. return
  179. }
  180. }
  181. err = obj.SaveEdbInfoShare([]int{req.EdbInfoId}, req.UserIdList, req.ShareType)
  182. if err != nil {
  183. br.Msg = `保存失败`
  184. br.ErrMsg = `保存失败:` + err.Error()
  185. return
  186. }
  187. // 更新es
  188. data.AddOrEditEdbInfoToEs(req.EdbInfoId)
  189. br.Ret = 200
  190. br.Success = true
  191. br.Msg = "保存成功"
  192. }
  193. // Tree
  194. // @Title 获取共享指标的分类/指标树
  195. // @Description 获取共享指标的分类/指标树
  196. // @Success 200 {object} response.EdbShareListResp
  197. // @router /edb_info/share/tree [get]
  198. func (c *EdbInfoShareController) Tree() {
  199. br := new(models.BaseResponse).Init()
  200. defer func() {
  201. c.Data["json"] = br
  202. c.ServeJSON()
  203. }()
  204. sysUser := c.SysUser
  205. if sysUser == nil {
  206. br.Msg = "请登录"
  207. br.ErrMsg = "请登录,SysUser Is Empty"
  208. br.Ret = 408
  209. return
  210. }
  211. resp := response.EdbShareListResp{}
  212. // 我共享的
  213. {
  214. sendList, err := data.GetAllShareEdbListByFromUserId(sysUser.AdminId)
  215. if err != nil {
  216. br.Msg = "获取失败"
  217. br.ErrMsg = "获取我共享的指标列表信息失败,Err:" + err.Error()
  218. return
  219. }
  220. nodeList, err := data.GetEdbClassifyItemListByShareEdbInfoQueryList(sendList)
  221. if err != nil {
  222. br.Msg = "获取失败"
  223. br.ErrMsg = "获取我共享出去的指标列表分类结构信息失败,Err:" + err.Error()
  224. return
  225. }
  226. resp.Send = nodeList
  227. }
  228. // 我收到的
  229. {
  230. sendList, err := data.GetAllShareEdbListByReceivedUserId(sysUser.AdminId)
  231. if err != nil {
  232. br.Msg = "获取失败"
  233. br.ErrMsg = "获取我共享的指标列表信息失败,Err:" + err.Error()
  234. return
  235. }
  236. nodeList, err := data.GetEdbClassifyItemListByShareEdbInfoQueryList(sendList)
  237. if err != nil {
  238. br.Msg = "获取失败"
  239. br.ErrMsg = "获取我收到共享的指标列表分类结构信息失败,Err:" + err.Error()
  240. return
  241. }
  242. receivedMap := make(map[int]int)
  243. var receivedList data_manage.UserShareEdbClassifyItemList
  244. for _, v := range nodeList {
  245. index, ok := receivedMap[v.SysUserId]
  246. if !ok {
  247. index = len(receivedMap)
  248. item := &data_manage.UserShareEdbClassifyItem{
  249. UserId: v.SysUserId,
  250. UserName: v.SysUserRealName,
  251. EdbInfoId: 0,
  252. ClassifyId: v.SysUserId,
  253. ClassifyName: v.SysUserRealName,
  254. ClassifyType: 0,
  255. ClassifyNameEn: "",
  256. ParentId: 0,
  257. RootId: 0,
  258. Level: 0,
  259. Sort: 0,
  260. UniqueCode: utils.MD5(fmt.Sprint(v.SysUserId, "_", v.SysUserRealName)),
  261. Source: 0,
  262. SourceName: "",
  263. SysUserId: v.SysUserId,
  264. SysUserRealName: v.SysUserRealName,
  265. StartDate: "",
  266. EdbCode: "",
  267. EdbType: 0,
  268. Children: []*data_manage.UserShareEdbClassifyItem{},
  269. Button: data_manage.EdbClassifyItemsButton{},
  270. IsJoinPermission: 0,
  271. HaveOperaAuth: true,
  272. ClassifyIdPath: "",
  273. }
  274. receivedList = append(receivedList, item)
  275. }
  276. receivedList[index].Children = append(receivedList[index].Children, v)
  277. receivedMap[v.SysUserId] = index
  278. }
  279. resp.Received = receivedList
  280. }
  281. br.Ret = 200
  282. br.Success = true
  283. br.Msg = "获取成功"
  284. br.Data = resp
  285. }
  286. // List
  287. // @Title 指标列表接口
  288. // @Description 指标列表接口
  289. // @Param PageSize query int true "每页数据条数"
  290. // @Param CurrentIndex query int true "当前页页码,从1开始"
  291. // @Param ClassifyId query int true "分类id"
  292. // @Param FilterSource query int false "共享指标的列表数据来源,0:我共享的;1:别人共享给我的"
  293. // @Success 200 {object} response.EdbInfoChartListResp
  294. // @router /edb_info/share/list [get]
  295. func (c *EdbInfoShareController) List() {
  296. br := new(models.BaseResponse).Init()
  297. defer func() {
  298. if br.ErrMsg == "" {
  299. br.IsSendEmail = false
  300. }
  301. c.Data["json"] = br
  302. c.ServeJSON()
  303. }()
  304. sysUser := c.SysUser
  305. if sysUser == nil {
  306. br.Msg = "请登录"
  307. br.ErrMsg = "请登录,SysUser Is Empty"
  308. br.Ret = 408
  309. return
  310. }
  311. // 分页
  312. pageSize, _ := c.GetInt("PageSize")
  313. currentIndex, _ := c.GetInt("CurrentIndex")
  314. filterSource, _ := c.GetInt("FilterSource")
  315. var total int
  316. page := paging.GetPaging(currentIndex, pageSize, total)
  317. var startSize int
  318. if pageSize <= 0 {
  319. pageSize = utils.PageSize20
  320. }
  321. if currentIndex <= 0 {
  322. currentIndex = 1
  323. }
  324. startSize = paging.StartIndex(currentIndex, pageSize)
  325. // 基础指标
  326. var condition string
  327. var pars []interface{}
  328. condition += ` AND edb_info_type = ? `
  329. pars = append(pars, 0)
  330. // 指标类型
  331. edbType, _ := c.GetInt("EdbType", 0)
  332. if edbType > 0 {
  333. condition += ` AND edb_type = ? `
  334. pars = append(pars, edbType)
  335. }
  336. // 用户筛选
  337. userId, _ := c.GetInt("UserId")
  338. if userId > 0 {
  339. condition += ` AND b.sys_user_id = ? `
  340. pars = append(pars, userId)
  341. }
  342. // 分类筛选
  343. classifyId, _ := c.GetInt("ClassifyId")
  344. if classifyId > 0 {
  345. childClassify, e, _ := data.GetChildClassifyByClassifyId(classifyId)
  346. if e != nil && !utils.IsErrNoRow(e) {
  347. br.Msg = "获取失败"
  348. br.ErrMsg = "获取分类信息失败, GetEdbClassify,Err:" + e.Error()
  349. return
  350. }
  351. var classifyIds []int
  352. for _, v := range childClassify {
  353. classifyIds = append(classifyIds, v.ClassifyId)
  354. }
  355. condition += fmt.Sprintf(` AND b.classify_id IN (%s) `, utils.GetOrmInReplace(len(classifyIds)))
  356. pars = append(pars, classifyIds)
  357. }
  358. switch filterSource {
  359. case 1: // 别人共享给我的
  360. condition += ` AND a.sys_user_id = ? AND b.sys_user_id != ? `
  361. pars = append(pars, sysUser.AdminId, sysUser.AdminId)
  362. default: // 我共享的
  363. condition += ` AND b.sys_user_id = ? `
  364. pars = append(pars, sysUser.AdminId)
  365. }
  366. obj := data_manage.EdbInfoShare{}
  367. dataCount, respList, err := obj.GetShareEdbInfoListPageList(condition, pars, startSize, pageSize)
  368. if err != nil {
  369. br.Msg = "获取失败"
  370. br.ErrMsg = fmt.Sprintf("获取分享指标列表失败, %v", err)
  371. return
  372. }
  373. editShareEdbInfoIdMap, err := data.GetAllEditSharedEdbInfoIdMapByReceivedUserId(c.SysUser.AdminId)
  374. if err != nil {
  375. br.Msg = "获取失败"
  376. br.ErrMsg = "获取所有有编辑权限的分享指标失败,Err:" + err.Error()
  377. return
  378. }
  379. for _, edbInfo := range respList {
  380. edbInfo.HaveOperaAuth = true
  381. edbInfo.Button = data.GetEdbOpButton(c.SysUser, edbInfo.SysUserId, edbInfo.EdbInfoId, edbInfo.EdbType, edbInfo.EdbInfoType, edbInfo.HaveOperaAuth, editShareEdbInfoIdMap)
  382. }
  383. page = paging.GetPaging(currentIndex, pageSize, int(dataCount))
  384. resp := response.EdbInfoChartListResp{
  385. Paging: page,
  386. List: respList,
  387. }
  388. br.Ret = 200
  389. br.Success = true
  390. br.Msg = "获取成功"
  391. br.Data = resp
  392. }
  393. // ListByEs
  394. // @Title 指标筛选接口
  395. // @Description 指标筛选接口
  396. // @Success 200 {object} data_manage.EdbInfoList
  397. // @Param request body request.SearchEdbInfoShareReq true "type json string"
  398. // @Success 200 {object} data_manage.EdbInfoFilterDataResp
  399. // @router /edb_info/share/list/es [post]
  400. func (c *EdbInfoShareController) ListByEs() {
  401. br := new(models.BaseResponse).Init()
  402. defer func() {
  403. c.Data["json"] = br
  404. c.ServeJSON()
  405. }()
  406. var req request.SearchEdbInfoShareReq
  407. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  408. if err != nil {
  409. br.Msg = "参数解析异常!"
  410. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  411. return
  412. }
  413. pageSize := req.PageSize
  414. currentIndex := req.CurrentIndex
  415. var total int64
  416. var startSize int
  417. if pageSize <= 0 {
  418. pageSize = utils.PageSize20
  419. }
  420. if currentIndex <= 0 {
  421. currentIndex = 1
  422. }
  423. startSize = paging.StartIndex(currentIndex, pageSize)
  424. keyword := req.Keyword
  425. keyword = strings.TrimSpace(keyword) //移除字符串首尾空格
  426. //指标来源
  427. sourceList := req.SourceList
  428. edbInfoType := 0 // 普通指标
  429. edbTypeList := []int{utils.EdbTypeCalculate} // 普通指标中的计算指标
  430. // 指标分享状态:1-未共享;2-已共享。可多选,多选用英文,隔开;默认是未全部
  431. edbShareList := req.EdbShareList
  432. if len(edbShareList) <= 0 {
  433. edbShareList = []int{}
  434. }
  435. edbShare := 0 // 0:全部,1:未共享,2:已共享
  436. lenEdbShareList := len(edbShareList)
  437. if len(edbShareList) > 0 {
  438. if lenEdbShareList > 1 {
  439. edbShare = 0
  440. } else {
  441. edbShare = edbShareList[0]
  442. }
  443. }
  444. // 直指标所属分类id
  445. edbClassifyIdList := req.ClassifyIdList
  446. edbAuth := 1 // 选择范围是:只有我的指标
  447. var edbInfoList []*data_manage.EdbInfoList
  448. sortMap := make(map[string]string)
  449. // 如果没有搜索关键词,则默认根据指标编码倒序排序
  450. if keyword == `` {
  451. sortMap["EdbInfoId"] = `desc`
  452. }
  453. total, edbInfoList, err = elastic.SearchEdbInfoDataByShared(keyword, startSize, pageSize, edbShare, sourceList, edbClassifyIdList, edbTypeList, edbInfoType, edbAuth, c.SysUser.AdminId, sortMap)
  454. if err != nil {
  455. edbInfoList = make([]*data_manage.EdbInfoList, 0)
  456. }
  457. page := paging.GetPaging(currentIndex, pageSize, int(total))
  458. edbInfoListLen := len(edbInfoList)
  459. // 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  460. if len(edbInfoList) > 0 {
  461. sysUserIdList := make([]int, 0)
  462. edbInfoIdList := make([]int, 0)
  463. for _, v := range edbInfoList {
  464. v.ConvertToResp()
  465. v.EdbNameAlias = v.EdbName
  466. v.HaveOperaAuth = true
  467. edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
  468. if v.SharedUserIdList != nil && len(v.SharedUserIdList) > 0 {
  469. sysUserIdList = append(sysUserIdList, v.SharedUserIdList...)
  470. }
  471. }
  472. // 获取指标数据
  473. tmpEdbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  474. if err != nil {
  475. br.Msg = "获取失败"
  476. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  477. return
  478. }
  479. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  480. for _, v := range tmpEdbList {
  481. edbInfoMap[v.EdbInfoId] = v
  482. }
  483. // 获取用户数据
  484. sysUserMap := make(map[int]string)
  485. if len(sysUserIdList) > 0 {
  486. sysUserList, err := system.GetAdminListByIdList(sysUserIdList)
  487. if err != nil {
  488. br.Msg = "获取失败"
  489. br.ErrMsg = "获取分享用户列表失败,Err:" + err.Error()
  490. return
  491. }
  492. for _, v := range sysUserList {
  493. sysUserMap[v.AdminId] = v.RealName
  494. }
  495. }
  496. for _, v := range edbInfoList {
  497. tmpEdbInfo, ok := edbInfoMap[v.EdbInfoId]
  498. if !ok {
  499. continue
  500. }
  501. v.IsJoinPermission = tmpEdbInfo.IsJoinPermission
  502. // 分享人
  503. shareUserName := ``
  504. shareUserNameList := make([]string, 0)
  505. shareUserNameMap := make(map[int]bool)
  506. for _, userId := range v.SharedUserIdList {
  507. userName, ok := sysUserMap[userId]
  508. if !ok {
  509. continue
  510. }
  511. if _, ok = shareUserNameMap[userId]; ok {
  512. continue
  513. }
  514. shareUserNameMap[userId] = true
  515. shareUserNameList = append(shareUserNameList, userName)
  516. }
  517. if len(shareUserNameList) > 0 {
  518. shareUserName = strings.Join(shareUserNameList, `,`)
  519. }
  520. v.SharedUserName = shareUserName
  521. }
  522. }
  523. for i := 0; i < edbInfoListLen; i++ {
  524. for j := 0; j < edbInfoListLen; j++ {
  525. if (edbInfoList[i].EdbNameAlias == edbInfoList[j].EdbNameAlias) &&
  526. (edbInfoList[i].EdbInfoId != edbInfoList[j].EdbInfoId) &&
  527. !(strings.Contains(edbInfoList[i].EdbName, edbInfoList[i].SourceName)) {
  528. edbInfoList[i].EdbName = edbInfoList[i].EdbName + "(" + edbInfoList[i].SourceName + ")"
  529. }
  530. }
  531. }
  532. resp := data_manage.EdbInfoFilterDataResp{
  533. Paging: page,
  534. List: edbInfoList,
  535. }
  536. br.Ret = 200
  537. br.Success = true
  538. br.Msg = "获取成功"
  539. br.Data = resp
  540. }
  541. // BatchSave
  542. // @Title 批量指标设置共享
  543. // @Description 批量指标设置共享
  544. // @Param request body request.SetEdbSharePermissionReq true "type json string"
  545. // @Success 200 {object} data_manage.EdbInfo
  546. // @router /edb_info/share/batch_save [post]
  547. func (c *EdbInfoShareController) BatchSave() {
  548. br := new(models.BaseResponse).Init()
  549. defer func() {
  550. c.Data["json"] = br
  551. c.ServeJSON()
  552. }()
  553. sysUser := c.SysUser
  554. if sysUser == nil {
  555. br.Msg = "请登录"
  556. br.ErrMsg = "请登录,SysUser Is Empty"
  557. br.Ret = 408
  558. return
  559. }
  560. var req request.SetEdbSharePermissionReq
  561. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  562. if err != nil {
  563. br.Msg = "参数解析异常!"
  564. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  565. return
  566. }
  567. // 选中的指标id列表
  568. selectEdbInfoIdList := make([]int, 0)
  569. // 选择所有指标,所以需要通过es获取数据
  570. if req.IsSelectAll {
  571. allEsEdbInfoIdList, err := getAllEdbInfoIdListByShared(req, c.SysUser.AdminId)
  572. if err != nil {
  573. br.Msg = "设置失败!"
  574. br.ErrMsg = "设置失败,Err:" + err.Error()
  575. return
  576. }
  577. if len(req.NoEdbIdList) <= 0 {
  578. selectEdbInfoIdList = allEsEdbInfoIdList
  579. } else {
  580. noEdbIdMap := make(map[int]bool)
  581. for _, v := range req.NoEdbIdList {
  582. noEdbIdMap[v] = true
  583. }
  584. for _, v := range allEsEdbInfoIdList {
  585. if _, ok := noEdbIdMap[v]; !ok {
  586. // 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
  587. selectEdbInfoIdList = append(selectEdbInfoIdList, v)
  588. }
  589. }
  590. }
  591. } else {
  592. selectEdbInfoIdList = req.EdbIdList
  593. }
  594. num := len(selectEdbInfoIdList)
  595. if num <= 0 {
  596. br.Msg = `请选择指标`
  597. br.IsSendEmail = false
  598. return
  599. }
  600. if num > 30 {
  601. br.Msg = `指标数量不能超过30个`
  602. br.IsSendEmail = false
  603. return
  604. }
  605. edbInfoList, err := data_manage.GetEdbInfoListByEdbInfoId(selectEdbInfoIdList)
  606. if err != nil {
  607. br.Msg = "设置失败!"
  608. br.ErrMsg = "设置失败,Err:" + err.Error()
  609. return
  610. }
  611. obj := data_manage.EdbInfoShare{}
  612. {
  613. //checkBaseEdbInfoIdList := make([]int, 0)
  614. //checkCalculateEdbInfoIdList := make([]int, 0)
  615. //
  616. //for _, edbItem := range edbInfoList {
  617. // // 设置公开的可以忽略
  618. // if edbItem.PublicStatus == utils.DataPublicSuccess {
  619. // continue
  620. // }
  621. //
  622. // if edbItem.EdbInfoType == utils.EDB_INFO_TYPE {
  623. // checkBaseEdbInfoIdList = append(checkBaseEdbInfoIdList, edbItem.EdbInfoId)
  624. // } else if edbItem.EdbInfoType == utils.PREDICT_EDB_INFO_TYPE {
  625. // checkCalculateEdbInfoIdList = append(checkCalculateEdbInfoIdList, edbItem.EdbInfoId)
  626. // }
  627. //}
  628. //
  629. //checkUserIdList := []int{sysUser.AdminId}
  630. //if len(req.UserIdList) > 0 {
  631. // checkUserIdList = append(checkUserIdList, req.UserIdList...)
  632. //}
  633. //
  634. //// 普通指标
  635. //{
  636. // noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(utils.EDB_INFO_TYPE, checkBaseEdbInfoIdList, checkUserIdList)
  637. // if err != nil {
  638. // br.Msg = "保存失败"
  639. // if tips != "" {
  640. // br.Msg = tips
  641. // }
  642. // br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
  643. // return
  644. // }
  645. //
  646. // if !noReferenced {
  647. // userNameStr := ``
  648. // if len(otherUserIdList) > 0 {
  649. // userNameList := make([]string, 0)
  650. // userList, err := system.GetAdminListByIdList(otherUserIdList)
  651. // if err != nil {
  652. // br.Msg = "保存失败"
  653. // if tips != "" {
  654. // br.Msg = tips
  655. // }
  656. // br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
  657. // return
  658. // }
  659. // for _, userInfo := range userList {
  660. // userNameList = append(userNameList, userInfo.RealName)
  661. // }
  662. // userNameStr = strings.Join(userNameList, "、")
  663. // }
  664. // msg := `指标被其他用户使用,无法设置共享`
  665. // if userNameStr != "" {
  666. // msg = fmt.Sprintf(`指标被用户%s使用,无法设置共享`, userNameStr)
  667. // }
  668. // if tips != "" {
  669. // msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
  670. // }
  671. // br.Msg = msg
  672. // br.ErrMsg = "指标被其他用户共享,无法设置共享"
  673. // br.IsSendEmail = false
  674. // return
  675. // }
  676. //}
  677. //
  678. //// 预测指标
  679. //{
  680. // noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(utils.PREDICT_EDB_INFO_TYPE, checkCalculateEdbInfoIdList, checkUserIdList)
  681. // if err != nil {
  682. // br.Msg = "保存失败"
  683. // if tips != "" {
  684. // br.Msg = tips
  685. // }
  686. // br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
  687. // return
  688. // }
  689. //
  690. // if !noReferenced {
  691. // userNameStr := ``
  692. // if len(otherUserIdList) > 0 {
  693. // userNameList := make([]string, 0)
  694. // userList, err := system.GetAdminListByIdList(otherUserIdList)
  695. // if err != nil {
  696. // br.Msg = "保存失败"
  697. // if tips != "" {
  698. // br.Msg = tips
  699. // }
  700. // br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
  701. // return
  702. // }
  703. // for _, userInfo := range userList {
  704. // userNameList = append(userNameList, userInfo.RealName)
  705. // }
  706. // userNameStr = strings.Join(userNameList, "、")
  707. // }
  708. // msg := `指标被其他用户使用,无法设置共享`
  709. // if userNameStr != "" {
  710. // msg = fmt.Sprintf(`指标被用户%s使用,无法设置共享`, userNameStr)
  711. // }
  712. // if tips != "" {
  713. // msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
  714. // }
  715. // br.Msg = msg
  716. // br.ErrMsg = "指标被其他用户共享,无法设置共享"
  717. // br.IsSendEmail = false
  718. // return
  719. // }
  720. //}
  721. for _, edbItem := range edbInfoList {
  722. // 如果指标已公开,则不判断是否被其他用户使用
  723. if edbItem.PublicStatus == utils.DataPublicSuccess {
  724. continue
  725. }
  726. if edbItem.PublicStatus != utils.DataPublicSuccess {
  727. checkUserIdList := []int{sysUser.AdminId}
  728. if len(req.UserIdList) > 0 {
  729. checkUserIdList = append(checkUserIdList, req.UserIdList...)
  730. }
  731. {
  732. userIdList, err := obj.GetAllUserIdListByEdbInfoIdAndNoShareType(edbItem.EdbInfoId, req.ShareType)
  733. if err != nil {
  734. br.Msg = "设置失败!"
  735. br.ErrMsg = "设置失败,Err:" + err.Error()
  736. return
  737. }
  738. if len(userIdList) > 0 {
  739. checkUserIdList = append(checkUserIdList, userIdList...)
  740. }
  741. }
  742. noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(edbItem.EdbInfoType, []int{edbItem.EdbInfoId}, checkUserIdList)
  743. if err != nil {
  744. br.Msg = "保存失败"
  745. if tips != "" {
  746. br.Msg = tips
  747. }
  748. br.ErrMsg = "设置指标共享失败,查找指标的关联用户失败,Err:" + err.Error()
  749. return
  750. }
  751. if !noReferenced {
  752. userNameStr := ``
  753. if len(otherUserIdList) > 0 {
  754. userNameList := make([]string, 0)
  755. userList, err := system.GetAdminListByIdList(otherUserIdList)
  756. if err != nil {
  757. br.Msg = "保存失败"
  758. if tips != "" {
  759. br.Msg = tips
  760. }
  761. br.ErrMsg = "设置指标共享失败,查找用户信息失败,Err:" + err.Error()
  762. return
  763. }
  764. for _, userInfo := range userList {
  765. userNameList = append(userNameList, userInfo.RealName)
  766. }
  767. userNameStr = strings.Join(userNameList, "、")
  768. }
  769. msg := fmt.Sprintf(`指标《%s》被其他用户使用,无法设置共享`, edbItem.EdbName)
  770. if userNameStr != "" {
  771. msg = fmt.Sprintf(`指标《%s》被用户%s使用,无法设置共享`, edbItem.EdbName, userNameStr)
  772. }
  773. if tips != "" {
  774. msg = fmt.Sprintf(`%s,用户为:%s,无法设置共享`, tips, userNameStr)
  775. }
  776. br.Msg = msg
  777. br.ErrMsg = "指标被其他用户共享,无法设置共享,EdbInfoId:" + strconv.Itoa(edbItem.EdbInfoId)
  778. br.IsSendEmail = false
  779. return
  780. }
  781. }
  782. }
  783. }
  784. // 设置
  785. err = obj.SaveEdbInfoShare(selectEdbInfoIdList, req.UserIdList, req.ShareType)
  786. if err != nil {
  787. br.Msg = `保存失败`
  788. br.ErrMsg = `保存失败:` + err.Error()
  789. return
  790. }
  791. // 更新es
  792. for _, edbInfoId := range selectEdbInfoIdList {
  793. data.AddOrEditEdbInfoToEs(edbInfoId)
  794. }
  795. br.Ret = 200
  796. br.Success = true
  797. br.Msg = "保存成功"
  798. }
  799. // getAllEdbInfoIdListByShared
  800. // @Description: 获取所有的指标id列表
  801. // @author: Roc
  802. // @datetime 2024-12-04 15:43:14
  803. // @param req request.SetEdbChartPermissionReq
  804. // @param userId int
  805. // @return edbInfoIdList []int
  806. // @return err error
  807. func getAllEdbInfoIdListByShared(req request.SetEdbSharePermissionReq, userId int) (edbInfoIdList []int, err error) {
  808. keyword := req.Keyword
  809. keyword = strings.TrimSpace(keyword) //移除字符串首尾空格
  810. //指标来源
  811. sourceList := req.SourceList
  812. edbInfoType := 0 // 普通指标
  813. edbTypeList := []int{utils.EdbTypeCalculate} // 普通指标中的计算指标
  814. // 指标分享状态:1-未共享;2-已共享。可多选,多选用英文,隔开;默认是未共享
  815. edbShareList := req.EdbShareList
  816. if len(edbShareList) <= 0 {
  817. edbShareList = []int{1}
  818. }
  819. edbShare := 1 // 0:全部,1:未共享,2:已共享
  820. lenEdbShareList := len(edbShareList)
  821. if len(edbShareList) > 0 {
  822. if lenEdbShareList > 1 {
  823. edbShare = 0
  824. } else {
  825. edbShare = edbShareList[0]
  826. }
  827. }
  828. // 指标分享状态:1-未共享;2-已共享。可多选,多选用英文,隔开;默认是未共享
  829. edbClassifyIdList := req.ClassifyIdList
  830. edbAuth := 1 // 选择范围是:只有我的指标
  831. sortMap := make(map[string]string)
  832. // 如果没有搜索关键词,则默认根据指标编码倒序排序
  833. if keyword == `` {
  834. sortMap["EdbInfoId"] = `desc`
  835. }
  836. _, edbInfoList, err := getAllEdbInfoDataByShared(keyword, 1, edbShare, sourceList, edbClassifyIdList, edbTypeList, edbInfoType, edbAuth, userId, sortMap)
  837. if err != nil {
  838. return
  839. }
  840. // 返回指标id列表
  841. for _, v := range edbInfoList {
  842. edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
  843. }
  844. return
  845. }
  846. // getAllEdbInfoDataByShared
  847. // @Description: 获取所有的指标列表(设置共享的时候)
  848. // @author: Roc
  849. // @datetime 2024-12-04 15:27:53
  850. // @param keyword string
  851. // @param currPage int
  852. // @param edbShare int
  853. // @param sourceList []int
  854. // @param classifyIdList []int
  855. // @param edbTypeList []int
  856. // @param edbInfoType int
  857. // @param edbAuth int
  858. // @param sysUserId int
  859. // @param sortMap map[string]string
  860. // @return total int64
  861. // @return list []*data_manage.EdbInfoList
  862. // @return err error
  863. 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) {
  864. // 每页获取数据的数量
  865. pageSize := 5000
  866. var startSize int
  867. if currPage <= 0 {
  868. currPage = 1
  869. }
  870. startSize = paging.StartIndex(currPage, pageSize)
  871. total, list, err = elastic.SearchEdbInfoDataByShared(keyword, startSize, pageSize, edbShare, sourceList, classifyIdList, edbTypeList, edbInfoType, edbAuth, sysUserId, sortMap)
  872. if err != nil {
  873. return
  874. }
  875. page := paging.GetPaging(currPage, pageSize, int(total))
  876. if !page.IsEnd {
  877. _, nextList, tmpErr := getAllEdbInfoDataByShared(keyword, page.NextIndex, edbShare, sourceList, classifyIdList, edbTypeList, edbInfoType, edbAuth, sysUserId, sortMap)
  878. if tmpErr != nil {
  879. err = tmpErr
  880. return
  881. }
  882. list = append(list, nextList...)
  883. }
  884. return
  885. }