public_edb.go 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667
  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/data_approve"
  8. "eta_gn/eta_api/models/data_manage/request"
  9. "eta_gn/eta_api/models/system"
  10. "eta_gn/eta_api/services/data"
  11. dataApproveSerice "eta_gn/eta_api/services/data/data_approve"
  12. "eta_gn/eta_api/services/elastic"
  13. "eta_gn/eta_api/utils"
  14. "fmt"
  15. "github.com/rdlucklib/rdluck_tools/paging"
  16. "strconv"
  17. "strings"
  18. )
  19. // EdbPublicController 公共指标
  20. type EdbPublicController struct {
  21. controllers.BaseAuthController
  22. }
  23. // Save
  24. // @Title 单个指标设置公开
  25. // @Description 单个指标设置公开
  26. // @Param request body request.SetEdbInfoShareReq true "type json string"
  27. // @Success 200 {object} data_manage.EdbInfo
  28. // @router /edb_info/public/save [post]
  29. func (c *EdbPublicController) Save() {
  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. var req request.SetEdbPublicReq
  43. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  44. if err != nil {
  45. br.Msg = "参数解析异常!"
  46. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  47. return
  48. }
  49. if len(req.EdbInfoList) <= 0 {
  50. br.Msg = `请选择指标`
  51. br.IsSendEmail = false
  52. return
  53. }
  54. // 待处理的资产
  55. dataPublicItemList := make([]dataApproveSerice.SetDataPublicItem, 0)
  56. // 校验是否重复存在已公开、已提交的指标
  57. {
  58. edbInfoIdList := make([]int, 0)
  59. for _, item := range req.EdbInfoList {
  60. edbInfoIdList = append(edbInfoIdList, item.EdbInfoId)
  61. dataPublicItemList = append(dataPublicItemList, dataApproveSerice.SetDataPublicItem{
  62. DataId: item.EdbInfoId,
  63. ClassifyId: item.ClassifyId,
  64. })
  65. }
  66. list, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  67. if err != nil {
  68. br.Msg = "保存失败!"
  69. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  70. return
  71. }
  72. for _, v := range list {
  73. if v.PublicStatus != utils.DataPublicDefault {
  74. br.Msg = `选择指标中存在已经公开/提交审批的指标,请仅选择未公开指标!`
  75. br.IsSendEmail = false
  76. return
  77. }
  78. }
  79. }
  80. // 校验是否开启了审批流
  81. opening, e := dataApproveSerice.CheckOpenApprove(utils.DataApproveTypeEdb)
  82. if e != nil {
  83. br.Msg = "操作失败"
  84. br.ErrMsg = "校验指标公开是否开启审批流失败, Err: " + e.Error()
  85. return
  86. }
  87. // 是否忽略审批
  88. var isIgnoreApprove bool
  89. {
  90. businessConf, e := models.GetBusinessConfByKey(models.IgnoreEdbApproveUserId)
  91. if e != nil {
  92. br.Msg = "获取失败"
  93. br.ErrMsg = "获取商家配置失败, Err: " + e.Error()
  94. return
  95. }
  96. ignoreEdbApproveUserIdList := strings.Split(businessConf.ConfVal, `,`)
  97. if utils.InArrayByStr(ignoreEdbApproveUserIdList, strconv.Itoa(c.SysUser.AdminId)) {
  98. isIgnoreApprove = true
  99. }
  100. }
  101. edbInfo, err := data_manage.GetEdbInfoById(req.EdbInfoList[0].EdbInfoId)
  102. if err != nil {
  103. br.Msg = "获取指标失败"
  104. br.ErrMsg = "获取指标失败:" + err.Error()
  105. return
  106. }
  107. title := edbInfo.EdbName
  108. if len(req.EdbInfoList) > 1 {
  109. title += `等指标`
  110. }
  111. title += `公开审批`
  112. // 没开启审批流、或者无需审批
  113. if !opening || isIgnoreApprove {
  114. err = dataApproveSerice.UpdatePublicByDataList(utils.DataApproveTypeEdb, dataApproveSerice.DataApproveStatePass, dataPublicItemList)
  115. } else {
  116. _, err = dataApproveSerice.SubmitDataApprove(utils.DataApproveTypeEdb, dataPublicItemList, title, strings.TrimSpace(req.Description), c.SysUser.AdminId, c.SysUser.RealName)
  117. if err != nil {
  118. br.Msg = "提交审批失败"
  119. br.ErrMsg = "提交审批失败, Err: " + err.Error()
  120. return
  121. }
  122. // 更新ES
  123. for _, dataPublicItem := range dataPublicItemList {
  124. data.AddOrEditEdbInfoToEs(dataPublicItem.DataId)
  125. }
  126. }
  127. if err != nil {
  128. br.Msg = "编辑失败"
  129. br.ErrMsg = "编辑失败,Err:" + err.Error()
  130. return
  131. }
  132. br.Ret = 200
  133. br.Success = true
  134. br.Msg = "保存成功"
  135. }
  136. // Cancel
  137. // @Title 撤销指标公开
  138. // @Description 撤销指标公开
  139. // @Param EdbInfoId query int true "指标id"
  140. // @Success 200 {object} data_manage.EdbInfo
  141. // @router /edb_info/public/cancel [post]
  142. func (c *EdbPublicController) Cancel() {
  143. br := new(models.BaseResponse).Init()
  144. defer func() {
  145. c.Data["json"] = br
  146. c.ServeJSON()
  147. }()
  148. sysUser := c.SysUser
  149. if sysUser == nil {
  150. br.Msg = "请登录"
  151. br.ErrMsg = "请登录,SysUser Is Empty"
  152. br.Ret = 408
  153. return
  154. }
  155. edbInfoId, _ := c.GetInt("EdbInfoId")
  156. if edbInfoId <= 0 {
  157. br.Msg = "参数错误"
  158. br.ErrMsg = "参数错误"
  159. return
  160. }
  161. edbInfo, err := data_manage.GetEdbInfoById(edbInfoId)
  162. if err != nil {
  163. br.Msg = "保存失败!"
  164. br.ErrMsg = "获取指标信息失败,Err:" + err.Error()
  165. return
  166. }
  167. // 判断指标公共状态
  168. if !utils.InArrayByInt([]int{utils.DataPublicSuccess, utils.DataPublicReject, utils.DataPublicCommit}, edbInfo.PublicStatus) {
  169. br.Msg = "保存失败,指标公开状态异常!"
  170. br.ErrMsg = "保存失败,指标公开状态异常,public_status:" + fmt.Sprint(edbInfo.PublicStatus)
  171. return
  172. }
  173. // 如果公开状态是:已驳回、已提交,那么直接去撤销审批单
  174. if utils.InArrayByInt([]int{utils.DataPublicReject, utils.DataPublicCommit}, edbInfo.PublicStatus) {
  175. obj := data_approve.DataApproveRelation{}
  176. dataApproveId, err := obj.GetDataApproveIdByDataId(edbInfoId, utils.DataApproveTypeEdb)
  177. if err != nil {
  178. br.Msg = "保存失败!"
  179. br.ErrMsg = "获取审批单失败,Err:" + err.Error()
  180. return
  181. }
  182. // 撤销审批
  183. msg, e := dataApproveSerice.DataApproveCancel(dataApproveId, sysUser.AdminId, sysUser.RealName)
  184. if e != nil {
  185. if msg != "" {
  186. br.Msg = msg
  187. } else {
  188. br.Msg = "操作失败"
  189. }
  190. br.ErrMsg = "撤销审批失败, Err: " + e.Error()
  191. return
  192. }
  193. }
  194. checkUserIdList := []int{sysUser.AdminId}
  195. noReferenced, otherUserIdList, err, tips := data.CheckEdbReferencedByOthers(edbInfo.EdbInfoType, []int{edbInfo.EdbInfoId}, checkUserIdList)
  196. if err != nil {
  197. br.Msg = "保存失败"
  198. if tips != "" {
  199. br.Msg = tips
  200. }
  201. br.ErrMsg = "撤销指标公开失败,查找指标的关联用户失败,Err:" + err.Error()
  202. return
  203. }
  204. if !noReferenced {
  205. userNameStr := ``
  206. if len(otherUserIdList) > 0 {
  207. userNameList := make([]string, 0)
  208. userList, err := system.GetAdminListByIdList(otherUserIdList)
  209. if err != nil {
  210. br.Msg = "保存失败"
  211. if tips != "" {
  212. br.Msg = tips
  213. }
  214. br.ErrMsg = "撤销指标公开失败,查找用户信息失败,Err:" + err.Error()
  215. return
  216. }
  217. for _, userInfo := range userList {
  218. userNameList = append(userNameList, userInfo.RealName)
  219. }
  220. userNameStr = strings.Join(userNameList, ",")
  221. }
  222. msg := `指标被其他用户使用,无法撤销公开`
  223. if userNameStr != "" {
  224. msg = fmt.Sprintf(`指标被用户%s使用,无法撤销公开`, userNameStr)
  225. }
  226. if tips != "" {
  227. msg = fmt.Sprintf(`%s,用户为:%s,无法撤销公开`, tips, userNameStr)
  228. }
  229. br.Msg = msg
  230. br.ErrMsg = "指标被其他用户共享,无法撤销公开,EdbInfoId:" + strconv.Itoa(edbInfo.EdbInfoId)
  231. br.IsSendEmail = false
  232. return
  233. }
  234. edbInfo.PublicStatus = utils.DataPublicDefault
  235. edbInfo.EdbPublicClassifyId = 0
  236. err = edbInfo.Update([]string{"PublicStatus", "EdbPublicClassifyId"})
  237. if err != nil {
  238. br.Msg = "保存失败"
  239. br.ErrMsg = "取消指标公共失败,Err:" + err.Error()
  240. return
  241. }
  242. // 修改ES数据
  243. data.AddOrEditEdbInfoToEs(edbInfo.EdbInfoId)
  244. // TODO 取消公共的时候,需要清除对应用户的收藏状态
  245. br.Ret = 200
  246. br.Success = true
  247. br.Msg = "操作成功"
  248. }
  249. // ListByEs
  250. // @Title 指标筛选接口
  251. // @Description 指标筛选接口
  252. // @Success 200 {object} data_manage.EdbInfoList
  253. // @Param request body request.SearchPublicEdbReq true "type json string"
  254. // @Success 200 {object} data_manage.EdbInfoFilterDataResp
  255. // @router /edb_info/public/list/es [post]
  256. func (c *EdbPublicController) ListByEs() {
  257. br := new(models.BaseResponse).Init()
  258. defer func() {
  259. c.Data["json"] = br
  260. c.ServeJSON()
  261. }()
  262. var req request.SearchPublicEdbReq
  263. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  264. if err != nil {
  265. br.Msg = "参数解析异常!"
  266. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  267. return
  268. }
  269. pageSize := req.PageSize
  270. currentIndex := req.CurrentIndex
  271. var total int64
  272. var startSize int
  273. if pageSize <= 0 {
  274. pageSize = utils.PageSize20
  275. }
  276. if currentIndex <= 0 {
  277. currentIndex = 1
  278. }
  279. startSize = paging.StartIndex(currentIndex, pageSize)
  280. // 获取查询参数
  281. keyword, searchEdbPublicList, sourceList, edbClassifyIdList, publicClassifyIdList, edbTypeList, edbInfoType, edbAuth, sortMap := data.GetSearchPar(req)
  282. total, edbInfoList, err := elastic.SearchEdbInfoDataByPublic(keyword, startSize, pageSize, searchEdbPublicList, sourceList, edbClassifyIdList, publicClassifyIdList, edbTypeList, edbInfoType, edbAuth, c.SysUser.AdminId, sortMap)
  283. if err != nil {
  284. edbInfoList = make([]*data_manage.EdbInfoList, 0)
  285. }
  286. page := paging.GetPaging(currentIndex, pageSize, int(total))
  287. edbInfoListLen := len(edbInfoList)
  288. // 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  289. if len(edbInfoList) > 0 {
  290. // 图表map
  291. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  292. classifyMap := make(map[int]*data_manage.EdbClassify)
  293. publicClassifyMap := make(map[int]*data_manage.EdbPublicClassify)
  294. // 指标id,分类id,公共分类id
  295. edbInfoIdList := make([]int, 0)
  296. tmpClassifyIdList := make([]int, 0)
  297. tmpPublicClassifyIdList := make([]int, 0)
  298. for _, v := range edbInfoList {
  299. v.ConvertToResp()
  300. v.EdbNameAlias = v.EdbName
  301. v.HaveOperaAuth = true
  302. edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
  303. }
  304. // 查找指标
  305. {
  306. tmpEdbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  307. if err != nil {
  308. br.Msg = "获取失败"
  309. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  310. return
  311. }
  312. for _, v := range tmpEdbList {
  313. edbInfoMap[v.EdbInfoId] = v
  314. tmpClassifyIdList = append(tmpClassifyIdList, v.ClassifyId)
  315. tmpPublicClassifyIdList = append(tmpPublicClassifyIdList, v.EdbPublicClassifyId)
  316. }
  317. }
  318. // 指标分类
  319. {
  320. tmpList, err := data_manage.GetEdbClassifyByIdList(tmpClassifyIdList)
  321. if err != nil {
  322. br.Msg = "获取失败"
  323. br.ErrMsg = "获取所有有权限的图表分类失败,Err:" + err.Error()
  324. return
  325. }
  326. for _, v := range tmpList {
  327. classifyMap[v.ClassifyId] = v
  328. }
  329. }
  330. // 公共分类
  331. {
  332. obj := data_manage.EdbPublicClassify{}
  333. tmpList, err := obj.GetEdbClassifyByIdList(tmpPublicClassifyIdList)
  334. if err != nil {
  335. br.Msg = "获取失败"
  336. br.ErrMsg = "获取所有有权限的公共分类失败,Err:" + err.Error()
  337. return
  338. }
  339. for _, v := range tmpList {
  340. publicClassifyMap[v.EdbPublicClassifyId] = v
  341. }
  342. }
  343. // 数据重新赋值
  344. for _, v := range edbInfoList {
  345. if tmpEdbInfo, ok := edbInfoMap[v.EdbInfoId]; ok {
  346. v.IsJoinPermission = tmpEdbInfo.IsJoinPermission
  347. }
  348. // 普通分类
  349. if classifyItem, ok := classifyMap[v.ClassifyId]; ok {
  350. v.ClassifyNamePath = classifyItem.ClassifyNamePath
  351. }
  352. // 公共分类
  353. if classifyItem, ok := publicClassifyMap[v.EdbPublicClassifyId]; ok {
  354. v.PublicClassifyNamePath = classifyItem.EdbPublicClassifyNamePath
  355. }
  356. }
  357. }
  358. for i := 0; i < edbInfoListLen; i++ {
  359. for j := 0; j < edbInfoListLen; j++ {
  360. if (edbInfoList[i].EdbNameAlias == edbInfoList[j].EdbNameAlias) &&
  361. (edbInfoList[i].EdbInfoId != edbInfoList[j].EdbInfoId) &&
  362. !(strings.Contains(edbInfoList[i].EdbName, edbInfoList[i].SourceName)) {
  363. edbInfoList[i].EdbName = edbInfoList[i].EdbName + "(" + edbInfoList[i].SourceName + ")"
  364. }
  365. }
  366. }
  367. resp := data_manage.EdbInfoFilterDataResp{
  368. Paging: page,
  369. List: edbInfoList,
  370. }
  371. br.Ret = 200
  372. br.Success = true
  373. br.Msg = "获取成功"
  374. br.Data = resp
  375. }
  376. // AllListByEs
  377. // @Title 指标筛选接口
  378. // @Description 指标筛选接口
  379. // @Success 200 {object} data_manage.EdbInfoList
  380. // @Param request body request.SearchEdbInfoShareReq true "type json string"
  381. // @Success 200 {object} data_manage.EdbInfoFilterDataResp
  382. // @router /edb_info/public/list/es/all [post]
  383. func (c *EdbPublicController) AllListByEs() {
  384. br := new(models.BaseResponse).Init()
  385. defer func() {
  386. c.Data["json"] = br
  387. c.ServeJSON()
  388. }()
  389. var req request.AllSearchPublicEdbReq
  390. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  391. if err != nil {
  392. br.Msg = "参数解析异常!"
  393. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  394. return
  395. }
  396. // 选择所有指标,所以需要通过es获取数据
  397. // 选中的指标id列表
  398. edbInfoList := make([]*data_manage.EdbInfoList, 0)
  399. // 选择所有指标,所以需要通过es获取数据
  400. if req.IsSelectAll {
  401. tmpEdbInfoList, err := data.GetAllEdbInfoListBySearchPublicEdbReq(req.SearchPublicEdbReq, c.SysUser.AdminId)
  402. if err != nil {
  403. br.Msg = "获取指标列表失败!"
  404. br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
  405. return
  406. }
  407. // 如果有过滤指标,那么就过滤吧
  408. if len(req.NoEdbIdList) > 0 {
  409. noEdbIdMap := make(map[int]bool)
  410. for _, v := range req.NoEdbIdList {
  411. noEdbIdMap[v] = true
  412. }
  413. for _, v := range tmpEdbInfoList {
  414. if _, ok := noEdbIdMap[v.EdbInfoId]; !ok {
  415. // 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
  416. edbInfoList = append(edbInfoList, v)
  417. }
  418. }
  419. } else {
  420. edbInfoList = tmpEdbInfoList
  421. }
  422. // 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  423. if len(edbInfoList) > 0 {
  424. edbInfoIdList := make([]int, 0)
  425. for _, v := range edbInfoList {
  426. v.ConvertToResp()
  427. v.EdbNameAlias = v.EdbName
  428. v.HaveOperaAuth = true
  429. edbInfoIdList = append(edbInfoIdList, v.EdbInfoId)
  430. }
  431. tmpEdbList, err := data_manage.GetEdbInfoByIdList(edbInfoIdList)
  432. if err != nil {
  433. br.Msg = "获取失败"
  434. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  435. return
  436. }
  437. edbInfoMap := make(map[int]*data_manage.EdbInfo)
  438. for _, v := range tmpEdbList {
  439. edbInfoMap[v.EdbInfoId] = v
  440. }
  441. for _, v := range edbInfoList {
  442. tmpEdbInfo, ok := edbInfoMap[v.EdbInfoId]
  443. if !ok {
  444. continue
  445. }
  446. v.IsJoinPermission = tmpEdbInfo.IsJoinPermission
  447. }
  448. }
  449. } else {
  450. // 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  451. if len(req.EdbIdList) > 0 {
  452. edbInfoList, err = data_manage.GetEdbInfoListByCond(` AND edb_info_id in (?) `, []interface{}{req.EdbIdList})
  453. if err != nil {
  454. br.Msg = "获取失败"
  455. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  456. return
  457. }
  458. }
  459. }
  460. edbInfoListLen := len(edbInfoList)
  461. for i := 0; i < edbInfoListLen; i++ {
  462. for j := 0; j < edbInfoListLen; j++ {
  463. if (edbInfoList[i].EdbNameAlias == edbInfoList[j].EdbNameAlias) &&
  464. (edbInfoList[i].EdbInfoId != edbInfoList[j].EdbInfoId) &&
  465. !(strings.Contains(edbInfoList[i].EdbName, edbInfoList[i].SourceName)) {
  466. edbInfoList[i].EdbName = edbInfoList[i].EdbName + "(" + edbInfoList[i].SourceName + ")"
  467. }
  468. }
  469. }
  470. resp := data_manage.EdbInfoFilterDataResp{
  471. List: edbInfoList,
  472. }
  473. br.Ret = 200
  474. br.Success = true
  475. br.Msg = "获取成功"
  476. br.Data = resp
  477. }
  478. // BatchMoveEdb
  479. // @Title 指标批量移动接口
  480. // @Description 指标批量移动接口
  481. // @Param request body request.MoveEdbClassifyReq true "type json string"
  482. // @Success Ret=200 移动成功
  483. // @router /edb_info/public/batch_move [post]
  484. func (c *EdbPublicController) BatchMoveEdb() {
  485. br := new(models.BaseResponse).Init()
  486. defer func() {
  487. c.Data["json"] = br
  488. c.ServeJSON()
  489. }()
  490. var req request.MoveEdbClassifyReq
  491. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  492. if err != nil {
  493. br.Msg = "参数解析异常!"
  494. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  495. return
  496. }
  497. if req.NewClassifyId <= 0 {
  498. br.Msg = `请选择要转移的新分类`
  499. br.IsSendEmail = false
  500. return
  501. }
  502. // 校验分类
  503. obj := data_manage.EdbPublicClassify{}
  504. publicClassifyItem, err := obj.GetEdbClassifyById(req.NewClassifyId)
  505. if err != nil {
  506. br.Msg = "获取公共分类失败!"
  507. br.ErrMsg = "获取公共分类失败!" + err.Error()
  508. return
  509. }
  510. if publicClassifyItem.EdbPublicClassifyId <= 0 {
  511. br.Msg = "公共分类不存在!"
  512. br.ErrMsg = "公共分类不存在!"
  513. return
  514. }
  515. // 只是取公开
  516. req.SearchPublicEdbReq.EdbPublicList = []int{3}
  517. edbInfoIdList := make([]int, 0)
  518. if req.IsSelectAll {
  519. // 获取指标
  520. edbInfoList, err := data.GetAllEdbInfoListBySearchPublicEdbReq(req.SearchPublicEdbReq, c.SysUser.AdminId)
  521. if err != nil {
  522. br.Msg = "获取指标列表失败!"
  523. br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
  524. return
  525. }
  526. // 如果有过滤指标,那么就过滤吧
  527. if len(req.NoEdbIdList) > 0 {
  528. noEdbIdMap := make(map[int]bool)
  529. for _, v := range req.NoEdbIdList {
  530. noEdbIdMap[v] = true
  531. }
  532. for _, edbInfo := range edbInfoList {
  533. if _, ok := noEdbIdMap[edbInfo.EdbInfoId]; !ok {
  534. if edbInfo.PublicStatus != utils.DataPublicSuccess {
  535. br.Msg = `存在未公开的指标:` + edbInfo.EdbName
  536. br.IsSendEmail = false
  537. return
  538. }
  539. // 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
  540. edbInfoIdList = append(edbInfoIdList, edbInfo.EdbInfoId)
  541. }
  542. }
  543. } else {
  544. for _, edbInfo := range edbInfoList {
  545. if edbInfo.PublicStatus != utils.DataPublicSuccess {
  546. br.Msg = `存在未公开的指标:` + edbInfo.EdbName
  547. br.IsSendEmail = false
  548. return
  549. }
  550. edbInfoIdList = append(edbInfoIdList, edbInfo.EdbInfoId)
  551. }
  552. }
  553. } else {
  554. edbInfoList, err := data_manage.GetEdbInfoListByCond(` AND edb_info_id in (?) `, []interface{}{req.EdbIdList})
  555. if err != nil {
  556. br.Msg = "获取失败"
  557. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  558. return
  559. }
  560. for _, v := range edbInfoList {
  561. if v.PublicStatus != utils.DataPublicSuccess {
  562. br.Msg = `存在未公开的指标:` + v.EdbName
  563. br.IsSendEmail = false
  564. return
  565. }
  566. }
  567. edbInfoIdList = req.EdbIdList
  568. }
  569. num := len(edbInfoIdList)
  570. if num <= 0 {
  571. br.Msg = `请选择要移动的指标!`
  572. br.IsSendEmail = false
  573. return
  574. }
  575. if num > 100 {
  576. br.Msg = `最多只能选择100条指标!`
  577. br.IsSendEmail = false
  578. return
  579. }
  580. // 开始批量修改指标分类
  581. if len(edbInfoIdList) > 0 {
  582. err = data_manage.UpdatePublicClassifyIdByEdbInfoIdList(edbInfoIdList, req.NewClassifyId)
  583. if err != nil {
  584. br.Msg = `指标移动失败!`
  585. br.ErrMsg = `指标移动失败,ERR:` + err.Error()
  586. return
  587. }
  588. // 还得修改ES呢
  589. for _, v := range edbInfoIdList {
  590. data.AddOrEditEdbInfoToEs(v)
  591. }
  592. }
  593. br.Ret = 200
  594. br.Success = true
  595. br.Msg = "获取成功"
  596. }