edb_classify.go 31 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076
  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. rootList, err := data_manage.GetEdbClassifyByParentId(parentId, 0)
  829. if err != nil && err.Error() != utils.ErrNoRow() {
  830. br.Msg = "获取失败"
  831. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  832. return
  833. }
  834. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  835. var sortList data_manage.EdbClassifyItemList
  836. if parentId > 0 {
  837. // 查询挂在当前分类上的指标列表
  838. // 获取当前账号的不可见指标
  839. obj := data_manage.EdbInfoNoPermissionAdmin{}
  840. confList, err := obj.GetAllListByAdminId(this.SysUser.AdminId)
  841. if err != nil && err.Error() != utils.ErrNoRow() {
  842. br.Msg = "获取失败"
  843. br.ErrMsg = "获取不可见指标配置数据失败,Err:" + err.Error()
  844. return
  845. }
  846. noPermissionEdbInfoIdMap := make(map[int]bool)
  847. for _, v := range confList {
  848. noPermissionEdbInfoIdMap[v.EdbInfoId] = true
  849. }
  850. allEdbInfo, err := data_manage.GetEdbInfoByClassifyId(parentId, 0, 0)
  851. if err != nil {
  852. br.Msg = "获取指标数据失败"
  853. br.ErrMsg = "获取指标数据失败,Err:" + err.Error()
  854. return
  855. }
  856. for _, v := range allEdbInfo {
  857. // 如果指标不可见,那么就不返回该指标
  858. if _, ok := noPermissionEdbInfoIdMap[v.EdbInfoId]; ok {
  859. continue
  860. }
  861. button := data.GetEdbOpButton(this.SysUser, v.SysUserId, v.EdbType, utils.EDB_INFO_TYPE)
  862. button.AddButton = false //不管有没有权限,指标都是没有添加按钮的
  863. v.Button = button
  864. v.Children = make([]*data_manage.EdbClassifyItems, 0)
  865. v.ParentId = parentId
  866. nodeAll = append(nodeAll, v)
  867. }
  868. }
  869. if len(rootList) > 0 {
  870. for _, v := range rootList {
  871. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  872. v.Button = button
  873. v.Children = make([]*data_manage.EdbClassifyItems, 0)
  874. nodeAll = append(nodeAll, v)
  875. }
  876. }
  877. if len(nodeAll) > 0 {
  878. //根据sort值排序
  879. sortList = nodeAll
  880. sort.Sort(sortList)
  881. }
  882. language := `CN`
  883. // 指标显示的语言
  884. {
  885. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  886. if configDetail != nil {
  887. language = configDetail.ConfigValue
  888. } else {
  889. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  890. if configDetail != nil {
  891. language = configDetail.ConfigValue
  892. }
  893. }
  894. }
  895. // 是否允许添加一级分类
  896. canOpClassify := true
  897. button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  898. if !button.AddButton {
  899. canOpClassify = false
  900. }
  901. resp := new(data_manage.EdbClassifyListResp)
  902. resp.AllNodes = sortList
  903. resp.Language = language
  904. resp.CanOpClassify = canOpClassify
  905. br.Ret = 200
  906. br.Success = true
  907. br.Msg = "获取成功"
  908. br.Data = resp
  909. }
  910. // ClassifyTree
  911. // @Title 多层分类列表树
  912. // @Description 多层分类列表树
  913. // @Success 200 {object} data_manage.EdbClassifyListResp
  914. // @router /classify/tree [get]
  915. func (this *EdbClassifyController) ClassifyTree() {
  916. br := new(models.BaseResponse).Init()
  917. defer func() {
  918. this.Data["json"] = br
  919. this.ServeJSON()
  920. }()
  921. allList, err := data_manage.GetNormalEdbClassifyAll()
  922. if err != nil && err.Error() != utils.ErrNoRow() {
  923. br.Msg = "获取失败"
  924. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  925. return
  926. }
  927. nodeAll := make([]*data_manage.EdbClassifyItems, 0)
  928. var sortList data_manage.EdbClassifyItemList
  929. if len(allList) > 0 {
  930. for k, v := range allList {
  931. button := data.GetEdbClassifyOpButton(this.SysUser, v.SysUserId)
  932. allList[k].Button = button
  933. }
  934. nodeAll = data.GetClassifyTreeRecursive(allList, 0)
  935. //根据sort值排序
  936. sortList = nodeAll
  937. sort.Sort(sortList)
  938. }
  939. language := `CN`
  940. // 指标显示的语言
  941. {
  942. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  943. if configDetail != nil {
  944. language = configDetail.ConfigValue
  945. } else {
  946. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  947. if configDetail != nil {
  948. language = configDetail.ConfigValue
  949. }
  950. }
  951. }
  952. // 是否允许添加一级分类
  953. canOpClassify := true
  954. button := data.GetEdbClassifyOpButton(this.SysUser, 0)
  955. if !button.AddButton {
  956. canOpClassify = false
  957. }
  958. resp := new(data_manage.EdbClassifyListResp)
  959. resp.AllNodes = sortList
  960. resp.Language = language
  961. resp.CanOpClassify = canOpClassify
  962. br.Ret = 200
  963. br.Success = true
  964. br.Msg = "获取成功"
  965. br.Data = resp
  966. }
  967. // EdbClassifyMoveV2
  968. // @Title 分类移动接口v2
  969. // @Description 分类移动接口v2
  970. // @Success 200 {object} data_manage.MoveEdbClassifyReq
  971. // @router /edb_classify/move/v2 [post]
  972. //func (this *EdbClassifyController) EdbClassifyMoveV2() {
  973. // br := new(models.BaseResponse).Init()
  974. // defer func() {
  975. // this.Data["json"] = br
  976. // this.ServeJSON()
  977. // }()
  978. //
  979. // sysUser := this.SysUser
  980. // if sysUser == nil {
  981. // br.Msg = "请登录"
  982. // br.ErrMsg = "请登录,SysUser Is Empty"
  983. // br.Ret = 408
  984. // return
  985. // }
  986. //
  987. // var req data_manage.MoveEdbClassifyReq
  988. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  989. // if err != nil {
  990. // br.Msg = "参数解析异常!"
  991. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  992. // return
  993. // }
  994. //
  995. // if req.ClassifyId <= 0 {
  996. // br.Msg = "参数错误"
  997. // br.ErrMsg = "分类id小于等于0"
  998. // return
  999. // }
  1000. //
  1001. // err, errMsg := data.MoveEdbClassify(req.ClassifyId, req.ParentClassifyId, req.PrevClassifyId, req.NextClassifyId)
  1002. // if errMsg != `` {
  1003. // br.Msg = errMsg
  1004. // br.ErrMsg = errMsg
  1005. // if err != nil {
  1006. // br.ErrMsg = err.Error()
  1007. // } else {
  1008. // br.IsSendEmail = false
  1009. // }
  1010. // return
  1011. // }
  1012. //
  1013. // br.Ret = 200
  1014. // br.Success = true
  1015. // br.Msg = "移动成功"
  1016. //}