sandbox.go 38 KB

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