chart_classify.go 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "hongze/hz_eta_api/controllers"
  6. "hongze/hz_eta_api/models"
  7. "hongze/hz_eta_api/models/data_manage"
  8. "hongze/hz_eta_api/models/system"
  9. "hongze/hz_eta_api/services/data"
  10. "hongze/hz_eta_api/utils"
  11. "strconv"
  12. "time"
  13. )
  14. // 数据管理-分类模块
  15. type ChartClassifyController struct {
  16. controllers.BaseAuthController
  17. }
  18. //
  19. //// @Title 图表分类列表
  20. //// @Description 图表分类列表接口
  21. //// @Success 200 {object} data_manage.ChartClassifyListResp
  22. //// @router /chart_classify/list [get]
  23. //func (this *ChartClassifyController) ChartClassifyList() {
  24. // br := new(models.BaseResponse).Init()
  25. // defer func() {
  26. // this.Data["json"] = br
  27. // this.ServeJSON()
  28. // }()
  29. // rootList, err := data_manage.GetChartClassifyByParentId(0)
  30. // if err != nil {
  31. // br.Msg = "获取失败"
  32. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  33. // return
  34. // }
  35. //
  36. // classifyAll, err := data_manage.GetChartClassifyAll()
  37. // if err != nil {
  38. // br.Msg = "获取失败"
  39. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  40. // return
  41. // }
  42. //
  43. // nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  44. // for k := range rootList {
  45. // rootNode := rootList[k]
  46. // data.ChartClassifyListMakeTree(classifyAll, rootNode)
  47. // nodeAll = append(nodeAll, rootNode)
  48. // }
  49. // resp := new(data_manage.ChartClassifyListResp)
  50. // resp.AllNodes = nodeAll
  51. // br.Ret = 200
  52. // br.Success = true
  53. // br.Msg = "获取成功"
  54. // br.Data = resp
  55. //}
  56. // ChartClassifyListV2
  57. // @Title 图表分类列表
  58. // @Description 图表分类列表接口
  59. // @Param IsShowMe query bool true "是否只看我的,true、false"
  60. // @Success 200 {object} data_manage.ChartClassifyListResp
  61. // @router /chart_classify/list [get]
  62. func (this *ChartClassifyController) ChartClassifyListV2() {
  63. br := new(models.BaseResponse).Init()
  64. defer func() {
  65. this.Data["json"] = br
  66. this.ServeJSON()
  67. }()
  68. resp := new(data_manage.ChartClassifyListResp)
  69. // 获取当前账号的不可见指标
  70. noPermissionChartIdMap := make(map[int]bool)
  71. {
  72. obj := data_manage.EdbInfoNoPermissionAdmin{}
  73. confList, err := obj.GetAllChartListByAdminId(this.SysUser.AdminId)
  74. if err != nil && err.Error() != utils.ErrNoRow() {
  75. br.Msg = "获取失败"
  76. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  77. return
  78. }
  79. for _, v := range confList {
  80. noPermissionChartIdMap[v.ChartInfoId] = true
  81. }
  82. }
  83. isShowMe, _ := this.GetBool("IsShowMe")
  84. if isShowMe {
  85. errMsg, err := getChartClassifyListForMe(*this.SysUser, resp)
  86. if err != nil {
  87. br.Msg = errMsg
  88. br.ErrMsg = err.Error()
  89. return
  90. }
  91. // 移除没有权限的图表
  92. allNodes := handleNoPermissionChart(resp.AllNodes, noPermissionChartIdMap)
  93. resp.AllNodes = allNodes
  94. br.Ret = 200
  95. br.Success = true
  96. br.Msg = "获取成功"
  97. br.Data = resp
  98. fmt.Println("source my classify")
  99. return
  100. }
  101. //判断是否存在缓存,如果存在缓存,那么直接从缓存中获取
  102. key := utils.CACHE_CHART_CLASSIFY
  103. if utils.Re == nil {
  104. if utils.Re == nil && utils.Rc.IsExist(key) {
  105. if data, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  106. err := json.Unmarshal(data, &resp)
  107. if err == nil && resp != nil {
  108. // 移除没有权限的图表
  109. allNodes := handleNoPermissionChart(resp.AllNodes, noPermissionChartIdMap)
  110. resp.AllNodes = allNodes
  111. br.Ret = 200
  112. br.Success = true
  113. br.Msg = "获取成功"
  114. br.Data = resp
  115. fmt.Println("source redis")
  116. return
  117. }
  118. }
  119. }
  120. }
  121. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  122. if err != nil && err.Error() != utils.ErrNoRow() {
  123. br.Msg = "获取失败"
  124. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  125. return
  126. }
  127. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  128. if err != nil && err.Error() != utils.ErrNoRow() {
  129. br.Msg = "获取失败"
  130. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  131. return
  132. }
  133. allChartInfo, err := data_manage.GetChartInfoAll([]int{utils.CHART_SOURCE_DEFAULT})
  134. if err != nil && err.Error() != utils.ErrNoRow() {
  135. br.Msg = "获取失败"
  136. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  137. return
  138. }
  139. chartInfoMap := make(map[int][]*data_manage.ChartClassifyItems)
  140. for _, v := range allChartInfo {
  141. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  142. }
  143. rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
  144. for _, v := range classifyAll {
  145. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  146. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  147. v.Children = existItems
  148. } else {
  149. items := make([]*data_manage.ChartClassifyItems, 0)
  150. v.Children = items
  151. }
  152. }
  153. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  154. for _, v := range rootList {
  155. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  156. v.Children = existItems
  157. } else {
  158. items := make([]*data_manage.ChartClassifyItems, 0)
  159. v.Children = items
  160. }
  161. nodeAll = append(nodeAll, v)
  162. }
  163. //
  164. //
  165. //nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  166. //for k := range rootList {
  167. // rootNode := rootList[k]
  168. // data.ChartClassifyListMakeTree(classifyAll, rootNode)
  169. // nodeAll = append(nodeAll, rootNode)
  170. //}
  171. resp.AllNodes = nodeAll
  172. // 将数据加入缓存
  173. if utils.Re == nil {
  174. data, _ := json.Marshal(resp)
  175. utils.Rc.Put(key, data, 2*time.Hour)
  176. }
  177. // 移除没有权限的图表
  178. allNodes := handleNoPermissionChart(resp.AllNodes, noPermissionChartIdMap)
  179. resp.AllNodes = allNodes
  180. br.Ret = 200
  181. br.Success = true
  182. br.Msg = "获取成功"
  183. br.Data = resp
  184. }
  185. // getChartClassifyListForMe 获取我创建的图表
  186. func getChartClassifyListForMe(adminInfo system.Admin, resp *data_manage.ChartClassifyListResp) (errMsg string, err error) {
  187. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  188. if err != nil && err.Error() != utils.ErrNoRow() {
  189. errMsg = "获取失败"
  190. return
  191. }
  192. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  193. if err != nil && err.Error() != utils.ErrNoRow() {
  194. errMsg = "获取失败"
  195. return
  196. }
  197. allChartInfo, err := data_manage.GetChartInfoByAdminId([]int{utils.CHART_SOURCE_DEFAULT}, adminInfo.AdminId)
  198. if err != nil && err.Error() != utils.ErrNoRow() {
  199. errMsg = "获取失败"
  200. return
  201. }
  202. chartInfoMap := make(map[int][]*data_manage.ChartClassifyItems)
  203. for _, v := range allChartInfo {
  204. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  205. }
  206. rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
  207. for _, v := range classifyAll {
  208. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  209. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  210. v.Children = existItems
  211. } else {
  212. items := make([]*data_manage.ChartClassifyItems, 0)
  213. v.Children = items
  214. }
  215. }
  216. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  217. for _, v := range rootList {
  218. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  219. v.Children = existItems
  220. } else {
  221. items := make([]*data_manage.ChartClassifyItems, 0)
  222. v.Children = items
  223. }
  224. nodeAll = append(nodeAll, v)
  225. }
  226. resp.AllNodes = nodeAll
  227. return
  228. }
  229. // handleNoPermissionChart 图表列表返回,将没有权限的图表移除
  230. func handleNoPermissionChart(allNodes []*data_manage.ChartClassifyItems, noPermissionChartIdMap map[int]bool) (newAllNodes []*data_manage.ChartClassifyItems) {
  231. // 移除没有权限的图表
  232. newAllNodes = make([]*data_manage.ChartClassifyItems, 0)
  233. for _, node := range allNodes {
  234. // 二级分类
  235. tmpNodeInfo := *node
  236. tmpNodeList := make([]*data_manage.ChartClassifyItems, 0)
  237. if node.Children != nil {
  238. for _, chartList := range node.Children {
  239. tmpInfo := *chartList
  240. tmpList := make([]*data_manage.ChartClassifyItems, 0)
  241. if chartList.Children != nil {
  242. for _, chartInfo := range chartList.Children {
  243. thirdInfo := *chartInfo
  244. thirdList := make([]*data_manage.ChartClassifyItems, 0)
  245. // 如果指标不可见,那么就不返回该指标
  246. if _, ok := noPermissionChartIdMap[chartInfo.ChartInfoId]; ok {
  247. continue
  248. }
  249. tmpList = append(tmpList, chartInfo)
  250. if chartInfo.Children != nil {
  251. for _, thirdChart := range chartInfo.Children {
  252. // 如果指标不可见,那么就不返回该指标
  253. if _, ok := noPermissionChartIdMap[chartInfo.ChartInfoId]; ok {
  254. continue
  255. }
  256. thirdList = append(thirdList, thirdChart)
  257. }
  258. }
  259. thirdInfo.Children = thirdList
  260. tmpList = append(tmpList, &thirdInfo)
  261. }
  262. }
  263. tmpInfo.Children = tmpList
  264. tmpNodeList = append(tmpNodeList, &tmpInfo)
  265. }
  266. }
  267. tmpNodeInfo.Children = tmpNodeList
  268. newAllNodes = append(newAllNodes, &tmpNodeInfo)
  269. }
  270. return
  271. }
  272. // @Title 获取所有图表分类接口-不包含图表
  273. // @Description 获取所有图表分类接口-不包含图表
  274. // @Success 200 {object} data_manage.ChartClassifyListResp
  275. // @router /chart_classify/items [get]
  276. func (this *ChartClassifyController) ChartClassifyItems() {
  277. br := new(models.BaseResponse).Init()
  278. defer func() {
  279. this.Data["json"] = br
  280. this.ServeJSON()
  281. }()
  282. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  283. if err != nil {
  284. br.Msg = "获取失败"
  285. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  286. return
  287. }
  288. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  289. if err != nil {
  290. br.Msg = "获取失败"
  291. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  292. return
  293. }
  294. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  295. for k := range rootList {
  296. rootNode := rootList[k]
  297. data.ChartClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode)
  298. nodeAll = append(nodeAll, rootNode)
  299. }
  300. language := `CN`
  301. // 指标显示的语言
  302. {
  303. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.ChartLanguageVar)
  304. if configDetail != nil {
  305. language = configDetail.ConfigValue
  306. } else {
  307. configDetail, _ = system.GetDefaultConfigDetailByCode(system.ChartLanguageVar)
  308. if configDetail != nil {
  309. language = configDetail.ConfigValue
  310. }
  311. }
  312. }
  313. // 是否允许添加分类
  314. canOpClassify := true
  315. // 如果不是 超管 或者 ficc管理员 或者 ficc研究员,那么就没有权限
  316. if !utils.InArrayByStr([]string{utils.ROLE_TYPE_CODE_ADMIN, utils.ROLE_TYPE_CODE_FICC_ADMIN, utils.ROLE_TYPE_CODE_RESEARCHR, utils.ROLE_TYPE_CODE_FICC_RESEARCHR}, this.SysUser.RoleTypeCode) {
  317. canOpClassify = false
  318. }
  319. resp := data_manage.ChartClassifyListResp{
  320. AllNodes: nodeAll,
  321. Language: language,
  322. CanOpClassify: canOpClassify,
  323. }
  324. br.Ret = 200
  325. br.Success = true
  326. br.Msg = "获取成功"
  327. br.Data = resp
  328. }
  329. // @Title 新增图表分类
  330. // @Description 新增图表分类接口
  331. // @Param request body data_manage.AddChartClassifyReq true "type json string"
  332. // @Success 200 Ret=200 保存成功
  333. // @router /chart_classify/add [post]
  334. func (this *ChartClassifyController) AddChartClassify() {
  335. br := new(models.BaseResponse).Init()
  336. defer func() {
  337. this.Data["json"] = br
  338. this.ServeJSON()
  339. }()
  340. var req data_manage.AddChartClassifyReq
  341. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  342. if err != nil {
  343. br.Msg = "参数解析异常!"
  344. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  345. return
  346. }
  347. if req.ChartClassifyName == "" {
  348. br.Msg = "请输入分类名称"
  349. br.IsSendEmail = false
  350. return
  351. }
  352. if req.ParentId < 0 {
  353. br.Msg = "参数错误"
  354. br.IsSendEmail = false
  355. return
  356. }
  357. count, err := data_manage.GetChartClassifyCount(req.ChartClassifyName, req.ParentId, utils.CHART_SOURCE_DEFAULT)
  358. if err != nil {
  359. br.Msg = "判断名称是否已存在失败"
  360. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  361. return
  362. }
  363. if count > 0 {
  364. br.Msg = "分类名称已存在,请重新输入"
  365. br.IsSendEmail = false
  366. return
  367. }
  368. //获取该层级下最大的排序数
  369. maxSort, err := data_manage.GetChartClassifyMaxSort(req.ParentId, utils.CHART_SOURCE_DEFAULT)
  370. classify := new(data_manage.ChartClassify)
  371. classify.ParentId = req.ParentId
  372. classify.ChartClassifyName = req.ChartClassifyName
  373. classify.HasData = 0
  374. classify.CreateTime = time.Now()
  375. classify.ModifyTime = time.Now()
  376. classify.SysUserId = this.SysUser.AdminId
  377. classify.SysUserRealName = this.SysUser.RealName
  378. classify.Level = req.Level + 1
  379. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  380. classify.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  381. classify.Sort = maxSort + 1
  382. classify.Source = utils.CHART_SOURCE_DEFAULT
  383. _, err = data_manage.AddChartClassify(classify)
  384. if err != nil {
  385. br.Msg = "保存分类失败"
  386. br.ErrMsg = "保存分类失败,Err:" + err.Error()
  387. return
  388. }
  389. br.Ret = 200
  390. br.Msg = "保存成功"
  391. br.Success = true
  392. }
  393. // @Title 修改图表分类
  394. // @Description 修改图表分类接口
  395. // @Param request body data_manage.EditChartClassifyReq true "type json string"
  396. // @Success 200 Ret=200 修改成功
  397. // @router /chart_classify/edit [post]
  398. func (this *ChartClassifyController) EditChartClassify() {
  399. br := new(models.BaseResponse).Init()
  400. defer func() {
  401. this.Data["json"] = br
  402. this.ServeJSON()
  403. }()
  404. var req data_manage.EditChartClassifyReq
  405. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  406. if err != nil {
  407. br.Msg = "参数解析异常!"
  408. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  409. return
  410. }
  411. if req.ChartClassifyName == "" {
  412. br.Msg = "请输入分类名称"
  413. br.IsSendEmail = false
  414. return
  415. }
  416. if req.ChartClassifyId <= 0 {
  417. br.Msg = "参数错误"
  418. br.IsSendEmail = false
  419. return
  420. }
  421. item, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
  422. if err != nil {
  423. br.Msg = "保存失败"
  424. br.Msg = "获取分类信息失败,Err:" + err.Error()
  425. return
  426. }
  427. // 权限校验
  428. {
  429. button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
  430. if !button.OpButton {
  431. br.Msg = "无操作权限"
  432. br.IsSendEmail = false
  433. return
  434. }
  435. }
  436. if item.ChartClassifyName != req.ChartClassifyName {
  437. count, err := data_manage.GetChartClassifyCount(req.ChartClassifyName, item.ParentId, utils.CHART_SOURCE_DEFAULT)
  438. if err != nil {
  439. br.Msg = "判断名称是否已存在失败"
  440. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  441. return
  442. }
  443. if count > 0 {
  444. br.Msg = "分类名称已存在,请重新输入"
  445. br.IsSendEmail = false
  446. return
  447. }
  448. err = data_manage.EditChartClassify(req.ChartClassifyId, utils.CHART_SOURCE_DEFAULT, req.ChartClassifyName)
  449. if err != nil {
  450. br.Msg = "保存失败"
  451. br.ErrMsg = "保存失败,Err:" + err.Error()
  452. return
  453. }
  454. }
  455. br.Ret = 200
  456. br.Msg = "保存成功"
  457. br.Success = true
  458. br.IsAddLog = true
  459. }
  460. // @Title 删除图表检测接口
  461. // @Description 删除图表检测接口
  462. // @Param request body data_manage.ChartClassifyDeleteCheckResp true "type json string"
  463. // @Success 200 Ret=200 检测成功
  464. // @router /chart_classify/delete/check [post]
  465. func (this *ChartClassifyController) DeleteChartClassifyCheck() {
  466. br := new(models.BaseResponse).Init()
  467. defer func() {
  468. this.Data["json"] = br
  469. this.ServeJSON()
  470. }()
  471. var req data_manage.ChartClassifyDeleteCheckReq
  472. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  473. if err != nil {
  474. br.Msg = "参数解析异常!"
  475. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  476. return
  477. }
  478. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  479. br.Msg = "参数错误"
  480. br.IsSendEmail = false
  481. return
  482. }
  483. var deleteStatus int
  484. var tipsMsg string
  485. //删除分类
  486. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  487. // 查找分类
  488. item, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
  489. if err != nil {
  490. br.Msg = "保存失败"
  491. br.Msg = "获取分类信息失败,Err:" + err.Error()
  492. return
  493. }
  494. // 权限校验
  495. {
  496. button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
  497. if !button.OpButton {
  498. br.Msg = "无操作权限"
  499. br.IsSendEmail = false
  500. return
  501. }
  502. }
  503. //判断图表分类下,是否含有图表
  504. count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  505. if err != nil {
  506. br.Msg = "删除失败"
  507. br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  508. return
  509. }
  510. if count > 0 {
  511. deleteStatus = 1
  512. tipsMsg = "该分类下关联图表不可删除"
  513. }
  514. }
  515. if deleteStatus != 1 && req.ChartInfoId == 0 {
  516. classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
  517. if err != nil && err.Error() != utils.ErrNoRow() {
  518. br.Msg = "删除失败"
  519. br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
  520. return
  521. }
  522. if classifyCount > 0 {
  523. deleteStatus = 2
  524. tipsMsg = "确认删除当前目录及包含的子目录吗"
  525. }
  526. }
  527. if deleteStatus == 0 {
  528. tipsMsg = "可删除,进行删除操作"
  529. }
  530. resp := new(data_manage.ChartClassifyDeleteCheckResp)
  531. resp.DeleteStatus = deleteStatus
  532. resp.TipsMsg = tipsMsg
  533. br.Ret = 200
  534. br.Msg = "检测成功"
  535. br.Success = true
  536. br.Data = resp
  537. }
  538. // @Title 删除图表分类/图表
  539. // @Description 删除图表分类/图表接口
  540. // @Param request body data_manage.DeleteChartClassifyReq true "type json string"
  541. // @Success 200 Ret=200 删除成功
  542. // @router /chart_classify/delete [post]
  543. func (this *ChartClassifyController) DeleteChartClassify() {
  544. br := new(models.BaseResponse).Init()
  545. defer func() {
  546. this.Data["json"] = br
  547. this.ServeJSON()
  548. }()
  549. sysUser := this.SysUser
  550. if sysUser == nil {
  551. br.Msg = "请登录"
  552. br.ErrMsg = "请登录,SysUser Is Empty"
  553. br.Ret = 408
  554. return
  555. }
  556. var req data_manage.DeleteChartClassifyReq
  557. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  558. if err != nil {
  559. br.Msg = "参数解析异常!"
  560. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  561. return
  562. }
  563. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  564. br.Msg = "参数错误"
  565. br.IsSendEmail = false
  566. return
  567. }
  568. //删除分类
  569. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  570. // 查找分类
  571. item, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
  572. if err != nil {
  573. br.Msg = "保存失败"
  574. br.Msg = "获取分类信息失败,Err:" + err.Error()
  575. return
  576. }
  577. // 权限校验
  578. {
  579. button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
  580. if !button.OpButton {
  581. br.Msg = "无操作权限"
  582. br.IsSendEmail = false
  583. return
  584. }
  585. }
  586. //判断是否含有指标
  587. count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  588. if err != nil && err.Error() != utils.ErrNoRow() {
  589. br.Msg = "删除失败"
  590. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  591. return
  592. }
  593. if count > 0 {
  594. br.Msg = "该目录下存在关联指标,不可删除"
  595. br.IsSendEmail = false
  596. return
  597. }
  598. err = data_manage.DeleteChartClassify(req.ChartClassifyId)
  599. if err != nil {
  600. br.Msg = "删除失败"
  601. br.ErrMsg = "删除失败,Err:" + err.Error()
  602. return
  603. }
  604. }
  605. resp := new(data_manage.AddChartInfoResp)
  606. //删除图表
  607. if req.ChartInfoId > 0 {
  608. chartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
  609. if err != nil {
  610. if err.Error() == utils.ErrNoRow() {
  611. br.Msg = "图表已删除,请刷新页面"
  612. br.ErrMsg = "指标不存在,Err:" + err.Error()
  613. return
  614. } else {
  615. br.Msg = "删除失败"
  616. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  617. return
  618. }
  619. }
  620. if chartInfo == nil {
  621. br.Msg = "图表已删除,请刷新页面"
  622. return
  623. }
  624. //图表操作权限
  625. ok := data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
  626. if !ok {
  627. br.Msg = "没有该图表的操作权限"
  628. br.ErrMsg = "没有该图表的操作权限"
  629. return
  630. }
  631. // 获取引用该图表的MyCharts, 用于ES删除
  632. var myCond string
  633. var myPars []interface{}
  634. myCond += ` AND a.chart_info_id = ? `
  635. myPars = append(myPars, req.ChartInfoId)
  636. myCharts, e := data_manage.GetMyChartListGroupByCharyInfoIdAndAdminIdByCondition(myCond, myPars)
  637. if e != nil {
  638. br.Msg = "删除失败"
  639. br.ErrMsg = "获取引用图表的MyChats失败, Err: " + e.Error()
  640. return
  641. }
  642. myIds := make([]int, 0)
  643. for _, m := range myCharts {
  644. myIds = append(myIds, m.MyChartId)
  645. }
  646. //删除图表及关联指标
  647. err = data_manage.DeleteChartInfoAndData(req.ChartInfoId)
  648. if err != nil {
  649. br.Msg = "删除失败"
  650. br.ErrMsg = "删除失败,Err:" + err.Error()
  651. return
  652. }
  653. //删除ES
  654. {
  655. go data.EsDeleteChartInfo(req.ChartInfoId)
  656. // 删除MY ETA 图表 es数据
  657. //go data.EsDeleteMyChartInfoByChartInfoId(req.ChartInfoId)
  658. go data.EsDeleteMyChartInfoByMyChartIds(myIds)
  659. }
  660. var condition string
  661. var pars []interface{}
  662. condition += " AND chart_classify_id=? AND source = ? "
  663. pars = append(pars, chartInfo.ChartClassifyId, utils.CHART_SOURCE_DEFAULT)
  664. condition += " AND chart_info_id>? ORDER BY create_time ASC LIMIT 1 "
  665. pars = append(pars, req.ChartInfoId)
  666. nextItem, err := data_manage.GetChartInfoByCondition(condition, pars)
  667. if err != nil && err.Error() != utils.ErrNoRow() {
  668. br.Msg = "删除失败"
  669. br.ErrMsg = "获取下一级图库信息失败,Err:" + err.Error()
  670. return
  671. }
  672. if nextItem != nil {
  673. resp.UniqueCode = nextItem.UniqueCode
  674. resp.ChartInfoId = nextItem.ChartInfoId
  675. } else {
  676. var condition string
  677. var pars []interface{}
  678. condition += " AND level=3 "
  679. //pars = append(pars, chartInfo.ChartClassifyId)
  680. condition += " AND chart_classify_id>? ORDER BY chart_classify_id ASC LIMIT 1 "
  681. pars = append(pars, chartInfo.ChartClassifyId)
  682. classifyItem, err := data_manage.GetChartClassifyByCondition(condition, pars)
  683. if err != nil && err.Error() != utils.ErrNoRow() {
  684. br.Msg = "删除失败"
  685. br.ErrMsg = "获取下一级图库分类信息失败,Err:" + err.Error()
  686. return
  687. }
  688. if classifyItem != nil {
  689. nextItem, err = data_manage.GetNextChartInfo(chartInfo.ChartClassifyId)
  690. if err != nil && err.Error() != utils.ErrNoRow() {
  691. br.Msg = "删除失败"
  692. br.ErrMsg = "获取下一级图库信息失败,Err:" + err.Error()
  693. return
  694. }
  695. if nextItem != nil {
  696. resp.UniqueCode = nextItem.UniqueCode
  697. resp.ChartInfoId = nextItem.ChartInfoId
  698. }
  699. }
  700. }
  701. //新增操作日志
  702. {
  703. chartLog := new(data_manage.ChartInfoLog)
  704. chartLog.ChartName = chartInfo.ChartName
  705. chartLog.ChartInfoId = req.ChartInfoId
  706. chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  707. chartLog.SysUserId = sysUser.AdminId
  708. chartLog.SysUserRealName = sysUser.RealName
  709. chartLog.UniqueCode = chartInfo.UniqueCode
  710. chartLog.CreateTime = time.Now()
  711. chartLog.Content = string(this.Ctx.Input.RequestBody)
  712. chartLog.Status = "删除图表"
  713. chartLog.Method = this.Ctx.Input.URI()
  714. go data_manage.AddChartInfoLog(chartLog)
  715. }
  716. }
  717. br.Ret = 200
  718. br.Msg = "删除成功"
  719. br.Success = true
  720. br.Data = resp
  721. br.IsAddLog = true
  722. }
  723. // ChartClassifyMove
  724. // @Title 图表分类移动接口
  725. // @Description 图表分类移动接口
  726. // @Success 200 {object} data_manage.MoveChartClassifyReq
  727. // @router /chart_classify/move [post]
  728. func (this *ChartClassifyController) ChartClassifyMove() {
  729. br := new(models.BaseResponse).Init()
  730. defer func() {
  731. this.Data["json"] = br
  732. this.ServeJSON()
  733. }()
  734. sysUser := this.SysUser
  735. if sysUser == nil {
  736. br.Msg = "请登录"
  737. br.ErrMsg = "请登录,SysUser Is Empty"
  738. br.Ret = 408
  739. return
  740. }
  741. var req data_manage.MoveChartClassifyReq
  742. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  743. if err != nil {
  744. br.Msg = "参数解析异常!"
  745. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  746. return
  747. }
  748. if req.ClassifyId <= 0 {
  749. br.Msg = "参数错误"
  750. br.ErrMsg = "分类id小于等于0"
  751. return
  752. }
  753. //判断分类是否存在
  754. chartClassifyInfo, err := data_manage.GetChartClassifyById(req.ClassifyId)
  755. if err != nil {
  756. br.Msg = "移动失败"
  757. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  758. return
  759. }
  760. // 权限校验
  761. {
  762. button := data.GetChartClassifyOpButton(this.SysUser, chartClassifyInfo.SysUserId)
  763. if !button.OpButton {
  764. br.Msg = "无操作权限"
  765. br.IsSendEmail = false
  766. return
  767. }
  768. }
  769. if chartClassifyInfo.Source != utils.CHART_SOURCE_DEFAULT {
  770. br.Msg = "分类异常"
  771. br.ErrMsg = "分类异常,不是ETA图库的分类"
  772. return
  773. }
  774. updateCol := make([]string, 0)
  775. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  776. if chartClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  777. parentChartClassifyInfo, err := data_manage.GetChartClassifyById(req.ParentClassifyId)
  778. if err != nil {
  779. br.Msg = "移动失败"
  780. br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  781. return
  782. }
  783. chartClassifyInfo.ParentId = parentChartClassifyInfo.ChartClassifyId
  784. chartClassifyInfo.Level = parentChartClassifyInfo.Level + 1
  785. chartClassifyInfo.ModifyTime = time.Now()
  786. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  787. }
  788. //如果有传入 上一个兄弟节点分类id
  789. if req.PrevClassifyId > 0 {
  790. //上一个兄弟节点
  791. prevClassify, err := data_manage.GetChartClassifyById(req.PrevClassifyId)
  792. if err != nil {
  793. br.Msg = "移动失败"
  794. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  795. return
  796. }
  797. //如果是移动在两个兄弟节点之间
  798. if req.NextClassifyId > 0 {
  799. //下一个兄弟节点
  800. nextClassify, err := data_manage.GetChartClassifyById(req.NextClassifyId)
  801. if err != nil {
  802. br.Msg = "移动失败"
  803. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  804. return
  805. }
  806. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  807. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == chartClassifyInfo.Sort {
  808. //变更兄弟节点的排序
  809. updateSortStr := `sort + 2`
  810. _ = data_manage.UpdateChartClassifySortByParentId(prevClassify.ParentId, prevClassify.ChartClassifyId, prevClassify.Sort, updateSortStr)
  811. } else {
  812. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  813. if nextClassify.Sort-prevClassify.Sort == 1 {
  814. //变更兄弟节点的排序
  815. updateSortStr := `sort + 1`
  816. _ = data_manage.UpdateChartClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  817. }
  818. }
  819. }
  820. chartClassifyInfo.Sort = prevClassify.Sort + 1
  821. chartClassifyInfo.ModifyTime = time.Now()
  822. updateCol = append(updateCol, "Sort", "ModifyTime")
  823. } else {
  824. firstClassify, err := data_manage.GetFirstChartClassifyByParentId(chartClassifyInfo.ParentId)
  825. if err != nil && err.Error() != utils.ErrNoRow() {
  826. br.Msg = "移动失败"
  827. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  828. return
  829. }
  830. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  831. if firstClassify != nil && firstClassify.Sort == 0 {
  832. updateSortStr := ` sort + 1 `
  833. _ = data_manage.UpdateChartClassifySortByParentId(firstClassify.ParentId, firstClassify.ChartClassifyId-1, 0, updateSortStr)
  834. }
  835. chartClassifyInfo.Sort = 0 //那就是排在第一位
  836. chartClassifyInfo.ModifyTime = time.Now()
  837. updateCol = append(updateCol, "Sort", "ModifyTime")
  838. }
  839. //更新
  840. if len(updateCol) > 0 {
  841. err = chartClassifyInfo.Update(updateCol)
  842. if err != nil {
  843. br.Msg = "移动失败"
  844. br.ErrMsg = "修改失败,Err:" + err.Error()
  845. return
  846. }
  847. }
  848. br.Ret = 200
  849. br.Success = true
  850. br.Msg = "移动成功"
  851. }
  852. // getChartClassifyListForMe 获取我创建的图表分类
  853. func getChartClassifyListForMeV2(adminInfo system.Admin, resp *data_manage.ChartClassifyListResp) (errMsg string, err error) {
  854. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  855. if err != nil && err.Error() != utils.ErrNoRow() {
  856. errMsg = "获取失败"
  857. return
  858. }
  859. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  860. if err != nil && err.Error() != utils.ErrNoRow() {
  861. errMsg = "获取失败"
  862. return
  863. }
  864. rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
  865. for _, v := range classifyAll {
  866. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  867. }
  868. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  869. for _, v := range rootList {
  870. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  871. v.Children = existItems
  872. } else {
  873. items := make([]*data_manage.ChartClassifyItems, 0)
  874. v.Children = items
  875. }
  876. nodeAll = append(nodeAll, v)
  877. }
  878. resp.AllNodes = nodeAll
  879. return
  880. }
  881. // ChartClassifyChartListV2
  882. // @Title 根据图表分类获取图表列表
  883. // @Description 根据图表分类获取图表列表接口
  884. // @Param IsShowMe query bool true "是否只看我的,true、false"
  885. // @Param ChartClassifyId query bool true "图片分类id"
  886. // @Success 200 {object} data_manage.ChartClassifyListResp
  887. // @router /chart_classify/chart/list [get]
  888. func (this *ChartClassifyController) ChartClassifyChartListV2() {
  889. br := new(models.BaseResponse).Init()
  890. defer func() {
  891. this.Data["json"] = br
  892. this.ServeJSON()
  893. }()
  894. sysUser := this.SysUser
  895. if sysUser == nil {
  896. br.Msg = "请登录"
  897. br.ErrMsg = "请登录,SysUser Is Empty"
  898. br.Ret = 408
  899. return
  900. }
  901. resp := new(data_manage.ChartClassifyListResp)
  902. chartClassifyId, _ := this.GetInt("ChartClassifyId")
  903. if chartClassifyId <= 0 {
  904. br.Msg = "参数错误"
  905. return
  906. }
  907. // 获取当前账号的不可见指标
  908. noPermissionChartIdMap := make(map[int]bool)
  909. {
  910. obj := data_manage.EdbInfoNoPermissionAdmin{}
  911. confList, err := obj.GetAllChartListByAdminId(this.SysUser.AdminId)
  912. if err != nil && err.Error() != utils.ErrNoRow() {
  913. br.Msg = "获取失败"
  914. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  915. return
  916. }
  917. for _, v := range confList {
  918. noPermissionChartIdMap[v.ChartInfoId] = true
  919. }
  920. }
  921. isShowMe, _ := this.GetBool("IsShowMe")
  922. if isShowMe {
  923. allChartInfo, err := data_manage.GetChartInfoByAdminIdAndClassify([]int{utils.CHART_SOURCE_DEFAULT}, sysUser.AdminId, chartClassifyId)
  924. if err != nil && err.Error() != utils.ErrNoRow() {
  925. br.Msg = "获取失败"
  926. br.ErrMsg = "获取全部数据失败,Err:" + err.Error()
  927. return
  928. }
  929. // 移除没有权限的图表
  930. allNodes := handleNoPermissionChart(allChartInfo, noPermissionChartIdMap)
  931. resp.AllNodes = allNodes
  932. br.Ret = 200
  933. br.Success = true
  934. br.Msg = "获取成功"
  935. br.Data = resp
  936. fmt.Println("source my classify")
  937. return
  938. }
  939. allChartInfo, err := data_manage.GetChartInfoAllByClassifyId(utils.CHART_SOURCE_DEFAULT, chartClassifyId)
  940. if err != nil && err.Error() != utils.ErrNoRow() {
  941. br.Msg = "获取失败"
  942. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  943. return
  944. }
  945. // 移除没有权限的图表
  946. allNodes := handleNoPermissionChart(allChartInfo, noPermissionChartIdMap)
  947. for k, item := range allNodes {
  948. item.Button = data.GetChartOpButton(this.SysUser, item.SysUserId)
  949. allNodes[k] = item
  950. }
  951. resp.AllNodes = allNodes
  952. br.Ret = 200
  953. br.Success = true
  954. br.Msg = "获取成功"
  955. br.Data = resp
  956. }