sandbox.go 39 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390
  1. package sandbox
  2. import (
  3. "encoding/json"
  4. "eta/eta_api/controllers"
  5. "eta/eta_api/models"
  6. "eta/eta_api/models/sandbox"
  7. "eta/eta_api/models/sandbox/request"
  8. "eta/eta_api/models/sandbox/response"
  9. "eta/eta_api/models/system"
  10. sandboxService "eta/eta_api/services/sandbox"
  11. "eta/eta_api/utils"
  12. "fmt"
  13. "github.com/rdlucklib/rdluck_tools/paging"
  14. "time"
  15. )
  16. // versionSize 版本列表第一页数据约定是:3条
  17. var versionSize = 3
  18. // SandboxController 逻辑导图
  19. type SandboxController struct {
  20. controllers.BaseAuthController
  21. }
  22. // List
  23. // @Title 逻辑导图列表
  24. // @Description 逻辑导图列表接口
  25. // @Param PageSize query int true "每页数据条数"
  26. // @Param CurrentIndex query int true "当前页页码,从1开始"
  27. // @Param ChartPermissionId query int true "权限编号id"
  28. // @Param Keyword query string false "搜索关键词:沙盘名称/编辑人名称"
  29. // @Success 200 {object} response.SandboxListResp
  30. // @router /list [get]
  31. func (this *SandboxController) List() {
  32. br := new(models.BaseResponse).Init()
  33. defer func() {
  34. this.Data["json"] = br
  35. this.ServeJSON()
  36. }()
  37. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  38. keyword := this.GetString("Keyword")
  39. pageSize, _ := this.GetInt("PageSize")
  40. currentIndex, _ := this.GetInt("CurrentIndex")
  41. var startSize int
  42. if pageSize <= 0 {
  43. pageSize = utils.PageSize20
  44. }
  45. if currentIndex <= 0 {
  46. currentIndex = 1
  47. }
  48. startSize = paging.StartIndex(currentIndex, pageSize)
  49. var condition string
  50. var pars []interface{}
  51. if chartPermissionId > 0 {
  52. condition += " AND a.chart_permission_id=? "
  53. pars = append(pars, chartPermissionId)
  54. }
  55. if keyword != "" {
  56. condition += ` AND ( a.name LIKE '%` + keyword + `%' OR b.name LIKE '%` + keyword + `%' )`
  57. }
  58. //获取指标信息
  59. total, list, err := sandbox.GetList(condition, pars, startSize, pageSize)
  60. if err != nil && err.Error() != utils.ErrNoRow() {
  61. br.Success = true
  62. br.Msg = "获取沙盘列表失败"
  63. br.ErrMsg = "获取沙盘列表失败,Err:" + err.Error()
  64. return
  65. }
  66. if list == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  67. list = make([]*sandbox.SandboxListItem, 0)
  68. }
  69. if len(list) > 0 {
  70. sandboxIdList := make([]int, 0)
  71. for _, v := range list {
  72. sandboxIdList = append(sandboxIdList, v.SandboxId)
  73. }
  74. sandboxVersionTotalList, err := sandbox.GetTotalSandboxVersionBySandboxIdList(sandboxIdList)
  75. if err != nil {
  76. br.Success = true
  77. br.Msg = "获取沙盘版本数量失败"
  78. br.ErrMsg = "获取沙盘版本数量失败,Err:" + err.Error()
  79. return
  80. }
  81. sandboxVersionTotalMap := make(map[int]int)
  82. for _, v := range sandboxVersionTotalList {
  83. sandboxVersionTotalMap[v.SandboxId] = v.Total
  84. }
  85. for _, item := range list {
  86. /*key := fmt.Sprint(`crm:sandbox:edit:`, item.SandboxId)
  87. opUserId, _ := utils.Rc.RedisInt(key)
  88. //如果当前没有人操作,获取当前操作人是本人,那么编辑按钮可用
  89. if opUserId <= 0 || (opUserId == this.SysUser.AdminId) {
  90. item.CanEdit = true
  91. } else {
  92. adminInfo, errAdmin := system.GetSysUserById(opUserId)
  93. if errAdmin != nil {
  94. br.Msg = "获取失败"
  95. br.ErrMsg = "获取失败,Err:" + errAdmin.Error()
  96. return
  97. }
  98. item.Editor = adminInfo.RealName
  99. }*/
  100. markStatus, err := sandboxService.UpdateSandboxEditMark(item.SandboxId, this.SysUser.AdminId, 2, this.SysUser.RealName)
  101. if err != nil {
  102. br.Msg = "查询标记状态失败"
  103. br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  104. return
  105. }
  106. if markStatus.Status == 0 {
  107. item.CanEdit = true
  108. } else {
  109. item.Editor = markStatus.Editor
  110. }
  111. // 沙盘版本数量
  112. versionTotal := sandboxVersionTotalMap[item.SandboxId]
  113. item.VersionTotal = versionTotal
  114. }
  115. }
  116. page := paging.GetPaging(currentIndex, pageSize, total)
  117. resp := response.SandboxListResp{
  118. Paging: page,
  119. List: list,
  120. }
  121. br.Ret = 200
  122. br.Success = true
  123. br.Msg = "获取成功"
  124. br.Data = resp
  125. }
  126. // FirstVersionList
  127. // @Title 逻辑导图版本列表(列表页第一页)
  128. // @Description 逻辑导图版本列表接口(列表页第一页)
  129. // @Param SandboxId query int true "沙盘id"
  130. // @Success 200 {object} response.SandboxVersionListResp
  131. // @router /version/first_list [get]
  132. func (this *SandboxController) FirstVersionList() {
  133. br := new(models.BaseResponse).Init()
  134. defer func() {
  135. this.Data["json"] = br
  136. this.ServeJSON()
  137. }()
  138. sandboxId, _ := this.GetInt("SandboxId")
  139. keyword := this.GetString("Keyword")
  140. currentIndex := 1
  141. pageSize := versionSize
  142. startSize := 0
  143. var condition string
  144. var pars []interface{}
  145. if sandboxId <= 0 {
  146. br.Msg = "参数错误,沙盘编号id必传!"
  147. br.ErrMsg = "参数错误,沙盘编号id必传"
  148. return
  149. }
  150. condition += " AND a.sandbox_id=? "
  151. pars = append(pars, sandboxId)
  152. //不能筛选出当前版本
  153. condition += " AND b.curr_version < a.curr_version "
  154. if keyword != "" {
  155. condition += ` AND ( a.name LIKE '%` + keyword + `%' OR b.name LIKE '%` + keyword + `%' )`
  156. }
  157. //获取指标信息
  158. total, list, err := sandbox.GetVersionList(condition, pars, startSize, pageSize)
  159. if err != nil && err.Error() != utils.ErrNoRow() {
  160. br.Success = true
  161. br.Msg = "获取沙盘列表失败"
  162. br.ErrMsg = "获取沙盘列表失败,Err:" + err.Error()
  163. return
  164. }
  165. if list == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  166. list = make([]*sandbox.SandboxVersionListItem, 0)
  167. }
  168. for _, v := range list {
  169. v.ModifyTime = v.CreateTime
  170. }
  171. page := paging.GetPaging(currentIndex, pageSize, total)
  172. resp := response.SandboxVersionListResp{
  173. Paging: page,
  174. List: list,
  175. }
  176. br.Ret = 200
  177. br.Success = true
  178. br.Msg = "获取成功"
  179. br.Data = resp
  180. }
  181. // VersionList
  182. // @Title 逻辑导图版本列表
  183. // @Description 逻辑导图版本列表接口
  184. // @Param PageSize query int true "每页数据条数"
  185. // @Param CurrentIndex query int true "当前页页码,从1开始"
  186. // @Param SandboxId query int true "沙盘id"
  187. // @Success 200 {object} response.SandboxVersionListResp
  188. // @router /version/list [get]
  189. func (this *SandboxController) VersionList() {
  190. br := new(models.BaseResponse).Init()
  191. defer func() {
  192. this.Data["json"] = br
  193. this.ServeJSON()
  194. }()
  195. sandboxId, _ := this.GetInt("SandboxId")
  196. keyWord := this.GetString("Keyword")
  197. pageSize, _ := this.GetInt("PageSize")
  198. currentIndex, _ := this.GetInt("CurrentIndex")
  199. var startSize int
  200. if pageSize <= 0 {
  201. pageSize = utils.PageSize20
  202. }
  203. //第一页需要返回的几条数据(目前是3条)
  204. startSize = paging.StartIndex(currentIndex, pageSize) + versionSize
  205. var condition string
  206. var pars []interface{}
  207. if sandboxId <= 0 {
  208. br.Msg = "参数错误,沙盘编号id必传!"
  209. br.ErrMsg = "参数错误,沙盘编号id必传"
  210. return
  211. }
  212. condition += " AND a.sandbox_id=? "
  213. pars = append(pars, sandboxId)
  214. //不能筛选出当前版本
  215. condition += " AND b.curr_version < a.curr_version "
  216. if keyWord != "" {
  217. condition += ` AND ( a.op_user_name LIKE '%` + keyWord + `%' OR a.name LIKE '%` + keyWord + `%' or a.op_user_name LIKE '%` + keyWord + `%' OR a.name LIKE '%` + keyWord + `%' )`
  218. }
  219. //获取指标信息
  220. total, list, err := sandbox.GetVersionList(condition, pars, startSize, pageSize)
  221. if err != nil && err.Error() != utils.ErrNoRow() {
  222. br.Success = true
  223. br.Msg = "获取沙盘列表失败"
  224. br.ErrMsg = "获取沙盘列表失败,Err:" + err.Error()
  225. return
  226. }
  227. if list == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  228. list = make([]*sandbox.SandboxVersionListItem, 0)
  229. }
  230. for _, v := range list {
  231. v.ModifyTime = v.CreateTime
  232. /*key := fmt.Sprint(`crm:sandbox:edit:`, v.SandboxId)
  233. opUserId, _ := utils.Rc.RedisInt(key)
  234. //如果当前没有人操作,获取当前操作人是本人,那么编辑按钮可用
  235. if opUserId <= 0 || (opUserId == this.SysUser.AdminId) {
  236. v.CanEdit = true
  237. }*/
  238. markStatus, err := sandboxService.UpdateSandboxEditMark(v.SandboxId, this.SysUser.AdminId, 2, this.SysUser.RealName)
  239. if err != nil {
  240. br.Msg = "查询标记状态失败"
  241. br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  242. return
  243. }
  244. if markStatus.Status == 0 {
  245. v.CanEdit = true
  246. }
  247. }
  248. //过滤第一页的几条数据(目前是3条)
  249. total = total - versionSize
  250. if total <= 0 {
  251. total = 0
  252. }
  253. page := paging.GetPaging(currentIndex, pageSize, total)
  254. resp := response.SandboxVersionListResp{
  255. Paging: page,
  256. List: list,
  257. }
  258. br.Ret = 200
  259. br.Success = true
  260. br.Msg = "获取成功"
  261. br.Data = resp
  262. }
  263. // Save
  264. // @Title 新增/编辑保存沙盘
  265. // @Description 新增/编辑保存沙盘接口
  266. // @Param request body request.AddAndEditSandbox true "type json string"
  267. // @Success 200 {object} sandbox.Sandbox
  268. // @router /save [post]
  269. func (this *SandboxController) Save() {
  270. br := new(models.BaseResponse).Init()
  271. defer func() {
  272. this.Data["json"] = br
  273. this.ServeJSON()
  274. }()
  275. sysUser := this.SysUser
  276. if sysUser == nil {
  277. br.Msg = "请登录"
  278. br.ErrMsg = "请登录,SysUser Is Empty"
  279. br.Ret = 408
  280. return
  281. }
  282. var req request.AddAndEditSandbox
  283. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  284. if err != nil {
  285. br.Msg = "参数解析异常!"
  286. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  287. return
  288. }
  289. var sandboxResp *sandbox.SandboxSaveResp
  290. // 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
  291. menus, e := system.GetSysMenuItemsByCondition(` AND hidden = 0`, make([]interface{}, 0), []string{}, ``)
  292. if e != nil {
  293. br.Msg = "保存失败"
  294. br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
  295. return
  296. }
  297. menuMap := make(map[string]bool)
  298. for _, m := range menus {
  299. if m.ButtonCode != "" {
  300. menuMap[m.ButtonCode] = true
  301. }
  302. }
  303. ignoreVariety := false
  304. if !menuMap[system.MenuSpecialHandleSandboxVariety] {
  305. ignoreVariety = true
  306. }
  307. var errMsg string
  308. if req.SandboxVersionCode == `` {
  309. //新增沙盘
  310. sandboxResp, err = sandboxService.AddSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
  311. } else {
  312. ////更新当前编辑中的状态缓存
  313. //err = sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 1)
  314. //if err != nil {
  315. // br.Msg = err.Error()
  316. // return
  317. //}
  318. //编辑沙盘
  319. sandboxResp, err, errMsg = sandboxService.UpdateSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
  320. }
  321. if err != nil {
  322. br.Msg = "保存失败!"
  323. if errMsg != `` {
  324. br.Msg = errMsg
  325. }
  326. br.ErrMsg = "保存失败,Err:" + err.Error()
  327. return
  328. }
  329. msg := "保存成功"
  330. br.Ret = 200
  331. br.Success = true
  332. br.Msg = msg
  333. br.Data = sandboxResp
  334. }
  335. // AddSandboxDraft
  336. // @Title 添加沙盘草稿
  337. // @Description 添加沙盘草稿接口
  338. // @Param request body request.AddAndEditSandbox true "type json string"
  339. // @Success 200 {object} sandbox.SandboxDraft
  340. // @Fail 202 另外的人在操作,不要重复添加草稿;204 错误了,当时不是必要性的错误,不用将错误信息暴露给用户
  341. // @router /draft/add [post]
  342. func (this *SandboxController) AddSandboxDraft() {
  343. br := new(models.BaseResponse).Init()
  344. br.IsSendEmail = false
  345. defer func() {
  346. this.Data["json"] = br
  347. this.ServeJSON()
  348. }()
  349. sysUser := this.SysUser
  350. if sysUser == nil {
  351. br.Msg = "请登录"
  352. br.ErrMsg = "请登录,SysUser Is Empty"
  353. br.Ret = 408
  354. return
  355. }
  356. var req request.AddAndEditSandbox
  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.SandboxVersionCode == `` {
  364. br.Msg = "请传入沙盘版本!"
  365. return
  366. }
  367. // 获取沙盘版本信息
  368. sandboxVersion, err := sandbox.GetSandboxVersionBySandboxVersionCode(req.SandboxVersionCode)
  369. if err != nil {
  370. if err.Error() == utils.ErrNoRow() {
  371. br.Msg = "找不到该版本!"
  372. br.ErrMsg = "找不到该版本"
  373. return
  374. }
  375. br.Msg = "找不到该版本!"
  376. br.ErrMsg = "找不到该版本,Err:" + err.Error()
  377. br.IsSendEmail = false
  378. return
  379. }
  380. //更新标记key
  381. markStatus, err := sandboxService.UpdateSandboxEditMark(sandboxVersion.SandboxId, sysUser.AdminId, 1, sysUser.RealName)
  382. if err != nil {
  383. br.Msg = err.Error()
  384. return
  385. }
  386. if markStatus.Status == 1 {
  387. br.Msg = markStatus.Msg
  388. return
  389. }
  390. //新增沙盘草稿
  391. sandboxDraftInfo, err := sandboxService.AddSandboxDraft(sandboxVersion.SandboxId, req, sysUser.AdminId, sysUser.RealName)
  392. if err != nil {
  393. br.Msg = "保存失败!"
  394. br.ErrMsg = "保存失败,Err:" + err.Error()
  395. br.Ret = 204 //204 (无内容) :服务器成功处理了请求,但没有返回任何内容。
  396. return
  397. }
  398. msg := "保存成功"
  399. br.Ret = 200
  400. br.Success = true
  401. br.Msg = msg
  402. br.Data = sandboxDraftInfo
  403. }
  404. // MarkEditStatus
  405. // @Title 标记沙盘编辑状态
  406. // @Description 标记沙盘编辑状态接口
  407. // @Param request body request.MarkEditSandbox true "type json string"
  408. // @Success 200 标记成功 ;202 标记成功
  409. // @router /mark [post]
  410. func (this *SandboxController) MarkEditStatus() {
  411. br := new(models.BaseResponse).Init()
  412. defer func() {
  413. this.Data["json"] = br
  414. this.ServeJSON()
  415. }()
  416. sysUser := this.SysUser
  417. if sysUser == nil {
  418. br.Msg = "请登录"
  419. br.ErrMsg = "请登录,SysUser Is Empty"
  420. br.Ret = 408
  421. return
  422. }
  423. var req request.MarkEditSandbox
  424. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  425. if err != nil {
  426. br.Msg = "参数解析异常!"
  427. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  428. return
  429. }
  430. if req.SandboxId <= 0 {
  431. br.Msg = "缺少沙盘编号"
  432. return
  433. }
  434. if req.Status <= 0 {
  435. br.Msg = "标记状态异常"
  436. return
  437. }
  438. //更新标记key
  439. data, err := sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, req.Status, sysUser.RealName)
  440. if err != nil {
  441. br.Msg = err.Error()
  442. return
  443. }
  444. msg := "标记成功"
  445. br.Ret = 200
  446. br.Success = true
  447. br.Msg = msg
  448. br.Data = data
  449. }
  450. // GetSandboxVersionDetail
  451. // @Title 获取沙盘版本数据详情(已保存的)
  452. // @Description 获取沙盘版本数据详情接口(已保存的)
  453. // @Param SandboxVersionCode query string true "沙盘版本code"
  454. // @Success 200 {object} sandbox.SandboxVersion
  455. // @router /version/detail [get]
  456. func (this *SandboxController) GetSandboxVersionDetail() {
  457. br := new(models.BaseResponse).Init()
  458. defer func() {
  459. this.Data["json"] = br
  460. this.ServeJSON()
  461. }()
  462. sysUser := this.SysUser
  463. if sysUser == nil {
  464. br.Msg = "请登录"
  465. br.ErrMsg = "请登录,SysUser Is Empty"
  466. br.Ret = 408
  467. return
  468. }
  469. sandboxVersionCode := this.GetString("SandboxVersionCode")
  470. if sandboxVersionCode == "" {
  471. br.Msg = "缺少沙盘版本编号"
  472. return
  473. }
  474. //获取沙盘数据详情(已保存的)
  475. sandboxVersionInfo, err := sandboxService.GetSandboxVersionDetailByCode(sandboxVersionCode)
  476. if err != nil {
  477. br.Msg = "获取失败"
  478. br.ErrMsg = "获取失败,Err:" + err.Error()
  479. return
  480. }
  481. msg := "获取成功"
  482. br.Ret = 200
  483. br.Success = true
  484. br.Msg = msg
  485. br.Data = sandboxVersionInfo
  486. }
  487. // GetLastSandboxInfo
  488. // @Title 获取最后一次编辑的沙盘数据详情
  489. // @Description 获取最后一次编辑的沙盘数据详情接口
  490. // @Param SandboxId query int true "沙盘编号id"
  491. // @Success 200 {object} sandbox.Sandbox
  492. // @router /last_info [get]
  493. func (this *SandboxController) GetLastSandboxInfo() {
  494. br := new(models.BaseResponse).Init()
  495. defer func() {
  496. this.Data["json"] = br
  497. this.ServeJSON()
  498. }()
  499. sysUser := this.SysUser
  500. if sysUser == nil {
  501. br.Msg = "请登录"
  502. br.ErrMsg = "请登录,SysUser Is Empty"
  503. br.Ret = 408
  504. return
  505. }
  506. sandboxId, _ := this.GetInt("SandboxId", 0)
  507. if sandboxId <= 0 {
  508. br.Msg = "缺少沙盘编号"
  509. return
  510. }
  511. //获取最后一次操作的沙盘数据
  512. sandboxInfo, err := sandboxService.GetLastSandboxInfo(sandboxId)
  513. if err != nil {
  514. br.Msg = err.Error()
  515. return
  516. }
  517. msg := "获取成功"
  518. br.Ret = 200
  519. br.Success = true
  520. br.Msg = msg
  521. br.Data = sandboxInfo
  522. }
  523. // Delete
  524. // @Title 删除沙盘
  525. // @Description 删除沙盘接口
  526. // @Param request body request.DeleteSandbox true "type json string"
  527. // @Success 200 标记成功
  528. // @router /delete [post]
  529. func (this *SandboxController) Delete() {
  530. br := new(models.BaseResponse).Init()
  531. defer func() {
  532. this.Data["json"] = br
  533. this.ServeJSON()
  534. }()
  535. sysUser := this.SysUser
  536. if sysUser == nil {
  537. br.Msg = "请登录"
  538. br.ErrMsg = "请登录,SysUser Is Empty"
  539. br.Ret = 408
  540. return
  541. }
  542. var req request.DeleteSandbox
  543. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  544. if err != nil {
  545. br.Msg = "参数解析异常!"
  546. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  547. return
  548. }
  549. if req.SandboxId <= 0 {
  550. br.Msg = "缺少沙盘编号"
  551. return
  552. }
  553. /*key := fmt.Sprint(`crm:sandbox:edit:`, req.SandboxId)
  554. opUserId, _ := utils.Rc.RedisInt(key)
  555. //如果当前有人操作,且获取当前操作人不是本人,那么不允许删除
  556. if opUserId > 0 && opUserId != this.SysUser.AdminId {
  557. br.Msg = "当前有其他人正在编辑,不允许删除该沙盘"
  558. return
  559. }*/
  560. markStatus, err := sandboxService.UpdateSandboxEditMark(req.SandboxId, this.SysUser.AdminId, 2, this.SysUser.RealName)
  561. if err != nil {
  562. br.Msg = "查询标记状态失败"
  563. br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  564. return
  565. }
  566. if markStatus.Status == 1 {
  567. br.Msg = fmt.Sprintf("当前%s正在编辑,不允许删除该沙盘", markStatus.Editor)
  568. return
  569. }
  570. //删除沙盘
  571. err = sandboxService.DeleteSandbox(req.SandboxId)
  572. if err != nil {
  573. br.Msg = err.Error()
  574. return
  575. }
  576. msg := "删除成功"
  577. br.Ret = 200
  578. br.Success = true
  579. br.Msg = msg
  580. }
  581. // DeleteVersion
  582. // @Title 删除沙盘版本
  583. // @Description 删除沙盘版本接口
  584. // @Param request body request.DeleteSandbox true "type json string"
  585. // @Success 200 标记成功
  586. // @router /version/delete [post]
  587. func (this *SandboxController) DeleteVersion() {
  588. br := new(models.BaseResponse).Init()
  589. defer func() {
  590. this.Data["json"] = br
  591. this.ServeJSON()
  592. }()
  593. sysUser := this.SysUser
  594. if sysUser == nil {
  595. br.Msg = "请登录"
  596. br.ErrMsg = "请登录,SysUser Is Empty"
  597. br.Ret = 408
  598. return
  599. }
  600. var req request.DeleteSandboxVersion
  601. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  602. if err != nil {
  603. br.Msg = "参数解析异常!"
  604. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  605. return
  606. }
  607. if req.SandboxVersionCode == `` {
  608. br.Msg = "缺少沙盘版本号"
  609. return
  610. }
  611. //删除沙盘
  612. err, errMsg := sandboxService.DeleteSandboxVersion(req.SandboxVersionCode, this.SysUser.AdminId)
  613. if err != nil {
  614. br.Msg = "删除版本失败"
  615. if errMsg != `` {
  616. br.Msg = errMsg
  617. }
  618. br.ErrMsg = err.Error()
  619. return
  620. }
  621. msg := "删除成功"
  622. br.Ret = 200
  623. br.Success = true
  624. br.Msg = msg
  625. }
  626. // ResetDraftToLastVersion
  627. // @Title 重置沙盘草稿至最新版本
  628. // @Description 重置沙盘草稿至最新版本接口
  629. // @Param request body request.DeleteSandbox true "type json string"
  630. // @Success 200 {object} sandbox.SandboxDraft
  631. // @Fail 202 另外的人在操作,不要重复添加草稿;204 错误了,当时不是必要性的错误,不用将错误信息暴露给用户
  632. // @router /draft/reset [post]
  633. func (this *SandboxController) ResetDraftToLastVersion() {
  634. br := new(models.BaseResponse).Init()
  635. defer func() {
  636. this.Data["json"] = br
  637. this.ServeJSON()
  638. }()
  639. sysUser := this.SysUser
  640. if sysUser == nil {
  641. br.Msg = "请登录"
  642. br.ErrMsg = "请登录,SysUser Is Empty"
  643. br.Ret = 408
  644. return
  645. }
  646. var req request.DeleteSandbox
  647. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  648. if err != nil {
  649. br.Msg = "参数解析异常!"
  650. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  651. return
  652. }
  653. if req.SandboxId <= 0 {
  654. br.Msg = "缺少沙盘编号"
  655. return
  656. }
  657. //更新标记key
  658. markStatus, err := sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 0, sysUser.RealName)
  659. if err != nil {
  660. br.Msg = err.Error()
  661. return
  662. }
  663. if markStatus.Status == 1 {
  664. br.Msg = markStatus.Msg
  665. return
  666. }
  667. //重置沙盘草稿至最新版本
  668. sandboxDraftInfo, err := sandboxService.ResetDraftToLastVersion(req.SandboxId, sysUser.AdminId, sysUser.RealName)
  669. if err != nil {
  670. br.Msg = "保存失败!"
  671. br.ErrMsg = "保存失败,Err:" + err.Error()
  672. return
  673. }
  674. msg := "保存成功"
  675. br.Ret = 200
  676. br.Success = true
  677. br.Msg = msg
  678. br.Data = sandboxDraftInfo
  679. }
  680. // ListByQuote
  681. // @Title 逻辑导图列表(其他地方引用到的,莫名其妙要根据输入的关键字匹配品种)
  682. // @Description 逻辑导图列表接口(其他地方引用到的,莫名其妙要根据输入的关键字匹配品种)
  683. // @Param PageSize query int true "每页数据条数"
  684. // @Param CurrentIndex query int true "当前页页码,从1开始"
  685. // @Param ChartPermissionId query int true "权限编号id"
  686. // @Param Keyword query string false "搜索关键词:沙盘名称/编辑人名称"
  687. // @Success 200 {object} response.SandboxListResp
  688. // @router /list_by_quote [get]
  689. func (this *SandboxController) ListByQuote() {
  690. br := new(models.BaseResponse).Init()
  691. defer func() {
  692. this.Data["json"] = br
  693. this.ServeJSON()
  694. }()
  695. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  696. keyword := this.GetString("Keyword")
  697. pageSize, _ := this.GetInt("PageSize")
  698. currentIndex, _ := this.GetInt("CurrentIndex")
  699. var startSize int
  700. if pageSize <= 0 {
  701. pageSize = utils.PageSize20
  702. }
  703. if currentIndex <= 0 {
  704. currentIndex = 1
  705. }
  706. startSize = paging.StartIndex(currentIndex, pageSize)
  707. var condition string
  708. var pars []interface{}
  709. if chartPermissionId > 0 {
  710. condition += " AND a.chart_permission_id=? "
  711. pars = append(pars, chartPermissionId)
  712. }
  713. if keyword != "" {
  714. condition += ` AND ( a.name LIKE '%` + keyword + `%' OR b.name LIKE '%` + keyword + `%' OR a.chart_permission_name LIKE '%` + keyword + `%' )`
  715. }
  716. //获取指标信息
  717. total, list, err := sandbox.GetList(condition, pars, startSize, pageSize)
  718. if err != nil && err.Error() != utils.ErrNoRow() {
  719. br.Success = true
  720. br.Msg = "获取沙盘列表失败"
  721. br.ErrMsg = "获取沙盘列表失败,Err:" + err.Error()
  722. return
  723. }
  724. if list == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  725. list = make([]*sandbox.SandboxListItem, 0)
  726. }
  727. page := paging.GetPaging(currentIndex, pageSize, total)
  728. resp := response.SandboxListResp{
  729. Paging: page,
  730. List: list,
  731. }
  732. br.Ret = 200
  733. br.Success = true
  734. br.Msg = "获取成功"
  735. br.Data = resp
  736. }
  737. //// ChartClassifyListV2
  738. //// @Title 沙盘分类列表
  739. //// @Description 沙盘分类列表接口
  740. //// @Param IsShowMe query bool true "是否只看我的,true、false"
  741. //// @Success 200 {object} data_manage.ChartClassifyListResp
  742. //// @router /classify/list [get]
  743. //func (this *SandboxController) ClassifyList() {
  744. // br := new(models.BaseResponse).Init()
  745. // defer func() {
  746. // this.Data["json"] = br
  747. // this.ServeJSON()
  748. // }()
  749. // resp := new(sandbox.SandboxClassifyListResp)
  750. //
  751. // rootList, err := sandbox.GetSandboxClassifyByParentId(0)
  752. // if err != nil && err.Error() != utils.ErrNoRow() {
  753. // br.Msg = "获取失败"
  754. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  755. // return
  756. // }
  757. //
  758. // classifyAll, err := sandbox.GetSandboxClassifyAll()
  759. // if err != nil && err.Error() != utils.ErrNoRow() {
  760. // br.Msg = "获取失败"
  761. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  762. // return
  763. // }
  764. //
  765. // sandboxClassifyId, _ := this.GetInt("SandboxClassifyId")
  766. // if sandboxClassifyId <= 0 {
  767. // br.Msg = "参数错误"
  768. // return
  769. // }
  770. //
  771. // allSandboxInfo, err := sandbox.GetSandboxAll(sandboxClassifyId)
  772. // if err != nil && err.Error() != utils.ErrNoRow() {
  773. // br.Msg = "获取失败"
  774. // br.ErrMsg = "获取沙盘信息失败,Err:" + err.Error()
  775. // return
  776. // }
  777. //
  778. //
  779. // sandboxInfoMap := make(map[int][]*sandbox.SandboxClassifyItems)
  780. // for _, v := range allSandboxInfo {
  781. // sandboxInfoMap[v.SandboxClassifyId] = append(sandboxInfoMap[v.SandboxClassifyId], v)
  782. // }
  783. // rootChildMap := make(map[int][]*sandbox.SandboxClassifyItems)
  784. // for _, v := range classifyAll {
  785. // rootChildMap[v.ParentId] = append(rootChildMap[v.ParentId], v)
  786. // if existItems, ok := sandboxInfoMap[v.SandboxClassifyId]; ok {
  787. // v.Children = existItems
  788. // } else {
  789. // items := make([]*sandbox.SandboxClassifyItems, 0)
  790. // v.Children = items
  791. // }
  792. // }
  793. // nodeAll := make([]*sandbox.SandboxClassifyItems, 0)
  794. // for _, v := range rootList {
  795. // if existItems, ok := rootChildMap[v.SandboxClassifyId]; ok {
  796. // v.Children = existItems
  797. // } else {
  798. // items := make([]*sandbox.SandboxClassifyItems, 0)
  799. // v.Children = items
  800. // }
  801. // nodeAll = append(nodeAll, v)
  802. // }
  803. // //
  804. // //
  805. // //nodeAll := make([]*data_manage.ChartClassifyItems, 0)
  806. // //for k := range rootList {
  807. // // rootNode := rootList[k]
  808. // // data.ChartClassifyListMakeTree(classifyAll, rootNode)
  809. // // nodeAll = append(nodeAll, rootNode)
  810. // //}
  811. // resp.AllNodes = nodeAll
  812. //
  813. //
  814. // br.Ret = 200
  815. // br.Success = true
  816. // br.Msg = "获取成功"
  817. // br.Data = resp
  818. //}
  819. // SandboxClassifyItems
  820. // @Title 获取所有沙盘分类接口-不包含沙盘
  821. // @Description 获取所有沙盘分类接口-不包含沙盘
  822. // @Param IsShowMe query bool true "是否只看我的,true、false"
  823. // @Success 200 {object} data_manage.ChartClassifyListResp
  824. // @router /classify/list [get]
  825. func (this *SandboxController) SandboxClassifyItems() {
  826. br := new(models.BaseResponse).Init()
  827. defer func() {
  828. this.Data["json"] = br
  829. this.ServeJSON()
  830. }()
  831. resp := new(sandbox.SandboxClassifyListResp)
  832. isShowMe, _ := this.GetBool("IsShowMe")
  833. if isShowMe {
  834. errMsg, err := sandboxService.GetSandboxClassifyListForMe(*this.SysUser, resp)
  835. if err != nil {
  836. br.Msg = errMsg
  837. br.ErrMsg = err.Error()
  838. return
  839. }
  840. // 移除没有权限的图表
  841. allNodes := sandboxService.HandleNoPermissionSandbox(resp.AllNodes, nil)
  842. resp.AllNodes = allNodes
  843. br.Ret = 200
  844. br.Success = true
  845. br.Msg = "获取成功"
  846. br.Data = resp
  847. fmt.Println("source my classify")
  848. return
  849. }
  850. rootList, err := sandbox.GetSandboxClassifyByParentId(0)
  851. if err != nil && err.Error() != utils.ErrNoRow() {
  852. br.Msg = "获取失败"
  853. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  854. return
  855. }
  856. classifyAll, err := sandbox.GetSandboxClassifyAll()
  857. if err != nil && err.Error() != utils.ErrNoRow() {
  858. br.Msg = "获取失败"
  859. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  860. return
  861. }
  862. nodeAll := make([]*sandbox.SandboxClassifyItems, 0)
  863. for k := range rootList {
  864. rootNode := rootList[k]
  865. sandboxService.ChartClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode)
  866. nodeAll = append(nodeAll, rootNode)
  867. }
  868. resp.AllNodes = nodeAll
  869. br.Ret = 200
  870. br.Success = true
  871. br.Msg = "获取成功"
  872. br.Data = resp
  873. }
  874. // @Title 新增沙盘分类
  875. // @Description 新增沙盘分类接口
  876. // @Param request body data_manage.AddChartClassifyReq true "type json string"
  877. // @Success 200 Ret=200 保存成功
  878. // @router /classify/add [post]
  879. func (this *SandboxController) AddSandboxClassify() {
  880. br := new(models.BaseResponse).Init()
  881. defer func() {
  882. this.Data["json"] = br
  883. this.ServeJSON()
  884. }()
  885. var req sandbox.AddSandboxClassifyReq
  886. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  887. if err != nil {
  888. br.Msg = "参数解析异常!"
  889. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  890. return
  891. }
  892. if req.SandboxClassifyName == "" {
  893. br.Msg = "请输入分类名称"
  894. br.IsSendEmail = false
  895. return
  896. }
  897. if req.ParentId < 0 {
  898. br.Msg = "参数错误"
  899. br.IsSendEmail = false
  900. return
  901. }
  902. count, err := sandbox.GetSandboxClassifyCount(req.SandboxClassifyName, req.ParentId)
  903. if err != nil {
  904. br.Msg = "判断名称是否已存在失败"
  905. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  906. return
  907. }
  908. if count > 0 {
  909. br.Msg = "分类名称已存在,请重新输入"
  910. br.IsSendEmail = false
  911. return
  912. }
  913. //获取该层级下最大的排序数
  914. maxSort, err := sandbox.GetSandboxClassifyMaxSort(req.ParentId)
  915. classify := new(sandbox.SandboxClassify)
  916. classify.ParentId = req.ParentId
  917. classify.SandboxClassifyName = req.SandboxClassifyName
  918. classify.HasData = 0
  919. classify.CreateTime = time.Now()
  920. classify.ModifyTime = time.Now()
  921. classify.SysUserId = this.SysUser.AdminId
  922. classify.SysUserRealName = this.SysUser.RealName
  923. classify.Level = req.Level + 1
  924. classify.Sort = maxSort + 1
  925. _, err = sandbox.AddSandboxClassify(classify)
  926. if err != nil {
  927. br.Msg = "保存分类失败"
  928. br.ErrMsg = "保存分类失败,Err:" + err.Error()
  929. return
  930. }
  931. br.Ret = 200
  932. br.Msg = "保存成功"
  933. br.Success = true
  934. }
  935. // @Title 修改沙盘分类
  936. // @Description 修改沙盘分类接口
  937. // @Param request body data_manage.EditChartClassifyReq true "type json string"
  938. // @Success 200 Ret=200 修改成功
  939. // @router /classify/edit [post]
  940. func (this *SandboxController) EditSandboxClassify() {
  941. br := new(models.BaseResponse).Init()
  942. defer func() {
  943. this.Data["json"] = br
  944. this.ServeJSON()
  945. }()
  946. var req sandbox.EditSandboxClassifyReq
  947. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  948. if err != nil {
  949. br.Msg = "参数解析异常!"
  950. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  951. return
  952. }
  953. if req.SandboxClassifyName == "" {
  954. br.Msg = "请输入分类名称"
  955. br.IsSendEmail = false
  956. return
  957. }
  958. if req.SandboxClassifyId <= 0 {
  959. br.Msg = "参数错误"
  960. br.IsSendEmail = false
  961. return
  962. }
  963. item, err := sandbox.GetSandboxClassifyById(req.SandboxClassifyId)
  964. if err != nil {
  965. br.Msg = "保存失败"
  966. br.Msg = "获取分类信息失败,Err:" + err.Error()
  967. return
  968. }
  969. if item.SandboxClassifyName != req.SandboxClassifyName {
  970. count, err := sandbox.GetSandboxClassifyCount(req.SandboxClassifyName, item.ParentId)
  971. if err != nil {
  972. br.Msg = "判断名称是否已存在失败"
  973. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  974. return
  975. }
  976. if count > 0 {
  977. br.Msg = "分类名称已存在,请重新输入"
  978. br.IsSendEmail = false
  979. return
  980. }
  981. err = sandbox.EditSandboxClassify(req.SandboxClassifyId, req.SandboxClassifyName)
  982. if err != nil {
  983. br.Msg = "保存失败"
  984. br.ErrMsg = "保存失败,Err:" + err.Error()
  985. return
  986. }
  987. }
  988. br.Ret = 200
  989. br.Msg = "保存成功"
  990. br.Success = true
  991. br.IsAddLog = true
  992. }
  993. // @Title 删除沙盘检测接口
  994. // @Description 删除沙盘检测接口
  995. // @Param request body data_manage.ChartClassifyDeleteCheckResp true "type json string"
  996. // @Success 200 Ret=200 检测成功
  997. // @router /classify/delete/check [post]
  998. func (this *SandboxController) DeleteSandboxClassifyCheck() {
  999. br := new(models.BaseResponse).Init()
  1000. defer func() {
  1001. this.Data["json"] = br
  1002. this.ServeJSON()
  1003. }()
  1004. var req sandbox.SandboxClassifyDeleteCheckReq
  1005. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1006. if err != nil {
  1007. br.Msg = "参数解析异常!"
  1008. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1009. return
  1010. }
  1011. if req.SandboxClassifyId < 0 {
  1012. br.Msg = "参数错误"
  1013. br.IsSendEmail = false
  1014. return
  1015. }
  1016. var deleteStatus int
  1017. var tipsMsg string
  1018. //删除分类
  1019. if req.SandboxClassifyId > 0 {
  1020. //判断沙盘分类下,是否含有沙盘
  1021. count, err := sandbox.GetSandboxInfoCountByClassifyId(req.SandboxClassifyId)
  1022. if err != nil {
  1023. br.Msg = "删除失败"
  1024. br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  1025. return
  1026. }
  1027. if count > 0 {
  1028. deleteStatus = 1
  1029. tipsMsg = "该分类下关联沙盘不可删除"
  1030. }
  1031. }
  1032. if deleteStatus != 1 {
  1033. classifyCount, err := sandbox.GetSandboxInfoCountByClassifyId(req.SandboxClassifyId)
  1034. if err != nil && err.Error() != utils.ErrNoRow() {
  1035. br.Msg = "删除失败"
  1036. br.ErrMsg = "分类下是否含有沙盘失败,Err:" + err.Error()
  1037. return
  1038. }
  1039. if classifyCount > 0 {
  1040. deleteStatus = 2
  1041. tipsMsg = "确认删除当前目录及包含的子目录吗"
  1042. }
  1043. }
  1044. if deleteStatus == 0 {
  1045. tipsMsg = "可删除,进行删除操作"
  1046. }
  1047. resp := new(sandbox.SandboxClassifyDeleteCheckResp)
  1048. resp.DeleteStatus = deleteStatus
  1049. resp.TipsMsg = tipsMsg
  1050. br.Ret = 200
  1051. br.Msg = "检测成功"
  1052. br.Success = true
  1053. br.Data = resp
  1054. }
  1055. // @Title 删除沙盘分类/沙盘
  1056. // @Description 删除沙盘分类/沙盘接口
  1057. // @Param request body data_manage.DeleteChartClassifyReq true "type json string"
  1058. // @Success 200 Ret=200 删除成功
  1059. // @router /classify/delete [post]
  1060. func (this *SandboxController) DeleteSandboxClassify() {
  1061. br := new(models.BaseResponse).Init()
  1062. defer func() {
  1063. this.Data["json"] = br
  1064. this.ServeJSON()
  1065. }()
  1066. sysUser := this.SysUser
  1067. if sysUser == nil {
  1068. br.Msg = "请登录"
  1069. br.ErrMsg = "请登录,SysUser Is Empty"
  1070. br.Ret = 408
  1071. return
  1072. }
  1073. var req sandbox.DeleteSandboxClassifyReq
  1074. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1075. if err != nil {
  1076. br.Msg = "参数解析异常!"
  1077. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1078. return
  1079. }
  1080. if req.SandboxClassifyId < 0 && req.SandboxId <= 0 {
  1081. br.Msg = "参数错误"
  1082. br.IsSendEmail = false
  1083. return
  1084. }
  1085. //删除分类
  1086. if req.SandboxClassifyId > 0 && req.SandboxId == 0 {
  1087. //判断是否含有指标
  1088. count, err := sandbox.GetSandboxInfoCountByClassifyId(req.SandboxId)
  1089. if err != nil && err.Error() != utils.ErrNoRow() {
  1090. br.Msg = "删除失败"
  1091. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  1092. return
  1093. }
  1094. if count > 0 {
  1095. br.Msg = "该目录下存在关联指标,不可删除"
  1096. br.IsSendEmail = false
  1097. return
  1098. }
  1099. err = sandbox.DeleteSandboxClassify(req.SandboxClassifyId)
  1100. if err != nil {
  1101. br.Msg = "删除失败"
  1102. br.ErrMsg = "删除失败,Err:" + err.Error()
  1103. return
  1104. }
  1105. }
  1106. //删除沙盘
  1107. if req.SandboxId > 0 {
  1108. sandboxInfo, err := sandbox.GetSandboxById(req.SandboxId)
  1109. if err != nil {
  1110. if err.Error() == utils.ErrNoRow() {
  1111. br.Msg = "沙盘已删除,请刷新页面"
  1112. br.ErrMsg = "指标不存在,Err:" + err.Error()
  1113. return
  1114. } else {
  1115. br.Msg = "删除失败"
  1116. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  1117. return
  1118. }
  1119. }
  1120. if sandboxInfo == nil {
  1121. br.Msg = "沙盘已删除,请刷新页面"
  1122. return
  1123. }
  1124. ////沙盘操作权限
  1125. //ok := sandbox.CheckOpSandboxPermission(sysUser, sandboxInfo.OpUserId)
  1126. //if !ok {
  1127. // br.Msg = "没有该沙盘的操作权限"
  1128. // br.ErrMsg = "没有该沙盘的操作权限"
  1129. // return
  1130. //}
  1131. ////新增操作日志
  1132. //{
  1133. // chartLog := new(data_manage.ChartInfoLog)
  1134. // chartLog.ChartName = chartInfo.ChartName
  1135. // chartLog.ChartInfoId = req.ChartInfoId
  1136. // chartLog.ChartClassifyId = chartInfo.ChartClassifyId
  1137. // chartLog.SysUserId = sysUser.AdminId
  1138. // chartLog.SysUserRealName = sysUser.RealName
  1139. // chartLog.UniqueCode = chartInfo.UniqueCode
  1140. // chartLog.CreateTime = time.Now()
  1141. // chartLog.Content = string(this.Ctx.Input.RequestBody)
  1142. // chartLog.Status = "删除沙盘"
  1143. // chartLog.Method = this.Ctx.Input.URI()
  1144. // go data_manage.AddChartInfoLog(chartLog)
  1145. //}
  1146. }
  1147. br.Ret = 200
  1148. br.Msg = "删除成功"
  1149. br.Success = true
  1150. br.IsAddLog = true
  1151. }
  1152. // ChartClassifyMove
  1153. // @Title 沙盘分类移动接口
  1154. // @Description 沙盘分类移动接口
  1155. // @Success 200 {object} data_manage.MoveChartClassifyReq
  1156. // @router /classify/move [post]
  1157. func (this *SandboxController) ChartClassifyMove() {
  1158. br := new(models.BaseResponse).Init()
  1159. defer func() {
  1160. this.Data["json"] = br
  1161. this.ServeJSON()
  1162. }()
  1163. sysUser := this.SysUser
  1164. if sysUser == nil {
  1165. br.Msg = "请登录"
  1166. br.ErrMsg = "请登录,SysUser Is Empty"
  1167. br.Ret = 408
  1168. return
  1169. }
  1170. var req sandbox.MoveSandboxClassifyReq
  1171. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1172. if err != nil {
  1173. br.Msg = "参数解析异常!"
  1174. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1175. return
  1176. }
  1177. if req.ClassifyId <= 0 {
  1178. br.Msg = "参数错误"
  1179. br.ErrMsg = "分类id小于等于0"
  1180. return
  1181. }
  1182. //判断分类是否存在
  1183. sandboxClassifyInfo, err := sandbox.GetSandboxClassifyById(req.ClassifyId)
  1184. if err != nil {
  1185. br.Msg = "移动失败"
  1186. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  1187. return
  1188. }
  1189. updateCol := make([]string, 0)
  1190. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  1191. if sandboxClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  1192. parentChartClassifyInfo, err := sandbox.GetSandboxClassifyById(req.ParentClassifyId)
  1193. if err != nil {
  1194. br.Msg = "移动失败"
  1195. br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  1196. return
  1197. }
  1198. sandboxClassifyInfo.ParentId = parentChartClassifyInfo.SandboxClassifyId
  1199. sandboxClassifyInfo.Level = parentChartClassifyInfo.Level + 1
  1200. sandboxClassifyInfo.ModifyTime = time.Now()
  1201. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  1202. }
  1203. //如果有传入 上一个兄弟节点分类id
  1204. if req.PrevClassifyId > 0 {
  1205. //上一个兄弟节点
  1206. prevClassify, err := sandbox.GetSandboxClassifyById(req.PrevClassifyId)
  1207. if err != nil {
  1208. br.Msg = "移动失败"
  1209. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  1210. return
  1211. }
  1212. //如果是移动在两个兄弟节点之间
  1213. if req.NextClassifyId > 0 {
  1214. //下一个兄弟节点
  1215. nextClassify, err := sandbox.GetSandboxClassifyById(req.NextClassifyId)
  1216. if err != nil {
  1217. br.Msg = "移动失败"
  1218. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1219. return
  1220. }
  1221. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  1222. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == sandboxClassifyInfo.Sort {
  1223. //变更兄弟节点的排序
  1224. updateSortStr := `sort + 2`
  1225. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, prevClassify.SandboxClassifyId, prevClassify.Sort, updateSortStr)
  1226. } else {
  1227. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  1228. if nextClassify.Sort-prevClassify.Sort == 1 {
  1229. //变更兄弟节点的排序
  1230. updateSortStr := `sort + 1`
  1231. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  1232. }
  1233. }
  1234. }
  1235. sandboxClassifyInfo.Sort = prevClassify.Sort + 1
  1236. sandboxClassifyInfo.ModifyTime = time.Now()
  1237. updateCol = append(updateCol, "Sort", "ModifyTime")
  1238. } else {
  1239. firstClassify, err := sandbox.GetFirstSandboxClassifyByParentId(sandboxClassifyInfo.ParentId)
  1240. if err != nil && err.Error() != utils.ErrNoRow() {
  1241. br.Msg = "移动失败"
  1242. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  1243. return
  1244. }
  1245. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  1246. if firstClassify != nil && firstClassify.Sort == 0 {
  1247. updateSortStr := ` sort + 1 `
  1248. _ = sandbox.UpdateSandboxClassifySortByParentId(firstClassify.ParentId, firstClassify.SandboxClassifyId-1, 0, updateSortStr)
  1249. }
  1250. sandboxClassifyInfo.Sort = 0 //那就是排在第一位
  1251. sandboxClassifyInfo.ModifyTime = time.Now()
  1252. updateCol = append(updateCol, "Sort", "ModifyTime")
  1253. }
  1254. //更新
  1255. if len(updateCol) > 0 {
  1256. err = sandboxClassifyInfo.Update(updateCol)
  1257. if err != nil {
  1258. br.Msg = "移动失败"
  1259. br.ErrMsg = "修改失败,Err:" + err.Error()
  1260. return
  1261. }
  1262. }
  1263. br.Ret = 200
  1264. br.Success = true
  1265. br.Msg = "移动成功"
  1266. }