chart_classify.go 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. "eta/eta_api/models/system"
  8. "eta/eta_api/services/data"
  9. "eta/eta_api/utils"
  10. "fmt"
  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. // ChartClassifyItems
  273. // @Title 获取所有图表分类接口-不包含图表
  274. // @Description 获取所有图表分类接口-不包含图表
  275. // @Success 200 {object} data_manage.ChartClassifyListResp
  276. // @router /chart_classify/items [get]
  277. func (this *ChartClassifyController) ChartClassifyItems() {
  278. br := new(models.BaseResponse).Init()
  279. defer func() {
  280. this.Data["json"] = br
  281. this.ServeJSON()
  282. }()
  283. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  284. if err != nil {
  285. br.Msg = "获取失败"
  286. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  287. return
  288. }
  289. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  290. if err != nil {
  291. br.Msg = "获取失败"
  292. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  293. return
  294. }
  295. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  296. for k := range rootList {
  297. rootNode := rootList[k]
  298. data.ChartClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode)
  299. nodeAll = append(nodeAll, rootNode)
  300. }
  301. language := `CN`
  302. // 指标显示的语言
  303. {
  304. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.ChartLanguageVar)
  305. if configDetail != nil {
  306. language = configDetail.ConfigValue
  307. } else {
  308. configDetail, _ = system.GetDefaultConfigDetailByCode(system.ChartLanguageVar)
  309. if configDetail != nil {
  310. language = configDetail.ConfigValue
  311. }
  312. }
  313. }
  314. // 是否允许添加分类
  315. canOpClassify := true
  316. // 如果不是 超管 或者 ficc管理员 或者 ficc研究员,那么就没有权限
  317. //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) {
  318. // canOpClassify = false
  319. //}
  320. resp := data_manage.ChartClassifyListResp{
  321. AllNodes: nodeAll,
  322. Language: language,
  323. CanOpClassify: canOpClassify,
  324. }
  325. br.Ret = 200
  326. br.Success = true
  327. br.Msg = "获取成功"
  328. br.Data = resp
  329. }
  330. // @Title 新增图表分类
  331. // @Description 新增图表分类接口
  332. // @Param request body data_manage.AddChartClassifyReq true "type json string"
  333. // @Success 200 Ret=200 保存成功
  334. // @router /chart_classify/add [post]
  335. func (this *ChartClassifyController) AddChartClassify() {
  336. br := new(models.BaseResponse).Init()
  337. defer func() {
  338. this.Data["json"] = br
  339. this.ServeJSON()
  340. }()
  341. var req data_manage.AddChartClassifyReq
  342. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  343. if err != nil {
  344. br.Msg = "参数解析异常!"
  345. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  346. return
  347. }
  348. if req.ChartClassifyName == "" {
  349. br.Msg = "请输入分类名称"
  350. br.IsSendEmail = false
  351. return
  352. }
  353. if req.ParentId < 0 {
  354. br.Msg = "参数错误"
  355. br.IsSendEmail = false
  356. return
  357. }
  358. count, err := data_manage.GetChartClassifyCount(req.ChartClassifyName, req.ParentId, utils.CHART_SOURCE_DEFAULT)
  359. if err != nil {
  360. br.Msg = "判断名称是否已存在失败"
  361. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  362. return
  363. }
  364. if count > 0 {
  365. br.Msg = "分类名称已存在,请重新输入"
  366. br.IsSendEmail = false
  367. return
  368. }
  369. //获取该层级下最大的排序数
  370. maxSort, err := data_manage.GetChartClassifyMaxSort(req.ParentId, utils.CHART_SOURCE_DEFAULT)
  371. classify := new(data_manage.ChartClassify)
  372. classify.ParentId = req.ParentId
  373. classify.ChartClassifyName = req.ChartClassifyName
  374. classify.HasData = 0
  375. classify.CreateTime = time.Now()
  376. classify.ModifyTime = time.Now()
  377. classify.SysUserId = this.SysUser.AdminId
  378. classify.SysUserRealName = this.SysUser.RealName
  379. classify.Level = req.Level + 1
  380. timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  381. classify.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  382. classify.Sort = maxSort + 1
  383. classify.Source = utils.CHART_SOURCE_DEFAULT
  384. _, err = data_manage.AddChartClassify(classify)
  385. if err != nil {
  386. br.Msg = "保存分类失败"
  387. br.ErrMsg = "保存分类失败,Err:" + err.Error()
  388. return
  389. }
  390. br.Ret = 200
  391. br.Msg = "保存成功"
  392. br.Success = true
  393. }
  394. // @Title 修改图表分类
  395. // @Description 修改图表分类接口
  396. // @Param request body data_manage.EditChartClassifyReq true "type json string"
  397. // @Success 200 Ret=200 修改成功
  398. // @router /chart_classify/edit [post]
  399. func (this *ChartClassifyController) EditChartClassify() {
  400. br := new(models.BaseResponse).Init()
  401. defer func() {
  402. this.Data["json"] = br
  403. this.ServeJSON()
  404. }()
  405. var req data_manage.EditChartClassifyReq
  406. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  407. if err != nil {
  408. br.Msg = "参数解析异常!"
  409. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  410. return
  411. }
  412. if req.ChartClassifyName == "" {
  413. br.Msg = "请输入分类名称"
  414. br.IsSendEmail = false
  415. return
  416. }
  417. if req.ChartClassifyId <= 0 {
  418. br.Msg = "参数错误"
  419. br.IsSendEmail = false
  420. return
  421. }
  422. item, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
  423. if err != nil {
  424. br.Msg = "保存失败"
  425. br.Msg = "获取分类信息失败,Err:" + err.Error()
  426. return
  427. }
  428. // 权限校验
  429. {
  430. button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
  431. if !button.OpButton {
  432. br.Msg = "无操作权限"
  433. br.IsSendEmail = false
  434. return
  435. }
  436. }
  437. if item.ChartClassifyName != req.ChartClassifyName {
  438. count, err := data_manage.GetChartClassifyCount(req.ChartClassifyName, item.ParentId, utils.CHART_SOURCE_DEFAULT)
  439. if err != nil {
  440. br.Msg = "判断名称是否已存在失败"
  441. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  442. return
  443. }
  444. if count > 0 {
  445. br.Msg = "分类名称已存在,请重新输入"
  446. br.IsSendEmail = false
  447. return
  448. }
  449. err = data_manage.EditChartClassify(req.ChartClassifyId, utils.CHART_SOURCE_DEFAULT, req.ChartClassifyName)
  450. if err != nil {
  451. br.Msg = "保存失败"
  452. br.ErrMsg = "保存失败,Err:" + err.Error()
  453. return
  454. }
  455. }
  456. br.Ret = 200
  457. br.Msg = "保存成功"
  458. br.Success = true
  459. br.IsAddLog = true
  460. }
  461. // @Title 删除图表检测接口
  462. // @Description 删除图表检测接口
  463. // @Param request body data_manage.ChartClassifyDeleteCheckResp true "type json string"
  464. // @Success 200 Ret=200 检测成功
  465. // @router /chart_classify/delete/check [post]
  466. func (this *ChartClassifyController) DeleteChartClassifyCheck() {
  467. br := new(models.BaseResponse).Init()
  468. defer func() {
  469. this.Data["json"] = br
  470. this.ServeJSON()
  471. }()
  472. var req data_manage.ChartClassifyDeleteCheckReq
  473. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  474. if err != nil {
  475. br.Msg = "参数解析异常!"
  476. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  477. return
  478. }
  479. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  480. br.Msg = "参数错误"
  481. br.IsSendEmail = false
  482. return
  483. }
  484. var deleteStatus int
  485. var tipsMsg string
  486. //删除分类
  487. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  488. // 查找分类
  489. item, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
  490. if err != nil {
  491. br.Msg = "保存失败"
  492. br.Msg = "获取分类信息失败,Err:" + err.Error()
  493. return
  494. }
  495. // 权限校验
  496. {
  497. button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
  498. if !button.OpButton {
  499. br.Msg = "无操作权限"
  500. br.IsSendEmail = false
  501. return
  502. }
  503. }
  504. //判断图表分类下,是否含有图表
  505. count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  506. if err != nil {
  507. br.Msg = "删除失败"
  508. br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  509. return
  510. }
  511. if count > 0 {
  512. deleteStatus = 1
  513. tipsMsg = "该分类下关联图表不可删除"
  514. }
  515. }
  516. if deleteStatus != 1 && req.ChartInfoId == 0 {
  517. classifyCount, err := data_manage.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
  518. if err != nil && err.Error() != utils.ErrNoRow() {
  519. br.Msg = "删除失败"
  520. br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
  521. return
  522. }
  523. if classifyCount > 0 {
  524. deleteStatus = 2
  525. tipsMsg = "确认删除当前目录及包含的子目录吗"
  526. }
  527. }
  528. if deleteStatus == 0 {
  529. tipsMsg = "可删除,进行删除操作"
  530. }
  531. resp := new(data_manage.ChartClassifyDeleteCheckResp)
  532. resp.DeleteStatus = deleteStatus
  533. resp.TipsMsg = tipsMsg
  534. br.Ret = 200
  535. br.Msg = "检测成功"
  536. br.Success = true
  537. br.Data = resp
  538. }
  539. // @Title 删除图表分类/图表
  540. // @Description 删除图表分类/图表接口
  541. // @Param request body data_manage.DeleteChartClassifyReq true "type json string"
  542. // @Success 200 Ret=200 删除成功
  543. // @router /chart_classify/delete [post]
  544. func (this *ChartClassifyController) DeleteChartClassify() {
  545. br := new(models.BaseResponse).Init()
  546. defer func() {
  547. this.Data["json"] = br
  548. this.ServeJSON()
  549. }()
  550. sysUser := this.SysUser
  551. if sysUser == nil {
  552. br.Msg = "请登录"
  553. br.ErrMsg = "请登录,SysUser Is Empty"
  554. br.Ret = 408
  555. return
  556. }
  557. var req data_manage.DeleteChartClassifyReq
  558. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  559. if err != nil {
  560. br.Msg = "参数解析异常!"
  561. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  562. return
  563. }
  564. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  565. br.Msg = "参数错误"
  566. br.IsSendEmail = false
  567. return
  568. }
  569. //删除分类
  570. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  571. // 查找分类
  572. item, err := data_manage.GetChartClassifyById(req.ChartClassifyId)
  573. if err != nil {
  574. br.Msg = "保存失败"
  575. br.Msg = "获取分类信息失败,Err:" + err.Error()
  576. return
  577. }
  578. // 权限校验
  579. {
  580. button := data.GetChartClassifyOpButton(this.SysUser, item.SysUserId)
  581. if !button.OpButton {
  582. br.Msg = "无操作权限"
  583. br.IsSendEmail = false
  584. return
  585. }
  586. }
  587. //判断是否含有指标
  588. count, err := data_manage.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  589. if err != nil && err.Error() != utils.ErrNoRow() {
  590. br.Msg = "删除失败"
  591. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  592. return
  593. }
  594. if count > 0 {
  595. br.Msg = "该目录下存在关联指标,不可删除"
  596. br.IsSendEmail = false
  597. return
  598. }
  599. err = data_manage.DeleteChartClassify(req.ChartClassifyId)
  600. if err != nil {
  601. br.Msg = "删除失败"
  602. br.ErrMsg = "删除失败,Err:" + err.Error()
  603. return
  604. }
  605. }
  606. resp := new(data_manage.AddChartInfoResp)
  607. //删除图表
  608. if req.ChartInfoId > 0 {
  609. chartInfo, err := data_manage.GetChartInfoById(req.ChartInfoId)
  610. if err != nil {
  611. if err.Error() == utils.ErrNoRow() {
  612. br.Msg = "图表已删除,请刷新页面"
  613. br.ErrMsg = "指标不存在,Err:" + err.Error()
  614. return
  615. } else {
  616. br.Msg = "删除失败"
  617. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  618. return
  619. }
  620. }
  621. if chartInfo == nil {
  622. br.Msg = "图表已删除,请刷新页面"
  623. return
  624. }
  625. //图表操作权限
  626. ok := data.CheckOpChartPermission(sysUser, chartInfo.SysUserId)
  627. if !ok {
  628. br.Msg = "没有该图表的操作权限"
  629. br.ErrMsg = "没有该图表的操作权限"
  630. return
  631. }
  632. // 获取引用该图表的MyCharts, 用于ES删除
  633. var myCond string
  634. var myPars []interface{}
  635. myCond += ` AND a.chart_info_id = ? `
  636. myPars = append(myPars, req.ChartInfoId)
  637. myCharts, e := data_manage.GetMyChartListGroupByCharyInfoIdAndAdminIdByCondition(myCond, myPars)
  638. if e != nil {
  639. br.Msg = "删除失败"
  640. br.ErrMsg = "获取引用图表的MyChats失败, Err: " + e.Error()
  641. return
  642. }
  643. myIds := make([]int, 0)
  644. for _, m := range myCharts {
  645. myIds = append(myIds, m.MyChartId)
  646. }
  647. //删除图表及关联指标
  648. err = data_manage.DeleteChartInfoAndData(req.ChartInfoId)
  649. if err != nil {
  650. br.Msg = "删除失败"
  651. br.ErrMsg = "删除失败,Err:" + err.Error()
  652. return
  653. }
  654. //删除ES
  655. {
  656. go data.EsDeleteChartInfo(req.ChartInfoId)
  657. // 删除MY ETA 图表 es数据
  658. //go data.EsDeleteMyChartInfoByChartInfoId(req.ChartInfoId)
  659. go data.EsDeleteMyChartInfoByMyChartIds(myIds)
  660. }
  661. var condition string
  662. var pars []interface{}
  663. condition += " AND chart_classify_id=? AND source = ? "
  664. pars = append(pars, chartInfo.ChartClassifyId, utils.CHART_SOURCE_DEFAULT)
  665. condition += " AND chart_info_id>? ORDER BY create_time ASC LIMIT 1 "
  666. pars = append(pars, req.ChartInfoId)
  667. nextItem, err := data_manage.GetChartInfoByCondition(condition, pars)
  668. if err != nil && err.Error() != utils.ErrNoRow() {
  669. br.Msg = "删除失败"
  670. br.ErrMsg = "获取下一级图库信息失败,Err:" + err.Error()
  671. return
  672. }
  673. if nextItem != nil {
  674. resp.UniqueCode = nextItem.UniqueCode
  675. resp.ChartInfoId = nextItem.ChartInfoId
  676. } else {
  677. var condition string
  678. var pars []interface{}
  679. condition += " AND level=3 "
  680. //pars = append(pars, chartInfo.ChartClassifyId)
  681. condition += " AND chart_classify_id>? ORDER BY chart_classify_id ASC LIMIT 1 "
  682. pars = append(pars, chartInfo.ChartClassifyId)
  683. classifyItem, err := data_manage.GetChartClassifyByCondition(condition, pars)
  684. if err != nil && err.Error() != utils.ErrNoRow() {
  685. br.Msg = "删除失败"
  686. br.ErrMsg = "获取下一级图库分类信息失败,Err:" + err.Error()
  687. return
  688. }
  689. if classifyItem != nil {
  690. nextItem, err = data_manage.GetNextChartInfo(chartInfo.ChartClassifyId)
  691. if err != nil && err.Error() != utils.ErrNoRow() {
  692. br.Msg = "删除失败"
  693. br.ErrMsg = "获取下一级图库信息失败,Err:" + err.Error()
  694. return
  695. }
  696. if nextItem != nil {
  697. resp.UniqueCode = nextItem.UniqueCode
  698. resp.ChartInfoId = nextItem.ChartInfoId
  699. }
  700. }
  701. }
  702. //新增操作日志
  703. {
  704. chartLog := new(data_manage.ChartInfoLog)
  705. chartLog.ChartName = chartInfo.ChartName
  706. chartLog.ChartInfoId = req.ChartInfoId
  707. chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  708. chartLog.SysUserId = sysUser.AdminId
  709. chartLog.SysUserRealName = sysUser.RealName
  710. chartLog.UniqueCode = chartInfo.UniqueCode
  711. chartLog.CreateTime = time.Now()
  712. chartLog.Content = string(this.Ctx.Input.RequestBody)
  713. chartLog.Status = "删除图表"
  714. chartLog.Method = this.Ctx.Input.URI()
  715. go data_manage.AddChartInfoLog(chartLog)
  716. }
  717. }
  718. br.Ret = 200
  719. br.Msg = "删除成功"
  720. br.Success = true
  721. br.Data = resp
  722. br.IsAddLog = true
  723. }
  724. // ChartClassifyMove
  725. // @Title 图表分类移动接口
  726. // @Description 图表分类移动接口
  727. // @Success 200 {object} data_manage.MoveChartClassifyReq
  728. // @router /chart_classify/move [post]
  729. func (this *ChartClassifyController) ChartClassifyMove() {
  730. br := new(models.BaseResponse).Init()
  731. defer func() {
  732. this.Data["json"] = br
  733. this.ServeJSON()
  734. }()
  735. sysUser := this.SysUser
  736. if sysUser == nil {
  737. br.Msg = "请登录"
  738. br.ErrMsg = "请登录,SysUser Is Empty"
  739. br.Ret = 408
  740. return
  741. }
  742. var req data_manage.MoveChartClassifyReq
  743. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  744. if err != nil {
  745. br.Msg = "参数解析异常!"
  746. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  747. return
  748. }
  749. if req.ClassifyId <= 0 {
  750. br.Msg = "参数错误"
  751. br.ErrMsg = "分类id小于等于0"
  752. return
  753. }
  754. //判断分类是否存在
  755. chartClassifyInfo, err := data_manage.GetChartClassifyById(req.ClassifyId)
  756. if err != nil {
  757. br.Msg = "移动失败"
  758. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  759. return
  760. }
  761. // 权限校验
  762. {
  763. button := data.GetChartClassifyOpButton(this.SysUser, chartClassifyInfo.SysUserId)
  764. if !button.OpButton {
  765. br.Msg = "无操作权限"
  766. br.IsSendEmail = false
  767. return
  768. }
  769. }
  770. if chartClassifyInfo.Source != utils.CHART_SOURCE_DEFAULT {
  771. br.Msg = "分类异常"
  772. br.ErrMsg = "分类异常,不是ETA图库的分类"
  773. return
  774. }
  775. updateCol := make([]string, 0)
  776. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  777. if chartClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  778. parentChartClassifyInfo, err := data_manage.GetChartClassifyById(req.ParentClassifyId)
  779. if err != nil {
  780. br.Msg = "移动失败"
  781. br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  782. return
  783. }
  784. chartClassifyInfo.ParentId = parentChartClassifyInfo.ChartClassifyId
  785. chartClassifyInfo.Level = parentChartClassifyInfo.Level + 1
  786. chartClassifyInfo.ModifyTime = time.Now()
  787. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  788. }
  789. //如果有传入 上一个兄弟节点分类id
  790. if req.PrevClassifyId > 0 {
  791. //上一个兄弟节点
  792. prevClassify, err := data_manage.GetChartClassifyById(req.PrevClassifyId)
  793. if err != nil {
  794. br.Msg = "移动失败"
  795. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  796. return
  797. }
  798. //如果是移动在两个兄弟节点之间
  799. if req.NextClassifyId > 0 {
  800. //下一个兄弟节点
  801. nextClassify, err := data_manage.GetChartClassifyById(req.NextClassifyId)
  802. if err != nil {
  803. br.Msg = "移动失败"
  804. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  805. return
  806. }
  807. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  808. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == chartClassifyInfo.Sort {
  809. //变更兄弟节点的排序
  810. updateSortStr := `sort + 2`
  811. _ = data_manage.UpdateChartClassifySortByParentId(prevClassify.ParentId, prevClassify.ChartClassifyId, prevClassify.Sort, updateSortStr)
  812. } else {
  813. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  814. if nextClassify.Sort-prevClassify.Sort == 1 {
  815. //变更兄弟节点的排序
  816. updateSortStr := `sort + 1`
  817. _ = data_manage.UpdateChartClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  818. }
  819. }
  820. }
  821. chartClassifyInfo.Sort = prevClassify.Sort + 1
  822. chartClassifyInfo.ModifyTime = time.Now()
  823. updateCol = append(updateCol, "Sort", "ModifyTime")
  824. } else {
  825. firstClassify, err := data_manage.GetFirstChartClassifyByParentId(chartClassifyInfo.ParentId)
  826. if err != nil && err.Error() != utils.ErrNoRow() {
  827. br.Msg = "移动失败"
  828. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  829. return
  830. }
  831. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  832. if firstClassify != nil && firstClassify.Sort == 0 {
  833. updateSortStr := ` sort + 1 `
  834. _ = data_manage.UpdateChartClassifySortByParentId(firstClassify.ParentId, firstClassify.ChartClassifyId-1, 0, updateSortStr)
  835. }
  836. chartClassifyInfo.Sort = 0 //那就是排在第一位
  837. chartClassifyInfo.ModifyTime = time.Now()
  838. updateCol = append(updateCol, "Sort", "ModifyTime")
  839. }
  840. //更新
  841. if len(updateCol) > 0 {
  842. err = chartClassifyInfo.Update(updateCol)
  843. if err != nil {
  844. br.Msg = "移动失败"
  845. br.ErrMsg = "修改失败,Err:" + err.Error()
  846. return
  847. }
  848. }
  849. br.Ret = 200
  850. br.Success = true
  851. br.Msg = "移动成功"
  852. }
  853. // getChartClassifyListForMe 获取我创建的图表分类
  854. func getChartClassifyListForMeV2(adminInfo system.Admin, resp *data_manage.ChartClassifyListResp) (errMsg string, err error) {
  855. rootList, err := data_manage.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  856. if err != nil && err.Error() != utils.ErrNoRow() {
  857. errMsg = "获取失败"
  858. return
  859. }
  860. classifyAll, err := data_manage.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  861. if err != nil && err.Error() != utils.ErrNoRow() {
  862. errMsg = "获取失败"
  863. return
  864. }
  865. rootChildMap := make(map[int][]*data_manage.ChartClassifyItems)
  866. for _, v := range classifyAll {
  867. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  868. }
  869. nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  870. for _, v := range rootList {
  871. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  872. v.Children = existItems
  873. } else {
  874. items := make([]*data_manage.ChartClassifyItems, 0)
  875. v.Children = items
  876. }
  877. nodeAll = append(nodeAll, v)
  878. }
  879. resp.AllNodes = nodeAll
  880. return
  881. }
  882. // ChartClassifyChartListV2
  883. // @Title 根据图表分类获取图表列表
  884. // @Description 根据图表分类获取图表列表接口
  885. // @Param IsShowMe query bool true "是否只看我的,true、false"
  886. // @Param ChartClassifyId query bool true "图片分类id"
  887. // @Success 200 {object} data_manage.ChartClassifyListResp
  888. // @router /chart_classify/chart/list [get]
  889. func (this *ChartClassifyController) ChartClassifyChartListV2() {
  890. br := new(models.BaseResponse).Init()
  891. defer func() {
  892. this.Data["json"] = br
  893. this.ServeJSON()
  894. }()
  895. sysUser := this.SysUser
  896. if sysUser == nil {
  897. br.Msg = "请登录"
  898. br.ErrMsg = "请登录,SysUser Is Empty"
  899. br.Ret = 408
  900. return
  901. }
  902. resp := new(data_manage.ChartClassifyListResp)
  903. chartClassifyId, _ := this.GetInt("ChartClassifyId")
  904. if chartClassifyId <= 0 {
  905. br.Msg = "参数错误"
  906. return
  907. }
  908. // 获取当前账号的不可见指标
  909. noPermissionChartIdMap := make(map[int]bool)
  910. {
  911. obj := data_manage.EdbInfoNoPermissionAdmin{}
  912. confList, err := obj.GetAllChartListByAdminId(this.SysUser.AdminId)
  913. if err != nil && err.Error() != utils.ErrNoRow() {
  914. br.Msg = "获取失败"
  915. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  916. return
  917. }
  918. for _, v := range confList {
  919. noPermissionChartIdMap[v.ChartInfoId] = true
  920. }
  921. }
  922. isShowMe, _ := this.GetBool("IsShowMe")
  923. if isShowMe {
  924. allChartInfo, err := data_manage.GetChartInfoByAdminIdAndClassify([]int{utils.CHART_SOURCE_DEFAULT}, sysUser.AdminId, chartClassifyId)
  925. if err != nil && err.Error() != utils.ErrNoRow() {
  926. br.Msg = "获取失败"
  927. br.ErrMsg = "获取全部数据失败,Err:" + err.Error()
  928. return
  929. }
  930. // 移除没有权限的图表
  931. allNodes := handleNoPermissionChart(allChartInfo, noPermissionChartIdMap)
  932. resp.AllNodes = allNodes
  933. br.Ret = 200
  934. br.Success = true
  935. br.Msg = "获取成功"
  936. br.Data = resp
  937. fmt.Println("source my classify")
  938. return
  939. }
  940. allChartInfo, err := data_manage.GetChartInfoAllByClassifyId(utils.CHART_SOURCE_DEFAULT, chartClassifyId)
  941. if err != nil && err.Error() != utils.ErrNoRow() {
  942. br.Msg = "获取失败"
  943. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  944. return
  945. }
  946. // 移除没有权限的图表
  947. allNodes := handleNoPermissionChart(allChartInfo, noPermissionChartIdMap)
  948. for k, item := range allNodes {
  949. item.Button = data.GetChartOpButton(this.SysUser, item.SysUserId)
  950. item.Button.AddButton = false
  951. item.Button.OpButton = false
  952. item.Button.DeleteButton = false
  953. allNodes[k] = item
  954. }
  955. resp.AllNodes = allNodes
  956. br.Ret = 200
  957. br.Success = true
  958. br.Msg = "获取成功"
  959. br.Data = resp
  960. }