chart_classify.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_forum_admin/models"
  5. "eta/eta_forum_admin/models/system"
  6. "eta/eta_forum_admin/services"
  7. "eta/eta_forum_admin/utils"
  8. "fmt"
  9. "sort"
  10. "time"
  11. )
  12. // 数据管理-分类模块
  13. type ChartClassifyController struct {
  14. BaseAuthController
  15. }
  16. // ChartClassifyListV2
  17. // @Title 图表分类列表
  18. // @Description 图表分类列表接口
  19. // @Param IsShowMe query bool true "是否只看我的,true、false"
  20. // @Success 200 {object} models.ChartClassifyListResp
  21. // @router /chart_classify/list [get]
  22. func (this *ChartClassifyController) ChartClassifyListV2() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. resp := new(models.ChartClassifyListResp)
  29. //判断是否存在缓存,如果存在缓存,那么直接从缓存中获取
  30. key := utils.CACHE_CHART_CLASSIFY
  31. if utils.Re == nil {
  32. if utils.Re == nil && utils.Rc.IsExist(key) {
  33. if redisData, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  34. err := json.Unmarshal(redisData, &resp)
  35. if err == nil && resp != nil {
  36. br.Ret = 200
  37. br.Success = true
  38. br.Msg = "获取成功"
  39. br.Data = resp
  40. fmt.Println("source redis")
  41. return
  42. }
  43. }
  44. }
  45. }
  46. rootList, err := models.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  47. if err != nil && err.Error() != utils.ErrNoRow() {
  48. br.Msg = "获取失败"
  49. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  50. return
  51. }
  52. classifyAll, err := models.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  53. if err != nil && err.Error() != utils.ErrNoRow() {
  54. br.Msg = "获取失败"
  55. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  56. return
  57. }
  58. allChartInfo, err := models.GetChartInfoAll([]int{utils.CHART_SOURCE_DEFAULT})
  59. if err != nil && err.Error() != utils.ErrNoRow() {
  60. br.Msg = "获取失败"
  61. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  62. return
  63. }
  64. chartInfoMap := make(map[int][]*models.ChartClassifyItems)
  65. for _, v := range allChartInfo {
  66. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  67. }
  68. rootChildMap := make(map[int][]*models.ChartClassifyItems)
  69. for _, v := range classifyAll {
  70. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  71. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  72. v.Children = existItems
  73. } else {
  74. items := make([]*models.ChartClassifyItems, 0)
  75. v.Children = items
  76. }
  77. }
  78. nodeAll := make([]*models.ChartClassifyItems, 0)
  79. for _, v := range rootList {
  80. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  81. v.Children = existItems
  82. } else {
  83. items := make([]*models.ChartClassifyItems, 0)
  84. v.Children = items
  85. }
  86. nodeAll = append(nodeAll, v)
  87. }
  88. //
  89. //
  90. //nodeAll := make([]*models.ChartClassifyItems, 0)
  91. //for k := range rootList {
  92. // rootNode := rootList[k]
  93. // services.ChartClassifyListMakeTree(classifyAll, rootNode)
  94. // nodeAll = append(nodeAll, rootNode)
  95. //}
  96. resp.AllNodes = nodeAll
  97. // 将数据加入缓存
  98. if utils.Re == nil {
  99. redisData, _ := json.Marshal(resp)
  100. utils.Rc.Put(key, redisData, 2*time.Hour)
  101. }
  102. br.Ret = 200
  103. br.Success = true
  104. br.Msg = "获取成功"
  105. br.Data = resp
  106. }
  107. // getChartClassifyListForMe 获取我创建的图表
  108. func getChartClassifyListForMe(adminInfo system.Admin, resp *models.ChartClassifyListResp) (errMsg string, err error) {
  109. rootList, err := models.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  110. if err != nil && err.Error() != utils.ErrNoRow() {
  111. errMsg = "获取失败"
  112. return
  113. }
  114. classifyAll, err := models.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  115. if err != nil && err.Error() != utils.ErrNoRow() {
  116. errMsg = "获取失败"
  117. return
  118. }
  119. allChartInfo, err := models.GetChartInfoByAdminId([]int{utils.CHART_SOURCE_DEFAULT}, adminInfo.AdminId)
  120. if err != nil && err.Error() != utils.ErrNoRow() {
  121. errMsg = "获取失败"
  122. return
  123. }
  124. chartInfoMap := make(map[int][]*models.ChartClassifyItems)
  125. for _, v := range allChartInfo {
  126. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  127. }
  128. rootChildMap := make(map[int][]*models.ChartClassifyItems)
  129. for _, v := range classifyAll {
  130. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  131. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  132. v.Children = existItems
  133. } else {
  134. items := make([]*models.ChartClassifyItems, 0)
  135. v.Children = items
  136. }
  137. }
  138. nodeAll := make([]*models.ChartClassifyItems, 0)
  139. for _, v := range rootList {
  140. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  141. v.Children = existItems
  142. } else {
  143. items := make([]*models.ChartClassifyItems, 0)
  144. v.Children = items
  145. }
  146. nodeAll = append(nodeAll, v)
  147. }
  148. resp.AllNodes = nodeAll
  149. return
  150. }
  151. // SimpleList
  152. // @Title 单层分类列表
  153. // @Description 单层分类列表
  154. // @Success 200 {object} data_manage.EdbClassifyListResp
  155. // @router /classify/simple [get]
  156. func (this *ChartClassifyController) SimpleList() {
  157. br := new(models.BaseResponse).Init()
  158. defer func() {
  159. this.Data["json"] = br
  160. this.ServeJSON()
  161. }()
  162. // 默认查一级分类和一级分类下的指标信息,
  163. // 如果是 子级分类,查询该子级分类的下一级分类和指标信息
  164. // 增加标识判断是文件夹还是指标列表
  165. reqParentId, _ := this.GetInt("ParentId")
  166. parentId := 0
  167. nodeAll := make([]*models.ChartClassifyItems, 0)
  168. // 处理未分类
  169. //查询未分类的指标列表
  170. if reqParentId == -1 {
  171. initClassify := &models.ChartClassifyItems{
  172. ChartClassifyId: 0,
  173. ChartInfoId: 0,
  174. ChartClassifyName: "未分类",
  175. ChartClassifyNameEn: "",
  176. ParentId: 0,
  177. Level: 1,
  178. Sort: 0,
  179. }
  180. nodeAll = append(nodeAll, initClassify)
  181. } else {
  182. parentId = reqParentId
  183. }
  184. rootList, err := models.GetChartClassifyByParentId(parentId, utils.CHART_SOURCE_DEFAULT)
  185. if err != nil && err.Error() != utils.ErrNoRow() {
  186. br.Msg = "获取失败"
  187. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  188. return
  189. }
  190. var sortList models.ChartClassifyItemList
  191. if reqParentId >= 0 {
  192. // 查询挂在当前分类上的图表列表
  193. allChartInfo, e := models.GetChartInfoAllByClassifyId(utils.CHART_SOURCE_DEFAULT, parentId)
  194. if e != nil && e.Error() != utils.ErrNoRow() {
  195. br.Msg = "获取失败"
  196. br.ErrMsg = "获取图表信息失败,Err:" + e.Error()
  197. return
  198. }
  199. if len(allChartInfo) > 0 {
  200. for _, v := range allChartInfo {
  201. v.Children = make([]*models.ChartClassifyItems, 0)
  202. v.ParentId = parentId
  203. nodeAll = append(nodeAll, v)
  204. }
  205. }
  206. }
  207. if len(rootList) > 0 {
  208. for _, v := range rootList {
  209. v.Children = make([]*models.ChartClassifyItems, 0)
  210. nodeAll = append(nodeAll, v)
  211. }
  212. }
  213. if len(nodeAll) > 0 {
  214. //根据sort值排序
  215. sortList = nodeAll
  216. sort.Sort(sortList)
  217. }
  218. language := `CN`
  219. // 指标显示的语言
  220. {
  221. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  222. if configDetail != nil {
  223. language = configDetail.ConfigValue
  224. } else {
  225. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  226. if configDetail != nil {
  227. language = configDetail.ConfigValue
  228. }
  229. }
  230. }
  231. resp := new(models.ChartClassifyListResp)
  232. if len(nodeAll) > 0 {
  233. resp.AllNodes = sortList
  234. } else {
  235. resp.AllNodes = nodeAll
  236. }
  237. resp.Language = language
  238. br.Ret = 200
  239. br.Success = true
  240. br.Msg = "获取成功"
  241. br.Data = resp
  242. }
  243. // ChartClassifyItems
  244. // @Title 获取所有图表分类接口-不包含图表
  245. // @Description 获取所有图表分类接口-不包含图表
  246. // @Success 200 {object} models.ChartClassifyListResp
  247. // @router /chart_classify/items [get]
  248. func (this *ChartClassifyController) ChartClassifyItems() {
  249. br := new(models.BaseResponse).Init()
  250. defer func() {
  251. this.Data["json"] = br
  252. this.ServeJSON()
  253. }()
  254. rootList, err := models.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  255. if err != nil {
  256. br.Msg = "获取失败"
  257. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  258. return
  259. }
  260. classifyAll, err := models.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  261. if err != nil {
  262. br.Msg = "获取失败"
  263. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  264. return
  265. }
  266. nodeAll := make([]*models.ChartClassifyItems, 0)
  267. for k := range rootList {
  268. rootNode := rootList[k]
  269. services.ChartClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode)
  270. nodeAll = append(nodeAll, rootNode)
  271. }
  272. language := `CN`
  273. // 指标显示的语言
  274. {
  275. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.ChartLanguageVar)
  276. if configDetail != nil {
  277. language = configDetail.ConfigValue
  278. } else {
  279. configDetail, _ = system.GetDefaultConfigDetailByCode(system.ChartLanguageVar)
  280. if configDetail != nil {
  281. language = configDetail.ConfigValue
  282. }
  283. }
  284. }
  285. // 是否允许添加分类
  286. canOpClassify := true
  287. // 如果不是 超管 或者 ficc管理员 或者 ficc研究员,那么就没有权限
  288. //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) {
  289. // canOpClassify = false
  290. //}
  291. resp := models.ChartClassifyListResp{
  292. AllNodes: nodeAll,
  293. Language: language,
  294. CanOpClassify: canOpClassify,
  295. }
  296. br.Ret = 200
  297. br.Success = true
  298. br.Msg = "获取成功"
  299. br.Data = resp
  300. }
  301. // @Title 新增图表分类
  302. // @Description 新增图表分类接口
  303. // @Param request body models.AddChartClassifyReq true "type json string"
  304. // @Success 200 Ret=200 保存成功
  305. // @router /classify/add [post]
  306. func (this *ChartClassifyController) AddChartClassify() {
  307. br := new(models.BaseResponse).Init()
  308. defer func() {
  309. this.Data["json"] = br
  310. this.ServeJSON()
  311. }()
  312. var req models.AddChartClassifyReq
  313. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  314. if err != nil {
  315. br.Msg = "参数解析异常!"
  316. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  317. return
  318. }
  319. if req.ChartClassifyName == "" {
  320. br.Msg = "请输入分类名称"
  321. br.IsSendEmail = false
  322. return
  323. }
  324. if req.ParentId < 0 {
  325. br.Msg = "参数错误"
  326. br.IsSendEmail = false
  327. return
  328. }
  329. // 新增图表分类
  330. _, err, errMsg, isSendEmail := services.AddChartClassify(req.ChartClassifyName, req.ParentId, utils.CHART_SOURCE_DEFAULT, this.Lang, this.SysUser)
  331. if err != nil {
  332. br.Msg = errMsg
  333. br.ErrMsg = "添加分类失败,Err:" + err.Error()
  334. br.IsSendEmail = isSendEmail
  335. return
  336. }
  337. br.Ret = 200
  338. br.Msg = "保存成功"
  339. br.Success = true
  340. }
  341. // EditChartClassify
  342. // @Title 修改图表分类
  343. // @Description 修改图表分类接口
  344. // @Param request body models.EditChartClassifyReq true "type json string"
  345. // @Success 200 Ret=200 修改成功
  346. // @router /classify/edit [post]
  347. func (this *ChartClassifyController) EditChartClassify() {
  348. br := new(models.BaseResponse).Init()
  349. defer func() {
  350. this.Data["json"] = br
  351. this.ServeJSON()
  352. }()
  353. var req models.EditChartClassifyReq
  354. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  355. if err != nil {
  356. br.Msg = "参数解析异常!"
  357. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  358. return
  359. }
  360. if req.ChartClassifyName == "" {
  361. br.Msg = "请输入分类名称"
  362. br.IsSendEmail = false
  363. return
  364. }
  365. if req.ChartClassifyId <= 0 {
  366. br.Msg = "参数错误"
  367. br.IsSendEmail = false
  368. return
  369. }
  370. // 编辑图表分类
  371. _, err, errMsg, isSendEmail := services.EditChartClassify(req.ChartClassifyId, utils.CHART_SOURCE_DEFAULT, req.ChartClassifyName, this.Lang, this.SysUser)
  372. if err != nil {
  373. br.Msg = errMsg
  374. br.ErrMsg = "保存分类失败,Err:" + err.Error()
  375. br.IsSendEmail = isSendEmail
  376. return
  377. }
  378. br.Ret = 200
  379. br.Msg = "保存成功"
  380. br.Success = true
  381. br.IsAddLog = true
  382. }
  383. // @Title 删除图表检测接口
  384. // @Description 删除图表检测接口
  385. // @Param request body models.ChartClassifyDeleteCheckResp true "type json string"
  386. // @Success 200 Ret=200 检测成功
  387. // @router /chart_classify/delete/check [post]
  388. func (this *ChartClassifyController) DeleteChartClassifyCheck() {
  389. br := new(models.BaseResponse).Init()
  390. defer func() {
  391. this.Data["json"] = br
  392. this.ServeJSON()
  393. }()
  394. var req models.ChartClassifyDeleteCheckReq
  395. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  396. if err != nil {
  397. br.Msg = "参数解析异常!"
  398. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  399. return
  400. }
  401. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  402. br.Msg = "参数错误"
  403. br.IsSendEmail = false
  404. return
  405. }
  406. var deleteStatus int
  407. var tipsMsg string
  408. //删除分类
  409. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  410. // 查找分类
  411. /*item, err := models.GetChartClassifyById(req.ChartClassifyId)
  412. if err != nil {
  413. br.Msg = "保存失败"
  414. br.Msg = "获取分类信息失败,Err:" + err.Error()
  415. return
  416. }
  417. // 已授权分类id
  418. permissionClassifyIdList, err := data_manage_permission.GetUserChartClassifyPermissionList(this.SysUser.AdminId, item.ChartClassifyId)
  419. if err != nil {
  420. br.Msg = "获取失败"
  421. br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
  422. return
  423. }
  424. // todo 删除是否需要加权限校验
  425. {
  426. haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(item.IsJoinPermission, item.ChartClassifyId, permissionClassifyIdList)
  427. button := services.GetChartClassifyOpButton(this.SysUser, item.SysUserId, haveOperaAuth)
  428. if !button.OpButton {
  429. br.Msg = "无操作权限"
  430. br.IsSendEmail = false
  431. return
  432. }
  433. }*/
  434. //判断图表分类下,是否含有图表
  435. count, err := models.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  436. if err != nil {
  437. br.Msg = "删除失败"
  438. br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  439. return
  440. }
  441. if count > 0 {
  442. deleteStatus = 1
  443. tipsMsg = "该分类下关联图表不可删除"
  444. }
  445. }
  446. if deleteStatus != 1 && req.ChartInfoId == 0 {
  447. classifyCount, err := models.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
  448. if err != nil && err.Error() != utils.ErrNoRow() {
  449. br.Msg = "删除失败"
  450. br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
  451. return
  452. }
  453. if classifyCount > 0 {
  454. deleteStatus = 2
  455. tipsMsg = "确认删除当前目录及包含的子目录吗"
  456. }
  457. }
  458. if deleteStatus == 0 {
  459. tipsMsg = "可删除,进行删除操作"
  460. }
  461. resp := new(models.ChartClassifyDeleteCheckResp)
  462. resp.DeleteStatus = deleteStatus
  463. resp.TipsMsg = tipsMsg
  464. br.Ret = 200
  465. br.Msg = "检测成功"
  466. br.Success = true
  467. br.Data = resp
  468. }
  469. // @Title 删除图表分类/图表
  470. // @Description 删除图表分类/图表接口
  471. // @Param request body models.DeleteChartClassifyReq true "type json string"
  472. // @Success 200 Ret=200 删除成功
  473. // @router /classify/delete [post]
  474. func (this *ChartClassifyController) DeleteChartClassify() {
  475. br := new(models.BaseResponse).Init()
  476. defer func() {
  477. this.Data["json"] = br
  478. this.ServeJSON()
  479. }()
  480. sysUser := this.SysUser
  481. if sysUser == nil {
  482. br.Msg = "请登录"
  483. br.ErrMsg = "请登录,SysUser Is Empty"
  484. br.Ret = 408
  485. return
  486. }
  487. var req models.DeleteChartClassifyReq
  488. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  489. if err != nil {
  490. br.Msg = "参数解析异常!"
  491. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  492. return
  493. }
  494. if req.ChartClassifyId < 0 {
  495. br.Msg = "参数错误"
  496. br.IsSendEmail = false
  497. return
  498. }
  499. //删除分类
  500. _, err = models.GetChartClassifyById(req.ChartClassifyId)
  501. if err != nil {
  502. if err.Error() == utils.ErrNoRow() {
  503. br.Msg = "分类不存在,请刷新"
  504. return
  505. }
  506. br.Msg = "操作失败"
  507. br.Msg = "获取分类信息失败,Err:" + err.Error()
  508. return
  509. }
  510. //判断是否含有指标
  511. count, err := models.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  512. if err != nil && err.Error() != utils.ErrNoRow() {
  513. br.Msg = "删除失败"
  514. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  515. return
  516. }
  517. if count > 0 {
  518. br.Msg = "该目录下存在关联指标,不可删除"
  519. br.IsSendEmail = false
  520. return
  521. }
  522. err = models.DeleteChartClassify(req.ChartClassifyId)
  523. if err != nil {
  524. br.Msg = "删除失败"
  525. br.ErrMsg = "删除失败,Err:" + err.Error()
  526. return
  527. }
  528. resp := new(models.AddChartInfoResp)
  529. br.Ret = 200
  530. br.Msg = "删除成功"
  531. br.Success = true
  532. br.Data = resp
  533. br.IsAddLog = true
  534. }
  535. // ChartClassifyMove
  536. // @Title 图表分类移动接口
  537. // @Description 图表分类移动接口
  538. // @Success 200 {object} models.MoveChartClassifyReq
  539. // @router /classify/move [post]
  540. func (this *ChartClassifyController) ChartClassifyMove() {
  541. br := new(models.BaseResponse).Init()
  542. defer func() {
  543. if br.ErrMsg == "" {
  544. br.IsSendEmail = false
  545. }
  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 models.MoveChartClassifyReq
  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.ClassifyId <= 0 {
  564. br.Msg = "参数错误"
  565. br.ErrMsg = "分类id小于等于0"
  566. return
  567. }
  568. //判断分类是否存在
  569. /*chartClassifyInfo, err := models.GetChartClassifyById(req.ClassifyId)
  570. if err != nil {
  571. if err.Error() == utils.ErrNoRow() {
  572. br.Msg = "分类不存在,请刷新页面"
  573. return
  574. }
  575. br.Msg = "移动失败"
  576. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  577. return
  578. }
  579. // 校验移动的父级目录下是否有重名分类
  580. exists, e := models.GetChartClassifyByParentIdAndName(req.ParentClassifyId, chartClassifyInfo.ChartClassifyName, req.ClassifyId)
  581. if e != nil && e.Error() != utils.ErrNoRow() {
  582. br.Msg = "移动失败"
  583. br.ErrMsg = "获取父级目录下的同名分类失败, Err: " + e.Error()
  584. return
  585. }
  586. if exists != nil {
  587. br.Msg = "移动失败,分类名称已存在"
  588. return
  589. }
  590. if chartClassifyInfo.Source != utils.CHART_SOURCE_DEFAULT {
  591. br.Msg = "分类异常"
  592. br.ErrMsg = "分类异常,不是ETA图库的分类"
  593. return
  594. }
  595. updateCol := make([]string, 0)
  596. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  597. if chartClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  598. parentChartClassifyInfo, err := models.GetChartClassifyById(req.ParentClassifyId)
  599. if err != nil {
  600. br.Msg = "移动失败"
  601. br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  602. return
  603. }
  604. chartClassifyInfo.ParentId = parentChartClassifyInfo.ChartClassifyId
  605. chartClassifyInfo.Level = parentChartClassifyInfo.Level + 1
  606. chartClassifyInfo.ModifyTime = time.Now()
  607. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  608. }
  609. //如果有传入 上一个兄弟节点分类id
  610. if req.PrevClassifyId > 0 {
  611. //上一个兄弟节点
  612. prevClassify, err := models.GetChartClassifyById(req.PrevClassifyId)
  613. if err != nil {
  614. br.Msg = "移动失败"
  615. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  616. return
  617. }
  618. //如果是移动在两个兄弟节点之间
  619. if req.NextClassifyId > 0 {
  620. //下一个兄弟节点
  621. nextClassify, err := models.GetChartClassifyById(req.NextClassifyId)
  622. if err != nil {
  623. br.Msg = "移动失败"
  624. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  625. return
  626. }
  627. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  628. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == chartClassifyInfo.Sort {
  629. //变更兄弟节点的排序
  630. updateSortStr := `sort + 2`
  631. _ = models.UpdateChartClassifySortByParentId(prevClassify.ParentId, prevClassify.ChartClassifyId, prevClassify.Sort, updateSortStr)
  632. } else {
  633. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  634. if nextClassify.Sort-prevClassify.Sort == 1 {
  635. //变更兄弟节点的排序
  636. updateSortStr := `sort + 1`
  637. _ = models.UpdateChartClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  638. }
  639. }
  640. }
  641. chartClassifyInfo.Sort = prevClassify.Sort + 1
  642. chartClassifyInfo.ModifyTime = time.Now()
  643. updateCol = append(updateCol, "Sort", "ModifyTime")
  644. } else {
  645. firstClassify, err := models.GetFirstChartClassifyByParentId(chartClassifyInfo.ParentId)
  646. if err != nil && err.Error() != utils.ErrNoRow() {
  647. br.Msg = "移动失败"
  648. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  649. return
  650. }
  651. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  652. if firstClassify != nil && firstClassify.Sort == 0 {
  653. updateSortStr := ` sort + 1 `
  654. _ = models.UpdateChartClassifySortByParentId(firstClassify.ParentId, firstClassify.ChartClassifyId-1, 0, updateSortStr)
  655. }
  656. chartClassifyInfo.Sort = 0 //那就是排在第一位
  657. chartClassifyInfo.ModifyTime = time.Now()
  658. updateCol = append(updateCol, "Sort", "ModifyTime")
  659. }
  660. //更新
  661. if len(updateCol) > 0 {
  662. err = chartClassifyInfo.Update(updateCol)
  663. if err != nil {
  664. br.Msg = "移动失败"
  665. br.ErrMsg = "修改失败,Err:" + err.Error()
  666. return
  667. }
  668. }*/
  669. err, errMsg := services.MoveChartClassify(req, sysUser, 0)
  670. if errMsg != `` {
  671. br.Msg = errMsg
  672. br.ErrMsg = errMsg
  673. if err != nil {
  674. br.ErrMsg = err.Error()
  675. } else {
  676. br.IsSendEmail = false
  677. }
  678. return
  679. }
  680. br.Ret = 200
  681. br.Success = true
  682. br.Msg = "移动成功"
  683. }
  684. // getChartClassifyListForMe 获取我创建的图表分类
  685. func getChartClassifyListForMeV2(adminInfo system.Admin, resp *models.ChartClassifyListResp) (errMsg string, err error) {
  686. rootList, err := models.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  687. if err != nil && err.Error() != utils.ErrNoRow() {
  688. errMsg = "获取失败"
  689. return
  690. }
  691. classifyAll, err := models.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  692. if err != nil && err.Error() != utils.ErrNoRow() {
  693. errMsg = "获取失败"
  694. return
  695. }
  696. rootChildMap := make(map[int][]*models.ChartClassifyItems)
  697. for _, v := range classifyAll {
  698. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  699. }
  700. nodeAll := make([]*models.ChartClassifyItems, 0)
  701. for _, v := range rootList {
  702. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  703. v.Children = existItems
  704. } else {
  705. items := make([]*models.ChartClassifyItems, 0)
  706. v.Children = items
  707. }
  708. nodeAll = append(nodeAll, v)
  709. }
  710. resp.AllNodes = nodeAll
  711. return
  712. }
  713. // ChartClassifyChartListV2
  714. // @Title 根据图表分类获取图表列表
  715. // @Description 根据图表分类获取图表列表接口
  716. // @Param IsShowMe query bool true "是否只看我的,true、false"
  717. // @Param ChartClassifyId query bool true "图片分类id"
  718. // @Success 200 {object} models.ChartClassifyListResp
  719. // @router /classify/chart/list [get]
  720. func (this *ChartClassifyController) ChartClassifyChartListV2() {
  721. br := new(models.BaseResponse).Init()
  722. defer func() {
  723. this.Data["json"] = br
  724. this.ServeJSON()
  725. }()
  726. sysUser := this.SysUser
  727. if sysUser == nil {
  728. br.Msg = "请登录"
  729. br.ErrMsg = "请登录,SysUser Is Empty"
  730. br.Ret = 408
  731. return
  732. }
  733. resp := new(models.ChartClassifyListResp)
  734. chartClassifyId, _ := this.GetInt("ChartClassifyId")
  735. if chartClassifyId <= 0 {
  736. br.Msg = "参数错误"
  737. return
  738. }
  739. /*// 获取当前账号的不可见指标
  740. noPermissionChartIdMap := make(map[int]bool)
  741. {
  742. obj := models.EdbInfoNoPermissionAdmin{}
  743. confList, err := obj.GetAllChartListByAdminId(this.SysUser.AdminId)
  744. if err != nil && err.Error() != utils.ErrNoRow() {
  745. br.Msg = "获取失败"
  746. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  747. return
  748. }
  749. for _, v := range confList {
  750. noPermissionChartIdMap[v.ChartInfoId] = true
  751. }
  752. }*/
  753. isShowMe, _ := this.GetBool("IsShowMe")
  754. if isShowMe {
  755. allChartInfo, err := models.GetChartInfoByAdminIdAndClassify([]int{utils.CHART_SOURCE_DEFAULT}, sysUser.AdminId, chartClassifyId)
  756. if err != nil && err.Error() != utils.ErrNoRow() {
  757. br.Msg = "获取失败"
  758. br.ErrMsg = "获取全部数据失败,Err:" + err.Error()
  759. return
  760. }
  761. // 移除没有权限的图表
  762. //allNodes := services.HandleNoPermissionChart(allChartInfo, noPermissionChartIdMap, this.SysUser.AdminId)
  763. resp.AllNodes = allChartInfo
  764. br.Ret = 200
  765. br.Success = true
  766. br.Msg = "获取成功"
  767. br.Data = resp
  768. fmt.Println("source my classify")
  769. return
  770. }
  771. allChartInfo, err := models.GetChartInfoAllByClassifyId(utils.CHART_SOURCE_DEFAULT, chartClassifyId)
  772. if err != nil && err.Error() != utils.ErrNoRow() {
  773. br.Msg = "获取失败"
  774. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  775. return
  776. }
  777. /*// 移除没有权限的图表
  778. allNodes := services.HandleNoPermissionChart(allChartInfo, noPermissionChartIdMap, this.SysUser.AdminId)
  779. for k, item := range allNodes {
  780. item.Button = services.GetChartOpButton(this.SysUser, item.SysUserId, item.HaveOperaAuth)
  781. item.Button.AddButton = false
  782. item.Button.OpButton = false
  783. item.Button.DeleteButton = false
  784. allNodes[k] = item
  785. }*/
  786. resp.AllNodes = allChartInfo
  787. br.Ret = 200
  788. br.Success = true
  789. br.Msg = "获取成功"
  790. br.Data = resp
  791. }