chart_classify.go 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_forum_admin/models"
  5. "eta/eta_forum_admin/models/system"
  6. "eta/eta_forum_admin/services"
  7. "eta/eta_forum_admin/utils"
  8. "fmt"
  9. "github.com/rdlucklib/rdluck_tools/paging"
  10. "sort"
  11. "strconv"
  12. "strings"
  13. "time"
  14. )
  15. // 数据管理-分类模块
  16. type ChartClassifyController struct {
  17. BaseAuthController
  18. }
  19. // ChartClassifyListV2
  20. // @Title 图表分类列表
  21. // @Description 图表分类列表接口
  22. // @Param IsShowMe query bool true "是否只看我的,true、false"
  23. // @Success 200 {object} models.ChartClassifyListResp
  24. // @router /chart_classify/list [get]
  25. func (this *ChartClassifyController) ChartClassifyListV2() {
  26. br := new(models.BaseResponse).Init()
  27. defer func() {
  28. this.Data["json"] = br
  29. this.ServeJSON()
  30. }()
  31. resp := new(models.ChartClassifyListResp)
  32. //判断是否存在缓存,如果存在缓存,那么直接从缓存中获取
  33. key := utils.CACHE_CHART_CLASSIFY
  34. if utils.Re == nil {
  35. if utils.Re == nil && utils.Rc.IsExist(key) {
  36. if redisData, err1 := utils.Rc.RedisBytes(key); err1 == nil {
  37. err := json.Unmarshal(redisData, &resp)
  38. if err == nil && resp != nil {
  39. br.Ret = 200
  40. br.Success = true
  41. br.Msg = "获取成功"
  42. br.Data = resp
  43. fmt.Println("source redis")
  44. return
  45. }
  46. }
  47. }
  48. }
  49. rootList, err := models.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  50. if err != nil && err.Error() != utils.ErrNoRow() {
  51. br.Msg = "获取失败"
  52. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  53. return
  54. }
  55. classifyAll, err := models.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  56. if err != nil && err.Error() != utils.ErrNoRow() {
  57. br.Msg = "获取失败"
  58. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  59. return
  60. }
  61. allChartInfo, err := models.GetChartInfoAll([]int{utils.CHART_SOURCE_DEFAULT})
  62. if err != nil && err.Error() != utils.ErrNoRow() {
  63. br.Msg = "获取失败"
  64. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  65. return
  66. }
  67. chartInfoMap := make(map[int][]*models.ChartClassifyItems)
  68. for _, v := range allChartInfo {
  69. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  70. }
  71. rootChildMap := make(map[int][]*models.ChartClassifyItems)
  72. for _, v := range classifyAll {
  73. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  74. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  75. v.Children = existItems
  76. } else {
  77. items := make([]*models.ChartClassifyItems, 0)
  78. v.Children = items
  79. }
  80. }
  81. nodeAll := make([]*models.ChartClassifyItems, 0)
  82. for _, v := range rootList {
  83. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  84. v.Children = existItems
  85. } else {
  86. items := make([]*models.ChartClassifyItems, 0)
  87. v.Children = items
  88. }
  89. nodeAll = append(nodeAll, v)
  90. }
  91. //
  92. //
  93. //nodeAll := make([]*models.ChartClassifyItems, 0)
  94. //for k := range rootList {
  95. // rootNode := rootList[k]
  96. // services.ChartClassifyListMakeTree(classifyAll, rootNode)
  97. // nodeAll = append(nodeAll, rootNode)
  98. //}
  99. resp.AllNodes = nodeAll
  100. // 将数据加入缓存
  101. if utils.Re == nil {
  102. redisData, _ := json.Marshal(resp)
  103. utils.Rc.Put(key, redisData, 2*time.Hour)
  104. }
  105. br.Ret = 200
  106. br.Success = true
  107. br.Msg = "获取成功"
  108. br.Data = resp
  109. }
  110. // getChartClassifyListForMe 获取我创建的图表
  111. func getChartClassifyListForMe(adminInfo system.Admin, resp *models.ChartClassifyListResp) (errMsg string, err error) {
  112. rootList, err := models.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  113. if err != nil && err.Error() != utils.ErrNoRow() {
  114. errMsg = "获取失败"
  115. return
  116. }
  117. classifyAll, err := models.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  118. if err != nil && err.Error() != utils.ErrNoRow() {
  119. errMsg = "获取失败"
  120. return
  121. }
  122. allChartInfo, err := models.GetChartInfoByAdminId([]int{utils.CHART_SOURCE_DEFAULT}, adminInfo.AdminId)
  123. if err != nil && err.Error() != utils.ErrNoRow() {
  124. errMsg = "获取失败"
  125. return
  126. }
  127. chartInfoMap := make(map[int][]*models.ChartClassifyItems)
  128. for _, v := range allChartInfo {
  129. chartInfoMap[v.ChartClassifyId] = append(chartInfoMap[v.ChartClassifyId], v)
  130. }
  131. rootChildMap := make(map[int][]*models.ChartClassifyItems)
  132. for _, v := range classifyAll {
  133. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  134. if existItems, ok := chartInfoMap[v.ChartClassifyId]; ok {
  135. v.Children = existItems
  136. } else {
  137. items := make([]*models.ChartClassifyItems, 0)
  138. v.Children = items
  139. }
  140. }
  141. nodeAll := make([]*models.ChartClassifyItems, 0)
  142. for _, v := range rootList {
  143. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  144. v.Children = existItems
  145. } else {
  146. items := make([]*models.ChartClassifyItems, 0)
  147. v.Children = items
  148. }
  149. nodeAll = append(nodeAll, v)
  150. }
  151. resp.AllNodes = nodeAll
  152. return
  153. }
  154. // SimpleList
  155. // @Title 单层分类列表
  156. // @Description 单层分类列表
  157. // @Success 200 {object} data_manage.EdbClassifyListResp
  158. // @router /classify/simple [get]
  159. func (this *ChartClassifyController) SimpleList() {
  160. br := new(models.BaseResponse).Init()
  161. defer func() {
  162. this.Data["json"] = br
  163. this.ServeJSON()
  164. }()
  165. // 默认查一级分类和一级分类下的指标信息,
  166. // 如果是 子级分类,查询该子级分类的下一级分类和指标信息
  167. // 增加标识判断是文件夹还是指标列表
  168. reqParentId, _ := this.GetInt("ParentId")
  169. parentId := 0
  170. nodeAll := make([]*models.ChartClassifyItems, 0)
  171. // 处理未分类
  172. //查询未分类的指标列表
  173. if reqParentId == -1 {
  174. initClassify := &models.ChartClassifyItems{
  175. ChartClassifyId: 0,
  176. ChartInfoId: 0,
  177. ChartClassifyName: "未分类",
  178. ChartClassifyNameEn: "",
  179. ParentId: 0,
  180. Level: 1,
  181. Sort: 0,
  182. }
  183. nodeAll = append(nodeAll, initClassify)
  184. } else {
  185. parentId = reqParentId
  186. }
  187. rootList := make([]*models.ChartClassifyItems, 0)
  188. var err error
  189. if reqParentId == -1 {
  190. rootList, err = models.GetChartClassifyByParentId(parentId, utils.CHART_SOURCE_DEFAULT)
  191. if err != nil && err.Error() != utils.ErrNoRow() {
  192. br.Msg = "获取失败"
  193. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  194. return
  195. }
  196. }
  197. var sortList models.ChartClassifyItemList
  198. if reqParentId >= 0 {
  199. // 查询挂在当前分类上的图表列表
  200. allChartInfo, e := models.GetChartInfoAllByClassifyId(utils.CHART_SOURCE_DEFAULT, parentId)
  201. if e != nil && e.Error() != utils.ErrNoRow() {
  202. br.Msg = "获取失败"
  203. br.ErrMsg = "获取图表信息失败,Err:" + e.Error()
  204. return
  205. }
  206. if len(allChartInfo) > 0 {
  207. for _, v := range allChartInfo {
  208. v.Children = make([]*models.ChartClassifyItems, 0)
  209. nodeAll = append(nodeAll, v)
  210. }
  211. }
  212. }
  213. if len(rootList) > 0 {
  214. for _, v := range rootList {
  215. v.Children = make([]*models.ChartClassifyItems, 0)
  216. nodeAll = append(nodeAll, v)
  217. }
  218. }
  219. if len(nodeAll) > 0 {
  220. //根据sort值排序
  221. sortList = nodeAll
  222. sort.Sort(sortList)
  223. }
  224. language := `CN`
  225. // 指标显示的语言
  226. {
  227. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.EdbLanguageVar)
  228. if configDetail != nil {
  229. language = configDetail.ConfigValue
  230. } else {
  231. configDetail, _ = system.GetDefaultConfigDetailByCode(system.EdbLanguageVar)
  232. if configDetail != nil {
  233. language = configDetail.ConfigValue
  234. }
  235. }
  236. }
  237. resp := new(models.ChartClassifyListResp)
  238. if len(nodeAll) > 0 {
  239. resp.AllNodes = sortList
  240. } else {
  241. resp.AllNodes = nodeAll
  242. }
  243. resp.Language = language
  244. br.Ret = 200
  245. br.Success = true
  246. br.Msg = "获取成功"
  247. br.Data = resp
  248. }
  249. // ChartClassifyItems
  250. // @Title 获取所有图表分类接口-不包含图表
  251. // @Description 获取所有图表分类接口-不包含图表
  252. // @Success 200 {object} models.ChartClassifyListResp
  253. // @router /chart_classify/items [get]
  254. func (this *ChartClassifyController) ChartClassifyItems() {
  255. br := new(models.BaseResponse).Init()
  256. defer func() {
  257. this.Data["json"] = br
  258. this.ServeJSON()
  259. }()
  260. rootList, err := models.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  261. if err != nil {
  262. br.Msg = "获取失败"
  263. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  264. return
  265. }
  266. classifyAll, err := models.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  267. if err != nil {
  268. br.Msg = "获取失败"
  269. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  270. return
  271. }
  272. nodeAll := make([]*models.ChartClassifyItems, 0)
  273. for k := range rootList {
  274. rootNode := rootList[k]
  275. services.ChartClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode)
  276. nodeAll = append(nodeAll, rootNode)
  277. }
  278. language := `CN`
  279. // 指标显示的语言
  280. {
  281. configDetail, _ := system.GetConfigDetailByCode(this.SysUser.AdminId, system.ChartLanguageVar)
  282. if configDetail != nil {
  283. language = configDetail.ConfigValue
  284. } else {
  285. configDetail, _ = system.GetDefaultConfigDetailByCode(system.ChartLanguageVar)
  286. if configDetail != nil {
  287. language = configDetail.ConfigValue
  288. }
  289. }
  290. }
  291. // 是否允许添加分类
  292. canOpClassify := true
  293. // 如果不是 超管 或者 ficc管理员 或者 ficc研究员,那么就没有权限
  294. //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) {
  295. // canOpClassify = false
  296. //}
  297. resp := models.ChartClassifyListResp{
  298. AllNodes: nodeAll,
  299. Language: language,
  300. CanOpClassify: canOpClassify,
  301. }
  302. br.Ret = 200
  303. br.Success = true
  304. br.Msg = "获取成功"
  305. br.Data = resp
  306. }
  307. // @Title 新增图表分类
  308. // @Description 新增图表分类接口
  309. // @Param request body models.AddChartClassifyReq true "type json string"
  310. // @Success 200 Ret=200 保存成功
  311. // @router /classify/add [post]
  312. func (this *ChartClassifyController) AddChartClassify() {
  313. br := new(models.BaseResponse).Init()
  314. defer func() {
  315. this.Data["json"] = br
  316. this.ServeJSON()
  317. }()
  318. var req models.AddChartClassifyReq
  319. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  320. if err != nil {
  321. br.Msg = "参数解析异常!"
  322. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  323. return
  324. }
  325. if req.ChartClassifyName == "" {
  326. br.Msg = "请输入分类名称"
  327. br.IsSendEmail = false
  328. return
  329. }
  330. if req.ParentId < 0 {
  331. br.Msg = "参数错误"
  332. br.IsSendEmail = false
  333. return
  334. }
  335. // 新增图表分类
  336. _, err, errMsg, isSendEmail := services.AddChartClassify(req.ChartClassifyName, req.ParentId, utils.CHART_SOURCE_DEFAULT, this.Lang, this.SysUser)
  337. if err != nil {
  338. br.Msg = errMsg
  339. br.ErrMsg = "添加分类失败,Err:" + err.Error()
  340. br.IsSendEmail = isSendEmail
  341. return
  342. }
  343. br.Ret = 200
  344. br.Msg = "保存成功"
  345. br.Success = true
  346. }
  347. // EditChartClassify
  348. // @Title 修改图表分类
  349. // @Description 修改图表分类接口
  350. // @Param request body models.EditChartClassifyReq true "type json string"
  351. // @Success 200 Ret=200 修改成功
  352. // @router /classify/edit [post]
  353. func (this *ChartClassifyController) EditChartClassify() {
  354. br := new(models.BaseResponse).Init()
  355. defer func() {
  356. this.Data["json"] = br
  357. this.ServeJSON()
  358. }()
  359. var req models.EditChartClassifyReq
  360. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  361. if err != nil {
  362. br.Msg = "参数解析异常!"
  363. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  364. return
  365. }
  366. if req.ChartClassifyName == "" {
  367. br.Msg = "请输入分类名称"
  368. br.IsSendEmail = false
  369. return
  370. }
  371. if req.ChartClassifyId <= 0 {
  372. br.Msg = "参数错误"
  373. br.IsSendEmail = false
  374. return
  375. }
  376. // 编辑图表分类
  377. _, err, errMsg, isSendEmail := services.EditChartClassify(req.ChartClassifyId, utils.CHART_SOURCE_DEFAULT, req.ChartClassifyName, this.Lang, this.SysUser)
  378. if err != nil {
  379. br.Msg = errMsg
  380. br.ErrMsg = "保存分类失败,Err:" + err.Error()
  381. br.IsSendEmail = isSendEmail
  382. return
  383. }
  384. br.Ret = 200
  385. br.Msg = "保存成功"
  386. br.Success = true
  387. br.IsAddLog = true
  388. }
  389. // @Title 删除图表检测接口
  390. // @Description 删除图表检测接口
  391. // @Param request body models.ChartClassifyDeleteCheckResp true "type json string"
  392. // @Success 200 Ret=200 检测成功
  393. // @router /chart_classify/delete/check [post]
  394. func (this *ChartClassifyController) DeleteChartClassifyCheck() {
  395. br := new(models.BaseResponse).Init()
  396. defer func() {
  397. this.Data["json"] = br
  398. this.ServeJSON()
  399. }()
  400. var req models.ChartClassifyDeleteCheckReq
  401. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  402. if err != nil {
  403. br.Msg = "参数解析异常!"
  404. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  405. return
  406. }
  407. if req.ChartClassifyId < 0 && req.ChartInfoId <= 0 {
  408. br.Msg = "参数错误"
  409. br.IsSendEmail = false
  410. return
  411. }
  412. var deleteStatus int
  413. var tipsMsg string
  414. //删除分类
  415. if req.ChartClassifyId > 0 && req.ChartInfoId == 0 {
  416. // 查找分类
  417. /*item, err := models.GetChartClassifyById(req.ChartClassifyId)
  418. if err != nil {
  419. br.Msg = "保存失败"
  420. br.Msg = "获取分类信息失败,Err:" + err.Error()
  421. return
  422. }
  423. // 已授权分类id
  424. permissionClassifyIdList, err := data_manage_permission.GetUserChartClassifyPermissionList(this.SysUser.AdminId, item.ChartClassifyId)
  425. if err != nil {
  426. br.Msg = "获取失败"
  427. br.ErrMsg = "获取已授权分类id数据失败,Err:" + err.Error()
  428. return
  429. }
  430. // todo 删除是否需要加权限校验
  431. {
  432. haveOperaAuth := data_manage_permission.CheckEdbClassifyPermissionByPermissionIdList(item.IsJoinPermission, item.ChartClassifyId, permissionClassifyIdList)
  433. button := services.GetChartClassifyOpButton(this.SysUser, item.SysUserId, haveOperaAuth)
  434. if !button.OpButton {
  435. br.Msg = "无操作权限"
  436. br.IsSendEmail = false
  437. return
  438. }
  439. }*/
  440. //判断图表分类下,是否含有图表
  441. count, err := models.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  442. if err != nil {
  443. br.Msg = "删除失败"
  444. br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  445. return
  446. }
  447. if count > 0 {
  448. deleteStatus = 1
  449. tipsMsg = "该分类下关联图表不可删除"
  450. }
  451. }
  452. if deleteStatus != 1 && req.ChartInfoId == 0 {
  453. classifyCount, err := models.GetChartClassifyCountByClassifyId(req.ChartClassifyId)
  454. if err != nil && err.Error() != utils.ErrNoRow() {
  455. br.Msg = "删除失败"
  456. br.ErrMsg = "分类下是否含有图表失败,Err:" + err.Error()
  457. return
  458. }
  459. if classifyCount > 0 {
  460. deleteStatus = 2
  461. tipsMsg = "确认删除当前目录及包含的子目录吗"
  462. }
  463. }
  464. if deleteStatus == 0 {
  465. tipsMsg = "可删除,进行删除操作"
  466. }
  467. resp := new(models.ChartClassifyDeleteCheckResp)
  468. resp.DeleteStatus = deleteStatus
  469. resp.TipsMsg = tipsMsg
  470. br.Ret = 200
  471. br.Msg = "检测成功"
  472. br.Success = true
  473. br.Data = resp
  474. }
  475. // @Title 删除图表分类/图表
  476. // @Description 删除图表分类/图表接口
  477. // @Param request body models.DeleteChartClassifyReq true "type json string"
  478. // @Success 200 Ret=200 删除成功
  479. // @router /classify/delete [post]
  480. func (this *ChartClassifyController) DeleteChartClassify() {
  481. br := new(models.BaseResponse).Init()
  482. defer func() {
  483. this.Data["json"] = br
  484. this.ServeJSON()
  485. }()
  486. sysUser := this.SysUser
  487. if sysUser == nil {
  488. br.Msg = "请登录"
  489. br.ErrMsg = "请登录,SysUser Is Empty"
  490. br.Ret = 408
  491. return
  492. }
  493. var req models.DeleteChartClassifyReq
  494. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  495. if err != nil {
  496. br.Msg = "参数解析异常!"
  497. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  498. return
  499. }
  500. if req.ChartClassifyId < 0 {
  501. br.Msg = "参数错误"
  502. br.IsSendEmail = false
  503. return
  504. }
  505. //删除分类
  506. _, err = models.GetChartClassifyById(req.ChartClassifyId)
  507. if err != nil {
  508. if err.Error() == utils.ErrNoRow() {
  509. br.Msg = "分类不存在,请刷新"
  510. return
  511. }
  512. br.Msg = "操作失败"
  513. br.Msg = "获取分类信息失败,Err:" + err.Error()
  514. return
  515. }
  516. //判断是否含有指标
  517. count, err := models.GetChartInfoCountByClassifyId(req.ChartClassifyId)
  518. if err != nil && err.Error() != utils.ErrNoRow() {
  519. br.Msg = "删除失败"
  520. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  521. return
  522. }
  523. if count > 0 {
  524. br.Msg = "该目录下存在关联指标,不可删除"
  525. br.IsSendEmail = false
  526. return
  527. }
  528. err = models.DeleteChartClassify(req.ChartClassifyId)
  529. if err != nil {
  530. br.Msg = "删除失败"
  531. br.ErrMsg = "删除失败,Err:" + err.Error()
  532. return
  533. }
  534. resp := new(models.AddChartInfoResp)
  535. br.Ret = 200
  536. br.Msg = "删除成功"
  537. br.Success = true
  538. br.Data = resp
  539. br.IsAddLog = true
  540. }
  541. // ChartClassifyMove
  542. // @Title 图表分类移动接口
  543. // @Description 图表分类移动接口
  544. // @Success 200 {object} models.MoveChartClassifyReq
  545. // @router /classify/move [post]
  546. func (this *ChartClassifyController) ChartClassifyMove() {
  547. br := new(models.BaseResponse).Init()
  548. defer func() {
  549. if br.ErrMsg == "" {
  550. br.IsSendEmail = false
  551. }
  552. this.Data["json"] = br
  553. this.ServeJSON()
  554. }()
  555. sysUser := this.SysUser
  556. if sysUser == nil {
  557. br.Msg = "请登录"
  558. br.ErrMsg = "请登录,SysUser Is Empty"
  559. br.Ret = 408
  560. return
  561. }
  562. var req models.MoveChartClassifyReq
  563. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  564. if err != nil {
  565. br.Msg = "参数解析异常!"
  566. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  567. return
  568. }
  569. if req.ClassifyId <= 0 {
  570. br.Msg = "参数错误"
  571. br.ErrMsg = "分类id小于等于0"
  572. return
  573. }
  574. //判断分类是否存在
  575. /*chartClassifyInfo, err := models.GetChartClassifyById(req.ClassifyId)
  576. if err != nil {
  577. if err.Error() == utils.ErrNoRow() {
  578. br.Msg = "分类不存在,请刷新页面"
  579. return
  580. }
  581. br.Msg = "移动失败"
  582. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  583. return
  584. }
  585. // 校验移动的父级目录下是否有重名分类
  586. exists, e := models.GetChartClassifyByParentIdAndName(req.ParentClassifyId, chartClassifyInfo.ChartClassifyName, req.ClassifyId)
  587. if e != nil && e.Error() != utils.ErrNoRow() {
  588. br.Msg = "移动失败"
  589. br.ErrMsg = "获取父级目录下的同名分类失败, Err: " + e.Error()
  590. return
  591. }
  592. if exists != nil {
  593. br.Msg = "移动失败,分类名称已存在"
  594. return
  595. }
  596. if chartClassifyInfo.Source != utils.CHART_SOURCE_DEFAULT {
  597. br.Msg = "分类异常"
  598. br.ErrMsg = "分类异常,不是ETA图库的分类"
  599. return
  600. }
  601. updateCol := make([]string, 0)
  602. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  603. if chartClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  604. parentChartClassifyInfo, err := models.GetChartClassifyById(req.ParentClassifyId)
  605. if err != nil {
  606. br.Msg = "移动失败"
  607. br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  608. return
  609. }
  610. chartClassifyInfo.ParentId = parentChartClassifyInfo.ChartClassifyId
  611. chartClassifyInfo.Level = parentChartClassifyInfo.Level + 1
  612. chartClassifyInfo.ModifyTime = time.Now()
  613. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  614. }
  615. //如果有传入 上一个兄弟节点分类id
  616. if req.PrevClassifyId > 0 {
  617. //上一个兄弟节点
  618. prevClassify, err := models.GetChartClassifyById(req.PrevClassifyId)
  619. if err != nil {
  620. br.Msg = "移动失败"
  621. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  622. return
  623. }
  624. //如果是移动在两个兄弟节点之间
  625. if req.NextClassifyId > 0 {
  626. //下一个兄弟节点
  627. nextClassify, err := models.GetChartClassifyById(req.NextClassifyId)
  628. if err != nil {
  629. br.Msg = "移动失败"
  630. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  631. return
  632. }
  633. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  634. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == chartClassifyInfo.Sort {
  635. //变更兄弟节点的排序
  636. updateSortStr := `sort + 2`
  637. _ = models.UpdateChartClassifySortByParentId(prevClassify.ParentId, prevClassify.ChartClassifyId, prevClassify.Sort, updateSortStr)
  638. } else {
  639. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  640. if nextClassify.Sort-prevClassify.Sort == 1 {
  641. //变更兄弟节点的排序
  642. updateSortStr := `sort + 1`
  643. _ = models.UpdateChartClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  644. }
  645. }
  646. }
  647. chartClassifyInfo.Sort = prevClassify.Sort + 1
  648. chartClassifyInfo.ModifyTime = time.Now()
  649. updateCol = append(updateCol, "Sort", "ModifyTime")
  650. } else {
  651. firstClassify, err := models.GetFirstChartClassifyByParentId(chartClassifyInfo.ParentId)
  652. if err != nil && err.Error() != utils.ErrNoRow() {
  653. br.Msg = "移动失败"
  654. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  655. return
  656. }
  657. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  658. if firstClassify != nil && firstClassify.Sort == 0 {
  659. updateSortStr := ` sort + 1 `
  660. _ = models.UpdateChartClassifySortByParentId(firstClassify.ParentId, firstClassify.ChartClassifyId-1, 0, updateSortStr)
  661. }
  662. chartClassifyInfo.Sort = 0 //那就是排在第一位
  663. chartClassifyInfo.ModifyTime = time.Now()
  664. updateCol = append(updateCol, "Sort", "ModifyTime")
  665. }
  666. //更新
  667. if len(updateCol) > 0 {
  668. err = chartClassifyInfo.Update(updateCol)
  669. if err != nil {
  670. br.Msg = "移动失败"
  671. br.ErrMsg = "修改失败,Err:" + err.Error()
  672. return
  673. }
  674. }*/
  675. err, errMsg := services.MoveChartClassify(req, sysUser, 0)
  676. if errMsg != `` {
  677. br.Msg = errMsg
  678. br.ErrMsg = errMsg
  679. if err != nil {
  680. br.ErrMsg = err.Error()
  681. } else {
  682. br.IsSendEmail = false
  683. }
  684. return
  685. }
  686. br.Ret = 200
  687. br.Success = true
  688. br.Msg = "移动成功"
  689. }
  690. // getChartClassifyListForMe 获取我创建的图表分类
  691. func getChartClassifyListForMeV2(adminInfo system.Admin, resp *models.ChartClassifyListResp) (errMsg string, err error) {
  692. rootList, err := models.GetChartClassifyByParentId(0, utils.CHART_SOURCE_DEFAULT)
  693. if err != nil && err.Error() != utils.ErrNoRow() {
  694. errMsg = "获取失败"
  695. return
  696. }
  697. classifyAll, err := models.GetChartClassifyAll(utils.CHART_SOURCE_DEFAULT)
  698. if err != nil && err.Error() != utils.ErrNoRow() {
  699. errMsg = "获取失败"
  700. return
  701. }
  702. rootChildMap := make(map[int][]*models.ChartClassifyItems)
  703. for _, v := range classifyAll {
  704. rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  705. }
  706. nodeAll := make([]*models.ChartClassifyItems, 0)
  707. for _, v := range rootList {
  708. if existItems, ok := rootChildMap[v.ChartClassifyId]; ok {
  709. v.Children = existItems
  710. } else {
  711. items := make([]*models.ChartClassifyItems, 0)
  712. v.Children = items
  713. }
  714. nodeAll = append(nodeAll, v)
  715. }
  716. resp.AllNodes = nodeAll
  717. return
  718. }
  719. // ChartClassifyChartListV2
  720. // @Title 根据图表分类获取图表列表
  721. // @Description 根据图表分类获取图表列表接口
  722. // @Param SysUserIds query string true "根据创建人查询"
  723. // @Param ChartClassifyId query bool true "图片分类id"
  724. // @Success 200 {object} models.ChartClassifyListResp
  725. // @router /classify/chart_list [get]
  726. func (this *ChartClassifyController) ChartClassifyChartListV2() {
  727. br := new(models.BaseResponse).Init()
  728. defer func() {
  729. this.Data["json"] = br
  730. this.ServeJSON()
  731. }()
  732. sysUser := this.SysUser
  733. if sysUser == nil {
  734. br.Msg = "请登录"
  735. br.ErrMsg = "请登录,SysUser Is Empty"
  736. br.Ret = 408
  737. return
  738. }
  739. resp := new(models.ChartClassifyListResp)
  740. chartClassifyId, _ := this.GetInt("ChartClassifyId")
  741. if chartClassifyId < 0 && chartClassifyId != -1 {
  742. br.Msg = "参数错误"
  743. return
  744. }
  745. pageSize, _ := this.GetInt("PageSize")
  746. currentIndex, _ := this.GetInt("CurrentIndex")
  747. var startSize int
  748. if pageSize <= 0 {
  749. pageSize = utils.PageSize20
  750. }
  751. if currentIndex <= 0 {
  752. currentIndex = 1
  753. }
  754. startSize = utils.StartIndex(currentIndex, pageSize)
  755. sysUserIds := this.GetString("SysUserIds")
  756. allChartInfo := make([]*models.ChartClassifyItems, 0)
  757. var err error
  758. var total int64
  759. if sysUserIds != "" {
  760. adminIds := strings.Split(sysUserIds, ",")
  761. if len(adminIds) == 0 {
  762. br.Msg = "请选择正确的创建人"
  763. return
  764. }
  765. adminIdsSlice := make([]int, 0)
  766. for _, adminId := range adminIds {
  767. adminIdInt, e := strconv.Atoi(adminId)
  768. if e != nil {
  769. br.Msg = "请选择正确的创建人"
  770. return
  771. }
  772. adminIdsSlice = append(adminIdsSlice, adminIdInt)
  773. }
  774. allChartInfo, err = models.GetChartInfoByAdminIdAndClassify([]int{utils.CHART_SOURCE_DEFAULT}, adminIdsSlice, chartClassifyId, startSize, pageSize)
  775. if err != nil && err.Error() != utils.ErrNoRow() {
  776. br.Msg = "获取失败"
  777. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  778. return
  779. }
  780. total, err = models.GetChartInfoTotalByAdminIdAndClassify([]int{utils.CHART_SOURCE_DEFAULT}, adminIdsSlice, chartClassifyId)
  781. if err != nil {
  782. br.Msg = "获取失败"
  783. br.ErrMsg = "获取图表总数失败,Err:" + err.Error()
  784. return
  785. }
  786. } else {
  787. allChartInfo, err = models.GetChartInfoByClassifyId(utils.CHART_SOURCE_DEFAULT, chartClassifyId, startSize, pageSize)
  788. if err != nil && err.Error() != utils.ErrNoRow() {
  789. br.Msg = "获取失败"
  790. br.ErrMsg = "获取图表信息失败,Err:" + err.Error()
  791. return
  792. }
  793. total, err = models.GetChartInfoTotalByClassifyId(utils.CHART_SOURCE_DEFAULT, chartClassifyId)
  794. if err != nil {
  795. br.Msg = "获取失败"
  796. br.ErrMsg = "获取图表总数失败,Err:" + err.Error()
  797. return
  798. }
  799. }
  800. page := paging.GetPaging(currentIndex, pageSize, int(total))
  801. resp.AllNodes = allChartInfo
  802. resp.Paging = page
  803. br.Ret = 200
  804. br.Success = true
  805. br.Msg = "获取成功"
  806. br.Data = resp
  807. }