edb_public_classify.go 39 KB

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