sandbox.go 74 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366
  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. 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. //
  290. // var sandboxResp *sandbox.SandboxSaveResp
  291. // // 获取系统菜单, 如果没有对应的字段的特殊处理项, 则忽略必填
  292. // menus, e := system.GetSysMenuItemsByCondition(` AND hidden = 0`, make([]interface{}, 0), []string{}, ``)
  293. // if e != nil {
  294. // br.Msg = "保存失败"
  295. // br.ErrMsg = "获取菜单列表失败, Err: " + e.Error()
  296. // return
  297. // }
  298. // menuMap := make(map[string]bool)
  299. // for _, m := range menus {
  300. // if m.ButtonCode != "" {
  301. // menuMap[m.ButtonCode] = true
  302. // }
  303. // }
  304. // ignoreVariety := false
  305. // if !menuMap[system.MenuSpecialHandleSandboxVariety] {
  306. // ignoreVariety = true
  307. // }
  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. // //编辑沙盘
  322. // sandboxResp, err, errMsg = sandboxService.UpdateSandbox(req, sysUser.AdminId, sysUser.RealName, ignoreVariety)
  323. // }
  324. // if err != nil {
  325. // br.Msg = "保存失败!"
  326. // if errMsg != `` {
  327. // br.Msg = errMsg
  328. // }
  329. // br.ErrMsg = "保存失败,Err:" + err.Error()
  330. // return
  331. // }
  332. //
  333. // msg := "保存成功"
  334. // br.Ret = 200
  335. // br.Success = true
  336. // br.Msg = msg
  337. // br.Data = sandboxResp
  338. //}
  339. // AddSandboxDraft
  340. // @Title 添加沙盘草稿
  341. // @Description 添加沙盘草稿接口
  342. // @Param request body request.AddAndEditSandbox true "type json string"
  343. // @Success 200 {object} sandbox.SandboxDraft
  344. // @Fail 202 另外的人在操作,不要重复添加草稿;204 错误了,当时不是必要性的错误,不用将错误信息暴露给用户
  345. // @router /draft/add [post]
  346. func (this *SandboxController) AddSandboxDraft() {
  347. br := new(models.BaseResponse).Init()
  348. br.IsSendEmail = false
  349. defer func() {
  350. this.Data["json"] = br
  351. this.ServeJSON()
  352. }()
  353. sysUser := this.SysUser
  354. if sysUser == nil {
  355. br.Msg = "请登录"
  356. br.ErrMsg = "请登录,SysUser Is Empty"
  357. br.Ret = 408
  358. return
  359. }
  360. var req request.AddAndEditSandbox
  361. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  362. if err != nil {
  363. br.Msg = "参数解析异常!"
  364. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  365. return
  366. }
  367. if req.SandboxVersionCode == `` {
  368. br.Msg = "请传入沙盘版本!"
  369. return
  370. }
  371. // 获取沙盘版本信息
  372. sandboxVersion, err := sandbox.GetSandboxVersionBySandboxVersionCode(req.SandboxVersionCode)
  373. if err != nil {
  374. if err.Error() == utils.ErrNoRow() {
  375. br.Msg = "找不到该版本!"
  376. br.ErrMsg = "找不到该版本"
  377. return
  378. }
  379. br.Msg = "找不到该版本!"
  380. br.ErrMsg = "找不到该版本,Err:" + err.Error()
  381. br.IsSendEmail = false
  382. return
  383. }
  384. //更新标记key
  385. markStatus, err := sandboxService.UpdateSandboxEditMark(sandboxVersion.SandboxId, sysUser.AdminId, 1, sysUser.RealName)
  386. if err != nil {
  387. br.Msg = err.Error()
  388. return
  389. }
  390. if markStatus.Status == 1 {
  391. br.Msg = markStatus.Msg
  392. return
  393. }
  394. //新增沙盘草稿
  395. sandboxDraftInfo, err := sandboxService.AddSandboxDraft(sandboxVersion.SandboxId, req, sysUser.AdminId, sysUser.RealName)
  396. if err != nil {
  397. br.Msg = "保存失败!"
  398. br.ErrMsg = "保存失败,Err:" + err.Error()
  399. br.Ret = 204 //204 (无内容) :服务器成功处理了请求,但没有返回任何内容。
  400. return
  401. }
  402. msg := "保存成功"
  403. br.Ret = 200
  404. br.Success = true
  405. br.Msg = msg
  406. br.Data = sandboxDraftInfo
  407. }
  408. // MarkEditStatus
  409. // @Title 标记沙盘编辑状态
  410. // @Description 标记沙盘编辑状态接口
  411. // @Param request body request.MarkEditSandbox true "type json string"
  412. // @Success 200 标记成功 ;202 标记成功
  413. // @router /mark [post]
  414. func (this *SandboxController) MarkEditStatus() {
  415. br := new(models.BaseResponse).Init()
  416. defer func() {
  417. this.Data["json"] = br
  418. this.ServeJSON()
  419. }()
  420. sysUser := this.SysUser
  421. if sysUser == nil {
  422. br.Msg = "请登录"
  423. br.ErrMsg = "请登录,SysUser Is Empty"
  424. br.Ret = 408
  425. return
  426. }
  427. var req request.MarkEditSandbox
  428. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  429. if err != nil {
  430. br.Msg = "参数解析异常!"
  431. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  432. return
  433. }
  434. if req.SandboxId <= 0 {
  435. br.Msg = "缺少沙盘编号"
  436. return
  437. }
  438. if req.Status <= 0 {
  439. br.Msg = "标记状态异常"
  440. return
  441. }
  442. //更新标记key
  443. data, err := sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, req.Status, sysUser.RealName)
  444. if err != nil {
  445. br.Msg = err.Error()
  446. return
  447. }
  448. msg := "标记成功"
  449. br.Ret = 200
  450. br.Success = true
  451. br.Msg = msg
  452. br.Data = data
  453. }
  454. // GetSandboxVersionDetail
  455. // @Title 获取沙盘版本数据详情(已保存的)
  456. // @Description 获取沙盘版本数据详情接口(已保存的)
  457. // @Param SandboxVersionCode query string true "沙盘版本code"
  458. // @Success 200 {object} sandbox.SandboxVersion
  459. // @router /version/detail [get]
  460. func (this *SandboxController) GetSandboxVersionDetail() {
  461. br := new(models.BaseResponse).Init()
  462. defer func() {
  463. this.Data["json"] = br
  464. this.ServeJSON()
  465. }()
  466. sysUser := this.SysUser
  467. if sysUser == nil {
  468. br.Msg = "请登录"
  469. br.ErrMsg = "请登录,SysUser Is Empty"
  470. br.Ret = 408
  471. return
  472. }
  473. sandboxVersionCode := this.GetString("SandboxVersionCode")
  474. if sandboxVersionCode == "" {
  475. br.Msg = "缺少沙盘版本编号"
  476. return
  477. }
  478. //获取沙盘数据详情(已保存的)
  479. sandboxVersionInfo, err := sandboxService.GetSandboxVersionDetailByCode(sandboxVersionCode)
  480. if err != nil {
  481. br.Msg = "获取失败"
  482. br.ErrMsg = "获取失败,Err:" + err.Error()
  483. return
  484. }
  485. msg := "获取成功"
  486. br.Ret = 200
  487. br.Success = true
  488. br.Msg = msg
  489. br.Data = sandboxVersionInfo
  490. }
  491. // GetLastSandboxInfo
  492. // @Title 获取最后一次编辑的沙盘数据详情
  493. // @Description 获取最后一次编辑的沙盘数据详情接口
  494. // @Param SandboxId query int true "沙盘编号id"
  495. // @Success 200 {object} sandbox.Sandbox
  496. // @router /last_info [get]
  497. func (this *SandboxController) GetLastSandboxInfo() {
  498. br := new(models.BaseResponse).Init()
  499. defer func() {
  500. this.Data["json"] = br
  501. this.ServeJSON()
  502. }()
  503. sysUser := this.SysUser
  504. if sysUser == nil {
  505. br.Msg = "请登录"
  506. br.ErrMsg = "请登录,SysUser Is Empty"
  507. br.Ret = 408
  508. return
  509. }
  510. sandboxId, _ := this.GetInt("SandboxId", 0)
  511. if sandboxId <= 0 {
  512. br.Msg = "缺少沙盘编号"
  513. return
  514. }
  515. //获取最后一次操作的沙盘数据
  516. sandboxInfo, err := sandboxService.GetLastSandboxInfo(sandboxId)
  517. if err != nil {
  518. br.Msg = err.Error()
  519. return
  520. }
  521. msg := "获取成功"
  522. br.Ret = 200
  523. br.Success = true
  524. br.Msg = msg
  525. br.Data = sandboxInfo
  526. }
  527. // Delete
  528. // @Title 删除沙盘
  529. // @Description 删除沙盘接口
  530. // @Param request body request.DeleteSandbox true "type json string"
  531. // @Success 200 标记成功
  532. // @router /delete [post]
  533. func (this *SandboxController) Delete() {
  534. br := new(models.BaseResponse).Init()
  535. defer func() {
  536. this.Data["json"] = br
  537. this.ServeJSON()
  538. }()
  539. sysUser := this.SysUser
  540. if sysUser == nil {
  541. br.Msg = "请登录"
  542. br.ErrMsg = "请登录,SysUser Is Empty"
  543. br.Ret = 408
  544. return
  545. }
  546. var req request.DeleteSandbox
  547. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  548. if err != nil {
  549. br.Msg = "参数解析异常!"
  550. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  551. return
  552. }
  553. if req.SandboxId <= 0 {
  554. br.Msg = "缺少沙盘编号"
  555. return
  556. }
  557. /*key := fmt.Sprint(`crm:sandbox:edit:`, req.SandboxId)
  558. opUserId, _ := utils.Rc.RedisInt(key)
  559. //如果当前有人操作,且获取当前操作人不是本人,那么不允许删除
  560. if opUserId > 0 && opUserId != this.SysUser.AdminId {
  561. br.Msg = "当前有其他人正在编辑,不允许删除该沙盘"
  562. return
  563. }*/
  564. markStatus, err := sandboxService.UpdateSandboxEditMark(req.SandboxId, this.SysUser.AdminId, 2, this.SysUser.RealName)
  565. if err != nil {
  566. br.Msg = "查询标记状态失败"
  567. br.ErrMsg = "查询标记状态失败,Err:" + err.Error()
  568. return
  569. }
  570. if markStatus.Status == 1 {
  571. br.Msg = fmt.Sprintf("当前%s正在编辑,不允许删除该沙盘", markStatus.Editor)
  572. return
  573. }
  574. //删除沙盘
  575. err = sandboxService.DeleteSandbox(req.SandboxId)
  576. if err != nil {
  577. br.Msg = err.Error()
  578. return
  579. }
  580. msg := "删除成功"
  581. br.Ret = 200
  582. br.Success = true
  583. br.Msg = msg
  584. }
  585. //// DeleteVersion
  586. //// @Title 删除沙盘版本
  587. //// @Description 删除沙盘版本接口
  588. //// @Param request body request.DeleteSandbox true "type json string"
  589. //// @Success 200 标记成功
  590. //// @router /version/delete [post]
  591. //func (this *SandboxController) DeleteVersion() {
  592. // br := new(models.BaseResponse).Init()
  593. // defer func() {
  594. // this.Data["json"] = br
  595. // this.ServeJSON()
  596. // }()
  597. // sysUser := this.SysUser
  598. // if sysUser == nil {
  599. // br.Msg = "请登录"
  600. // br.ErrMsg = "请登录,SysUser Is Empty"
  601. // br.Ret = 408
  602. // return
  603. // }
  604. // var req request.DeleteSandboxVersion
  605. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  606. // if err != nil {
  607. // br.Msg = "参数解析异常!"
  608. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  609. // return
  610. // }
  611. //
  612. // if req.SandboxVersionCode == `` {
  613. // br.Msg = "缺少沙盘版本号"
  614. // return
  615. // }
  616. // //删除沙盘
  617. // err, errMsg := sandboxService.DeleteSandboxVersion(req.SandboxVersionCode, this.SysUser.AdminId)
  618. // if err != nil {
  619. // br.Msg = "删除版本失败"
  620. // if errMsg != `` {
  621. // br.Msg = errMsg
  622. // }
  623. // br.ErrMsg = err.Error()
  624. // return
  625. // }
  626. //
  627. // msg := "删除成功"
  628. // br.Ret = 200
  629. // br.Success = true
  630. // br.Msg = msg
  631. //}
  632. //// ResetDraftToLastVersion
  633. //// @Title 重置沙盘草稿至最新版本
  634. //// @Description 重置沙盘草稿至最新版本接口
  635. //// @Param request body request.DeleteSandbox true "type json string"
  636. //// @Success 200 {object} sandbox.SandboxDraft
  637. //// @Fail 202 另外的人在操作,不要重复添加草稿;204 错误了,当时不是必要性的错误,不用将错误信息暴露给用户
  638. //// @router /draft/reset [post]
  639. //func (this *SandboxController) ResetDraftToLastVersion() {
  640. // br := new(models.BaseResponse).Init()
  641. // defer func() {
  642. // this.Data["json"] = br
  643. // this.ServeJSON()
  644. // }()
  645. // sysUser := this.SysUser
  646. // if sysUser == nil {
  647. // br.Msg = "请登录"
  648. // br.ErrMsg = "请登录,SysUser Is Empty"
  649. // br.Ret = 408
  650. // return
  651. // }
  652. // var req request.DeleteSandbox
  653. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  654. // if err != nil {
  655. // br.Msg = "参数解析异常!"
  656. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  657. // return
  658. // }
  659. //
  660. // if req.SandboxId <= 0 {
  661. // br.Msg = "缺少沙盘编号"
  662. // return
  663. // }
  664. //
  665. // //更新标记key
  666. // markStatus, err := sandboxService.UpdateSandboxEditMark(req.SandboxId, sysUser.AdminId, 0, sysUser.RealName)
  667. // if err != nil {
  668. // br.Msg = err.Error()
  669. // return
  670. // }
  671. // if markStatus.Status == 1 {
  672. // br.Msg = markStatus.Msg
  673. // return
  674. // }
  675. //
  676. // //重置沙盘草稿至最新版本
  677. // sandboxDraftInfo, err := sandboxService.ResetDraftToLastVersion(req.SandboxId, sysUser.AdminId, sysUser.RealName)
  678. // if err != nil {
  679. // br.Msg = "保存失败!"
  680. // br.ErrMsg = "保存失败,Err:" + err.Error()
  681. // return
  682. // }
  683. // msg := "保存成功"
  684. // br.Ret = 200
  685. // br.Success = true
  686. // br.Msg = msg
  687. // br.Data = sandboxDraftInfo
  688. //}
  689. // ListByQuote
  690. // @Title 逻辑导图列表(其他地方引用到的,莫名其妙要根据输入的关键字匹配品种)
  691. // @Description 逻辑导图列表接口(其他地方引用到的,莫名其妙要根据输入的关键字匹配品种)
  692. // @Param PageSize query int true "每页数据条数"
  693. // @Param CurrentIndex query int true "当前页页码,从1开始"
  694. // @Param ChartPermissionId query int true "权限编号id"
  695. // @Param Keyword query string false "搜索关键词:沙盘名称/编辑人名称"
  696. // @Success 200 {object} response.SandboxListResp
  697. // @router /list_by_quote [get]
  698. func (this *SandboxController) ListByQuote() {
  699. br := new(models.BaseResponse).Init()
  700. defer func() {
  701. this.Data["json"] = br
  702. this.ServeJSON()
  703. }()
  704. chartPermissionId, _ := this.GetInt("ChartPermissionId")
  705. keyword := this.GetString("Keyword")
  706. pageSize, _ := this.GetInt("PageSize")
  707. currentIndex, _ := this.GetInt("CurrentIndex")
  708. var startSize int
  709. if pageSize <= 0 {
  710. pageSize = utils.PageSize20
  711. }
  712. if currentIndex <= 0 {
  713. currentIndex = 1
  714. }
  715. startSize = paging.StartIndex(currentIndex, pageSize)
  716. var condition string
  717. var pars []interface{}
  718. if chartPermissionId > 0 {
  719. condition += " AND a.chart_permission_id=? "
  720. pars = append(pars, chartPermissionId)
  721. }
  722. if keyword != "" {
  723. condition += ` AND ( a.name LIKE '%` + keyword + `%' OR b.name LIKE '%` + keyword + `%' OR a.chart_permission_name LIKE '%` + keyword + `%' )`
  724. }
  725. //获取指标信息
  726. total, list, err := sandbox.GetList(condition, pars, startSize, pageSize)
  727. if err != nil && err.Error() != utils.ErrNoRow() {
  728. br.Success = true
  729. br.Msg = "获取沙盘列表失败"
  730. br.ErrMsg = "获取沙盘列表失败,Err:" + err.Error()
  731. return
  732. }
  733. if list == nil || (err != nil && err.Error() == utils.ErrNoRow()) {
  734. list = make([]*sandbox.SandboxListItem, 0)
  735. }
  736. page := paging.GetPaging(currentIndex, pageSize, total)
  737. resp := response.SandboxListResp{
  738. Paging: page,
  739. List: list,
  740. }
  741. br.Ret = 200
  742. br.Success = true
  743. br.Msg = "获取成功"
  744. br.Data = resp
  745. }
  746. // SandboxClassifyItems
  747. // @Title 获取所有沙盘分类接口-包含沙盘
  748. // @Description 获取所有沙盘分类接口-包含沙盘
  749. // @Param IsShowMe query bool true "是否只看我的,true、false"
  750. // @Success 200 {object} data_manage.ChartClassifyListResp
  751. // @router /classify/list [get]
  752. func (this *SandboxController) SandboxClassifyItems() {
  753. br := new(models.BaseResponse).Init()
  754. defer func() {
  755. this.Data["json"] = br
  756. this.ServeJSON()
  757. }()
  758. resp := new(sandbox.SandboxClassifyListResp)
  759. sandboxClassifyId, _ := this.GetInt("SandboxClassifyId")
  760. isShowMe, _ := this.GetBool("IsShowMe")
  761. if isShowMe {
  762. errMsg, err := sandboxService.GetSandboxClassifyListForMe(*this.SysUser, resp, sandboxClassifyId)
  763. if err != nil {
  764. br.Msg = errMsg
  765. br.ErrMsg = err.Error()
  766. return
  767. }
  768. // 移除没有权限的图表
  769. //allNodes := sandboxService.HandleNoPermissionSandbox(resp.AllNodes, nil)
  770. //resp.AllNodes = allNodes
  771. br.Ret = 200
  772. br.Success = true
  773. br.Msg = "获取成功"
  774. br.Data = resp
  775. fmt.Println("source my classify")
  776. return
  777. }
  778. rootList, err := sandbox.GetSandboxClassifyAndInfoByParentId(sandboxClassifyId)
  779. if err != nil && err.Error() != utils.ErrNoRow() {
  780. br.Msg = "获取失败"
  781. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  782. return
  783. }
  784. classifyAll, err := sandbox.GetSandboxClassifyAndInfoByParentId(sandboxClassifyId)
  785. if err != nil && err.Error() != utils.ErrNoRow() {
  786. br.Msg = "获取失败"
  787. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  788. return
  789. }
  790. //sandboxAll, err := sandbox.GetSandboxItemsByClassifyId(sandboxClassifyId)
  791. //if err != nil && err.Error() != utils.ErrNoRow() {
  792. // br.Msg = "获取失败"
  793. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  794. // return
  795. //}
  796. //sandListMap := make(map[int][]*sandbox.SandboxClassifyItems)
  797. //for _, v := range sandboxAll {
  798. // if _, ok := sandListMap[v.SandboxClassifyId]; !ok {
  799. // list := make([]*sandbox.SandboxClassifyItems, 0)
  800. // list = append(list, v)
  801. // sandListMap[v.SandboxClassifyId] = list
  802. // } else {
  803. // sandListMap[v.SandboxClassifyId] = append(sandListMap[v.SandboxClassifyId], v)
  804. // }
  805. //}
  806. nodeAll := make([]*sandbox.SandboxClassifyItems, 0)
  807. for k := range rootList {
  808. rootNode := rootList[k]
  809. sandboxService.SandboxClassifyItemsMakeTreeV2(this.SysUser, classifyAll, rootNode)
  810. nodeAll = append(nodeAll, rootNode)
  811. }
  812. //newAll := sandboxService.SandboxItemsMakeTree(nodeAll, sandListMap, sandboxClassifyId)
  813. resp.AllNodes = nodeAll
  814. br.Ret = 200
  815. br.Success = true
  816. br.Msg = "获取成功"
  817. br.Data = resp
  818. }
  819. // @Title 新增沙盘分类
  820. // @Description 新增沙盘分类接口
  821. // @Param request body data_manage.AddChartClassifyReq true "type json string"
  822. // @Success 200 Ret=200 保存成功
  823. // @router /classify/add [post]
  824. func (this *SandboxController) AddSandboxClassify() {
  825. br := new(models.BaseResponse).Init()
  826. defer func() {
  827. this.Data["json"] = br
  828. this.ServeJSON()
  829. }()
  830. var req sandbox.AddSandboxClassifyReq
  831. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  832. if err != nil {
  833. br.Msg = "参数解析异常!"
  834. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  835. return
  836. }
  837. if req.SandboxClassifyName == "" {
  838. br.Msg = "请输入分类名称"
  839. br.IsSendEmail = false
  840. return
  841. }
  842. if req.ParentId < 0 {
  843. br.Msg = "参数错误"
  844. br.IsSendEmail = false
  845. return
  846. }
  847. count, err := sandbox.GetSandboxClassifyCount(req.SandboxClassifyName, req.ParentId)
  848. if err != nil {
  849. br.Msg = "判断名称是否已存在失败"
  850. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  851. return
  852. }
  853. if count > 0 {
  854. br.Msg = "分类名称已存在,请重新输入"
  855. br.IsSendEmail = false
  856. return
  857. }
  858. //获取该层级下最大的排序数
  859. maxSort, err := sandbox.GetSandboxClassifyMaxSort(req.ParentId)
  860. classify := new(sandbox.SandboxClassify)
  861. classify.ParentId = req.ParentId
  862. classify.SandboxClassifyName = req.SandboxClassifyName
  863. classify.HasData = 0
  864. classify.CreateTime = time.Now()
  865. classify.ModifyTime = time.Now()
  866. classify.SysUserId = this.SysUser.AdminId
  867. classify.SysUserRealName = this.SysUser.RealName
  868. classify.ChartPermissionId = req.ChartPermissionId
  869. classify.ChartPermissionName = req.ChartPermissionName
  870. classify.Level = req.Level + 1
  871. classify.Sort = maxSort + 1
  872. _, err = sandbox.AddSandboxClassify(classify)
  873. if err != nil {
  874. br.Msg = "保存分类失败"
  875. br.ErrMsg = "保存分类失败,Err:" + err.Error()
  876. return
  877. }
  878. br.Ret = 200
  879. br.Msg = "保存成功"
  880. br.Success = true
  881. }
  882. // @Title 修改沙盘分类
  883. // @Description 修改沙盘分类接口
  884. // @Param request body data_manage.EditChartClassifyReq true "type json string"
  885. // @Success 200 Ret=200 修改成功
  886. // @router /classify/edit [post]
  887. func (this *SandboxController) EditSandboxClassify() {
  888. br := new(models.BaseResponse).Init()
  889. defer func() {
  890. this.Data["json"] = br
  891. this.ServeJSON()
  892. }()
  893. var req sandbox.EditSandboxClassifyReq
  894. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  895. if err != nil {
  896. br.Msg = "参数解析异常!"
  897. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  898. return
  899. }
  900. if req.SandboxClassifyName == "" {
  901. br.Msg = "请输入分类名称"
  902. br.IsSendEmail = false
  903. return
  904. }
  905. if req.SandboxClassifyId <= 0 {
  906. br.Msg = "参数错误"
  907. br.IsSendEmail = false
  908. return
  909. }
  910. item, err := sandbox.GetSandboxClassifyById(req.SandboxClassifyId)
  911. if err != nil {
  912. br.Msg = "保存失败"
  913. br.Msg = "获取分类信息失败,Err:" + err.Error()
  914. return
  915. }
  916. if item.SandboxClassifyName != req.SandboxClassifyName {
  917. count, err := sandbox.GetSandboxClassifyCount(req.SandboxClassifyName, item.ParentId)
  918. if err != nil {
  919. br.Msg = "判断名称是否已存在失败"
  920. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  921. return
  922. }
  923. if count > 0 {
  924. br.Msg = "分类名称已存在,请重新输入"
  925. br.IsSendEmail = false
  926. return
  927. }
  928. err = sandbox.EditSandboxClassify(req.SandboxClassifyId, req.SandboxClassifyName)
  929. if err != nil {
  930. br.Msg = "保存失败"
  931. br.ErrMsg = "保存失败,Err:" + err.Error()
  932. return
  933. }
  934. }
  935. br.Ret = 200
  936. br.Msg = "保存成功"
  937. br.Success = true
  938. br.IsAddLog = true
  939. }
  940. // @Title 删除沙盘检测接口
  941. // @Description 删除沙盘检测接口
  942. // @Param request body data_manage.ChartClassifyDeleteCheckResp true "type json string"
  943. // @Success 200 Ret=200 检测成功
  944. // @router /classify/delete/check [post]
  945. func (this *SandboxController) DeleteSandboxClassifyCheck() {
  946. br := new(models.BaseResponse).Init()
  947. defer func() {
  948. this.Data["json"] = br
  949. this.ServeJSON()
  950. }()
  951. var req sandbox.SandboxClassifyDeleteCheckReq
  952. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  953. if err != nil {
  954. br.Msg = "参数解析异常!"
  955. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  956. return
  957. }
  958. if req.SandboxClassifyId < 0 {
  959. br.Msg = "参数错误"
  960. br.IsSendEmail = false
  961. return
  962. }
  963. var deleteStatus int
  964. var tipsMsg string
  965. //删除分类
  966. if req.SandboxClassifyId > 0 {
  967. //判断沙盘分类下,是否含有沙盘
  968. count, err := sandbox.GetSandboxInfoCountByClassifyId(req.SandboxClassifyId)
  969. if err != nil {
  970. br.Msg = "删除失败"
  971. br.ErrMsg = "分类下是否含有指标失败,Err:" + err.Error()
  972. return
  973. }
  974. if count > 0 {
  975. deleteStatus = 1
  976. tipsMsg = "该分类下关联沙盘不可删除"
  977. }
  978. }
  979. if deleteStatus != 1 {
  980. classifyCount, err := sandbox.GetSandboxInfoCountByClassifyId(req.SandboxClassifyId)
  981. if err != nil && err.Error() != utils.ErrNoRow() {
  982. br.Msg = "删除失败"
  983. br.ErrMsg = "分类下是否含有沙盘失败,Err:" + err.Error()
  984. return
  985. }
  986. if classifyCount > 0 {
  987. deleteStatus = 2
  988. tipsMsg = "确认删除当前目录及包含的子目录吗"
  989. }
  990. }
  991. if deleteStatus == 0 {
  992. tipsMsg = "可删除,进行删除操作"
  993. }
  994. resp := new(sandbox.SandboxClassifyDeleteCheckResp)
  995. resp.DeleteStatus = deleteStatus
  996. resp.TipsMsg = tipsMsg
  997. br.Ret = 200
  998. br.Msg = "检测成功"
  999. br.Success = true
  1000. br.Data = resp
  1001. }
  1002. // @Title 删除沙盘分类/沙盘
  1003. // @Description 删除沙盘分类/沙盘接口
  1004. // @Param request body data_manage.DeleteChartClassifyReq true "type json string"
  1005. // @Success 200 Ret=200 删除成功
  1006. // @router /classify/delete [post]
  1007. func (this *SandboxController) DeleteSandboxClassify() {
  1008. br := new(models.BaseResponse).Init()
  1009. defer func() {
  1010. this.Data["json"] = br
  1011. this.ServeJSON()
  1012. }()
  1013. sysUser := this.SysUser
  1014. if sysUser == nil {
  1015. br.Msg = "请登录"
  1016. br.ErrMsg = "请登录,SysUser Is Empty"
  1017. br.Ret = 408
  1018. return
  1019. }
  1020. var req sandbox.DeleteSandboxClassifyReq
  1021. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1022. if err != nil {
  1023. br.Msg = "参数解析异常!"
  1024. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1025. return
  1026. }
  1027. if req.SandboxClassifyId < 0 && req.SandboxId <= 0 {
  1028. br.Msg = "参数错误"
  1029. br.IsSendEmail = false
  1030. return
  1031. }
  1032. //删除分类
  1033. if req.SandboxClassifyId > 0 && req.SandboxId == 0 {
  1034. //判断是否含有指标
  1035. count, err := sandbox.GetSandboxInfoCountByClassifyId(req.SandboxId)
  1036. if err != nil && err.Error() != utils.ErrNoRow() {
  1037. br.Msg = "删除失败"
  1038. br.ErrMsg = "判断名称是否已存在失败,Err:" + err.Error()
  1039. return
  1040. }
  1041. if count > 0 {
  1042. br.Msg = "该目录下存在关联指标,不可删除"
  1043. br.IsSendEmail = false
  1044. return
  1045. }
  1046. err = sandbox.DeleteSandboxClassify(req.SandboxClassifyId)
  1047. if err != nil {
  1048. br.Msg = "删除失败"
  1049. br.ErrMsg = "删除失败,Err:" + err.Error()
  1050. return
  1051. }
  1052. }
  1053. //删除沙盘
  1054. if req.SandboxId > 0 {
  1055. sandboxInfo, err := sandbox.GetSandboxById(req.SandboxId)
  1056. if err != nil {
  1057. if err.Error() == utils.ErrNoRow() {
  1058. br.Msg = "沙盘已删除,请刷新页面"
  1059. br.ErrMsg = "指标不存在,Err:" + err.Error()
  1060. return
  1061. } else {
  1062. br.Msg = "删除失败"
  1063. br.ErrMsg = "删除失败,获取指标信息失败,Err:" + err.Error()
  1064. return
  1065. }
  1066. }
  1067. if sandboxInfo == nil {
  1068. br.Msg = "沙盘已删除,请刷新页面"
  1069. return
  1070. }
  1071. err = sandboxService.DeleteSandbox(req.SandboxId)
  1072. if err != nil {
  1073. br.Msg = err.Error()
  1074. return
  1075. }
  1076. }
  1077. br.Ret = 200
  1078. br.Msg = "删除成功"
  1079. br.Success = true
  1080. br.IsAddLog = true
  1081. }
  1082. // ChartClassifyMove
  1083. // @Title 沙盘分类移动接口
  1084. // @Description 沙盘分类移动接口
  1085. // @Success 200 {object} data_manage.MoveChartClassifyReq
  1086. // @router /classify/move [post]
  1087. func (this *SandboxController) ChartClassifyMove() {
  1088. br := new(models.BaseResponse).Init()
  1089. defer func() {
  1090. this.Data["json"] = br
  1091. this.ServeJSON()
  1092. }()
  1093. sysUser := this.SysUser
  1094. if sysUser == nil {
  1095. br.Msg = "请登录"
  1096. br.ErrMsg = "请登录,SysUser Is Empty"
  1097. br.Ret = 408
  1098. return
  1099. }
  1100. var req sandbox.MoveSandboxClassifyReq
  1101. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1102. if err != nil {
  1103. br.Msg = "参数解析异常!"
  1104. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1105. return
  1106. }
  1107. if req.ClassifyId <= 0 {
  1108. br.Msg = "参数错误"
  1109. br.ErrMsg = "分类id小于等于0"
  1110. return
  1111. }
  1112. //判断分类是否存在
  1113. sandboxClassifyInfo, err := sandbox.GetSandboxClassifyById(req.ClassifyId)
  1114. if err != nil {
  1115. br.Msg = "移动失败"
  1116. br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  1117. return
  1118. }
  1119. updateCol := make([]string, 0)
  1120. // 判断移动的是分类还是沙盘
  1121. if req.SandboxId > 0 {
  1122. //判断分类是否存在
  1123. count, _ := sandbox.GetSandboxClassifyCountById(req.ClassifyId)
  1124. if count <= 0 {
  1125. br.Msg = "分类已被删除,不可移动,请刷新页面"
  1126. return
  1127. }
  1128. sandboxInfo, err := sandbox.GetSandboxById(req.SandboxId)
  1129. if err != nil {
  1130. br.Msg = "移动失败"
  1131. br.ErrMsg = "获取沙盘信息失败,Err:" + err.Error()
  1132. return
  1133. }
  1134. //如果改变了分类,那么移动该图表数据
  1135. if sandboxInfo.SandboxClassifyId != req.ParentClassifyId {
  1136. //查询需要修改的分类下是否存在同一个图表名称
  1137. tmpSandboxInfo, tmpErr := sandbox.GetSandboxByClassifyIdAndName(req.ParentClassifyId, sandboxInfo.Name)
  1138. if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  1139. br.Msg = "移动失败"
  1140. br.ErrMsg = "移动失败,Err:" + tmpErr.Error()
  1141. return
  1142. }
  1143. if tmpSandboxInfo != nil {
  1144. br.Msg = "移动失败,同一个分类下沙盘名称不允许重复"
  1145. br.ErrMsg = "移动失败,同一个分类下沙盘名称不允许重复"
  1146. return
  1147. }
  1148. err = sandbox.MoveSandbox(req.SandboxId, req.ParentClassifyId)
  1149. if err != nil {
  1150. br.Msg = "移动失败"
  1151. br.ErrMsg = "移动失败,Err:" + err.Error()
  1152. return
  1153. }
  1154. }
  1155. //移动排序
  1156. updateCol := make([]string, 0)
  1157. //如果有传入 上一个兄弟节点分类id
  1158. if req.PrevId > 0 {
  1159. if req.PrevType == 1 {
  1160. //上一个兄弟节点
  1161. prevClassify, err := sandbox.GetSandboxClassifyById(req.PrevId)
  1162. if err != nil {
  1163. br.Msg = "移动失败"
  1164. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  1165. return
  1166. }
  1167. //如果是移动在两个兄弟节点之间
  1168. if req.NextId > 0 {
  1169. if req.NextType == 1 {
  1170. //上一个节点是分类 下一个节点是分类的情况
  1171. //下一个兄弟节点
  1172. nextClassify, err := sandbox.GetSandboxClassifyById(req.NextId)
  1173. if err != nil {
  1174. br.Msg = "移动失败"
  1175. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1176. return
  1177. }
  1178. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  1179. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == sandboxClassifyInfo.Sort {
  1180. //变更兄弟节点的排序
  1181. updateSortStr := `sort + 2`
  1182. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, prevClassify.SandboxClassifyId, prevClassify.Sort, updateSortStr)
  1183. _ = sandbox.UpdateSandboxSortByClassifyId(prevClassify.SandboxClassifyId, prevClassify.Sort, 0, updateSortStr)
  1184. } else {
  1185. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  1186. if nextClassify.Sort-prevClassify.Sort == 1 {
  1187. //变更兄弟节点的排序
  1188. updateSortStr := `sort + 1`
  1189. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  1190. _ = sandbox.UpdateSandboxSortByClassifyId(prevClassify.SandboxClassifyId, prevClassify.Sort, 0, updateSortStr)
  1191. }
  1192. }
  1193. } else {
  1194. //上一个节点是分类 下一个节点是沙盘的情况
  1195. //下一个兄弟节点
  1196. nextChartInfo, err := sandbox.GetSandboxById(req.NextId)
  1197. if err != nil {
  1198. br.Msg = "移动失败"
  1199. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1200. return
  1201. }
  1202. //如果上一个兄弟(分类)与下一个兄弟(沙盘)的排序权重是一致的,那么需要将下一个兄弟(沙盘)(以及下个兄弟(沙盘)的同样排序权重)的排序权重+2,自己变成上一个兄弟(分类)的排序权重+1
  1203. if prevClassify.Sort == nextChartInfo.Sort || prevClassify.Sort == sandboxInfo.Sort {
  1204. //变更兄弟节点的排序
  1205. updateSortStr := `sort + 2`
  1206. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, prevClassify.SandboxClassifyId, prevClassify.Sort, updateSortStr)
  1207. _ = sandbox.UpdateSandboxSortByClassifyId(prevClassify.SandboxClassifyId, prevClassify.Sort, 0, updateSortStr)
  1208. } else {
  1209. //如果下一个兄弟(沙盘)的排序权重正好是上个兄弟节点(分类)的下一层,那么需要再加一层了
  1210. if nextChartInfo.Sort-prevClassify.Sort == 1 {
  1211. //变更兄弟节点的排序
  1212. updateSortStr := `sort + 1`
  1213. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.SandboxClassifyId, updateSortStr)
  1214. _ = sandbox.UpdateSandboxSortByClassifyId(prevClassify.SandboxClassifyId, prevClassify.Sort, 0, updateSortStr)
  1215. }
  1216. }
  1217. }
  1218. }
  1219. sandboxInfo.Sort = prevClassify.Sort + 1
  1220. sandboxInfo.ModifyTime = time.Now()
  1221. updateCol = append(updateCol, "Sort", "ModifyTime")
  1222. } else {
  1223. prevSandbox, err := sandbox.GetSandboxById(req.PrevId)
  1224. if err != nil {
  1225. br.Msg = "移动失败"
  1226. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  1227. return
  1228. }
  1229. //如果是移动在两个兄弟节点之间
  1230. if req.NextId > 0 {
  1231. if req.NextType == 1 {
  1232. //上一个节点是沙盘 下一个节点是分类的情况
  1233. //下一个兄弟节点
  1234. nextClassify, err := sandbox.GetSandboxClassifyById(req.NextId)
  1235. if err != nil {
  1236. br.Msg = "移动失败"
  1237. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1238. return
  1239. }
  1240. //如果上一个兄弟(沙盘)与下一个兄弟(分类)的排序权重是一致的,那么需要将下一个兄弟(分类)(以及下个兄弟(分类)的同样排序权重)的排序权重+2,自己变成上一个兄弟(沙盘)的排序权重+1
  1241. if prevSandbox.Sort == nextClassify.Sort || prevSandbox.Sort == sandboxClassifyInfo.Sort {
  1242. //变更兄弟节点的排序
  1243. updateSortStr := `sort + 2`
  1244. _ = sandbox.UpdateSandboxClassifySortByParentId(prevSandbox.SandboxClassifyId, 0, prevSandbox.Sort, updateSortStr)
  1245. _ = sandbox.UpdateSandboxSortByClassifyId(prevSandbox.SandboxClassifyId, prevSandbox.Sort, prevSandbox.SandboxId, updateSortStr)
  1246. } else {
  1247. //如果下一个兄弟(分类)的排序权重正好是上个兄弟(沙盘)节点的下一层,那么需要再加一层了
  1248. if nextClassify.Sort-prevSandbox.Sort == 1 {
  1249. //变更兄弟节点的排序
  1250. updateSortStr := `sort + 1`
  1251. _ = sandbox.UpdateSandboxClassifySortByParentId(prevSandbox.SandboxClassifyId, 0, prevSandbox.Sort, updateSortStr)
  1252. _ = sandbox.UpdateSandboxSortByClassifyId(prevSandbox.SandboxClassifyId, prevSandbox.Sort, prevSandbox.SandboxId, updateSortStr)
  1253. }
  1254. }
  1255. } else {
  1256. //上一个节点是沙盘 下一个节点是沙盘的情况
  1257. //下一个兄弟节点
  1258. nextChartInfo, err := sandbox.GetSandboxById(req.NextId)
  1259. if err != nil {
  1260. br.Msg = "移动失败"
  1261. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1262. return
  1263. }
  1264. //如果上一个兄弟(沙盘)与下一个兄弟(分类)的排序权重是一致的,那么需要将下一个兄弟(分类)(以及下个兄弟(分类)的同样排序权重)的排序权重+2,自己变成上一个兄弟(沙盘)的排序权重+1
  1265. if prevSandbox.Sort == nextChartInfo.Sort || prevSandbox.Sort == sandboxInfo.Sort {
  1266. //变更兄弟节点的排序
  1267. updateSortStr := `sort + 2`
  1268. _ = sandbox.UpdateSandboxClassifySortByParentId(prevSandbox.SandboxClassifyId, 0, prevSandbox.Sort, updateSortStr)
  1269. _ = sandbox.UpdateSandboxSortByClassifyId(prevSandbox.SandboxClassifyId, prevSandbox.Sort, prevSandbox.SandboxId, updateSortStr)
  1270. } else {
  1271. //如果下一个兄弟(分类)的排序权重正好是上个兄弟(沙盘)节点的下一层,那么需要再加一层了
  1272. if nextChartInfo.Sort-prevSandbox.Sort == 1 {
  1273. //变更兄弟节点的排序
  1274. updateSortStr := `sort + 1`
  1275. _ = sandbox.UpdateSandboxClassifySortByParentId(prevSandbox.SandboxClassifyId, 0, prevSandbox.Sort, updateSortStr)
  1276. _ = sandbox.UpdateSandboxSortByClassifyId(prevSandbox.SandboxClassifyId, prevSandbox.Sort, prevSandbox.SandboxId, updateSortStr)
  1277. }
  1278. }
  1279. }
  1280. }
  1281. sandboxInfo.Sort = prevSandbox.Sort + 1
  1282. sandboxInfo.ModifyTime = time.Now()
  1283. updateCol = append(updateCol, "Sort", "ModifyTime")
  1284. }
  1285. } else {
  1286. // prevId为0,也就是沙盘移到最前端
  1287. firstClassify, err := sandbox.GetFirstSandboxByClassifyId(req.ClassifyId)
  1288. if err != nil && err.Error() != utils.ErrNoRow() {
  1289. br.Msg = "移动失败"
  1290. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  1291. return
  1292. }
  1293. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  1294. if firstClassify != nil && firstClassify.Sort == 0 {
  1295. updateSortStr := ` sort + 1 `
  1296. _ = sandbox.UpdateSandboxSortByClassifyId(firstClassify.SandboxClassifyId, 0, firstClassify.SandboxId-1, updateSortStr)
  1297. }
  1298. sandboxInfo.Sort = 0 //那就是排在第一位
  1299. sandboxInfo.ModifyTime = time.Now()
  1300. updateCol = append(updateCol, "Sort", "ModifyTime")
  1301. }
  1302. //更新
  1303. if len(updateCol) > 0 {
  1304. err = sandboxInfo.Update(updateCol)
  1305. if err != nil {
  1306. br.Msg = "移动失败"
  1307. br.ErrMsg = "修改失败,Err:" + err.Error()
  1308. return
  1309. }
  1310. }
  1311. } else {
  1312. //移动的是分类
  1313. //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  1314. if sandboxClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  1315. parentChartClassifyInfo, err := sandbox.GetSandboxClassifyById(req.ParentClassifyId)
  1316. if err != nil {
  1317. br.Msg = "移动失败"
  1318. br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  1319. return
  1320. }
  1321. sandboxClassifyInfo.ParentId = parentChartClassifyInfo.SandboxClassifyId
  1322. sandboxClassifyInfo.Level = parentChartClassifyInfo.Level + 1
  1323. sandboxClassifyInfo.ModifyTime = time.Now()
  1324. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  1325. } else if sandboxClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId == 0 {
  1326. //改为一级分类
  1327. sandboxClassifyInfo.ParentId = req.ParentClassifyId
  1328. sandboxClassifyInfo.Level = 1
  1329. sandboxClassifyInfo.ModifyTime = time.Now()
  1330. updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  1331. }
  1332. //如果有传入 上一个兄弟节点分类id
  1333. if req.PrevId > 0 {
  1334. if req.PrevType == 1 {
  1335. //上一个节点是分类
  1336. //上一个兄弟节点
  1337. prevClassify, err := sandbox.GetSandboxClassifyById(req.PrevId)
  1338. if err != nil {
  1339. br.Msg = "移动失败"
  1340. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  1341. return
  1342. }
  1343. //如果是移动在两个兄弟节点之间
  1344. if req.NextId > 0 {
  1345. if req.NextType == 1 {
  1346. //上一个节点是分类 下一个节点是分类的情况
  1347. //下一个兄弟节点
  1348. nextClassify, err := sandbox.GetSandboxClassifyById(req.NextId)
  1349. if err != nil {
  1350. br.Msg = "移动失败"
  1351. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1352. return
  1353. }
  1354. //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  1355. if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == sandboxClassifyInfo.Sort {
  1356. //变更兄弟节点的排序
  1357. updateSortStr := `sort + 2`
  1358. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, prevClassify.SandboxClassifyId, prevClassify.Sort, updateSortStr)
  1359. _ = sandbox.UpdateSandboxSortByClassifyId(prevClassify.SandboxClassifyId, prevClassify.Sort, 0, updateSortStr)
  1360. } else {
  1361. //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  1362. if nextClassify.Sort-prevClassify.Sort == 1 {
  1363. //变更兄弟节点的排序
  1364. updateSortStr := `sort + 1`
  1365. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  1366. _ = sandbox.UpdateSandboxSortByClassifyId(prevClassify.SandboxClassifyId, prevClassify.Sort, 0, updateSortStr)
  1367. }
  1368. }
  1369. } else {
  1370. //上一个节点是分类 下一个节点是沙盘的情况
  1371. //下一个兄弟节点
  1372. nextChartInfo, err := sandbox.GetSandboxById(req.NextId)
  1373. if err != nil {
  1374. br.Msg = "移动失败"
  1375. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1376. return
  1377. }
  1378. //如果上一个兄弟(分类)与下一个兄弟(沙盘)的排序权重是一致的,那么需要将下一个兄弟(沙盘)(以及下个兄弟(沙盘)的同样排序权重)的排序权重+2,自己变成上一个兄弟(分类)的排序权重+1
  1379. if prevClassify.Sort == nextChartInfo.Sort || prevClassify.Sort == sandboxClassifyInfo.Sort {
  1380. //变更兄弟节点的排序
  1381. updateSortStr := `sort + 2`
  1382. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, prevClassify.SandboxClassifyId, prevClassify.Sort, updateSortStr)
  1383. _ = sandbox.UpdateSandboxSortByClassifyId(prevClassify.SandboxClassifyId, prevClassify.Sort, 0, updateSortStr)
  1384. } else {
  1385. //如果下一个兄弟(沙盘)的排序权重正好是上个兄弟节点(分类)的下一层,那么需要再加一层了
  1386. if nextChartInfo.Sort-prevClassify.Sort == 1 {
  1387. //变更兄弟节点的排序
  1388. updateSortStr := `sort + 1`
  1389. _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.SandboxClassifyId, updateSortStr)
  1390. _ = sandbox.UpdateSandboxSortByClassifyId(prevClassify.SandboxClassifyId, prevClassify.Sort, 0, updateSortStr)
  1391. }
  1392. }
  1393. }
  1394. }
  1395. sandboxClassifyInfo.Sort = prevClassify.Sort + 1
  1396. sandboxClassifyInfo.ModifyTime = time.Now()
  1397. updateCol = append(updateCol, "Sort", "ModifyTime")
  1398. } else {
  1399. //上一个节点是沙盘
  1400. prevSandbox, err := sandbox.GetSandboxById(req.PrevId)
  1401. if err != nil {
  1402. br.Msg = "移动失败"
  1403. br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  1404. return
  1405. }
  1406. //如果是移动在两个兄弟节点之间
  1407. if req.NextId > 0 {
  1408. if req.NextType == 1 {
  1409. //上一个节点是沙盘 下一个节点是分类的情况
  1410. //下一个兄弟节点
  1411. nextClassify, err := sandbox.GetSandboxClassifyById(req.NextId)
  1412. if err != nil {
  1413. br.Msg = "移动失败"
  1414. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1415. return
  1416. }
  1417. //如果上一个兄弟(沙盘)与下一个兄弟(分类)的排序权重是一致的,那么需要将下一个兄弟(分类)(以及下个兄弟(分类)的同样排序权重)的排序权重+2,自己变成上一个兄弟(沙盘)的排序权重+1
  1418. if prevSandbox.Sort == nextClassify.Sort || prevSandbox.Sort == sandboxClassifyInfo.Sort {
  1419. //变更兄弟节点的排序
  1420. updateSortStr := `sort + 2`
  1421. _ = sandbox.UpdateSandboxClassifySortByParentId(prevSandbox.SandboxClassifyId, 0, prevSandbox.Sort, updateSortStr)
  1422. _ = sandbox.UpdateSandboxSortByClassifyId(prevSandbox.SandboxClassifyId, prevSandbox.Sort, prevSandbox.SandboxId, updateSortStr)
  1423. } else {
  1424. //如果下一个兄弟(分类)的排序权重正好是上个兄弟(沙盘)节点的下一层,那么需要再加一层了
  1425. if nextClassify.Sort-prevSandbox.Sort == 1 {
  1426. //变更兄弟节点的排序
  1427. updateSortStr := `sort + 1`
  1428. _ = sandbox.UpdateSandboxClassifySortByParentId(prevSandbox.SandboxClassifyId, 0, prevSandbox.Sort, updateSortStr)
  1429. _ = sandbox.UpdateSandboxSortByClassifyId(prevSandbox.SandboxClassifyId, prevSandbox.Sort, prevSandbox.SandboxId, updateSortStr)
  1430. }
  1431. }
  1432. } else {
  1433. //上一个节点是沙盘 下一个节点是沙盘的情况
  1434. //下一个兄弟节点
  1435. nextChartInfo, err := sandbox.GetSandboxById(req.NextId)
  1436. if err != nil {
  1437. br.Msg = "移动失败"
  1438. br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1439. return
  1440. }
  1441. //如果上一个兄弟(沙盘)与下一个兄弟(分类)的排序权重是一致的,那么需要将下一个兄弟(分类)(以及下个兄弟(分类)的同样排序权重)的排序权重+2,自己变成上一个兄弟(沙盘)的排序权重+1
  1442. if prevSandbox.Sort == nextChartInfo.Sort || prevSandbox.Sort == sandboxClassifyInfo.Sort {
  1443. //变更兄弟节点的排序
  1444. updateSortStr := `sort + 2`
  1445. _ = sandbox.UpdateSandboxClassifySortByParentId(prevSandbox.SandboxClassifyId, 0, prevSandbox.Sort, updateSortStr)
  1446. _ = sandbox.UpdateSandboxSortByClassifyId(prevSandbox.SandboxClassifyId, prevSandbox.Sort, prevSandbox.SandboxId, updateSortStr)
  1447. } else {
  1448. //如果下一个兄弟(分类)的排序权重正好是上个兄弟(沙盘)节点的下一层,那么需要再加一层了
  1449. if nextChartInfo.Sort-prevSandbox.Sort == 1 {
  1450. //变更兄弟节点的排序
  1451. updateSortStr := `sort + 1`
  1452. _ = sandbox.UpdateSandboxClassifySortByParentId(prevSandbox.SandboxClassifyId, 0, prevSandbox.Sort, updateSortStr)
  1453. _ = sandbox.UpdateSandboxSortByClassifyId(prevSandbox.SandboxClassifyId, prevSandbox.Sort, prevSandbox.SandboxId, updateSortStr)
  1454. }
  1455. }
  1456. }
  1457. }
  1458. sandboxClassifyInfo.Sort = prevSandbox.Sort + 1
  1459. sandboxClassifyInfo.ModifyTime = time.Now()
  1460. updateCol = append(updateCol, "Sort", "ModifyTime")
  1461. }
  1462. } else {
  1463. firstClassify, err := sandbox.GetFirstSandboxClassifyByParentId(sandboxClassifyInfo.ParentId)
  1464. if err != nil && err.Error() != utils.ErrNoRow() {
  1465. br.Msg = "移动失败"
  1466. br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  1467. return
  1468. }
  1469. //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  1470. if firstClassify != nil && firstClassify.Sort == 0 {
  1471. updateSortStr := ` sort + 1 `
  1472. _ = sandbox.UpdateSandboxClassifySortByParentId(firstClassify.ParentId, firstClassify.SandboxClassifyId-1, 0, updateSortStr)
  1473. }
  1474. sandboxClassifyInfo.Sort = 0 //那就是排在第一位
  1475. sandboxClassifyInfo.ModifyTime = time.Now()
  1476. updateCol = append(updateCol, "Sort", "ModifyTime")
  1477. }
  1478. //更新
  1479. if len(updateCol) > 0 {
  1480. err = sandboxClassifyInfo.Update(updateCol)
  1481. if err != nil {
  1482. br.Msg = "移动失败"
  1483. br.ErrMsg = "修改失败,Err:" + err.Error()
  1484. return
  1485. }
  1486. }
  1487. }
  1488. br.Ret = 200
  1489. br.Success = true
  1490. br.Msg = "移动成功"
  1491. }
  1492. // @Title ETA图表列表接口
  1493. // @Description ETA图表列表接口
  1494. // @Param PageSize query int true "每页数据条数"
  1495. // @Param CurrentIndex query int true "当前页页码,从1开始"
  1496. // @Param ChartClassifyId query int true "分类id"
  1497. // @Param KeyWord query string true "搜索关键词"
  1498. // @Param IsShowMe query bool true "是否只看我的,true、false"
  1499. // @Success 200 {object} data_manage.ChartListResp
  1500. // @router /listV2 [get]
  1501. func (this *SandboxController) ListV2() {
  1502. br := new(models.BaseResponse).Init()
  1503. defer func() {
  1504. this.Data["json"] = br
  1505. this.ServeJSON()
  1506. }()
  1507. sysUser := this.SysUser
  1508. if sysUser == nil {
  1509. br.Msg = "请登录"
  1510. br.ErrMsg = "请登录,SysUser Is Empty"
  1511. br.Ret = 408
  1512. return
  1513. }
  1514. sandboxClassifyId, _ := this.GetInt("SandboxClassifyId")
  1515. pageSize, _ := this.GetInt("PageSize")
  1516. currentIndex, _ := this.GetInt("CurrentIndex")
  1517. keyWord := this.GetString("KeyWord")
  1518. var total int
  1519. page := paging.GetPaging(currentIndex, pageSize, total)
  1520. var startSize int
  1521. if pageSize <= 0 {
  1522. pageSize = utils.PageSize20
  1523. }
  1524. if currentIndex <= 0 {
  1525. currentIndex = 1
  1526. }
  1527. startSize = paging.StartIndex(currentIndex, pageSize)
  1528. var condition string
  1529. var pars []interface{}
  1530. if sandboxClassifyId > 0 {
  1531. sandboxClassifyId, err := sandbox.GetSandboxClassify(sandboxClassifyId)
  1532. if err != nil && err.Error() != utils.ErrNoRow() {
  1533. br.Msg = "获取图表信息失败"
  1534. br.ErrMsg = "获取信息失败,GetChartClassify,Err:" + err.Error()
  1535. return
  1536. }
  1537. condition += " AND sandbox_classify_id IN(" + sandboxClassifyId + ") "
  1538. //pars = append(pars, chartClassifyId)
  1539. }
  1540. if keyWord != "" {
  1541. condition += ` AND ( name LIKE '%` + keyWord + `%' )`
  1542. }
  1543. //只看我的
  1544. isShowMe, _ := this.GetBool("IsShowMe")
  1545. if isShowMe {
  1546. condition += ` AND sys_user_id = ? `
  1547. pars = append(pars, sysUser.AdminId)
  1548. }
  1549. //获取图表信息
  1550. condition += ` AND is_delete = 0 `
  1551. list, err := sandbox.GetSandboxListByCondition(condition, pars, startSize, pageSize)
  1552. if err != nil && err.Error() != utils.ErrNoRow() {
  1553. br.Success = true
  1554. br.Msg = "获取沙盘信息失败"
  1555. br.ErrMsg = "获取沙盘信息失败,Err:" + err.Error()
  1556. return
  1557. }
  1558. for i, v := range list {
  1559. ids, err := sandbox.GetSandboxAllParentByClassifyId(v.SandboxClassifyId)
  1560. if err != nil {
  1561. br.Msg = "获取父级信息错误!"
  1562. br.ErrMsg = "获取父级信息错误,Err:" + err.Error()
  1563. return
  1564. }
  1565. list[i].ParentIds = ids
  1566. }
  1567. resp := new(sandbox.SandboxListResp)
  1568. if list == nil || len(list) <= 0 || (err != nil && err.Error() == utils.ErrNoRow()) {
  1569. items := make([]*sandbox.SandboxListItems, 0)
  1570. resp.Paging = page
  1571. resp.List = items
  1572. br.Ret = 200
  1573. br.Success = true
  1574. br.Msg = "获取成功"
  1575. return
  1576. }
  1577. dataCount, err := sandbox.GetSandboxListCountByCondition(condition, pars)
  1578. if err != nil && err.Error() != utils.ErrNoRow() {
  1579. br.Msg = "获取指标信息失败"
  1580. br.ErrMsg = "获取指标数据总数失败,Err:" + err.Error()
  1581. return
  1582. }
  1583. page = paging.GetPaging(currentIndex, pageSize, dataCount)
  1584. resp.Paging = page
  1585. resp.List = list
  1586. br.Ret = 200
  1587. br.Success = true
  1588. br.Msg = "获取成功"
  1589. br.Data = resp
  1590. }
  1591. // Save
  1592. // @Title 新增/编辑保存沙盘
  1593. // @Description 新增/编辑保存沙盘接口
  1594. // @Param request body request.AddAndEditSandbox true "type json string"
  1595. // @Success 200 {object} sandbox.Sandbox
  1596. // @router /saveV2 [post]
  1597. func (this *SandboxController) SaveV2() {
  1598. br := new(models.BaseResponse).Init()
  1599. defer func() {
  1600. this.Data["json"] = br
  1601. this.ServeJSON()
  1602. }()
  1603. sysUser := this.SysUser
  1604. if sysUser == nil {
  1605. br.Msg = "请登录"
  1606. br.ErrMsg = "请登录,SysUser Is Empty"
  1607. br.Ret = 408
  1608. return
  1609. }
  1610. var req request.AddAndEditSandboxV2
  1611. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1612. if err != nil {
  1613. br.Msg = "参数解析异常!"
  1614. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1615. return
  1616. }
  1617. var sandboxResp *sandbox.SandboxSaveResp
  1618. var errMsg string
  1619. if req.SandboxId <= 0 {
  1620. //新增沙盘
  1621. sandboxResp, err = sandboxService.AddSandboxV2(req, sysUser.AdminId, sysUser.RealName)
  1622. if err != nil {
  1623. br.Msg = "保存失败!"
  1624. if errMsg != `` {
  1625. br.Msg = errMsg
  1626. }
  1627. br.ErrMsg = "保存失败,Err:" + err.Error()
  1628. return
  1629. }
  1630. } else {
  1631. //编辑沙盘
  1632. sandboxInfo := &sandbox.Sandbox{
  1633. SandboxId: req.SandboxId,
  1634. Name: utils.TrimStr(req.Name),
  1635. Content: req.Content,
  1636. MindmapData: req.MindmapData,
  1637. PicUrl: utils.TrimStr(req.PicUrl),
  1638. ModifyTime: time.Now(),
  1639. SandboxClassifyId: req.SandboxClassifyId,
  1640. }
  1641. var updateSandboxColumn = []string{"Content", "MindmapData", "PicUrl", "ModifyTime", "SandboxClassifyId"}
  1642. err = sandboxInfo.Update(updateSandboxColumn)
  1643. if err != nil {
  1644. br.Msg = "保存失败!"
  1645. if errMsg != `` {
  1646. br.Msg = errMsg
  1647. }
  1648. br.ErrMsg = "保存失败,Err:" + err.Error()
  1649. return
  1650. }
  1651. }
  1652. msg := "保存成功"
  1653. br.Ret = 200
  1654. br.Success = true
  1655. br.Msg = msg
  1656. br.Data = sandboxResp
  1657. }
  1658. // Delete
  1659. // @Title 删除沙盘
  1660. // @Description 删除沙盘接口
  1661. // @Param request body request.DeleteSandbox true "type json string"
  1662. // @Success 200 标记成功
  1663. // @router /deleteV2 [post]
  1664. func (this *SandboxController) DeleteV2() {
  1665. br := new(models.BaseResponse).Init()
  1666. defer func() {
  1667. this.Data["json"] = br
  1668. this.ServeJSON()
  1669. }()
  1670. sysUser := this.SysUser
  1671. if sysUser == nil {
  1672. br.Msg = "请登录"
  1673. br.ErrMsg = "请登录,SysUser Is Empty"
  1674. br.Ret = 408
  1675. return
  1676. }
  1677. var req request.DeleteSandbox
  1678. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1679. if err != nil {
  1680. br.Msg = "参数解析异常!"
  1681. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1682. return
  1683. }
  1684. if req.SandboxId <= 0 {
  1685. br.Msg = "缺少沙盘编号"
  1686. return
  1687. }
  1688. //删除沙盘
  1689. err = sandboxService.DeleteSandbox(req.SandboxId)
  1690. if err != nil {
  1691. br.Msg = err.Error()
  1692. return
  1693. }
  1694. msg := "删除成功"
  1695. br.Ret = 200
  1696. br.Success = true
  1697. br.Msg = msg
  1698. }
  1699. // GetSandboxVersionDetail
  1700. // @Title 获取沙盘版本数据详情(已保存的)
  1701. // @Description 获取沙盘版本数据详情接口(已保存的)
  1702. // @Param SandboxVersionCode query string true "沙盘版本code"
  1703. // @Success 200 {object} sandbox.SandboxVersion
  1704. // @router /detail [get]
  1705. func (this *SandboxController) GetSandboxDetail() {
  1706. br := new(models.BaseResponse).Init()
  1707. defer func() {
  1708. this.Data["json"] = br
  1709. this.ServeJSON()
  1710. }()
  1711. sysUser := this.SysUser
  1712. if sysUser == nil {
  1713. br.Msg = "请登录"
  1714. br.ErrMsg = "请登录,SysUser Is Empty"
  1715. br.Ret = 408
  1716. return
  1717. }
  1718. sandboxId, _ := this.GetInt("SandboxId")
  1719. if sandboxId == 0 {
  1720. br.Msg = "缺少沙盘Id"
  1721. return
  1722. }
  1723. //获取沙盘数据详情(已保存的)
  1724. sandboxVersionInfo, err := sandbox.GetSandboxById(sandboxId)
  1725. if err != nil {
  1726. br.Msg = "获取失败"
  1727. br.ErrMsg = "获取失败,Err:" + err.Error()
  1728. return
  1729. }
  1730. msg := "获取成功"
  1731. br.Ret = 200
  1732. br.Success = true
  1733. br.Msg = msg
  1734. br.Data = sandboxVersionInfo
  1735. }
  1736. //// SandboxClassifyItems
  1737. //// @Title 获取所有沙盘分类接口-包含沙盘-先分类后沙盘区分,暂时弃用
  1738. //// @Description 获取所有沙盘分类接口-包含沙盘
  1739. //// @Param IsShowMe query bool true "是否只看我的,true、false"
  1740. //// @Success 200 {object} data_manage.ChartClassifyListResp
  1741. //// @router /classify/list [get]
  1742. //func (this *SandboxController) SandboxClassifyItems() {
  1743. // br := new(models.BaseResponse).Init()
  1744. // defer func() {
  1745. // this.Data["json"] = br
  1746. // this.ServeJSON()
  1747. // }()
  1748. //
  1749. // resp := new(sandbox.SandboxClassifyListResp)
  1750. // sandboxClassifyId, _ := this.GetInt("SandboxClassifyId")
  1751. //
  1752. // isShowMe, _ := this.GetBool("IsShowMe")
  1753. // if isShowMe {
  1754. // errMsg, err := sandboxService.GetSandboxClassifyListForMe(*this.SysUser, resp, sandboxClassifyId)
  1755. // if err != nil {
  1756. // br.Msg = errMsg
  1757. // br.ErrMsg = err.Error()
  1758. // return
  1759. // }
  1760. // // 移除没有权限的图表
  1761. // //allNodes := sandboxService.HandleNoPermissionSandbox(resp.AllNodes, nil)
  1762. // //resp.AllNodes = allNodes
  1763. //
  1764. // br.Ret = 200
  1765. // br.Success = true
  1766. // br.Msg = "获取成功"
  1767. // br.Data = resp
  1768. // fmt.Println("source my classify")
  1769. // return
  1770. // }
  1771. //
  1772. // rootList, err := sandbox.GetSandboxClassifyByParentId(sandboxClassifyId)
  1773. // if err != nil && err.Error() != utils.ErrNoRow() {
  1774. // br.Msg = "获取失败"
  1775. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1776. // return
  1777. // }
  1778. //
  1779. // classifyAll, err := sandbox.GetSandboxClassifyByParentId(sandboxClassifyId)
  1780. // if err != nil && err.Error() != utils.ErrNoRow() {
  1781. // br.Msg = "获取失败"
  1782. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1783. // return
  1784. // }
  1785. //
  1786. // sandboxAll, err := sandbox.GetSandboxItemsByClassifyId(sandboxClassifyId)
  1787. // if err != nil && err.Error() != utils.ErrNoRow() {
  1788. // br.Msg = "获取失败"
  1789. // br.ErrMsg = "获取数据失败,Err:" + err.Error()
  1790. // return
  1791. // }
  1792. //
  1793. // sandListMap := make(map[int][]*sandbox.SandboxClassifyItems)
  1794. // for _, v := range sandboxAll {
  1795. // if _, ok := sandListMap[v.SandboxClassifyId]; !ok {
  1796. // list := make([]*sandbox.SandboxClassifyItems, 0)
  1797. // list = append(list, v)
  1798. // sandListMap[v.SandboxClassifyId] = list
  1799. // } else {
  1800. // sandListMap[v.SandboxClassifyId] = append(sandListMap[v.SandboxClassifyId], v)
  1801. // }
  1802. // }
  1803. //
  1804. // nodeAll := make([]*sandbox.SandboxClassifyItems, 0)
  1805. // for k := range rootList {
  1806. // rootNode := rootList[k]
  1807. // sandboxService.SandboxClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode)
  1808. // nodeAll = append(nodeAll, rootNode)
  1809. // }
  1810. // //for k := range nodeAll {
  1811. // //
  1812. // //}
  1813. // newAll := sandboxService.SandboxItemsMakeTree(nodeAll, sandListMap, sandboxClassifyId)
  1814. //
  1815. // resp.AllNodes = newAll
  1816. // br.Ret = 200
  1817. // br.Success = true
  1818. // br.Msg = "获取成功"
  1819. // br.Data = resp
  1820. //}
  1821. //// SandboxMove
  1822. //// @Title 移动沙盘接口
  1823. //// @Description 移动图表接口
  1824. //// @Success 200 {object} data_manage.MoveChartInfoReq
  1825. //// @router /move [post]
  1826. //func (this *SandboxController) SandboxMove() {
  1827. // br := new(models.BaseResponse).Init()
  1828. // defer func() {
  1829. // this.Data["json"] = br
  1830. // this.ServeJSON()
  1831. // }()
  1832. //
  1833. // sysUser := this.SysUser
  1834. // if sysUser == nil {
  1835. // br.Msg = "请登录"
  1836. // br.ErrMsg = "请登录,SysUser Is Empty"
  1837. // br.Ret = 408
  1838. // return
  1839. // }
  1840. //
  1841. // var req sandbox.MoveSandboxReq
  1842. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1843. // if err != nil {
  1844. // br.Msg = "参数解析异常!"
  1845. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1846. // return
  1847. // }
  1848. //
  1849. // if req.SandboxId <= 0 {
  1850. // br.Msg = "参数错误"
  1851. // br.ErrMsg = "沙盘id小于等于0"
  1852. // return
  1853. // }
  1854. //
  1855. // if req.SandboxClassifyId <= 0 {
  1856. // br.Msg = "请选择分类"
  1857. // return
  1858. // }
  1859. // //判断分类是否存在
  1860. // count, _ := sandbox.GetSandboxClassifyCountById(req.SandboxClassifyId)
  1861. // if count <= 0 {
  1862. // br.Msg = "分类已被删除,不可移动,请刷新页面"
  1863. // return
  1864. // }
  1865. //
  1866. // sandboxInfo, err := sandbox.GetSandboxById(req.SandboxId)
  1867. // if err != nil {
  1868. // br.Msg = "移动失败"
  1869. // br.ErrMsg = "获取沙盘信息失败,Err:" + err.Error()
  1870. // return
  1871. // }
  1872. //
  1873. // //如果改变了分类,那么移动该图表数据
  1874. // if sandboxInfo.SandboxClassifyId != req.SandboxClassifyId {
  1875. // //查询需要修改的分类下是否存在同一个图表名称
  1876. // tmpSandboxInfo, tmpErr := sandbox.GetSandboxByClassifyIdAndName(req.SandboxClassifyId, sandboxInfo.Name)
  1877. // if tmpErr != nil && tmpErr.Error() != utils.ErrNoRow() {
  1878. // br.Msg = "移动失败"
  1879. // br.ErrMsg = "移动失败,Err:" + tmpErr.Error()
  1880. // return
  1881. // }
  1882. // if tmpSandboxInfo != nil {
  1883. // br.Msg = "移动失败,同一个分类下沙盘名称不允许重复"
  1884. // br.ErrMsg = "移动失败,同一个分类下沙盘名称不允许重复"
  1885. // return
  1886. // }
  1887. // err = sandbox.MoveSandbox(req.SandboxId, req.SandboxClassifyId)
  1888. // if err != nil {
  1889. // br.Msg = "移动失败"
  1890. // br.ErrMsg = "移动失败,Err:" + err.Error()
  1891. // return
  1892. // }
  1893. // }
  1894. //
  1895. // //移动排序
  1896. // updateCol := make([]string, 0)
  1897. // //如果有传入 上一个兄弟节点分类id
  1898. // if req.PrevSandboxId > 0 {
  1899. // prevChartInfo, err := sandbox.GetSandboxById(req.PrevSandboxId)
  1900. // if err != nil {
  1901. // br.Msg = "移动失败"
  1902. // br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  1903. // return
  1904. // }
  1905. //
  1906. // //如果是移动在两个兄弟节点之间
  1907. // if req.NextSandboxId > 0 {
  1908. // //下一个兄弟节点
  1909. // nextChartInfo, err := sandbox.GetSandboxById(req.NextSandboxId)
  1910. // if err != nil {
  1911. // br.Msg = "移动失败"
  1912. // br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  1913. // return
  1914. // }
  1915. // //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  1916. // if prevChartInfo.Sort == nextChartInfo.Sort || prevChartInfo.Sort == sandboxInfo.Sort {
  1917. // //变更兄弟节点的排序
  1918. // updateSortStr := `sort + 2`
  1919. // _ = sandbox.UpdateSandboxSortByClassifyId(prevChartInfo.SandboxClassifyId, prevChartInfo.Sort, prevChartInfo.SandboxId, updateSortStr)
  1920. // } else {
  1921. // //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  1922. // if nextChartInfo.Sort-prevChartInfo.Sort == 1 {
  1923. // //变更兄弟节点的排序
  1924. // updateSortStr := `sort + 1`
  1925. // _ = sandbox.UpdateSandboxSortByClassifyId(prevChartInfo.SandboxClassifyId, prevChartInfo.Sort, prevChartInfo.SandboxId, updateSortStr)
  1926. // }
  1927. // }
  1928. // }
  1929. //
  1930. // sandboxInfo.Sort = prevChartInfo.Sort + 1
  1931. // sandboxInfo.ModifyTime = time.Now()
  1932. // updateCol = append(updateCol, "Sort", "ModifyTime")
  1933. //
  1934. // } else {
  1935. // firstClassify, err := sandbox.GetFirstSandboxByClassifyId(req.SandboxClassifyId)
  1936. // if err != nil && err.Error() != utils.ErrNoRow() {
  1937. // br.Msg = "移动失败"
  1938. // br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  1939. // return
  1940. // }
  1941. //
  1942. // //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  1943. // if firstClassify != nil && firstClassify.Sort == 0 {
  1944. // updateSortStr := ` sort + 1 `
  1945. // _ = sandbox.UpdateSandboxSortByClassifyId(firstClassify.SandboxClassifyId, 0, firstClassify.SandboxId-1, updateSortStr)
  1946. // }
  1947. //
  1948. // sandboxInfo.Sort = 0 //那就是排在第一位
  1949. // sandboxInfo.ModifyTime = time.Now()
  1950. // updateCol = append(updateCol, "Sort", "ModifyTime")
  1951. // }
  1952. //
  1953. // //更新
  1954. // if len(updateCol) > 0 {
  1955. // err = sandboxInfo.Update(updateCol)
  1956. // if err != nil {
  1957. // br.Msg = "移动失败"
  1958. // br.ErrMsg = "修改失败,Err:" + err.Error()
  1959. // return
  1960. // }
  1961. // }
  1962. //
  1963. // if err != nil {
  1964. // br.Msg = "移动失败"
  1965. // br.ErrMsg = "修改失败,Err:" + err.Error()
  1966. // return
  1967. // }
  1968. //
  1969. // br.Ret = 200
  1970. // br.Success = true
  1971. // br.Msg = "移动成功"
  1972. //}
  1973. //// ChartClassifyMove
  1974. //// @Title 沙盘分类移动接口
  1975. //// @Description 沙盘分类移动接口
  1976. //// @Success 200 {object} data_manage.MoveChartClassifyReq
  1977. //// @router /classify/move [post]
  1978. //func (this *SandboxController) ChartClassifyMove() {
  1979. // br := new(models.BaseResponse).Init()
  1980. // defer func() {
  1981. // this.Data["json"] = br
  1982. // this.ServeJSON()
  1983. // }()
  1984. //
  1985. // sysUser := this.SysUser
  1986. // if sysUser == nil {
  1987. // br.Msg = "请登录"
  1988. // br.ErrMsg = "请登录,SysUser Is Empty"
  1989. // br.Ret = 408
  1990. // return
  1991. // }
  1992. //
  1993. // var req sandbox.MoveSandboxClassifyReq
  1994. // err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  1995. // if err != nil {
  1996. // br.Msg = "参数解析异常!"
  1997. // br.ErrMsg = "参数解析失败,Err:" + err.Error()
  1998. // return
  1999. // }
  2000. //
  2001. // if req.ClassifyId <= 0 {
  2002. // br.Msg = "参数错误"
  2003. // br.ErrMsg = "分类id小于等于0"
  2004. // return
  2005. // }
  2006. // //判断分类是否存在
  2007. // sandboxClassifyInfo, err := sandbox.GetSandboxClassifyById(req.ClassifyId)
  2008. // if err != nil {
  2009. // br.Msg = "移动失败"
  2010. // br.ErrMsg = "获取分类信息失败,Err:" + err.Error()
  2011. // return
  2012. // }
  2013. //
  2014. // updateCol := make([]string, 0)
  2015. //
  2016. // //判断上级id是否一致,如果不一致的话,那么需要移动该分类层级
  2017. // if sandboxClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId != 0 {
  2018. // parentChartClassifyInfo, err := sandbox.GetSandboxClassifyById(req.ParentClassifyId)
  2019. // if err != nil {
  2020. // br.Msg = "移动失败"
  2021. // br.ErrMsg = "获取上级分类信息失败,Err:" + err.Error()
  2022. // return
  2023. // }
  2024. // sandboxClassifyInfo.ParentId = parentChartClassifyInfo.SandboxClassifyId
  2025. // sandboxClassifyInfo.Level = parentChartClassifyInfo.Level + 1
  2026. // sandboxClassifyInfo.ModifyTime = time.Now()
  2027. // updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  2028. // } else if sandboxClassifyInfo.ParentId != req.ParentClassifyId && req.ParentClassifyId == 0 {
  2029. // //改为一级分类
  2030. // sandboxClassifyInfo.ParentId = req.ParentClassifyId
  2031. // sandboxClassifyInfo.Level = 1
  2032. // sandboxClassifyInfo.ModifyTime = time.Now()
  2033. // updateCol = append(updateCol, "ParentId", "Level", "ModifyTime")
  2034. // }
  2035. //
  2036. // //如果有传入 上一个兄弟节点分类id
  2037. // if req.PrevClassifyId > 0 {
  2038. // //上一个兄弟节点
  2039. // prevClassify, err := sandbox.GetSandboxClassifyById(req.PrevClassifyId)
  2040. // if err != nil {
  2041. // br.Msg = "移动失败"
  2042. // br.ErrMsg = "获取上一个兄弟节点分类信息失败,Err:" + err.Error()
  2043. // return
  2044. // }
  2045. //
  2046. // //如果是移动在两个兄弟节点之间
  2047. // if req.NextClassifyId > 0 {
  2048. // //下一个兄弟节点
  2049. // nextClassify, err := sandbox.GetSandboxClassifyById(req.NextClassifyId)
  2050. // if err != nil {
  2051. // br.Msg = "移动失败"
  2052. // br.ErrMsg = "获取下一个兄弟节点分类信息失败,Err:" + err.Error()
  2053. // return
  2054. // }
  2055. // //如果上一个兄弟与下一个兄弟的排序权重是一致的,那么需要将下一个兄弟(以及下个兄弟的同样排序权重)的排序权重+2,自己变成上一个兄弟的排序权重+1
  2056. // if prevClassify.Sort == nextClassify.Sort || prevClassify.Sort == sandboxClassifyInfo.Sort {
  2057. // //变更兄弟节点的排序
  2058. // updateSortStr := `sort + 2`
  2059. // _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, prevClassify.SandboxClassifyId, prevClassify.Sort, updateSortStr)
  2060. // } else {
  2061. // //如果下一个兄弟的排序权重正好是上个兄弟节点的下一层,那么需要再加一层了
  2062. // if nextClassify.Sort-prevClassify.Sort == 1 {
  2063. // //变更兄弟节点的排序
  2064. // updateSortStr := `sort + 1`
  2065. // _ = sandbox.UpdateSandboxClassifySortByParentId(prevClassify.ParentId, 0, prevClassify.Sort, updateSortStr)
  2066. // }
  2067. // }
  2068. // }
  2069. //
  2070. // sandboxClassifyInfo.Sort = prevClassify.Sort + 1
  2071. // sandboxClassifyInfo.ModifyTime = time.Now()
  2072. // updateCol = append(updateCol, "Sort", "ModifyTime")
  2073. //
  2074. // } else {
  2075. // firstClassify, err := sandbox.GetFirstSandboxClassifyByParentId(sandboxClassifyInfo.ParentId)
  2076. // if err != nil && err.Error() != utils.ErrNoRow() {
  2077. // br.Msg = "移动失败"
  2078. // br.ErrMsg = "获取获取当前父级分类下的排序第一条的分类信息失败,Err:" + err.Error()
  2079. // return
  2080. // }
  2081. //
  2082. // //如果该分类下存在其他分类,且第一个其他分类的排序等于0,那么需要调整排序
  2083. // if firstClassify != nil && firstClassify.Sort == 0 {
  2084. // updateSortStr := ` sort + 1 `
  2085. // _ = sandbox.UpdateSandboxClassifySortByParentId(firstClassify.ParentId, firstClassify.SandboxClassifyId-1, 0, updateSortStr)
  2086. // }
  2087. //
  2088. // sandboxClassifyInfo.Sort = 0 //那就是排在第一位
  2089. // sandboxClassifyInfo.ModifyTime = time.Now()
  2090. // updateCol = append(updateCol, "Sort", "ModifyTime")
  2091. // }
  2092. //
  2093. // //更新
  2094. // if len(updateCol) > 0 {
  2095. // err = sandboxClassifyInfo.Update(updateCol)
  2096. // if err != nil {
  2097. // br.Msg = "移动失败"
  2098. // br.ErrMsg = "修改失败,Err:" + err.Error()
  2099. // return
  2100. // }
  2101. // }
  2102. // br.Ret = 200
  2103. // br.Success = true
  2104. // br.Msg = "移动成功"
  2105. //}
  2106. // SandboxClassifyItems
  2107. // @Title 获取所有沙盘分类接口-不包含沙盘
  2108. // @Description 获取所有沙盘分类接口-不包含沙盘
  2109. // @Param IsShowMe query bool true "是否只看我的,true、false"
  2110. // @Success 200 {object} data_manage.ChartClassifyListResp
  2111. // @router /classifyList [get]
  2112. func (this *SandboxController) SandboxClassifyList() {
  2113. br := new(models.BaseResponse).Init()
  2114. defer func() {
  2115. this.Data["json"] = br
  2116. this.ServeJSON()
  2117. }()
  2118. resp := new(sandbox.SandboxClassifyListResp)
  2119. rootList, err := sandbox.GetSandboxClassifyByParentId(0)
  2120. if err != nil && err.Error() != utils.ErrNoRow() {
  2121. br.Msg = "获取失败"
  2122. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  2123. return
  2124. }
  2125. classifyAll, err := sandbox.GetSandboxClassifyAll()
  2126. if err != nil && err.Error() != utils.ErrNoRow() {
  2127. br.Msg = "获取失败"
  2128. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  2129. return
  2130. }
  2131. nodeAll := make([]*sandbox.SandboxClassifyItems, 0)
  2132. for k := range rootList {
  2133. rootNode := rootList[k]
  2134. sandboxService.SandboxClassifyItemsMakeTree(this.SysUser, classifyAll, rootNode)
  2135. nodeAll = append(nodeAll, rootNode)
  2136. }
  2137. resp.AllNodes = nodeAll
  2138. br.Ret = 200
  2139. br.Success = true
  2140. br.Msg = "获取成功"
  2141. br.Data = resp
  2142. }
  2143. // @Title 链接指标检测
  2144. // @Description 链接指标检测接口
  2145. // @Param request body data_manage.ChartClassifyDeleteCheckResp true "type json string"
  2146. // @Success 200 Ret=200 检测成功
  2147. // @router /link/check [post]
  2148. func (this *SandboxController) LinkEdbInfoCheck() {
  2149. br := new(models.BaseResponse).Init()
  2150. defer func() {
  2151. this.Data["json"] = br
  2152. this.ServeJSON()
  2153. }()
  2154. var req sandbox.SandboxLinkCheckReq
  2155. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  2156. if err != nil {
  2157. br.Msg = "参数解析异常!"
  2158. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  2159. return
  2160. }
  2161. resp := new(sandbox.SandboxLinkCheckResp)
  2162. edbInfoList, err := data_manage.GetEdbInfoByIdList(req.EdbInfoIdList)
  2163. if err != nil {
  2164. br.Msg = "获取指标信息失败"
  2165. br.ErrMsg = "获取指标信息失败,err:" + err.Error()
  2166. return
  2167. }
  2168. for _, v := range edbInfoList {
  2169. resp.EdbInfoIdList = append(resp.EdbInfoIdList, v.EdbInfoId)
  2170. }
  2171. chartList, err := data_manage.GetChartInfoByIdList(req.ChartInfoIdList)
  2172. if err != nil {
  2173. br.Msg = `获取失败`
  2174. br.ErrMsg = `获取图表列表失败,ERR:` + err.Error()
  2175. return
  2176. }
  2177. for _, v := range chartList {
  2178. resp.ChartInfoIdList = append(resp.ChartInfoIdList, v.ChartInfoId)
  2179. }
  2180. reportList, err := models.GetSimpleReportByIds(req.ReportIdList)
  2181. if err != nil {
  2182. br.Msg = `获取失败`
  2183. br.ErrMsg = `获取报告列表失败,ERR:` + err.Error()
  2184. return
  2185. }
  2186. for _, v := range reportList {
  2187. resp.ReportIdList = append(resp.ReportIdList, v.Id)
  2188. }
  2189. br.Ret = 200
  2190. br.Msg = "检测成功"
  2191. br.Success = true
  2192. br.Data = resp
  2193. }