chart_classify.go 25 KB

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