chart_framework.go 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802
  1. package data_manage
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/data_manage"
  7. "eta/eta_api/models/system"
  8. "eta/eta_api/services/data"
  9. "eta/eta_api/utils"
  10. "fmt"
  11. "strings"
  12. "time"
  13. )
  14. // ChartFrameworkController 图库框架
  15. type ChartFrameworkController struct {
  16. controllers.BaseAuthController
  17. }
  18. // List
  19. // @Title 列表
  20. // @Description 列表
  21. // @Param AdminId query int false "创建人ID"
  22. // @Param Visibility query int false "范围: 0-所有; 1-私有; 2-公开"
  23. // @Param Keyword query string false "关键词"
  24. // @Success 200 Ret=200 获取成功
  25. // @router /list [get]
  26. func (this *ChartFrameworkController) List() {
  27. br := new(models.BaseResponse).Init()
  28. defer func() {
  29. if br.ErrMsg == "" {
  30. br.IsSendEmail = false
  31. }
  32. this.Data["json"] = br
  33. this.ServeJSON()
  34. }()
  35. sysUser := this.SysUser
  36. if sysUser == nil {
  37. br.Msg = "请登录"
  38. br.ErrMsg = "请登录,SysUser Is Empty"
  39. br.Ret = 408
  40. return
  41. }
  42. adminId, _ := this.GetInt("AdminId")
  43. visibility, _ := this.GetInt("Visibility")
  44. if visibility == 1 && adminId <= 0 {
  45. adminId = sysUser.AdminId
  46. }
  47. keyword := this.GetString("Keyword")
  48. keyword = strings.TrimSpace(keyword)
  49. frameworkOb := new(data_manage.ChartFramework)
  50. cond := ``
  51. pars := make([]interface{}, 0)
  52. if adminId > 0 {
  53. cond += fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.AdminId)
  54. pars = append(pars, adminId)
  55. }
  56. if keyword != "" {
  57. cond += fmt.Sprintf(` AND %s LIKE ?`, data_manage.ChartFrameworkColumns.FrameworkName)
  58. pars = append(pars, "%"+keyword+"%")
  59. }
  60. if visibility > 0 {
  61. visibilityArr := map[int]int{1: 0, 2: 1}
  62. cond += fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.IsPublic)
  63. pars = append(pars, visibilityArr[visibility])
  64. }
  65. orderRule := `sort ASC, create_time DESC`
  66. list, e := frameworkOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
  67. if e != nil {
  68. br.Msg = "获取失败"
  69. br.ErrMsg = "获取框架列表失败, Err: " + e.Error()
  70. return
  71. }
  72. resp := make([]*data_manage.ChartFrameworkItem, 0)
  73. for _, v := range list {
  74. t := data_manage.FormatChartFramework2Item(v, make([]*data_manage.ChartFrameworkNodeItem, 0))
  75. resp = append(resp, t)
  76. }
  77. br.Data = resp
  78. br.Ret = 200
  79. br.Success = true
  80. br.Msg = "获取成功"
  81. }
  82. // PublicMenu
  83. // @Title 公开框架目录
  84. // @Description 公开框架目录
  85. // @Success 200 Ret=200 获取成功
  86. // @router /public_menu [get]
  87. func (this *ChartFrameworkController) PublicMenu() {
  88. br := new(models.BaseResponse).Init()
  89. defer func() {
  90. if br.ErrMsg == "" {
  91. br.IsSendEmail = false
  92. }
  93. this.Data["json"] = br
  94. this.ServeJSON()
  95. }()
  96. sysUser := this.SysUser
  97. if sysUser == nil {
  98. br.Msg = "请登录"
  99. br.ErrMsg = "请登录,SysUser Is Empty"
  100. br.Ret = 408
  101. return
  102. }
  103. frameworkOb := new(data_manage.ChartFramework)
  104. cond := fmt.Sprintf(` AND %s = ?`, data_manage.ChartFrameworkColumns.IsPublic)
  105. pars := make([]interface{}, 0)
  106. pars = append(pars, 1)
  107. orderRule := `public_time ASC, sort ASC, create_time DESC`
  108. list, e := frameworkOb.GetItemsByCondition(cond, pars, []string{}, orderRule)
  109. if e != nil {
  110. br.Msg = "获取失败"
  111. br.ErrMsg = "获取公开框架失败, Err: " + e.Error()
  112. return
  113. }
  114. // 用户被删除不展示框架
  115. admins, e := system.GetSysAdminList(``, make([]interface{}, 0), []string{}, "")
  116. if e != nil {
  117. br.Msg = "获取失败"
  118. br.ErrMsg = "获取系统用户列表失败, Err: " + e.Error()
  119. return
  120. }
  121. adminExist := make(map[int]bool)
  122. for _, v := range admins {
  123. adminExist[v.AdminId] = true
  124. }
  125. userExist := make(map[int]bool)
  126. userFrameworks := make(map[int][]*data_manage.ChartFrameworkItem)
  127. resp := make([]*data_manage.ChartFrameworkPublicMenuItem, 0)
  128. for _, v := range list {
  129. if !adminExist[v.AdminId] {
  130. continue
  131. }
  132. if !userExist[v.AdminId] {
  133. u := new(data_manage.ChartFrameworkPublicMenuItem)
  134. u.AdminId = v.AdminId
  135. u.MenuName = fmt.Sprintf("%s的框架", v.AdminName)
  136. resp = append(resp, u)
  137. userExist[v.AdminId] = true
  138. }
  139. t := data_manage.FormatChartFramework2Item(v, make([]*data_manage.ChartFrameworkNodeItem, 0))
  140. if userFrameworks[v.AdminId] == nil {
  141. userFrameworks[v.AdminId] = make([]*data_manage.ChartFrameworkItem, 0)
  142. }
  143. userFrameworks[v.AdminId] = append(userFrameworks[v.AdminId], t)
  144. }
  145. for _, v := range resp {
  146. v.Frameworks = userFrameworks[v.AdminId]
  147. }
  148. br.Data = resp
  149. br.Ret = 200
  150. br.Success = true
  151. br.Msg = "获取成功"
  152. }
  153. // Add
  154. // @Title 新增框架
  155. // @Description 新增框架
  156. // @Param request body data_manage.ChartFrameworkAddReq true "type json string"
  157. // @Success 200 Ret=200 操作成功
  158. // @router /add [post]
  159. func (this *ChartFrameworkController) Add() {
  160. br := new(models.BaseResponse).Init()
  161. defer func() {
  162. if br.ErrMsg == "" {
  163. br.IsSendEmail = false
  164. }
  165. this.Data["json"] = br
  166. this.ServeJSON()
  167. }()
  168. sysUser := this.SysUser
  169. if sysUser == nil {
  170. br.Msg = "请登录"
  171. br.ErrMsg = "请登录,SysUser Is Empty"
  172. br.Ret = 408
  173. return
  174. }
  175. // 参数校验
  176. var req data_manage.ChartFrameworkAddReq
  177. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  178. br.Msg = "参数解析异常!"
  179. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  180. return
  181. }
  182. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  183. if req.FrameworkName == "" {
  184. br.Msg = "框架名称不可为空"
  185. return
  186. }
  187. // 重名校验
  188. {
  189. ob := new(data_manage.ChartFramework)
  190. cond := fmt.Sprintf(` AND %s = ? AND %s = ?`, data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
  191. pars := make([]interface{}, 0)
  192. pars = append(pars, req.FrameworkName, sysUser.AdminId)
  193. exist, e := ob.GetItemByCondition(cond, pars)
  194. if e != nil && e.Error() != utils.ErrNoRow() {
  195. br.Msg = "操作失败"
  196. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  197. return
  198. }
  199. if exist != nil {
  200. br.Msg = "框架名称已存在"
  201. return
  202. }
  203. }
  204. // 获取图表分类下各自的图表数
  205. chartsNumMap, e := data.GetMyChartClassifyIdNumMap(sysUser.AdminId)
  206. if e != nil {
  207. br.Msg = "获取失败"
  208. br.ErrMsg = "获取失败, GetMyChartClassifyIdNumMap Err: " + e.Error()
  209. return
  210. }
  211. now := time.Now().Local()
  212. frameworkCode := utils.MD5(fmt.Sprint(now.UnixMilli()))
  213. item := new(data_manage.ChartFramework)
  214. item.FrameworkName = req.FrameworkName
  215. item.FrameworkCode = frameworkCode
  216. item.FrameworkImg = req.FrameworkImg
  217. item.FrameworkContent = req.FrameworkContent
  218. item.AdminId = sysUser.AdminId
  219. item.AdminName = sysUser.RealName
  220. item.CreateTime = now
  221. item.ModifyTime = now
  222. nodes := make([]*data_manage.ChartFrameworkNode, 0)
  223. itemNodes := make([]*data_manage.ChartFrameworkNodeItem, 0)
  224. if len(req.Nodes) > 0 {
  225. for _, v := range req.Nodes {
  226. if v.MyChartClassifyId <= 0 {
  227. continue
  228. }
  229. t := new(data_manage.ChartFrameworkNode)
  230. t.FrameworkName = req.FrameworkName
  231. t.NodeId = v.NodeId
  232. t.NodeName = v.NodeName
  233. t.MyChartClassifyId = v.MyChartClassifyId
  234. t.CreateTime = now
  235. nodes = append(nodes, t)
  236. // 响应节点数据
  237. td := data_manage.FormatChartFrameworkNode2Item(t, chartsNumMap[t.MyChartClassifyId])
  238. itemNodes = append(itemNodes, td)
  239. }
  240. }
  241. if e := item.CreateFrameworkAndNodes(item, nodes); e != nil {
  242. br.Msg = "操作失败"
  243. br.ErrMsg = "新增框架及节点失败, Err: " + e.Error()
  244. return
  245. }
  246. detail := data_manage.FormatChartFramework2Item(item, itemNodes)
  247. br.Data = detail
  248. br.Ret = 200
  249. br.Success = true
  250. br.Msg = "操作成功"
  251. br.IsAddLog = true
  252. }
  253. // Edit
  254. // @Title 编辑框架
  255. // @Description 编辑框架
  256. // @Param request body data_manage.ChartFrameworkEditReq true "type json string"
  257. // @Success 200 Ret=200 操作成功
  258. // @router /edit [post]
  259. func (this *ChartFrameworkController) Edit() {
  260. br := new(models.BaseResponse).Init()
  261. defer func() {
  262. if br.ErrMsg == "" {
  263. br.IsSendEmail = false
  264. }
  265. this.Data["json"] = br
  266. this.ServeJSON()
  267. }()
  268. sysUser := this.SysUser
  269. if sysUser == nil {
  270. br.Msg = "请登录"
  271. br.ErrMsg = "请登录,SysUser Is Empty"
  272. br.Ret = 408
  273. return
  274. }
  275. // 参数校验
  276. var req data_manage.ChartFrameworkEditReq
  277. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  278. br.Msg = "参数解析异常!"
  279. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  280. return
  281. }
  282. if req.ChartFrameworkId <= 0 {
  283. br.Msg = "参数有误"
  284. br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
  285. return
  286. }
  287. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  288. if req.FrameworkName == "" {
  289. br.Msg = "框架名称不可为空"
  290. return
  291. }
  292. frameworkOb := new(data_manage.ChartFramework)
  293. item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
  294. if e != nil {
  295. if e.Error() == utils.ErrNoRow() {
  296. br.Msg = "框架不存在, 请刷新页面"
  297. return
  298. }
  299. br.Msg = "操作失败"
  300. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  301. return
  302. }
  303. // 重名校验
  304. {
  305. ob := new(data_manage.ChartFramework)
  306. cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
  307. pars := make([]interface{}, 0)
  308. pars = append(pars, req.ChartFrameworkId, req.FrameworkName, sysUser.AdminId)
  309. exist, e := ob.GetItemByCondition(cond, pars)
  310. if e != nil && e.Error() != utils.ErrNoRow() {
  311. br.Msg = "操作失败"
  312. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  313. return
  314. }
  315. if exist != nil {
  316. br.Msg = "框架名称已存在"
  317. return
  318. }
  319. }
  320. // 获取图表分类下各自的图表数
  321. chartsNumMap, e := data.GetMyChartClassifyIdNumMap(sysUser.AdminId)
  322. if e != nil {
  323. br.Msg = "获取失败"
  324. br.ErrMsg = "获取失败, GetMyChartClassifyIdNumMap Err: " + e.Error()
  325. return
  326. }
  327. now := time.Now().Local()
  328. item.FrameworkName = req.FrameworkName
  329. item.FrameworkImg = req.FrameworkImg
  330. item.FrameworkContent = req.FrameworkContent
  331. item.ModifyTime = now
  332. updateCols := []string{"FrameworkName", "FrameworkImg", "FrameworkContent", "ModifyTime"}
  333. nodes := make([]*data_manage.ChartFrameworkNode, 0)
  334. itemNodes := make([]*data_manage.ChartFrameworkNodeItem, 0)
  335. if len(req.Nodes) > 0 {
  336. for _, v := range req.Nodes {
  337. if v.MyChartClassifyId <= 0 {
  338. continue
  339. }
  340. t := new(data_manage.ChartFrameworkNode)
  341. t.ChartFrameworkId = req.ChartFrameworkId
  342. t.FrameworkName = req.FrameworkName
  343. t.NodeId = v.NodeId
  344. t.NodeName = v.NodeName
  345. t.MyChartClassifyId = v.MyChartClassifyId
  346. t.CreateTime = now
  347. nodes = append(nodes, t)
  348. // 响应节点数据
  349. td := data_manage.FormatChartFrameworkNode2Item(t, chartsNumMap[t.MyChartClassifyId])
  350. itemNodes = append(itemNodes, td)
  351. }
  352. }
  353. if e := item.EditFrameworkAndNodes(item, updateCols, nodes); e != nil {
  354. br.Msg = "操作失败"
  355. br.ErrMsg = "编辑框架及节点失败, Err: " + e.Error()
  356. return
  357. }
  358. detail := data_manage.FormatChartFramework2Item(item, itemNodes)
  359. br.Data = detail
  360. br.Ret = 200
  361. br.Success = true
  362. br.Msg = "操作成功"
  363. br.IsAddLog = true
  364. }
  365. // Remove
  366. // @Title 删除框架
  367. // @Description 删除视频
  368. // @Param request body data_manage.ChartFrameworkRemoveReq true "type json string"
  369. // @Success 200 Ret=200 操作成功
  370. // @router /remove [post]
  371. func (this *ChartFrameworkController) Remove() {
  372. br := new(models.BaseResponse).Init()
  373. defer func() {
  374. if br.ErrMsg == "" {
  375. br.IsSendEmail = false
  376. }
  377. this.Data["json"] = br
  378. this.ServeJSON()
  379. }()
  380. sysUser := this.SysUser
  381. if sysUser == nil {
  382. br.Msg = "请登录"
  383. br.ErrMsg = "请登录,SysUser Is Empty"
  384. br.Ret = 408
  385. return
  386. }
  387. // 参数校验
  388. var req data_manage.ChartFrameworkRemoveReq
  389. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  390. br.Msg = "参数解析异常!"
  391. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  392. return
  393. }
  394. if req.ChartFrameworkId <= 0 {
  395. br.Msg = "参数有误"
  396. br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
  397. return
  398. }
  399. ob := new(data_manage.ChartFramework)
  400. item, e := ob.GetItemById(req.ChartFrameworkId)
  401. if e != nil {
  402. if e.Error() == utils.ErrNoRow() {
  403. br.Ret = 200
  404. br.Success = true
  405. br.Msg = "操作成功"
  406. return
  407. }
  408. br.Msg = "操作失败"
  409. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  410. return
  411. }
  412. if sysUser.RoleTypeCode != utils.ROLE_TYPE_CODE_ADMIN && item.AdminId != sysUser.AdminId {
  413. br.Msg = "无权操作"
  414. return
  415. }
  416. if e := item.RemoveFrameworkAndNodes(req.ChartFrameworkId); e != nil {
  417. br.Msg = "操作失败"
  418. br.ErrMsg = "删除框架失败, Err: " + e.Error()
  419. return
  420. }
  421. br.Ret = 200
  422. br.Success = true
  423. br.Msg = "操作成功"
  424. br.IsAddLog = true
  425. }
  426. // Rename
  427. // @Title 重命名框架
  428. // @Description 重命名框架
  429. // @Param request body data_manage.ChartFrameworkRenameReq true "type json string"
  430. // @Success 200 Ret=200 操作成功
  431. // @router /rename [post]
  432. func (this *ChartFrameworkController) Rename() {
  433. br := new(models.BaseResponse).Init()
  434. defer func() {
  435. if br.ErrMsg == "" {
  436. br.IsSendEmail = false
  437. }
  438. this.Data["json"] = br
  439. this.ServeJSON()
  440. }()
  441. sysUser := this.SysUser
  442. if sysUser == nil {
  443. br.Msg = "请登录"
  444. br.ErrMsg = "请登录,SysUser Is Empty"
  445. br.Ret = 408
  446. return
  447. }
  448. // 参数校验
  449. var req data_manage.ChartFrameworkRenameReq
  450. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  451. br.Msg = "参数解析异常!"
  452. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  453. return
  454. }
  455. if req.ChartFrameworkId <= 0 {
  456. br.Msg = "参数有误"
  457. br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
  458. return
  459. }
  460. req.FrameworkName = strings.TrimSpace(req.FrameworkName)
  461. if req.FrameworkName == "" {
  462. br.Msg = "框架名称不可为空"
  463. return
  464. }
  465. frameworkOb := new(data_manage.ChartFramework)
  466. item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
  467. if e != nil {
  468. if e.Error() == utils.ErrNoRow() {
  469. br.Msg = "框架不存在, 请刷新页面"
  470. return
  471. }
  472. br.Msg = "操作失败"
  473. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  474. return
  475. }
  476. // 重名校验
  477. {
  478. ob := new(data_manage.ChartFramework)
  479. cond := fmt.Sprintf(` AND %s <> ? AND %s = ? AND %s = ?`, ob.PrimaryId(), data_manage.ChartFrameworkColumns.FrameworkName, data_manage.ChartFrameworkColumns.AdminId)
  480. pars := make([]interface{}, 0)
  481. pars = append(pars, req.ChartFrameworkId, req.FrameworkName, sysUser.AdminId)
  482. exist, e := ob.GetItemByCondition(cond, pars)
  483. if e != nil && e.Error() != utils.ErrNoRow() {
  484. br.Msg = "操作失败"
  485. br.ErrMsg = "获取重名框架失败, Err: " + e.Error()
  486. return
  487. }
  488. if exist != nil {
  489. br.Msg = "框架名称已存在"
  490. return
  491. }
  492. }
  493. now := time.Now().Local()
  494. item.FrameworkName = req.FrameworkName
  495. item.ModifyTime = now
  496. updateCols := []string{"FrameworkName", "ModifyTime"}
  497. if e := item.Update(updateCols); e != nil {
  498. br.Msg = "操作失败"
  499. br.ErrMsg = "框架重命名失败, Err: " + e.Error()
  500. return
  501. }
  502. br.Ret = 200
  503. br.Success = true
  504. br.Msg = "操作成功"
  505. }
  506. // EditPublic
  507. // @Title 公开/隐藏框架
  508. // @Description 公开/隐藏框架
  509. // @Param request body data_manage.ChartFrameworkEditPublicReq true "type json string"
  510. // @Success 200 Ret=200 操作成功
  511. // @router /edit_public [post]
  512. func (this *ChartFrameworkController) EditPublic() {
  513. br := new(models.BaseResponse).Init()
  514. defer func() {
  515. if br.ErrMsg == "" {
  516. br.IsSendEmail = false
  517. }
  518. this.Data["json"] = br
  519. this.ServeJSON()
  520. }()
  521. sysUser := this.SysUser
  522. if sysUser == nil {
  523. br.Msg = "请登录"
  524. br.ErrMsg = "请登录,SysUser Is Empty"
  525. br.Ret = 408
  526. return
  527. }
  528. // 参数校验
  529. var req data_manage.ChartFrameworkEditPublicReq
  530. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  531. br.Msg = "参数解析异常!"
  532. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  533. return
  534. }
  535. if req.ChartFrameworkId <= 0 {
  536. br.Msg = "参数有误"
  537. br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
  538. return
  539. }
  540. if req.IsPublic != 0 && req.IsPublic != 1 {
  541. br.Msg = "参数有误"
  542. br.ErrMsg = fmt.Sprintf("参数有误, IsPublic: %d", req.IsPublic)
  543. return
  544. }
  545. frameworkOb := new(data_manage.ChartFramework)
  546. item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
  547. if e != nil {
  548. if e.Error() == utils.ErrNoRow() {
  549. br.Msg = "框架不存在, 请刷新页面"
  550. return
  551. }
  552. br.Msg = "操作失败"
  553. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  554. return
  555. }
  556. now := time.Now().Local()
  557. updateCols := []string{"IsPublic", "PublicTime", "ModifyTime"}
  558. item.IsPublic = req.IsPublic
  559. if req.IsPublic == 1 {
  560. item.PublicTime = time.Now().Local()
  561. } else {
  562. item.PublicTime = time.Time{}
  563. }
  564. item.ModifyTime = now
  565. if e := item.Update(updateCols); e != nil {
  566. br.Msg = "操作失败"
  567. br.ErrMsg = "更新框架是否公开失败, Err: " + e.Error()
  568. return
  569. }
  570. br.Ret = 200
  571. br.Success = true
  572. br.Msg = "操作成功"
  573. }
  574. // Move
  575. // @Title 移动排序
  576. // @Description 移动排序
  577. // @Param request body data_manage.ChartFrameworkMoveReq true "type json string"
  578. // @Success 200 Ret=200 操作成功
  579. // @router /move [post]
  580. func (this *ChartFrameworkController) Move() {
  581. br := new(models.BaseResponse).Init()
  582. defer func() {
  583. if br.ErrMsg == "" {
  584. br.IsSendEmail = false
  585. }
  586. this.Data["json"] = br
  587. this.ServeJSON()
  588. }()
  589. sysUser := this.SysUser
  590. if sysUser == nil {
  591. br.Msg = "请登录"
  592. br.ErrMsg = "请登录,SysUser Is Empty"
  593. br.Ret = 408
  594. return
  595. }
  596. // 参数校验
  597. var req data_manage.ChartFrameworkMoveReq
  598. if e := json.Unmarshal(this.Ctx.Input.RequestBody, &req); e != nil {
  599. br.Msg = "参数解析异常!"
  600. br.ErrMsg = "参数解析失败,Err:" + e.Error()
  601. return
  602. }
  603. if req.ChartFrameworkId <= 0 {
  604. br.Msg = "参数有误"
  605. br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", req.ChartFrameworkId)
  606. return
  607. }
  608. frameworkOb := new(data_manage.ChartFramework)
  609. item, e := frameworkOb.GetItemById(req.ChartFrameworkId)
  610. if e != nil {
  611. if e.Error() == utils.ErrNoRow() {
  612. br.Msg = "框架不存在, 请刷新页面"
  613. return
  614. }
  615. br.Msg = "操作失败"
  616. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  617. return
  618. }
  619. updateCols := make([]string, 0)
  620. // 上一个兄弟节点
  621. if req.PrevChartFrameworkId > 0 {
  622. prev, e := frameworkOb.GetItemById(req.PrevChartFrameworkId)
  623. if e != nil {
  624. br.Msg = "操作失败"
  625. br.ErrMsg = "获取上一个兄弟节点失败, Err: " + e.Error()
  626. return
  627. }
  628. // 两个兄弟节点之间
  629. if req.NextChartFrameworkId > 0 {
  630. next, e := frameworkOb.GetItemById(req.PrevChartFrameworkId)
  631. if e != nil {
  632. br.Msg = "操作失败"
  633. br.ErrMsg = "获取下一个兄弟节点失败, Err: " + e.Error()
  634. return
  635. }
  636. // 如果上一个与下一个排序权重是一致的, 那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2, 自己变成上一个兄弟的排序权重+1
  637. if prev.Sort == next.Sort || prev.Sort == item.Sort {
  638. strUpdate := `sort + 2`
  639. _ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, prev.ChartFrameworkId, prev.Sort, strUpdate)
  640. } else {
  641. // 如果下一个排序权重正好是上一个节点的下一层, 那么需要再加一层了
  642. if next.Sort-prev.Sort == 1 {
  643. //变更兄弟节点的排序
  644. strUpdate := `sort + 1`
  645. _ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, 0, prev.Sort, strUpdate)
  646. }
  647. }
  648. }
  649. // 上一个兄弟节点sort+1
  650. item.Sort = prev.Sort + 1
  651. item.ModifyTime = time.Now()
  652. updateCols = append(updateCols, "Sort", "ModifyTime")
  653. } else {
  654. first, err := data_manage.GetFirstChartFramework(sysUser.AdminId)
  655. if err != nil && err.Error() != utils.ErrNoRow() {
  656. br.Msg = "操作失败"
  657. br.ErrMsg = "获取我的图库框架排首位的数据失败, Err:" + err.Error()
  658. return
  659. }
  660. if first != nil && first.Sort == 0 {
  661. strUpdate := ` sort + 1 `
  662. _ = data_manage.UpdateChartFrameworkSort(sysUser.AdminId, first.ChartFrameworkId-1, 0, strUpdate)
  663. }
  664. // 排首位
  665. item.Sort = 0
  666. item.ModifyTime = time.Now()
  667. updateCols = append(updateCols, "Sort", "ModifyTime")
  668. }
  669. if len(updateCols) > 0 {
  670. if e := item.Update(updateCols); e != nil {
  671. br.Msg = "操作失败"
  672. br.ErrMsg = "更新框架排序失败, Err: " + e.Error()
  673. return
  674. }
  675. }
  676. br.Ret = 200
  677. br.Success = true
  678. br.Msg = "操作成功"
  679. }
  680. // Detail
  681. // @Title 框架详情
  682. // @Description 框架详情
  683. // @Param ChartFrameworkId query int true "框架ID"
  684. // @Success 200 Ret=200 操作成功
  685. // @router /detail [get]
  686. func (this *ChartFrameworkController) Detail() {
  687. br := new(models.BaseResponse).Init()
  688. defer func() {
  689. if br.ErrMsg == "" {
  690. br.IsSendEmail = false
  691. }
  692. this.Data["json"] = br
  693. this.ServeJSON()
  694. }()
  695. sysUser := this.SysUser
  696. if sysUser == nil {
  697. br.Msg = "请登录"
  698. br.ErrMsg = "请登录,SysUser Is Empty"
  699. br.Ret = 408
  700. return
  701. }
  702. frameworkId, _ := this.GetInt("ChartFrameworkId")
  703. if frameworkId <= 0 {
  704. br.Msg = "参数有误"
  705. br.ErrMsg = fmt.Sprintf("参数有误, ChartFrameworkId: %d", frameworkId)
  706. return
  707. }
  708. frameworkOb := new(data_manage.ChartFramework)
  709. item, e := frameworkOb.GetItemById(frameworkId)
  710. if e != nil {
  711. if e.Error() == utils.ErrNoRow() {
  712. br.Msg = "框架不存在, 请刷新页面"
  713. return
  714. }
  715. br.Msg = "获取失败"
  716. br.ErrMsg = "获取框架失败, Err: " + e.Error()
  717. return
  718. }
  719. // 获取节点
  720. nodeOb := new(data_manage.ChartFrameworkNode)
  721. nodeCond := ` AND chart_framework_id = ?`
  722. nodePars := make([]interface{}, 0)
  723. nodePars = append(nodePars, frameworkId)
  724. nodes, e := nodeOb.GetItemsByCondition(nodeCond, nodePars, []string{}, "")
  725. if e != nil {
  726. br.Msg = "获取失败"
  727. br.ErrMsg = "获取框架节点失败, Err: " + e.Error()
  728. return
  729. }
  730. // 获取图表分类下各自的图表数
  731. chartsNumMap, e := data.GetMyChartClassifyIdNumMap(sysUser.AdminId)
  732. if e != nil {
  733. br.Msg = "获取失败"
  734. br.ErrMsg = "获取失败, GetMyChartClassifyIdNumMap Err: " + e.Error()
  735. return
  736. }
  737. // 格式化响应数据
  738. itemNodes := make([]*data_manage.ChartFrameworkNodeItem, 0)
  739. for _, v := range nodes {
  740. if v.NodeId == "" {
  741. continue
  742. }
  743. itemNodes = append(itemNodes, data_manage.FormatChartFrameworkNode2Item(v, chartsNumMap[v.MyChartClassifyId]))
  744. }
  745. detail := data_manage.FormatChartFramework2Item(item, itemNodes)
  746. br.Data = detail
  747. br.Ret = 200
  748. br.Success = true
  749. br.Msg = "操作成功"
  750. }