chart_classify.go 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hongze_ETA_mobile_api/controllers"
  6. "hongze/hongze_ETA_mobile_api/models"
  7. "hongze/hongze_ETA_mobile_api/models/data_manage"
  8. "hongze/hongze_ETA_mobile_api/models/system"
  9. "hongze/hongze_ETA_mobile_api/services/data"
  10. "hongze/hongze_ETA_mobile_api/utils"
  11. "time"
  12. )
  13. // ChartClassifyController 数据管理-分类模块
  14. type ChartClassifyController struct {
  15. controllers.BaseAuthController
  16. }
  17. // ChartClassifyListV2
  18. // @Title 图表分类列表
  19. // @Description 图表分类列表接口
  20. // @Param IsShowMe query bool true "是否只看我的,true、false"
  21. // @Success 200 {object} data_manage.ChartClassifyListResp
  22. // @router /chart_classify/list [get]
  23. func (this *ChartClassifyController) ChartClassifyListV2() {
  24. br := new(models.BaseResponse).Init()
  25. defer func() {
  26. this.Data["json"] = br
  27. this.ServeJSON()
  28. }()
  29. resp := new(data_manage.ChartClassifyListResp)
  30. // 获取当前账号的不可见指标
  31. noPermissionChartIdMap := make(map[int]bool)
  32. {
  33. obj := data_manage.EdbInfoNoPermissionAdmin{}
  34. confList, err := obj.GetAllChartListByAdminId(this.SysUser.AdminId)
  35. if err != nil && err.Error() != utils.ErrNoRow() {
  36. br.Msg = "获取失败"
  37. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  38. return
  39. }
  40. for _, v := range confList {
  41. noPermissionChartIdMap[v.ChartInfoId] = true
  42. }
  43. }
  44. isShowMe, _ := this.GetBool("IsShowMe")
  45. if isShowMe {
  46. errMsg, err := getChartClassifyListForMe(*this.SysUser, resp)
  47. if err != nil {
  48. br.Msg = errMsg
  49. br.ErrMsg = err.Error()
  50. return
  51. }
  52. // 移除没有权限的图表
  53. allNodes := handleNoPermissionChart(resp.AllNodes, noPermissionChartIdMap)
  54. resp.AllNodes = allNodes
  55. br.Ret = 200
  56. br.Success = true
  57. br.Msg = "获取成功"
  58. br.Data = resp
  59. fmt.Println("source my classify")
  60. return
  61. }
  62. //判断是否存在缓存,如果存在缓存,那么直接从缓存中获取
  63. key := utils.CACHE_CHART_CLASSIFY
  64. if utils.Re == nil {
  65. if utils.Re == nil && utils.Rc.IsExist(key) {
  66. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  67. err := json.Unmarshal(data, &resp)
  68. if err == nil && resp != nil {
  69. // 移除没有权限的图表
  70. allNodes := handleNoPermissionChart(resp.AllNodes, noPermissionChartIdMap)
  71. resp.AllNodes = allNodes
  72. br.Ret = 200
  73. br.Success = true
  74. br.Msg = "获取成功"
  75. br.Data = resp
  76. fmt.Println("source redis")
  77. return
  78. }
  79. }
  80. }
  81. }
  82. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  83. if err != nil && err.Error() != utils.ErrNoRow() {
  84. br.Msg = "获取失败"
  85. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  86. return
  87. }
  88. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  89. if err != nil && err.Error() != utils.ErrNoRow() {
  90. br.Msg = "获取失败"
  91. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  92. return
  93. }
  94. allChartInfo, err := data_manage.GetChartInfoAll(utils.CHART_SOURCE_DEFAULT)
  95. if err != nil && err.Error() != utils.ErrNoRow() {
  96. br.Msg = "获取失败"
  97. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  98. return
  99. }
  100. chartInfoMap := make(map[int][]*data_manage.ChartClassifyItems)
  101. for _, v := range allChartInfo {
  102. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  103. }
  104. rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
  105. for _, v := range classifyAll {
  106. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  107. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  108. v.Children = existItems
  109. } else {
  110. items := make([]*data_manage.ChartClassifyItems, 0)
  111. v.Children = items
  112. }
  113. }
  114. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  115. for _, v := range rootList {
  116. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  117. v.Children = existItems
  118. } else {
  119. items := make([]*data_manage.ChartClassifyItems, 0)
  120. v.Children = items
  121. }
  122. nodeAll = append(nodeAll, v)
  123. }
  124. //
  125. //
  126. //nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  127. //for k := range rootList {
  128. // rootNode := rootList[k]
  129. // data.ChartClassifyListMakeTree(classifyAll, rootNode)
  130. // nodeAll = append(nodeAll, rootNode)
  131. //}
  132. resp.AllNodes = nodeAll
  133. // 将数据加入缓存
  134. if utils.Re == nil {
  135. data, _ := json.Marshal(resp)
  136. utils.Rc.Put(key, data, 2*time.Hour)
  137. }
  138. // 移除没有权限的图表
  139. allNodes := handleNoPermissionChart(resp.AllNodes, noPermissionChartIdMap)
  140. resp.AllNodes = allNodes
  141. br.Ret = 200
  142. br.Success = true
  143. br.Msg = "获取成功"
  144. br.Data = resp
  145. }
  146. // getChartClassifyListForMe 获取我创建的图表
  147. func getChartClassifyListForMe(adminInfo system.Admin, resp *data_manage.ChartClassifyListResp) (errMsg string, err error) {
  148. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  149. if err != nil && err.Error() != utils.ErrNoRow() {
  150. errMsg = "获取失败"
  151. return
  152. }
  153. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  154. if err != nil && err.Error() != utils.ErrNoRow() {
  155. errMsg = "获取失败"
  156. return
  157. }
  158. allChartInfo, err := data_manage.GetChartInfoByAdminId(utils.CHART_SOURCE_DEFAULT, adminInfo.AdminId)
  159. if err != nil && err.Error() != utils.ErrNoRow() {
  160. errMsg = "获取失败"
  161. return
  162. }
  163. chartInfoMap := make(map[int][]*data_manage.ChartClassifyItems)
  164. for _, v := range allChartInfo {
  165. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  166. }
  167. rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
  168. for _, v := range classifyAll {
  169. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  170. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  171. v.Children = existItems
  172. } else {
  173. items := make([]*data_manage.ChartClassifyItems, 0)
  174. v.Children = items
  175. }
  176. }
  177. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  178. for _, v := range rootList {
  179. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  180. v.Children = existItems
  181. } else {
  182. items := make([]*data_manage.ChartClassifyItems, 0)
  183. v.Children = items
  184. }
  185. nodeAll = append(nodeAll, v)
  186. }
  187. resp.AllNodes = nodeAll
  188. return
  189. }
  190. // handleNoPermissionChart 图表列表返回,将没有权限的图表移除
  191. func handleNoPermissionChart(allNodes []*data_manage.ChartClassifyItems, noPermissionChartIdMap map[int]bool) (newAllNodes []*data_manage.ChartClassifyItems) {
  192. // 移除没有权限的图表
  193. newAllNodes = make([]*data_manage.ChartClassifyItems, 0)
  194. for _, node := range allNodes {
  195. // 二级分类
  196. tmpNodeInfo := *node
  197. tmpNodeList := make([]*data_manage.ChartClassifyItems, 0)
  198. if node.Children != nil {
  199. for _, chartList := range node.Children {
  200. tmpInfo := *chartList
  201. tmpList := make([]*data_manage.ChartClassifyItems, 0)
  202. if chartList.Children != nil {
  203. for _, chartInfo := range chartList.Children {
  204. // 如果指标不可见,那么就不返回该指标
  205. if _, ok := noPermissionChartIdMap[chartInfo.ChartInfoId]; ok {
  206. continue
  207. }
  208. tmpList = append(tmpList, chartInfo)
  209. }
  210. }
  211. tmpInfo.Children = tmpList
  212. tmpNodeList = append(tmpNodeList, &tmpInfo)
  213. }
  214. }
  215. tmpNodeInfo.Children = tmpNodeList
  216. newAllNodes = append(newAllNodes, &tmpNodeInfo)
  217. }
  218. return
  219. }
  220. // ChartClassifyItems
  221. // @Title 获取所有图表分类接口-不包含图表
  222. // @Description 获取所有图表分类接口-不包含图表
  223. // @Success 200 {object} data_manage.ChartClassifyListResp
  224. // @router /chart_classify/items [get]
  225. func (this *ChartClassifyController) ChartClassifyItems() {
  226. br := new(models.BaseResponse).Init()
  227. defer func() {
  228. this.Data["json"] = br
  229. this.ServeJSON()
  230. }()
  231. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  232. if err != nil {
  233. br.Msg = "获取失败"
  234. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  235. return
  236. }
  237. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  238. if err != nil {
  239. br.Msg = "获取失败"
  240. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  241. return
  242. }
  243. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  244. for k := range rootList {
  245. rootNode := rootList[k]
  246. data.ChartClassifyItemsMakeTree(classifyAll, rootNode)
  247. nodeAll = append(nodeAll, rootNode)
  248. }
  249. language := `CN`
  250. // 指标显示的语言
  251. {
  252. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.ChartLanguageVar)
  253. if configDetail != nil {
  254. language = configDetail.ConfigValue
  255. } else {
  256. configDetail, _ = system.GetDefaultConfigDetailByCode(system.ChartLanguageVar)
  257. if configDetail != nil {
  258. language = configDetail.ConfigValue
  259. }
  260. }
  261. }
  262. resp := new(data_manage.ChartClassifyListResp)
  263. resp.AllNodes = nodeAll
  264. resp.Language = language
  265. br.Ret = 200
  266. br.Success = true
  267. br.Msg = "获取成功"
  268. br.Data = resp
  269. }
  270. // DeleteChartClassify
  271. // @Title 删除图表分类/图表
  272. // @Description 删除图表分类/图表接口
  273. // @Param request body data_manage.DeleteChartClassifyReq true "type json string"
  274. // @Success 200 Ret=200 删除成功
  275. // @router /chart_classify/delete [post]
  276. func (this *ChartClassifyController) DeleteChartClassify() {
  277. br := new(models.BaseResponse).Init()
  278. defer func() {
  279. this.Data["json"] = br
  280. this.ServeJSON()
  281. }()
  282. sysUser := this.SysUser
  283. if sysUser == nil {
  284. br.Msg = "请登录"
  285. br.ErrMsg = "请登录,SysUser Is Empty"
  286. br.Ret = 408
  287. return
  288. }
  289. var req data_manage.DeleteChartClassifyReq
  290. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  291. if err != nil {
  292. br.Msg = "参数解析异常!"
  293. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  294. return
  295. }
  296. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  297. br.Msg = "参数错误"
  298. br.IsSendEmail = false
  299. return
  300. }
  301. //删除分类
  302. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  303. //判断是否含有指标
  304. count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  305. if err != nil && err.Error() != utils.ErrNoRow() {
  306. br.Msg = "删除失败"
  307. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  308. return
  309. }
  310. if count > 0 {
  311. br.Msg = "该目录下存在关联指标,不可删除"
  312. br.IsSendEmail = false
  313. return
  314. }
  315. err = data_manage.DeleteChartClassify(req.ChartClassifyId)
  316. if err != nil {
  317. br.Msg = "删除失败"
  318. br.ErrMsg = "删除失败,Err:" + err.Error()
  319. return
  320. }
  321. }
  322. resp := new(data_manage.AddChartInfoResp)
  323. //删除图表
  324. if req.ChartInfoId > 0 {
  325. chartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
  326. if err != nil {
  327. if err.Error() == utils.ErrNoRow() {
  328. br.Msg = "图表已删除,请刷新页面"
  329. br.ErrMsg = "指标不存在,Err:" + err.Error()
  330. return
  331. } else {
  332. br.Msg = "删除失败"
  333. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  334. return
  335. }
  336. }
  337. if chartInfo == nil {
  338. br.Msg = "图表已删除,请刷新页面"
  339. return
  340. }
  341. //图表操作权限
  342. ok := data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
  343. if !ok {
  344. br.Msg = "没有该图表的操作权限"
  345. br.ErrMsg = "没有该图表的操作权限"
  346. return
  347. }
  348. // 获取引用该图表的MyCharts, 用于ES删除
  349. var myCond string
  350. var myPars []interface{}
  351. myCond += ` AND a.chart_info_id = ? `
  352. myPars = append(myPars, req.ChartInfoId)
  353. myCharts, e := data_manage.GetMyChartListGroupByCharyInfoIdAndAdminIdByCondition(myCond, myPars)
  354. if e != nil {
  355. br.Msg = "删除失败"
  356. br.ErrMsg = "获取引用图表的MyChats失败, Err: " + e.Error()
  357. return
  358. }
  359. myIds := make([]int, 0)
  360. for _, m := range myCharts {
  361. myIds = append(myIds, m.MyChartId)
  362. }
  363. //删除图表及关联指标
  364. err = data_manage.DeleteChartInfoAndData(req.ChartInfoId)
  365. if err != nil {
  366. br.Msg = "删除失败"
  367. br.ErrMsg = "删除失败,Err:" + err.Error()
  368. return
  369. }
  370. //删除ES
  371. {
  372. go data.EsDeleteChartInfo(req.ChartInfoId)
  373. // 删除MY ETA 图表 es数据
  374. //go data.EsDeleteMyChartInfoByChartInfoId(req.ChartInfoId)
  375. go data.EsDeleteMyChartInfoByMyChartIds(myIds)
  376. }
  377. var condition string
  378. var pars []interface{}
  379. condition += " AND chart_classify_id=? AND source = ? "
  380. pars = append(pars, chartInfo.ChartClassifyId, utils.CHART_SOURCE_DEFAULT)
  381. condition += " AND chart_info_id>? ORDER BY create_time ASC LIMIT 1 "
  382. pars = append(pars, req.ChartInfoId)
  383. nextItem, err := data_manage.GetChartInfoByCondition(condition, pars)
  384. if err != nil && err.Error() != utils.ErrNoRow() {
  385. br.Msg = "删除失败"
  386. br.ErrMsg = "获取下一级图库信息失败,Err:" + err.Error()
  387. return
  388. }
  389. if nextItem != nil {
  390. resp.UniqueCode = nextItem.UniqueCode
  391. resp.ChartInfoId = nextItem.ChartInfoId
  392. } else {
  393. var condition string
  394. var pars []interface{}
  395. condition += " AND level=3 "
  396. //pars = append(pars, chartInfo.ChartClassifyId)
  397. condition += " AND chart_classify_id>? ORDER BY chart_classify_id ASC LIMIT 1 "
  398. pars = append(pars, chartInfo.ChartClassifyId)
  399. classifyItem, err := data_manage.GetChartClassifyByCondition(condition, pars)
  400. if err != nil && err.Error() != utils.ErrNoRow() {
  401. br.Msg = "删除失败"
  402. br.ErrMsg = "获取下一级图库分类信息失败,Err:" + err.Error()
  403. return
  404. }
  405. if classifyItem != nil {
  406. nextItem, err = data_manage.GetNextChartInfo(chartInfo.ChartClassifyId)
  407. if err != nil && err.Error() != utils.ErrNoRow() {
  408. br.Msg = "删除失败"
  409. br.ErrMsg = "获取下一级图库信息失败,Err:" + err.Error()
  410. return
  411. }
  412. if nextItem != nil {
  413. resp.UniqueCode = nextItem.UniqueCode
  414. resp.ChartInfoId = nextItem.ChartInfoId
  415. }
  416. }
  417. }
  418. //新增操作日志
  419. {
  420. chartLog := new(data_manage.ChartInfoLog)
  421. chartLog.ChartName = chartInfo.ChartName
  422. chartLog.ChartInfoId = req.ChartInfoId
  423. chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  424. chartLog.SysUserId = sysUser.AdminId
  425. chartLog.SysUserRealName = sysUser.RealName
  426. chartLog.UniqueCode = chartInfo.UniqueCode
  427. chartLog.CreateTime = time.Now()
  428. chartLog.Content = string(this.Ctx.Input.RequestBody)
  429. chartLog.Status = "删除图表"
  430. chartLog.Method = this.Ctx.Input.URI()
  431. go data_manage.AddChartInfoLog(chartLog)
  432. }
  433. }
  434. br.Ret = 200
  435. br.Msg = "删除成功"
  436. br.Success = true
  437. br.Data = resp
  438. br.IsAddLog = true
  439. }