edb_classify.go 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081
  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. "sort"
  11. )
  12. // EdbClassifyController 数据管理-分类模块
  13. type EdbClassifyController struct {
  14. controllers.BaseAuthController
  15. }
  16. // ListV2
  17. // @Title 分类列表
  18. // @Description 分类列表接口
  19. // @Success 200 {object} data_manage.EdbClassifyListResp
  20. // @router /classify/list [get]
  21. func (this *EdbClassifyController) ListV2() {
  22. br := new(models.BaseResponse).Init()
  23. defer func() {
  24. this.Data["json"] = br
  25. this.ServeJSON()
  26. }()
  27. rootList, err := data_manage.GetEdbClassifyByParentId(0, 0)
  28. if err != nil && err.Error() != utils.ErrNoRow() {
  29. br.Msg = "获取失败"
  30. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  31. return
  32. }
  33. classifyAll, err := data_manage.GetEdbClassifyAll()
  34. if err != nil && err.Error() != utils.ErrNoRow() {
  35. br.Msg = "获取失败"
  36. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  37. return
  38. }
  39. // 获取当前账号的不可见指标
  40. obj := data_manage.EdbInfoNoPermissionAdmin{}
  41. confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
  42. if err != nil && err.Error() != utils.ErrNoRow() {
  43. br.Msg = "获取失败"
  44. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  45. return
  46. }
  47. noPermissionEdbInfoIdMap := make(map[int]bool)
  48. for _, v := range confList {
  49. noPermissionEdbInfoIdMap[v.EdbInfoId] = true
  50. }
  51. allEdbInfo, err := data_manage.GetEdbInfoAll(utils.EDB_INFO_TYPE)
  52. if err != nil && err.Error() != utils.ErrNoRow() {
  53. br.Msg = "获取失败"
  54. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  55. return
  56. }
  57. edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
  58. for _, v := range allEdbInfo {
  59. // 如果指标不可见,那么就不返回该指标
  60. if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
  61. continue
  62. }
  63. button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
  64. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  65. v.Button = button
  66. edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
  67. }
  68. rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
  69. for _, v := range classifyAll {
  70. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  71. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  72. v.Button = button
  73. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  74. if existItems, ok := edbInfoMap[v.ClassifyId]; ok {
  75. v.Children = existItems
  76. } else {
  77. items := make([]*data_manage.EdbClassifyItems, 0)
  78. v.Children = items
  79. }
  80. }
  81. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  82. for _, v := range rootList {
  83. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  84. v.Button = button
  85. if existItems, ok := rootChildMap[v.ClassifyId]; ok {
  86. v.Children = existItems
  87. } else {
  88. items := make([]*data_manage.EdbClassifyItems, 0)
  89. v.Children = items
  90. }
  91. nodeAll = append(nodeAll, v)
  92. }
  93. resp := new(data_manage.EdbClassifyListResp)
  94. resp.AllNodes = nodeAll
  95. resp.CanOpClassify = true
  96. br.Ret = 200
  97. br.Success = true
  98. br.Msg = "获取成功"
  99. br.Data = resp
  100. }
  101. // @Title 获取所有分类接口-不包含指标
  102. // @Description 获取所有分类接口-不包含指标
  103. // @Success 200 {object} data_manage.EdbClassifyListResp
  104. // @router /classify/items [get]
  105. func (this *EdbClassifyController) Items() {
  106. br := new(models.BaseResponse).Init()
  107. defer func() {
  108. this.Data["json"] = br
  109. this.ServeJSON()
  110. }()
  111. rootList, err := data_manage.GetEdbClassifyByParentId(0, 0)
  112. if err != nil {
  113. br.Msg = "获取失败"
  114. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  115. return
  116. }
  117. classifyAll, err := data_manage.GetEdbClassifyAll()
  118. if err != nil {
  119. br.Msg = "获取失败"
  120. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  121. return
  122. }
  123. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  124. for k := range rootList {
  125. rootNode := rootList[k]
  126. data.EdbClassifyItemsMakeTree(classifyAll, rootNode)
  127. nodeAll = append(nodeAll, rootNode)
  128. }
  129. resp := new(data_manage.EdbClassifyListResp)
  130. resp.AllNodes = nodeAll
  131. br.Ret = 200
  132. br.Success = true
  133. br.Msg = "获取成功"
  134. br.Data = resp
  135. }
  136. // @Title 新增分类
  137. // @Description 新增分类接口
  138. // @Param request body data_manage.AddEdbClassifyReq true "type json string"
  139. // @Success 200 Ret=200 保存成功
  140. // @router /classify/add [post]
  141. func (this *EdbClassifyController) AddEdbClassify() {
  142. br := new(models.BaseResponse).Init()
  143. defer func() {
  144. this.Data["json"] = br
  145. this.ServeJSON()
  146. }()
  147. var req data_manage.AddEdbClassifyReq
  148. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  149. if err != nil {
  150. br.Msg = "参数解析异常!"
  151. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  152. return
  153. }
  154. if req.ClassifyName == "" {
  155. br.Msg = "请输入分类名称"
  156. br.IsSendEmail = false
  157. return
  158. }
  159. if req.ParentId < 0 {
  160. br.Msg = "参数错误"
  161. br.IsSendEmail = false
  162. return
  163. }
  164. //添加指标
  165. _, err, errMsg := data.AddEdbClassify(req.ClassifyName, req.ParentId, req.Level, 0, this.SysUser.AdminId, this.SysUser.AdminName)
  166. if errMsg != `` {
  167. br.Msg = errMsg
  168. br.ErrMsg = errMsg
  169. if err != nil {
  170. br.ErrMsg = errMsg + ";Err:" + err.Error()
  171. } else {
  172. br.IsSendEmail = false
  173. }
  174. return
  175. }
  176. //count, err := data_manage.GetEdbClassifyCount(req.ClassifyName, req.ParentId)
  177. //if err != nil {
  178. // br.Msg = "判断名称是否已存在失败"
  179. // br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  180. // return
  181. //}
  182. //if count > 0 {
  183. // br.Msg = "分类名称已存在,请重新输入"
  184. // br.IsSendEmail = false
  185. // return
  186. //}
  187. ////获取该层级下最大的排序数
  188. //maxSort, err := data_manage.GetEdbClassifyMaxSort(req.ParentId, req.ClassifyType)
  189. //
  190. //classify := new(data_manage.EdbClassify)
  191. //classify.ClassifyType = req.ClassifyType
  192. //classify.ParentId = req.ParentId
  193. //classify.ClassifyName = req.ClassifyName
  194. //classify.HasData = 0
  195. //classify.CreateTime = time.Now()
  196. //classify.ModifyTime = time.Now()
  197. //classify.SysUserId = this.SysUser.AdminId
  198. //classify.SysUserRealName = this.SysUser.RealName
  199. //classify.Level = req.Level + 1
  200. //timestamp := strconv.FormatInt(time.Now().UnixNano(), 10)
  201. //classify.UniqueCode = utils.MD5(utils.DATA_PREFIX + "_" + timestamp)
  202. //classify.Sort = maxSort
  203. //
  204. //_, err = data_manage.AddEdbClassify(classify)
  205. //if err != nil {
  206. // br.Msg = "保存分类失败"
  207. // br.ErrMsg = "保存分类失败,Err:" + err.Error()
  208. // return
  209. //}
  210. br.Ret = 200
  211. br.Msg = "保存成功"
  212. br.Success = true
  213. br.IsAddLog = true
  214. }
  215. // @Title 修改分类
  216. // @Description 修改分类接口
  217. // @Param request body data_manage.EditEdbClassifyReq true "type json string"
  218. // @Success 200 Ret=200 修改成功
  219. // @router /classify/edit [post]
  220. func (this *EdbClassifyController) EditEdbClassify() {
  221. br := new(models.BaseResponse).Init()
  222. defer func() {
  223. this.Data["json"] = br
  224. this.ServeJSON()
  225. }()
  226. var req data_manage.EditEdbClassifyReq
  227. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  228. if err != nil {
  229. br.Msg = "参数解析异常!"
  230. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  231. return
  232. }
  233. if req.ClassifyName == "" {
  234. br.Msg = "请输入分类名称"
  235. br.IsSendEmail = false
  236. return
  237. }
  238. if req.ClassifyId < 0 {
  239. br.Msg = "参数错误"
  240. br.IsSendEmail = false
  241. return
  242. }
  243. err, errMsg := data.EditEdbClassify(req.ClassifyId, req.ClassifyName, this.SysUser)
  244. if errMsg != `` {
  245. br.Msg = errMsg
  246. br.ErrMsg = errMsg
  247. if err != nil {
  248. br.ErrMsg = errMsg + ";Err:" + err.Error()
  249. } else {
  250. br.IsSendEmail = false
  251. }
  252. return
  253. }
  254. //item, err := data_manage.GetEdbClassifyById(req.ClassifyId)
  255. //if err != nil {
  256. // br.Msg = "保存失败"
  257. // br.Msg = "获取分类信息失败,Err:" + err.Error()
  258. // return
  259. //}
  260. //
  261. //if item.ClassifyName != req.ClassifyName {
  262. // count, err := data_manage.GetEdbClassifyCount(req.ClassifyName, item.ParentId)
  263. // if err != nil {
  264. // br.Msg = "判断名称是否已存在失败"
  265. // br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  266. // return
  267. // }
  268. // if count > 0 {
  269. // br.Msg = "分类名称已存在,请重新输入"
  270. // br.IsSendEmail = false
  271. // return
  272. // }
  273. //
  274. // err = data_manage.EditEdbClassify(req.ClassifyId, req.ClassifyName)
  275. // if err != nil {
  276. // br.Msg = "保存失败"
  277. // br.ErrMsg = "保存失败,Err:" + err.Error()
  278. // return
  279. // }
  280. //}
  281. br.Ret = 200
  282. br.Msg = "保存成功"
  283. br.Success = true
  284. br.IsAddLog = true
  285. }
  286. // @Title 删除检测接口
  287. // @Description 删除检测接口
  288. // @Param request body data_manage.ClassifyDeleteCheckReq true "type json string"
  289. // @Success 200 Ret=200 检测成功
  290. // @router /classify/delete/check [post]
  291. func (this *EdbClassifyController) DeleteEdbClassifyCheck() {
  292. br := new(models.BaseResponse).Init()
  293. defer func() {
  294. this.Data["json"] = br
  295. this.ServeJSON()
  296. }()
  297. var req data_manage.ClassifyDeleteCheckReq
  298. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  299. if err != nil {
  300. br.Msg = "参数解析异常!"
  301. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  302. return
  303. }
  304. if req.ClassifyId < 0 && req.EdbInfoId <= 0 {
  305. br.Msg = "参数错误"
  306. br.IsSendEmail = false
  307. return
  308. }
  309. deleteStatus, tipsMsg, err, errMsg := data.DeleteCheck(req.ClassifyId, req.EdbInfoId, this.SysUser)
  310. if errMsg != `` {
  311. br.Msg = errMsg
  312. br.ErrMsg = errMsg
  313. if err != nil {
  314. br.ErrMsg = err.Error()
  315. } else {
  316. br.IsSendEmail = false
  317. }
  318. return
  319. }
  320. //var deleteStatus int
  321. //var tipsMsg string
  322. ////删除分类
  323. //if req.ClassifyId > 0 && req.EdbInfoId == 0 {
  324. // //判断分类下,是否含有指标
  325. // count, err := data_manage.GetEdbInfoCountByClassifyId(req.ClassifyId)
  326. // if err != nil {
  327. // br.Msg = "删除失败"
  328. // br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  329. // return
  330. // }
  331. //
  332. // if count > 0 {
  333. // deleteStatus = 1
  334. // tipsMsg = "若目录关联指标不可删除"
  335. // }
  336. //}
  337. //
  338. //if deleteStatus != 1 && req.EdbInfoId == 0 {
  339. // classifyCount, err := data_manage.GetClassifyCountByClassifyId(req.ClassifyId)
  340. // if err != nil && err.Error() != utils.ErrNoRow() {
  341. // br.Msg = "删除失败"
  342. // br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  343. // return
  344. // }
  345. // if classifyCount > 0 {
  346. // deleteStatus = 2
  347. // tipsMsg = "确认删除当前目录及包含的子目录吗"
  348. // }
  349. //}
  350. //
  351. ////删除指标
  352. //if req.EdbInfoId > 0 {
  353. // //判断指标是否用于作图,如果用于作图,则不可删除
  354. // chartCount, err := data_manage.GetChartEdbMappingCount(req.EdbInfoId)
  355. // if err != nil && err.Error() != utils.ErrNoRow() {
  356. // br.Msg = "删除失败"
  357. // br.ErrMsg = "判断指标是否被用于作图失败,Err:" + err.Error()
  358. // return
  359. // }
  360. // if chartCount > 0 {
  361. // deleteStatus = 3
  362. // tipsMsg = "当前指标已用作画图,不可删除"
  363. // }
  364. // //判断指标是否用于计算
  365. // {
  366. // calculateCount, err := data_manage.GetEdbInfoCalculateMappingCount(req.EdbInfoId)
  367. // if err != nil && err.Error() != utils.ErrNoRow() {
  368. // br.Msg = "删除失败"
  369. // br.ErrMsg = "判断指标是否被用于计算失败,GetEdbInfoCalculateCount Err:" + err.Error()
  370. // return
  371. // }
  372. // if calculateCount > 0 {
  373. // deleteStatus = 4
  374. // tipsMsg = "当前指标已用作,指标运算,不可删除"
  375. // }
  376. // }
  377. //}
  378. resp := new(data_manage.ClassifyDeleteCheckResp)
  379. resp.DeleteStatus = deleteStatus
  380. resp.TipsMsg = tipsMsg
  381. br.Ret = 200
  382. br.Msg = "检测成功"
  383. br.Success = true
  384. br.Data = resp
  385. }
  386. // @Title 删除分类/指标
  387. // @Description 删除分类/指标接口
  388. // @Param request body data_manage.DeleteEdbClassifyReq true "type json string"
  389. // @Success 200 Ret=200 新增成功
  390. // @router /classify/delete [post]
  391. func (this *EdbClassifyController) DeleteEdbClassify() {
  392. br := new(models.BaseResponse).Init()
  393. defer func() {
  394. this.Data["json"] = br
  395. this.ServeJSON()
  396. }()
  397. sysUser := this.SysUser
  398. if sysUser == nil {
  399. br.Msg = "请登录"
  400. br.ErrMsg = "请登录,SysUser Is Empty"
  401. br.Ret = 408
  402. return
  403. }
  404. var req data_manage.DeleteEdbClassifyReq
  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.ClassifyId < 0 && req.EdbInfoId <= 0 {
  412. br.Msg = "参数错误"
  413. br.IsSendEmail = false
  414. return
  415. }
  416. nextItem, err, errMsg := data.Delete(req.ClassifyId, req.EdbInfoId, sysUser, string(this.Ctx.Input.RequestBody), this.Ctx.Input.URI())
  417. if errMsg != `` {
  418. br.Msg = errMsg
  419. br.ErrMsg = errMsg
  420. if err != nil {
  421. br.ErrMsg = err.Error()
  422. } else {
  423. br.IsSendEmail = false
  424. }
  425. return
  426. }
  427. resp := data_manage.AddEdbInfoResp{}
  428. if nextItem != nil {
  429. resp = data_manage.AddEdbInfoResp{
  430. EdbInfoId: nextItem.EdbInfoId,
  431. UniqueCode: nextItem.UniqueCode,
  432. }
  433. }
  434. br.Ret = 200
  435. br.Msg = "删除成功"
  436. br.Success = true
  437. br.IsAddLog = true
  438. br.Data = resp
  439. }
  440. // EdbClassifyMove
  441. // @Title 分类移动接口
  442. // @Description 分类移动接口
  443. // @Success 200 {object} data_manage.MoveEdbClassifyReq
  444. // @router /edb_classify/move [post]
  445. func (this *EdbClassifyController) EdbClassifyMove() {
  446. br := new(models.BaseResponse).Init()
  447. defer func() {
  448. this.Data["json"] = br
  449. this.ServeJSON()
  450. }()
  451. sysUser := this.SysUser
  452. if sysUser == nil {
  453. br.Msg = "请登录"
  454. br.ErrMsg = "请登录,SysUser Is Empty"
  455. br.Ret = 408
  456. return
  457. }
  458. var req data_manage.MoveEdbClassifyReq
  459. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  460. if err != nil {
  461. br.Msg = "参数解析异常!"
  462. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  463. return
  464. }
  465. if req.ClassifyId <= 0 && req.EdbInfoId <= 0 {
  466. br.Msg = "参数错误"
  467. br.ErrMsg = "请选择拖动目标,分类目录或者指标"
  468. return
  469. }
  470. err, errMsg := data.MoveEdbClassify(req, sysUser, 0)
  471. if errMsg != `` {
  472. br.Msg = errMsg
  473. br.ErrMsg = errMsg
  474. if err != nil {
  475. br.ErrMsg = err.Error()
  476. } else {
  477. br.IsSendEmail = false
  478. }
  479. return
  480. }
  481. ////判断分类是否存在
  482. //edbClassifyInfo, err := data_manage.GetEdbClassifyById(req.ClassifyId)
  483. //if err != nil {
  484. // br.Msg = "移动失败"
  485. // br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  486. // return
  487. //}
  488. //updateCol := make([]string, 0)
  489. //
  490. ////判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  491. //if edbClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  492. // parentEdbClassifyInfo, err := data_manage.GetEdbClassifyById(req.ParentClassifyId)
  493. // if err != nil {
  494. // br.Msg = "移动失败"
  495. // br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  496. // return
  497. // }
  498. // edbClassifyInfo.ParentId = parentEdbClassifyInfo.ClassifyId
  499. // edbClassifyInfo.Level = parentEdbClassifyInfo.Level + 1
  500. // edbClassifyInfo.ModifyTime = time.Now()
  501. // updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  502. //}
  503. //
  504. ////如果有传入 上一个兄弟节点分类id
  505. //if req.PrevClassifyId > 0 {
  506. // prevClassify, err := data_manage.GetEdbClassifyById(req.PrevClassifyId)
  507. // if err != nil {
  508. // br.Msg = "移动失败"
  509. // br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  510. // return
  511. // }
  512. //
  513. // //如果是移动在两个兄弟节点之间
  514. // if req.NextClassifyId > 0 {
  515. // //下一个兄弟节点
  516. // nextClassify, err := data_manage.GetEdbClassifyById(req.NextClassifyId)
  517. // if err != nil {
  518. // br.Msg = "移动失败"
  519. // br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  520. // return
  521. // }
  522. // //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  523. // if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == edbClassifyInfo.Sort {
  524. // //变更兄弟节点的排序
  525. // updateSortStr := `sort + 2`
  526. // _ = data_manage.UpdateEdbClassifySortByParentId(prevClassify.ParentId, prevClassify.ClassifyId, prevClassify.Sort, updateSortStr)
  527. // } else {
  528. // //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  529. // if nextClassify.Sort-prevClassify.Sort == 1 {
  530. // //变更兄弟节点的排序
  531. // updateSortStr := `sort + 1`
  532. // _ = data_manage.UpdateEdbClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  533. // }
  534. // }
  535. // }
  536. //
  537. // edbClassifyInfo.Sort = prevClassify.Sort + 1
  538. // edbClassifyInfo.ModifyTime = time.Now()
  539. // updateCol = append(updateCol, "Sort", "ModifyTime")
  540. //} else {
  541. // firstClassify, err := data_manage.GetFirstEdbClassifyByParentId(edbClassifyInfo.ParentId)
  542. // if err != nil && err.Error() != utils.ErrNoRow() {
  543. // br.Msg = "移动失败"
  544. // br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  545. // return
  546. // }
  547. //
  548. // //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  549. // if firstClassify != nil && firstClassify.Sort == 0 {
  550. // updateSortStr := ` sort + 1 `
  551. // _ = data_manage.UpdateEdbClassifySortByParentId(firstClassify.ParentId, firstClassify.ClassifyId-1, 0, updateSortStr)
  552. // }
  553. //
  554. // edbClassifyInfo.Sort = 0 //那就是排在第一位
  555. // edbClassifyInfo.ModifyTime = time.Now()
  556. // updateCol = append(updateCol, "Sort", "ModifyTime")
  557. //}
  558. //
  559. ////更新
  560. //if len(updateCol) > 0 {
  561. // err = edbClassifyInfo.Update(updateCol)
  562. // if err != nil {
  563. // br.Msg = "移动失败"
  564. // br.ErrMsg = "修改失败,Err:" + err.Error()
  565. // return
  566. // }
  567. //}
  568. br.Ret = 200
  569. br.Success = true
  570. br.Msg = "移动成功"
  571. }
  572. // ItemsV2
  573. // @Title 分类列表
  574. // @Description 分类列表接口
  575. // @Success 200 {object} data_manage.EdbClassifyListResp
  576. // @router /classify/items/v2 [get]
  577. func (this *EdbClassifyController) ItemsV2() {
  578. br := new(models.BaseResponse).Init()
  579. defer func() {
  580. this.Data["json"] = br
  581. this.ServeJSON()
  582. }()
  583. rootList, err := data_manage.GetEdbClassifyByParentId(0, 0)
  584. if err != nil && err.Error() != utils.ErrNoRow() {
  585. br.Msg = "获取失败"
  586. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  587. return
  588. }
  589. classifyAll, err := data_manage.GetEdbClassifyAll()
  590. if err != nil && err.Error() != utils.ErrNoRow() {
  591. br.Msg = "获取失败"
  592. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  593. return
  594. }
  595. //allEdbInfo, err := data_manage.GetEdbInfoAll(0)
  596. //if err != nil && err.Error() != utils.ErrNoRow() {
  597. // br.Msg = "获取失败"
  598. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  599. // return
  600. //}
  601. //edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
  602. //for _, v := range allEdbInfo {
  603. // button := data.GetEdbOpButton(this.SysUser, v.SysUserId)
  604. // button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  605. // v.Button = button
  606. // edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
  607. //}
  608. rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
  609. for _, v := range classifyAll {
  610. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  611. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  612. v.Button = button
  613. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  614. //if existItems, ok := edbInfoMap[v.ClassifyId]; ok {
  615. // v.Children = existItems
  616. //} else {
  617. // items := make([]*data_manage.EdbClassifyItems, 0)
  618. // v.Children = items
  619. //}
  620. }
  621. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  622. for _, v := range rootList {
  623. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  624. v.Button = button
  625. if existItems, ok := rootChildMap[v.ClassifyId]; ok {
  626. v.Children = existItems
  627. } else {
  628. items := make([]*data_manage.EdbClassifyItems, 0)
  629. v.Children = items
  630. }
  631. nodeAll = append(nodeAll, v)
  632. }
  633. language := `CN`
  634. // 指标显示的语言
  635. {
  636. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  637. if configDetail != nil {
  638. language = configDetail.ConfigValue
  639. } else {
  640. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  641. if configDetail != nil {
  642. language = configDetail.ConfigValue
  643. }
  644. }
  645. }
  646. // 是否允许添加一级分类
  647. canOpClassify := true
  648. //button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  649. //if !button.AddButton {
  650. // canOpClassify = false
  651. //}
  652. resp := data_manage.EdbClassifyListResp{
  653. AllNodes: nodeAll,
  654. CanOpClassify: canOpClassify,
  655. Language: language,
  656. }
  657. br.Ret = 200
  658. br.Success = true
  659. br.Msg = "获取成功"
  660. br.Data = resp
  661. }
  662. // @Title 获取分类下指标接口
  663. // @Description 获取分类下指标接口
  664. // @Param ClassifyId query int true "分类id"
  665. // @Success 200 {object} data_manage.EdbClassifyListResp
  666. // @router /classify/edb_info/list [get]
  667. func (this *EdbClassifyController) ClassifyEdbInfoList() {
  668. br := new(models.BaseResponse).Init()
  669. defer func() {
  670. this.Data["json"] = br
  671. this.ServeJSON()
  672. }()
  673. classifyId, _ := this.GetInt("ClassifyId")
  674. if classifyId <= 0 {
  675. br.Msg = "参数错误,请刷新页面"
  676. return
  677. }
  678. // 获取当前账号的不可见指标
  679. obj := data_manage.EdbInfoNoPermissionAdmin{}
  680. confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
  681. if err != nil && err.Error() != utils.ErrNoRow() {
  682. br.Msg = "获取失败"
  683. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  684. return
  685. }
  686. noPermissionEdbInfoIdMap := make(map[int]bool)
  687. for _, v := range confList {
  688. noPermissionEdbInfoIdMap[v.EdbInfoId] = true
  689. }
  690. allEdbInfo, err := data_manage.GetEdbInfoByClassifyId(classifyId, 0, 0)
  691. if err != nil && err.Error() != utils.ErrNoRow() {
  692. br.Msg = "获取失败"
  693. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  694. return
  695. }
  696. list := make([]*data_manage.EdbClassifyItems, 0)
  697. for _, v := range allEdbInfo {
  698. // 如果指标不可见,那么就不返回该指标
  699. if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
  700. continue
  701. }
  702. button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
  703. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  704. v.Button = button
  705. list = append(list, v)
  706. }
  707. resp := new(data_manage.ClassifyEdbInfoListResp)
  708. resp.EdbInfoList = list
  709. br.Ret = 200
  710. br.Success = true
  711. br.Msg = "获取成功"
  712. br.Data = resp
  713. }
  714. // ItemsV3
  715. // @Title 分类列表
  716. // @Description 分类列表接口
  717. // @Success 200 {object} data_manage.EdbClassifyListResp
  718. // @router /classify/items/v3 [get]
  719. func (this *EdbClassifyController) ItemsV3() {
  720. br := new(models.BaseResponse).Init()
  721. defer func() {
  722. this.Data["json"] = br
  723. this.ServeJSON()
  724. }()
  725. rootList, err := data_manage.GetEdbClassifyByParentId(0, 0)
  726. if err != nil && err.Error() != utils.ErrNoRow() {
  727. br.Msg = "获取失败"
  728. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  729. return
  730. }
  731. rootTwoList, err := data_manage.GetEdbClassifyByParentIdTwo(0)
  732. if err != nil && err.Error() != utils.ErrNoRow() {
  733. br.Msg = "获取失败"
  734. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  735. return
  736. }
  737. classifyAll, err := data_manage.GetEdbClassifyAllV2(0)
  738. if err != nil && err.Error() != utils.ErrNoRow() {
  739. br.Msg = "获取失败"
  740. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  741. return
  742. }
  743. rootTwoMap := make(map[int][]*data_manage.EdbClassifyItems)
  744. for _, v := range rootTwoList {
  745. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  746. v.Button = button
  747. rootTwoMap[v.ParentId] = append(rootTwoMap[v.ParentId], v)
  748. }
  749. rootTwoChildMap := make(map[int][]*data_manage.EdbClassifyItems)
  750. for _, v := range classifyAll {
  751. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  752. v.Button = button
  753. if v.Level == 3 {
  754. rootTwoChildMap[v.ParentId] = append(rootTwoChildMap[v.ParentId], v)
  755. }
  756. }
  757. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  758. for _, v := range rootList {
  759. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  760. v.Button = button
  761. if existItems, ok := rootTwoMap[v.ClassifyId]; ok {
  762. v.Children = existItems
  763. for _, item := range existItems {
  764. button := data.GetEdbClassifyOpButton(this.SysUser, item.SysUserId)
  765. item.Button = button
  766. if existItems, ok := rootTwoChildMap[item.ClassifyId]; ok {
  767. for _, existItem := range existItems {
  768. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  769. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  770. existItem.Button = button
  771. }
  772. item.Children = existItems
  773. } else {
  774. items := make([]*data_manage.EdbClassifyItems, 0)
  775. item.Children = items
  776. }
  777. }
  778. } else {
  779. items := make([]*data_manage.EdbClassifyItems, 0)
  780. v.Children = items
  781. }
  782. nodeAll = append(nodeAll, v)
  783. }
  784. language := `CN`
  785. // 指标显示的语言
  786. {
  787. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  788. if configDetail != nil {
  789. language = configDetail.ConfigValue
  790. } else {
  791. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  792. if configDetail != nil {
  793. language = configDetail.ConfigValue
  794. }
  795. }
  796. }
  797. // 是否允许添加一级分类
  798. // 是否允许添加一级分类
  799. canOpClassify := true
  800. button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  801. if !button.AddButton {
  802. canOpClassify = false
  803. }
  804. resp := new(data_manage.EdbClassifyListResp)
  805. resp.AllNodes = nodeAll
  806. resp.Language = language
  807. resp.CanOpClassify = canOpClassify
  808. br.Ret = 200
  809. br.Success = true
  810. br.Msg = "获取成功"
  811. br.Data = resp
  812. }
  813. // SimpleList
  814. // @Title 单层分类列表
  815. // @Description 单层分类列表
  816. // @Success 200 {object} data_manage.EdbClassifyListResp
  817. // @router /classify/simple [get]
  818. func (this *EdbClassifyController) SimpleList() {
  819. br := new(models.BaseResponse).Init()
  820. defer func() {
  821. this.Data["json"] = br
  822. this.ServeJSON()
  823. }()
  824. // 默认查一级分类和一级分类下的指标信息,
  825. // 如果是 子级分类,查询该子级分类的下一级分类和指标信息
  826. // 增加标识判断是文件夹还是指标列表
  827. parentId, _ := this.GetInt("ParentId")
  828. isOnlyMe, _ := this.GetBool("IsOnlyMe")
  829. // 如果选择了只看我的,那么只查询归属于我的账号
  830. sysUserId := 0
  831. if isOnlyMe {
  832. sysUserId = this.SysUser.AdminId
  833. }
  834. rootList, err := data_manage.GetEdbClassifyByParentId(parentId, 0)
  835. if err != nil && err.Error() != utils.ErrNoRow() {
  836. br.Msg = "获取失败"
  837. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  838. return
  839. }
  840. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  841. var sortList data_manage.EdbClassifyItemList
  842. if parentId > 0 {
  843. // 查询挂在当前分类上的指标列表
  844. // 获取当前账号的不可见指标
  845. obj := data_manage.EdbInfoNoPermissionAdmin{}
  846. confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
  847. if err != nil && err.Error() != utils.ErrNoRow() {
  848. br.Msg = "获取失败"
  849. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  850. return
  851. }
  852. noPermissionEdbInfoIdMap := make(map[int]bool)
  853. for _, v := range confList {
  854. noPermissionEdbInfoIdMap[v.EdbInfoId] = true
  855. }
  856. allEdbInfo, err := data_manage.GetEdbInfoByClassifyId(parentId, 0, sysUserId)
  857. if err != nil {
  858. br.Msg = "获取指标数据失败"
  859. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  860. return
  861. }
  862. for _, v := range allEdbInfo {
  863. // 如果指标不可见,那么就不返回该指标
  864. if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
  865. continue
  866. }
  867. button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
  868. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  869. v.Button = button
  870. v.Children = make([]*data_manage.EdbClassifyItems, 0)
  871. v.ParentId = parentId
  872. nodeAll = append(nodeAll, v)
  873. }
  874. }
  875. if len(rootList) > 0 {
  876. for _, v := range rootList {
  877. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  878. v.Button = button
  879. v.Children = make([]*data_manage.EdbClassifyItems, 0)
  880. nodeAll = append(nodeAll, v)
  881. }
  882. }
  883. if len(nodeAll) > 0 {
  884. //根据sort值排序
  885. sortList = nodeAll
  886. sort.Sort(sortList)
  887. }
  888. language := `CN`
  889. // 指标显示的语言
  890. {
  891. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  892. if configDetail != nil {
  893. language = configDetail.ConfigValue
  894. } else {
  895. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  896. if configDetail != nil {
  897. language = configDetail.ConfigValue
  898. }
  899. }
  900. }
  901. // 是否允许添加一级分类
  902. canOpClassify := true
  903. button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  904. if !button.AddButton {
  905. canOpClassify = false
  906. }
  907. resp := new(data_manage.EdbClassifyListResp)
  908. resp.AllNodes = sortList
  909. resp.Language = language
  910. resp.CanOpClassify = canOpClassify
  911. br.Ret = 200
  912. br.Success = true
  913. br.Msg = "获取成功"
  914. br.Data = resp
  915. }
  916. // ClassifyTree
  917. // @Title 多层分类列表树
  918. // @Description 多层分类列表树
  919. // @Success 200 {object} data_manage.EdbClassifyListResp
  920. // @router /classify/tree [get]
  921. func (this *EdbClassifyController) ClassifyTree() {
  922. br := new(models.BaseResponse).Init()
  923. defer func() {
  924. this.Data["json"] = br
  925. this.ServeJSON()
  926. }()
  927. allList, err := data_manage.GetNormalEdbClassifyAll()
  928. if err != nil && err.Error() != utils.ErrNoRow() {
  929. br.Msg = "获取失败"
  930. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  931. return
  932. }
  933. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  934. var sortList data_manage.EdbClassifyItemList
  935. if len(allList) > 0 {
  936. for k, v := range allList {
  937. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  938. allList[k].Button = button
  939. }
  940. nodeAll = data.GetClassifyTreeRecursive(allList, 0)
  941. //根据sort值排序
  942. sortList = nodeAll
  943. sort.Sort(sortList)
  944. }
  945. language := `CN`
  946. // 指标显示的语言
  947. {
  948. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  949. if configDetail != nil {
  950. language = configDetail.ConfigValue
  951. } else {
  952. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  953. if configDetail != nil {
  954. language = configDetail.ConfigValue
  955. }
  956. }
  957. }
  958. // 是否允许添加一级分类
  959. canOpClassify := true
  960. button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  961. if !button.AddButton {
  962. canOpClassify = false
  963. }
  964. resp := new(data_manage.EdbClassifyListResp)
  965. resp.AllNodes = sortList
  966. resp.Language = language
  967. resp.CanOpClassify = canOpClassify
  968. br.Ret = 200
  969. br.Success = true
  970. br.Msg = "获取成功"
  971. br.Data = resp
  972. }
  973. // EdbClassifyMoveV2
  974. // @Title 分类移动接口v2
  975. // @Description 分类移动接口v2
  976. // @Success 200 {object} data_manage.MoveEdbClassifyReq
  977. // @router /edb_classify/move/v2 [post]
  978. //func (this *EdbClassifyController) EdbClassifyMoveV2() {
  979. // br := new(models.BaseResponse).Init()
  980. // defer func() {
  981. // this.Data["json"] = br
  982. // this.ServeJSON()
  983. // }()
  984. //
  985. // sysUser := this.SysUser
  986. // if sysUser == nil {
  987. // br.Msg = "请登录"
  988. // br.ErrMsg = "请登录,SysUser Is Empty"
  989. // br.Ret = 408
  990. // return
  991. // }
  992. //
  993. // var req data_manage.MoveEdbClassifyReq
  994. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  995. // if err != nil {
  996. // br.Msg = "参数解析异常!"
  997. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  998. // return
  999. // }
  1000. //
  1001. // if req.ClassifyId <= 0 {
  1002. // br.Msg = "参数错误"
  1003. // br.ErrMsg = "分类id小于等于0"
  1004. // return
  1005. // }
  1006. //
  1007. // err, errMsg := data.MoveEdbClassify(req.ClassifyId, req.ParentClassifyId, req.PrevClassifyId, req.NextClassifyId)
  1008. // if errMsg != `` {
  1009. // br.Msg = errMsg
  1010. // br.ErrMsg = errMsg
  1011. // if err != nil {
  1012. // br.ErrMsg = err.Error()
  1013. // } else {
  1014. // br.IsSendEmail = false
  1015. // }
  1016. // return
  1017. // }
  1018. //
  1019. // br.Ret = 200
  1020. // br.Success = true
  1021. // br.Msg = "移动成功"
  1022. //}