chart_public.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  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/services/data"
  9. dataApproveSerice "eta_gn/eta_api/services/data/data_approve"
  10. "eta_gn/eta_api/services/elastic"
  11. "eta_gn/eta_api/utils"
  12. "github.com/rdlucklib/rdluck_tools/paging"
  13. "strconv"
  14. "strings"
  15. )
  16. // ChartPublicController 公共指标
  17. type ChartPublicController struct {
  18. controllers.BaseAuthController
  19. }
  20. // Save
  21. // @Title 单个指标设置公开
  22. // @Description 单个指标设置公开
  23. // @Param request body request.SetChartInfoShareReq true "type json string"
  24. // @Success 200 {object} data_manage.ChartInfo
  25. // @router /chart_info/public/save [post]
  26. func (c *ChartPublicController) Save() {
  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. var req request.SetChartPublicReq
  40. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  41. if err != nil {
  42. br.Msg = "参数解析异常!"
  43. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  44. return
  45. }
  46. if len(req.ChartInfoList) <= 0 {
  47. br.Msg = `请选择指标`
  48. br.IsSendEmail = false
  49. }
  50. // 待处理的资产
  51. dataPublicItemList := make([]dataApproveSerice.SetDataPublicItem, 0)
  52. // 校验是否重复存在已公开、已提交的指标
  53. {
  54. chartInfoIdList := make([]int, 0)
  55. for _, item := range req.ChartInfoList {
  56. chartInfoIdList = append(chartInfoIdList, item.ChartInfoId)
  57. dataPublicItemList = append(dataPublicItemList, dataApproveSerice.SetDataPublicItem{
  58. DataId: item.ChartInfoId,
  59. ClassifyId: item.ClassifyId,
  60. })
  61. }
  62. list, err := data_manage.GetChartInfoByIdList(chartInfoIdList)
  63. if err != nil {
  64. br.Msg = "保存失败!"
  65. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  66. return
  67. }
  68. for _, v := range list {
  69. if v.PublicStatus != utils.DataPublicDefault {
  70. br.Msg = `选择指标中存在已经公开/提交审批的指标,请仅选择未公开指标!`
  71. br.IsSendEmail = false
  72. return
  73. }
  74. }
  75. }
  76. // 校验是否开启了审批流
  77. opening, e := dataApproveSerice.CheckOpenApprove(utils.DataApproveTypeChart)
  78. if e != nil {
  79. br.Msg = "操作失败"
  80. br.ErrMsg = "校验指标公开是否开启审批流失败, Err: " + e.Error()
  81. return
  82. }
  83. // 是否忽略审批
  84. var isIgnoreApprove bool
  85. {
  86. businessConf, e := models.GetBusinessConfByKey(models.IgnoreChartApproveUserId)
  87. if e != nil {
  88. br.Msg = "获取失败"
  89. br.ErrMsg = "获取商家配置失败, Err: " + e.Error()
  90. return
  91. }
  92. ignoreChartApproveUserIdList := strings.Split(businessConf.ConfVal, `,`)
  93. if utils.InArrayByStr(ignoreChartApproveUserIdList, strconv.Itoa(c.SysUser.AdminId)) {
  94. isIgnoreApprove = true
  95. }
  96. }
  97. chartInfo, err := data_manage.GetChartInfoById(req.ChartInfoList[0].ChartInfoId)
  98. if err != nil {
  99. br.Msg = "获取指标失败"
  100. br.ErrMsg = "获取指标失败:" + err.Error()
  101. return
  102. }
  103. title := chartInfo.ChartName
  104. if len(req.ChartInfoList) > 1 {
  105. title += `等指标`
  106. }
  107. title += `公开审批`
  108. // 没开启审批流、或者无需审批
  109. if !opening || isIgnoreApprove {
  110. err = dataApproveSerice.UpdatePublicByDataList(utils.DataApproveTypeChart, dataApproveSerice.DataApproveStatePass, dataPublicItemList)
  111. } else {
  112. _, err = dataApproveSerice.SubmitDataApprove(utils.DataApproveTypeChart, dataPublicItemList, title, strings.TrimSpace(req.Description), c.SysUser.AdminId, c.SysUser.RealName)
  113. if err != nil {
  114. br.Msg = "提交审批失败"
  115. br.ErrMsg = "提交审批失败, Err: " + err.Error()
  116. return
  117. }
  118. // 更新ES
  119. for _, dataPublicItem := range dataPublicItemList {
  120. data.EsAddOrEditChartInfo(dataPublicItem.DataId)
  121. }
  122. }
  123. if err != nil {
  124. br.Msg = "编辑失败"
  125. br.ErrMsg = "编辑失败,Err:" + err.Error()
  126. return
  127. }
  128. br.Ret = 200
  129. br.Success = true
  130. br.Msg = "保存成功"
  131. }
  132. // Cancel
  133. // @Title 撤销指标公开
  134. // @Description 撤销指标公开
  135. // @Param ChartInfoId query int true "指标id"
  136. // @Success 200 {object} data_manage.ChartInfo
  137. // @router /chart_info/public/cancel [post]
  138. func (c *ChartPublicController) Cancel() {
  139. br := new(models.BaseResponse).Init()
  140. defer func() {
  141. c.Data["json"] = br
  142. c.ServeJSON()
  143. }()
  144. // TODO 单个指标撤销的时候,需要校验状态,然后撤销
  145. sysUser := c.SysUser
  146. if sysUser == nil {
  147. br.Msg = "请登录"
  148. br.ErrMsg = "请登录,SysUser Is Empty"
  149. br.Ret = 408
  150. return
  151. }
  152. chartInfoId, _ := c.GetInt("ChartInfoId")
  153. if chartInfoId <= 0 {
  154. br.Msg = "参数错误"
  155. br.ErrMsg = "参数错误"
  156. return
  157. }
  158. var req request.SetChartPublicReq
  159. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  160. if err != nil {
  161. br.Msg = "参数解析异常!"
  162. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  163. return
  164. }
  165. if len(req.ChartInfoList) <= 0 {
  166. br.Msg = `请选择指标`
  167. br.IsSendEmail = false
  168. }
  169. // 待处理的资产
  170. dataPublicItemList := make([]dataApproveSerice.SetDataPublicItem, 0)
  171. // 校验是否重复存在已公开、已提交的指标
  172. {
  173. chartInfoIdList := make([]int, 0)
  174. for _, item := range req.ChartInfoList {
  175. chartInfoIdList = append(chartInfoIdList, item.ChartInfoId)
  176. dataPublicItemList = append(dataPublicItemList, dataApproveSerice.SetDataPublicItem{
  177. DataId: item.ChartInfoId,
  178. ClassifyId: item.ClassifyId,
  179. })
  180. }
  181. list, err := data_manage.GetChartInfoByIdList(chartInfoIdList)
  182. if err != nil {
  183. br.Msg = "保存失败!"
  184. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  185. return
  186. }
  187. for _, v := range list {
  188. if v.PublicStatus != utils.DataPublicDefault {
  189. br.Msg = `选择指标中存在已经公开/提交审批的指标,请仅选择未公开指标!`
  190. br.IsSendEmail = false
  191. return
  192. }
  193. }
  194. }
  195. br.Ret = 200
  196. br.Success = true
  197. br.Msg = "保存成功"
  198. }
  199. // ListByEs
  200. // @Title 指标筛选接口
  201. // @Description 指标筛选接口
  202. // @Success 200 {object} data_manage.ChartInfoList
  203. // @Param request body request.SearchPublicChartReq true "type json string"
  204. // @Success 200 {object} data_manage.ChartInfoFilterDataResp
  205. // @router /chart_info/public/list/es [post]
  206. func (c *ChartPublicController) ListByEs() {
  207. br := new(models.BaseResponse).Init()
  208. defer func() {
  209. c.Data["json"] = br
  210. c.ServeJSON()
  211. }()
  212. var req request.SearchPublicChartReq
  213. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  214. if err != nil {
  215. br.Msg = "参数解析异常!"
  216. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  217. return
  218. }
  219. pageSize := req.PageSize
  220. currentIndex := req.CurrentIndex
  221. var total int64
  222. var startSize int
  223. if pageSize <= 0 {
  224. pageSize = utils.PageSize20
  225. }
  226. if currentIndex <= 0 {
  227. currentIndex = 1
  228. }
  229. startSize = paging.StartIndex(currentIndex, pageSize)
  230. // 获取查询参数
  231. keyword, searchChartPublicList, sourceList, chartClassifyIdList, publicClassifyIdList, chartAuth, sortMap := data.GetChartSearchPar(req)
  232. total, chartInfoList, err := elastic.SearchChartInfoDataByPublic(keyword, startSize, pageSize, searchChartPublicList, sourceList, chartClassifyIdList, publicClassifyIdList, chartAuth, c.SysUser.AdminId, sortMap)
  233. if err != nil {
  234. chartInfoList = make([]*data_manage.ChartInfoView, 0)
  235. }
  236. page := paging.GetPaging(currentIndex, pageSize, int(total))
  237. // 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  238. if len(chartInfoList) > 0 {
  239. chartInfoIdList := make([]int, 0)
  240. for _, v := range chartInfoList {
  241. v.ConvertToResp()
  242. v.HaveOperaAuth = true
  243. chartInfoIdList = append(chartInfoIdList, v.ChartInfoId)
  244. }
  245. tmpChartList, err := data_manage.GetChartInfoByIdList(chartInfoIdList)
  246. if err != nil {
  247. br.Msg = "获取失败"
  248. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  249. return
  250. }
  251. chartInfoMap := make(map[int]*data_manage.ChartInfo)
  252. for _, v := range tmpChartList {
  253. chartInfoMap[v.ChartInfoId] = v
  254. }
  255. for _, v := range chartInfoList {
  256. tmpChartInfo, ok := chartInfoMap[v.ChartInfoId]
  257. if !ok {
  258. continue
  259. }
  260. v.IsJoinPermission = tmpChartInfo.IsJoinPermission
  261. }
  262. }
  263. resp := data_manage.ChartInfoFilterDataResp{
  264. Paging: page,
  265. List: chartInfoList,
  266. }
  267. br.Ret = 200
  268. br.Success = true
  269. br.Msg = "获取成功"
  270. br.Data = resp
  271. }
  272. // AllListByEs
  273. // @Title 指标筛选接口
  274. // @Description 指标筛选接口
  275. // @Success 200 {object} data_manage.ChartInfoList
  276. // @Param request body request.SearchChartInfoShareReq true "type json string"
  277. // @Success 200 {object} data_manage.ChartInfoFilterDataResp
  278. // @router /chart_info/public/list/es/all [post]
  279. func (c *ChartPublicController) AllListByEs() {
  280. br := new(models.BaseResponse).Init()
  281. defer func() {
  282. c.Data["json"] = br
  283. c.ServeJSON()
  284. }()
  285. var req request.AllSearchPublicChartReq
  286. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  287. if err != nil {
  288. br.Msg = "参数解析异常!"
  289. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  290. return
  291. }
  292. // 选择所有指标,所以需要通过es获取数据
  293. // 选中的指标id列表
  294. chartInfoList := make([]*data_manage.ChartInfoView, 0)
  295. // 选择所有指标,所以需要通过es获取数据
  296. if req.IsSelectAll {
  297. tmpChartInfoList, err := data.GetAllChartInfoListBySearchPublicChartReq(req.SearchPublicChartReq, c.SysUser.AdminId)
  298. if err != nil {
  299. br.Msg = "获取指标列表失败!"
  300. br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
  301. return
  302. }
  303. // 如果有过滤指标,那么就过滤吧
  304. if len(req.NoChartIdList) > 0 {
  305. noChartIdMap := make(map[int]bool)
  306. for _, v := range req.NoChartIdList {
  307. noChartIdMap[v] = true
  308. }
  309. for _, v := range tmpChartInfoList {
  310. if _, ok := noChartIdMap[v.ChartInfoId]; !ok {
  311. // 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
  312. chartInfoList = append(chartInfoList, v)
  313. }
  314. }
  315. } else {
  316. chartInfoList = tmpChartInfoList
  317. }
  318. // 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  319. if len(chartInfoList) > 0 {
  320. chartInfoIdList := make([]int, 0)
  321. for _, v := range chartInfoList {
  322. v.ConvertToResp()
  323. v.HaveOperaAuth = true
  324. chartInfoIdList = append(chartInfoIdList, v.ChartInfoId)
  325. }
  326. tmpChartList, err := data_manage.GetChartInfoByIdList(chartInfoIdList)
  327. if err != nil {
  328. br.Msg = "获取失败"
  329. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  330. return
  331. }
  332. chartInfoMap := make(map[int]*data_manage.ChartInfo)
  333. for _, v := range tmpChartList {
  334. chartInfoMap[v.ChartInfoId] = v
  335. }
  336. for _, v := range chartInfoList {
  337. tmpChartInfo, ok := chartInfoMap[v.ChartInfoId]
  338. if !ok {
  339. continue
  340. }
  341. v.IsJoinPermission = tmpChartInfo.IsJoinPermission
  342. }
  343. }
  344. } else {
  345. // 因为是ES查找的,所以需要重新查一下指标的信息,主要是为了把是否授权字段找出来
  346. if len(req.ChartIdList) > 0 {
  347. chartInfoList, err = data_manage.GetChartInfoViewByIdList(req.ChartIdList)
  348. if err != nil {
  349. br.Msg = "获取失败"
  350. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  351. return
  352. }
  353. }
  354. }
  355. resp := data_manage.ChartInfoFilterDataResp{
  356. List: chartInfoList,
  357. }
  358. br.Ret = 200
  359. br.Success = true
  360. br.Msg = "获取成功"
  361. br.Data = resp
  362. }
  363. // BatchMoveChart
  364. // @Title 指标批量移动接口
  365. // @Description 指标批量移动接口
  366. // @Param request body request.MoveChartClassifyReq true "type json string"
  367. // @Success Ret=200 移动成功
  368. // @router /chart_info/public/batch_move [post]
  369. func (c *ChartPublicController) BatchMoveChart() {
  370. br := new(models.BaseResponse).Init()
  371. defer func() {
  372. c.Data["json"] = br
  373. c.ServeJSON()
  374. }()
  375. var req request.MoveChartClassifyReq
  376. err := json.Unmarshal(c.Ctx.Input.RequestBody, &req)
  377. if err != nil {
  378. br.Msg = "参数解析异常!"
  379. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  380. return
  381. }
  382. if req.NewClassifyId <= 0 {
  383. br.Msg = `请选择要转移的新分类`
  384. br.IsSendEmail = false
  385. return
  386. }
  387. chartInfoIdList := make([]int, 0)
  388. if req.IsSelectAll {
  389. // 获取指标
  390. chartInfoList, err := data.GetAllChartInfoListBySearchPublicChartReq(req.SearchPublicChartReq, c.SysUser.AdminId)
  391. if err != nil {
  392. br.Msg = "获取指标列表失败!"
  393. br.ErrMsg = "获取指标列表失败,Err:" + err.Error()
  394. return
  395. }
  396. // 如果有过滤指标,那么就过滤吧
  397. if len(req.NoChartIdList) > 0 {
  398. noChartIdMap := make(map[int]bool)
  399. for _, v := range req.NoChartIdList {
  400. noChartIdMap[v] = true
  401. }
  402. for _, chartInfo := range chartInfoList {
  403. if _, ok := noChartIdMap[chartInfo.ChartInfoId]; !ok {
  404. if chartInfo.PublicStatus != utils.DataPublicSuccess {
  405. br.Msg = `存在未公开的指标:` + chartInfo.ChartName
  406. br.IsSendEmail = false
  407. return
  408. }
  409. // 如果不在未选中的指标id列表中,那么就加入到选中的指标id列表
  410. chartInfoIdList = append(chartInfoIdList, chartInfo.ChartInfoId)
  411. }
  412. }
  413. } else {
  414. for _, chartInfo := range chartInfoList {
  415. if chartInfo.PublicStatus != utils.DataPublicSuccess {
  416. br.Msg = `存在未公开的指标:` + chartInfo.ChartName
  417. br.IsSendEmail = false
  418. return
  419. }
  420. chartInfoIdList = append(chartInfoIdList, chartInfo.ChartInfoId)
  421. }
  422. }
  423. } else {
  424. chartInfoList, err := data_manage.GetChartInfoViewByIdList(req.ChartIdList)
  425. if err != nil {
  426. br.Msg = "获取失败"
  427. br.ErrMsg = "获取所有有权限的指标失败,Err:" + err.Error()
  428. return
  429. }
  430. for _, v := range chartInfoList {
  431. if v.PublicStatus != utils.DataPublicSuccess {
  432. br.Msg = `存在未公开的指标:` + v.ChartName
  433. br.IsSendEmail = false
  434. return
  435. }
  436. }
  437. chartInfoIdList = req.ChartIdList
  438. }
  439. num := len(chartInfoIdList)
  440. if num <= 0 {
  441. br.Msg = `请选择要移动的指标!`
  442. br.IsSendEmail = false
  443. return
  444. }
  445. if num > 100 {
  446. br.Msg = `最多只能选择100条指标!`
  447. br.IsSendEmail = false
  448. return
  449. }
  450. // 开始批量修改指标分类
  451. if len(chartInfoIdList) > 0 {
  452. err = data_manage.UpdatePublicClassifyIdByChartInfoIdList(chartInfoIdList, req.NewClassifyId)
  453. if err != nil {
  454. br.Msg = `指标移动失败!`
  455. br.ErrMsg = `指标移动失败,ERR:` + err.Error()
  456. return
  457. }
  458. }
  459. br.Ret = 200
  460. br.Success = true
  461. br.Msg = "获取成功"
  462. }