chart_classify.go 25 KB

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