edb_classify.go 31 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075
  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. }
  285. // @Title 删除检测接口
  286. // @Description 删除检测接口
  287. // @Param request body data_manage.ClassifyDeleteCheckReq true "type json string"
  288. // @Success 200 Ret=200 检测成功
  289. // @router /classify/delete/check [post]
  290. func (this *EdbClassifyController) DeleteEdbClassifyCheck() {
  291. br := new(models.BaseResponse).Init()
  292. defer func() {
  293. this.Data["json"] = br
  294. this.ServeJSON()
  295. }()
  296. var req data_manage.ClassifyDeleteCheckReq
  297. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  298. if err != nil {
  299. br.Msg = "参数解析异常!"
  300. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  301. return
  302. }
  303. if req.ClassifyId < 0 && req.EdbInfoId <= 0 {
  304. br.Msg = "参数错误"
  305. br.IsSendEmail = false
  306. return
  307. }
  308. deleteStatus, tipsMsg, err, errMsg := data.DeleteCheck(req.ClassifyId, req.EdbInfoId, this.SysUser)
  309. if errMsg != `` {
  310. br.Msg = errMsg
  311. br.ErrMsg = errMsg
  312. if err != nil {
  313. br.ErrMsg = err.Error()
  314. } else {
  315. br.IsSendEmail = false
  316. }
  317. return
  318. }
  319. //var deleteStatus int
  320. //var tipsMsg string
  321. ////删除分类
  322. //if req.ClassifyId > 0 && req.EdbInfoId == 0 {
  323. // //判断分类下,是否含有指标
  324. // count, err := data_manage.GetEdbInfoCountByClassifyId(req.ClassifyId)
  325. // if err != nil {
  326. // br.Msg = "删除失败"
  327. // br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  328. // return
  329. // }
  330. //
  331. // if count > 0 {
  332. // deleteStatus = 1
  333. // tipsMsg = "若目录关联指标不可删除"
  334. // }
  335. //}
  336. //
  337. //if deleteStatus != 1 && req.EdbInfoId == 0 {
  338. // classifyCount, err := data_manage.GetClassifyCountByClassifyId(req.ClassifyId)
  339. // if err != nil && err.Error() != utils.ErrNoRow() {
  340. // br.Msg = "删除失败"
  341. // br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  342. // return
  343. // }
  344. // if classifyCount > 0 {
  345. // deleteStatus = 2
  346. // tipsMsg = "确认删除当前目录及包含的子目录吗"
  347. // }
  348. //}
  349. //
  350. ////删除指标
  351. //if req.EdbInfoId > 0 {
  352. // //判断指标是否用于作图,如果用于作图,则不可删除
  353. // chartCount, err := data_manage.GetChartEdbMappingCount(req.EdbInfoId)
  354. // if err != nil && err.Error() != utils.ErrNoRow() {
  355. // br.Msg = "删除失败"
  356. // br.ErrMsg = "判断指标是否被用于作图失败,Err:" + err.Error()
  357. // return
  358. // }
  359. // if chartCount > 0 {
  360. // deleteStatus = 3
  361. // tipsMsg = "当前指标已用作画图,不可删除"
  362. // }
  363. // //判断指标是否用于计算
  364. // {
  365. // calculateCount, err := data_manage.GetEdbInfoCalculateMappingCount(req.EdbInfoId)
  366. // if err != nil && err.Error() != utils.ErrNoRow() {
  367. // br.Msg = "删除失败"
  368. // br.ErrMsg = "判断指标是否被用于计算失败,GetEdbInfoCalculateCount Err:" + err.Error()
  369. // return
  370. // }
  371. // if calculateCount > 0 {
  372. // deleteStatus = 4
  373. // tipsMsg = "当前指标已用作,指标运算,不可删除"
  374. // }
  375. // }
  376. //}
  377. resp := new(data_manage.ClassifyDeleteCheckResp)
  378. resp.DeleteStatus = deleteStatus
  379. resp.TipsMsg = tipsMsg
  380. br.Ret = 200
  381. br.Msg = "检测成功"
  382. br.Success = true
  383. br.Data = resp
  384. }
  385. // @Title 删除分类/指标
  386. // @Description 删除分类/指标接口
  387. // @Param request body data_manage.DeleteEdbClassifyReq true "type json string"
  388. // @Success 200 Ret=200 新增成功
  389. // @router /classify/delete [post]
  390. func (this *EdbClassifyController) DeleteEdbClassify() {
  391. br := new(models.BaseResponse).Init()
  392. defer func() {
  393. this.Data["json"] = br
  394. this.ServeJSON()
  395. }()
  396. sysUser := this.SysUser
  397. if sysUser == nil {
  398. br.Msg = "请登录"
  399. br.ErrMsg = "请登录,SysUser Is Empty"
  400. br.Ret = 408
  401. return
  402. }
  403. var req data_manage.DeleteEdbClassifyReq
  404. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  405. if err != nil {
  406. br.Msg = "参数解析异常!"
  407. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  408. return
  409. }
  410. if req.ClassifyId < 0 && req.EdbInfoId <= 0 {
  411. br.Msg = "参数错误"
  412. br.IsSendEmail = false
  413. return
  414. }
  415. nextItem, err, errMsg := data.Delete(req.ClassifyId, req.EdbInfoId, sysUser, string(this.Ctx.Input.RequestBody), this.Ctx.Input.URI())
  416. if errMsg != `` {
  417. br.Msg = errMsg
  418. br.ErrMsg = errMsg
  419. if err != nil {
  420. br.ErrMsg = err.Error()
  421. } else {
  422. br.IsSendEmail = false
  423. }
  424. return
  425. }
  426. resp := data_manage.AddEdbInfoResp{}
  427. if nextItem != nil {
  428. resp = data_manage.AddEdbInfoResp{
  429. EdbInfoId: nextItem.EdbInfoId,
  430. UniqueCode: nextItem.UniqueCode,
  431. }
  432. }
  433. br.Ret = 200
  434. br.Msg = "删除成功"
  435. br.Success = true
  436. br.IsAddLog = true
  437. br.Data = resp
  438. }
  439. // EdbClassifyMove
  440. // @Title 分类移动接口
  441. // @Description 分类移动接口
  442. // @Success 200 {object} data_manage.MoveEdbClassifyReq
  443. // @router /edb_classify/move [post]
  444. func (this *EdbClassifyController) EdbClassifyMove() {
  445. br := new(models.BaseResponse).Init()
  446. defer func() {
  447. this.Data["json"] = br
  448. this.ServeJSON()
  449. }()
  450. sysUser := this.SysUser
  451. if sysUser == nil {
  452. br.Msg = "请登录"
  453. br.ErrMsg = "请登录,SysUser Is Empty"
  454. br.Ret = 408
  455. return
  456. }
  457. var req data_manage.MoveEdbClassifyReq
  458. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  459. if err != nil {
  460. br.Msg = "参数解析异常!"
  461. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  462. return
  463. }
  464. if req.ClassifyId <= 0 && req.EdbInfoId <= 0 {
  465. br.Msg = "参数错误"
  466. br.ErrMsg = "请选择拖动目标,分类目录或者指标"
  467. return
  468. }
  469. err, errMsg := data.MoveEdbClassify(req, sysUser, 0)
  470. if errMsg != `` {
  471. br.Msg = errMsg
  472. br.ErrMsg = errMsg
  473. if err != nil {
  474. br.ErrMsg = err.Error()
  475. } else {
  476. br.IsSendEmail = false
  477. }
  478. return
  479. }
  480. ////判断分类是否存在
  481. //edbClassifyInfo, err := data_manage.GetEdbClassifyById(req.ClassifyId)
  482. //if err != nil {
  483. // br.Msg = "移动失败"
  484. // br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  485. // return
  486. //}
  487. //updateCol := make([]string, 0)
  488. //
  489. ////判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  490. //if edbClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  491. // parentEdbClassifyInfo, err := data_manage.GetEdbClassifyById(req.ParentClassifyId)
  492. // if err != nil {
  493. // br.Msg = "移动失败"
  494. // br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  495. // return
  496. // }
  497. // edbClassifyInfo.ParentId = parentEdbClassifyInfo.ClassifyId
  498. // edbClassifyInfo.Level = parentEdbClassifyInfo.Level + 1
  499. // edbClassifyInfo.ModifyTime = time.Now()
  500. // updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  501. //}
  502. //
  503. ////如果有传入 上一个兄弟节点分类id
  504. //if req.PrevClassifyId > 0 {
  505. // prevClassify, err := data_manage.GetEdbClassifyById(req.PrevClassifyId)
  506. // if err != nil {
  507. // br.Msg = "移动失败"
  508. // br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  509. // return
  510. // }
  511. //
  512. // //如果是移动在两个兄弟节点之间
  513. // if req.NextClassifyId > 0 {
  514. // //下一个兄弟节点
  515. // nextClassify, err := data_manage.GetEdbClassifyById(req.NextClassifyId)
  516. // if err != nil {
  517. // br.Msg = "移动失败"
  518. // br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  519. // return
  520. // }
  521. // //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  522. // if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == edbClassifyInfo.Sort {
  523. // //变更兄弟节点的排序
  524. // updateSortStr := `sort + 2`
  525. // _ = data_manage.UpdateEdbClassifySortByParentId(prevClassify.ParentId, prevClassify.ClassifyId, prevClassify.Sort, updateSortStr)
  526. // } else {
  527. // //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  528. // if nextClassify.Sort-prevClassify.Sort == 1 {
  529. // //变更兄弟节点的排序
  530. // updateSortStr := `sort + 1`
  531. // _ = data_manage.UpdateEdbClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  532. // }
  533. // }
  534. // }
  535. //
  536. // edbClassifyInfo.Sort = prevClassify.Sort + 1
  537. // edbClassifyInfo.ModifyTime = time.Now()
  538. // updateCol = append(updateCol, "Sort", "ModifyTime")
  539. //} else {
  540. // firstClassify, err := data_manage.GetFirstEdbClassifyByParentId(edbClassifyInfo.ParentId)
  541. // if err != nil && err.Error() != utils.ErrNoRow() {
  542. // br.Msg = "移动失败"
  543. // br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  544. // return
  545. // }
  546. //
  547. // //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  548. // if firstClassify != nil && firstClassify.Sort == 0 {
  549. // updateSortStr := ` sort + 1 `
  550. // _ = data_manage.UpdateEdbClassifySortByParentId(firstClassify.ParentId, firstClassify.ClassifyId-1, 0, updateSortStr)
  551. // }
  552. //
  553. // edbClassifyInfo.Sort = 0 //那就是排在第一位
  554. // edbClassifyInfo.ModifyTime = time.Now()
  555. // updateCol = append(updateCol, "Sort", "ModifyTime")
  556. //}
  557. //
  558. ////更新
  559. //if len(updateCol) > 0 {
  560. // err = edbClassifyInfo.Update(updateCol)
  561. // if err != nil {
  562. // br.Msg = "移动失败"
  563. // br.ErrMsg = "修改失败,Err:" + err.Error()
  564. // return
  565. // }
  566. //}
  567. br.Ret = 200
  568. br.Success = true
  569. br.Msg = "移动成功"
  570. }
  571. // ItemsV2
  572. // @Title 分类列表
  573. // @Description 分类列表接口
  574. // @Success 200 {object} data_manage.EdbClassifyListResp
  575. // @router /classify/items/v2 [get]
  576. func (this *EdbClassifyController) ItemsV2() {
  577. br := new(models.BaseResponse).Init()
  578. defer func() {
  579. this.Data["json"] = br
  580. this.ServeJSON()
  581. }()
  582. rootList, err := data_manage.GetEdbClassifyByParentId(0, 0)
  583. if err != nil && err.Error() != utils.ErrNoRow() {
  584. br.Msg = "获取失败"
  585. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  586. return
  587. }
  588. classifyAll, err := data_manage.GetEdbClassifyAll()
  589. if err != nil && err.Error() != utils.ErrNoRow() {
  590. br.Msg = "获取失败"
  591. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  592. return
  593. }
  594. //allEdbInfo, err := data_manage.GetEdbInfoAll(0)
  595. //if err != nil && err.Error() != utils.ErrNoRow() {
  596. // br.Msg = "获取失败"
  597. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  598. // return
  599. //}
  600. //edbInfoMap := make(map[int][]*data_manage.EdbClassifyItems)
  601. //for _, v := range allEdbInfo {
  602. // button := data.GetEdbOpButton(this.SysUser, v.SysUserId)
  603. // button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  604. // v.Button = button
  605. // edbInfoMap[v.ClassifyId] = append(edbInfoMap[v.ClassifyId], v)
  606. //}
  607. rootChildMap := make(map[int][]*data_manage.EdbClassifyItems)
  608. for _, v := range classifyAll {
  609. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  610. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  611. v.Button = button
  612. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  613. //if existItems, ok := edbInfoMap[v.ClassifyId]; ok {
  614. // v.Children = existItems
  615. //} else {
  616. // items := make([]*data_manage.EdbClassifyItems, 0)
  617. // v.Children = items
  618. //}
  619. }
  620. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  621. for _, v := range rootList {
  622. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  623. v.Button = button
  624. if existItems, ok := rootChildMap[v.ClassifyId]; ok {
  625. v.Children = existItems
  626. } else {
  627. items := make([]*data_manage.EdbClassifyItems, 0)
  628. v.Children = items
  629. }
  630. nodeAll = append(nodeAll, v)
  631. }
  632. language := `CN`
  633. // 指标显示的语言
  634. {
  635. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  636. if configDetail != nil {
  637. language = configDetail.ConfigValue
  638. } else {
  639. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  640. if configDetail != nil {
  641. language = configDetail.ConfigValue
  642. }
  643. }
  644. }
  645. // 是否允许添加一级分类
  646. canOpClassify := true
  647. //button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  648. //if !button.AddButton {
  649. // canOpClassify = false
  650. //}
  651. resp := data_manage.EdbClassifyListResp{
  652. AllNodes: nodeAll,
  653. CanOpClassify: canOpClassify,
  654. Language: language,
  655. }
  656. br.Ret = 200
  657. br.Success = true
  658. br.Msg = "获取成功"
  659. br.Data = resp
  660. }
  661. // @Title 获取分类下指标接口
  662. // @Description 获取分类下指标接口
  663. // @Param ClassifyId query int true "分类id"
  664. // @Success 200 {object} data_manage.EdbClassifyListResp
  665. // @router /classify/edb_info/list [get]
  666. func (this *EdbClassifyController) ClassifyEdbInfoList() {
  667. br := new(models.BaseResponse).Init()
  668. defer func() {
  669. this.Data["json"] = br
  670. this.ServeJSON()
  671. }()
  672. classifyId, _ := this.GetInt("ClassifyId")
  673. if classifyId <= 0 {
  674. br.Msg = "参数错误,请刷新页面"
  675. return
  676. }
  677. // 获取当前账号的不可见指标
  678. obj := data_manage.EdbInfoNoPermissionAdmin{}
  679. confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
  680. if err != nil && err.Error() != utils.ErrNoRow() {
  681. br.Msg = "获取失败"
  682. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  683. return
  684. }
  685. noPermissionEdbInfoIdMap := make(map[int]bool)
  686. for _, v := range confList {
  687. noPermissionEdbInfoIdMap[v.EdbInfoId] = true
  688. }
  689. allEdbInfo, err := data_manage.GetEdbInfoByClassifyId(classifyId, 0, 0)
  690. if err != nil && err.Error() != utils.ErrNoRow() {
  691. br.Msg = "获取失败"
  692. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  693. return
  694. }
  695. list := make([]*data_manage.EdbClassifyItems, 0)
  696. for _, v := range allEdbInfo {
  697. // 如果指标不可见,那么就不返回该指标
  698. if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
  699. continue
  700. }
  701. button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
  702. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  703. v.Button = button
  704. list = append(list, v)
  705. }
  706. resp := new(data_manage.ClassifyEdbInfoListResp)
  707. resp.EdbInfoList = list
  708. br.Ret = 200
  709. br.Success = true
  710. br.Msg = "获取成功"
  711. br.Data = resp
  712. }
  713. // ItemsV3
  714. // @Title 分类列表
  715. // @Description 分类列表接口
  716. // @Success 200 {object} data_manage.EdbClassifyListResp
  717. // @router /classify/items/v3 [get]
  718. func (this *EdbClassifyController) ItemsV3() {
  719. br := new(models.BaseResponse).Init()
  720. defer func() {
  721. this.Data["json"] = br
  722. this.ServeJSON()
  723. }()
  724. rootList, err := data_manage.GetEdbClassifyByParentId(0, 0)
  725. if err != nil && err.Error() != utils.ErrNoRow() {
  726. br.Msg = "获取失败"
  727. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  728. return
  729. }
  730. rootTwoList, err := data_manage.GetEdbClassifyByParentIdTwo(0)
  731. if err != nil && err.Error() != utils.ErrNoRow() {
  732. br.Msg = "获取失败"
  733. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  734. return
  735. }
  736. classifyAll, err := data_manage.GetEdbClassifyAllV2(0)
  737. if err != nil && err.Error() != utils.ErrNoRow() {
  738. br.Msg = "获取失败"
  739. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  740. return
  741. }
  742. rootTwoMap := make(map[int][]*data_manage.EdbClassifyItems)
  743. for _, v := range rootTwoList {
  744. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  745. v.Button = button
  746. rootTwoMap[v.ParentId] = append(rootTwoMap[v.ParentId], v)
  747. }
  748. rootTwoChildMap := make(map[int][]*data_manage.EdbClassifyItems)
  749. for _, v := range classifyAll {
  750. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  751. v.Button = button
  752. if v.Level == 3 {
  753. rootTwoChildMap[v.ParentId] = append(rootTwoChildMap[v.ParentId], v)
  754. }
  755. }
  756. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  757. for _, v := range rootList {
  758. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  759. v.Button = button
  760. if existItems, ok := rootTwoMap[v.ClassifyId]; ok {
  761. v.Children = existItems
  762. for _, item := range existItems {
  763. button := data.GetEdbClassifyOpButton(this.SysUser, item.SysUserId)
  764. item.Button = button
  765. if existItems, ok := rootTwoChildMap[item.ClassifyId]; ok {
  766. for _, existItem := range existItems {
  767. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  768. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  769. existItem.Button = button
  770. }
  771. item.Children = existItems
  772. } else {
  773. items := make([]*data_manage.EdbClassifyItems, 0)
  774. item.Children = items
  775. }
  776. }
  777. } else {
  778. items := make([]*data_manage.EdbClassifyItems, 0)
  779. v.Children = items
  780. }
  781. nodeAll = append(nodeAll, v)
  782. }
  783. language := `CN`
  784. // 指标显示的语言
  785. {
  786. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  787. if configDetail != nil {
  788. language = configDetail.ConfigValue
  789. } else {
  790. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  791. if configDetail != nil {
  792. language = configDetail.ConfigValue
  793. }
  794. }
  795. }
  796. // 是否允许添加一级分类
  797. // 是否允许添加一级分类
  798. canOpClassify := true
  799. button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  800. if !button.AddButton {
  801. canOpClassify = false
  802. }
  803. resp := new(data_manage.EdbClassifyListResp)
  804. resp.AllNodes = nodeAll
  805. resp.Language = language
  806. resp.CanOpClassify = canOpClassify
  807. br.Ret = 200
  808. br.Success = true
  809. br.Msg = "获取成功"
  810. br.Data = resp
  811. }
  812. // SimpleList
  813. // @Title 单层分类列表
  814. // @Description 单层分类列表
  815. // @Success 200 {object} data_manage.EdbClassifyListResp
  816. // @router /classify/simple [get]
  817. func (this *EdbClassifyController) SimpleList() {
  818. br := new(models.BaseResponse).Init()
  819. defer func() {
  820. this.Data["json"] = br
  821. this.ServeJSON()
  822. }()
  823. // 默认查一级分类和一级分类下的指标信息,
  824. // 如果是 子级分类,查询该子级分类的下一级分类和指标信息
  825. // 增加标识判断是文件夹还是指标列表
  826. parentId, _ := this.GetInt("ParentId")
  827. rootList, err := data_manage.GetEdbClassifyByParentId(parentId, 0)
  828. if err != nil && err.Error() != utils.ErrNoRow() {
  829. br.Msg = "获取失败"
  830. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  831. return
  832. }
  833. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  834. var sortList data_manage.EdbClassifyItemList
  835. if parentId > 0 {
  836. // 查询挂在当前分类上的指标列表
  837. // 获取当前账号的不可见指标
  838. obj := data_manage.EdbInfoNoPermissionAdmin{}
  839. confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
  840. if err != nil && err.Error() != utils.ErrNoRow() {
  841. br.Msg = "获取失败"
  842. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  843. return
  844. }
  845. noPermissionEdbInfoIdMap := make(map[int]bool)
  846. for _, v := range confList {
  847. noPermissionEdbInfoIdMap[v.EdbInfoId] = true
  848. }
  849. allEdbInfo, err := data_manage.GetEdbInfoByClassifyId(parentId, 0, 0)
  850. if err != nil {
  851. br.Msg = "获取指标数据失败"
  852. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  853. return
  854. }
  855. for _, v := range allEdbInfo {
  856. // 如果指标不可见,那么就不返回该指标
  857. if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
  858. continue
  859. }
  860. button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
  861. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  862. v.Button = button
  863. v.Children = make([]*data_manage.EdbClassifyItems, 0)
  864. v.ParentId = parentId
  865. nodeAll = append(nodeAll, v)
  866. }
  867. }
  868. if len(rootList) > 0 {
  869. for _, v := range rootList {
  870. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  871. v.Button = button
  872. v.Children = make([]*data_manage.EdbClassifyItems, 0)
  873. nodeAll = append(nodeAll, v)
  874. }
  875. }
  876. if len(nodeAll) > 0 {
  877. //根据sort值排序
  878. sortList = nodeAll
  879. sort.Sort(sortList)
  880. }
  881. language := `CN`
  882. // 指标显示的语言
  883. {
  884. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  885. if configDetail != nil {
  886. language = configDetail.ConfigValue
  887. } else {
  888. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  889. if configDetail != nil {
  890. language = configDetail.ConfigValue
  891. }
  892. }
  893. }
  894. // 是否允许添加一级分类
  895. canOpClassify := true
  896. button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  897. if !button.AddButton {
  898. canOpClassify = false
  899. }
  900. resp := new(data_manage.EdbClassifyListResp)
  901. resp.AllNodes = sortList
  902. resp.Language = language
  903. resp.CanOpClassify = canOpClassify
  904. br.Ret = 200
  905. br.Success = true
  906. br.Msg = "获取成功"
  907. br.Data = resp
  908. }
  909. // ClassifyTree
  910. // @Title 多层分类列表树
  911. // @Description 多层分类列表树
  912. // @Success 200 {object} data_manage.EdbClassifyListResp
  913. // @router /classify/tree [get]
  914. func (this *EdbClassifyController) ClassifyTree() {
  915. br := new(models.BaseResponse).Init()
  916. defer func() {
  917. this.Data["json"] = br
  918. this.ServeJSON()
  919. }()
  920. allList, err := data_manage.GetNormalEdbClassifyAll()
  921. if err != nil && err.Error() != utils.ErrNoRow() {
  922. br.Msg = "获取失败"
  923. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  924. return
  925. }
  926. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  927. var sortList data_manage.EdbClassifyItemList
  928. if len(allList) > 0 {
  929. for k, v := range allList {
  930. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  931. allList[k].Button = button
  932. }
  933. nodeAll = data.GetClassifyTreeRecursive(allList, 0)
  934. //根据sort值排序
  935. sortList = nodeAll
  936. sort.Sort(sortList)
  937. }
  938. language := `CN`
  939. // 指标显示的语言
  940. {
  941. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  942. if configDetail != nil {
  943. language = configDetail.ConfigValue
  944. } else {
  945. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  946. if configDetail != nil {
  947. language = configDetail.ConfigValue
  948. }
  949. }
  950. }
  951. // 是否允许添加一级分类
  952. canOpClassify := true
  953. button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  954. if !button.AddButton {
  955. canOpClassify = false
  956. }
  957. resp := new(data_manage.EdbClassifyListResp)
  958. resp.AllNodes = sortList
  959. resp.Language = language
  960. resp.CanOpClassify = canOpClassify
  961. br.Ret = 200
  962. br.Success = true
  963. br.Msg = "获取成功"
  964. br.Data = resp
  965. }
  966. // EdbClassifyMoveV2
  967. // @Title 分类移动接口v2
  968. // @Description 分类移动接口v2
  969. // @Success 200 {object} data_manage.MoveEdbClassifyReq
  970. // @router /edb_classify/move/v2 [post]
  971. //func (this *EdbClassifyController) EdbClassifyMoveV2() {
  972. // br := new(models.BaseResponse).Init()
  973. // defer func() {
  974. // this.Data["json"] = br
  975. // this.ServeJSON()
  976. // }()
  977. //
  978. // sysUser := this.SysUser
  979. // if sysUser == nil {
  980. // br.Msg = "请登录"
  981. // br.ErrMsg = "请登录,SysUser Is Empty"
  982. // br.Ret = 408
  983. // return
  984. // }
  985. //
  986. // var req data_manage.MoveEdbClassifyReq
  987. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  988. // if err != nil {
  989. // br.Msg = "参数解析异常!"
  990. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  991. // return
  992. // }
  993. //
  994. // if req.ClassifyId <= 0 {
  995. // br.Msg = "参数错误"
  996. // br.ErrMsg = "分类id小于等于0"
  997. // return
  998. // }
  999. //
  1000. // err, errMsg := data.MoveEdbClassify(req.ClassifyId, req.ParentClassifyId, req.PrevClassifyId, req.NextClassifyId)
  1001. // if errMsg != `` {
  1002. // br.Msg = errMsg
  1003. // br.ErrMsg = errMsg
  1004. // if err != nil {
  1005. // br.ErrMsg = err.Error()
  1006. // } else {
  1007. // br.IsSendEmail = false
  1008. // }
  1009. // return
  1010. // }
  1011. //
  1012. // br.Ret = 200
  1013. // br.Success = true
  1014. // br.Msg = "移动成功"
  1015. //}