predict_edb_classify.go 24 KB

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