sys_role.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/rdlucklib/rdluck_tools/paging"
  6. "hongze/hz_crm_api/models"
  7. "hongze/hz_crm_api/models/system"
  8. "hongze/hz_crm_api/services"
  9. "hongze/hz_crm_api/utils"
  10. "strconv"
  11. "strings"
  12. "time"
  13. )
  14. type SysRoleController struct {
  15. BaseAuthController
  16. }
  17. // @Title 新增角色
  18. // @Description 新增角色接口
  19. // @Param request body system.SysRoleAddReq true "type json string"
  20. // @Success 200 新增成功
  21. // @router /role/add [post]
  22. func (this *SysRoleController) Add() {
  23. br := new(models.BaseResponse).Init()
  24. defer func() {
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. var req system.SysRoleAddReq
  29. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  30. if err != nil {
  31. br.Msg = "参数解析异常!"
  32. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  33. return
  34. }
  35. if req.RoleName == "" {
  36. br.Msg = "角色名称不能为空"
  37. return
  38. }
  39. count, err := system.GetSysRoleCount(req.RoleName)
  40. if err != nil && err.Error() != utils.ErrNoRow() {
  41. br.Msg = "获取数据失败"
  42. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  43. return
  44. }
  45. if count > 0 {
  46. br.Msg = "角色已存在,请重新输入"
  47. return
  48. }
  49. item := new(system.SysRole)
  50. item.RoleName = req.RoleName
  51. item.RoleType = req.RoleType
  52. item.RoleTypeCode = services.GetRoleTypeCode(req.RoleType)
  53. item.CreateTime = time.Now()
  54. item.ModifyTime = time.Now()
  55. _, err = system.AddSysRole(item)
  56. if err != nil {
  57. br.Msg = "新增失败"
  58. br.ErrMsg = "新增失败,Err:" + err.Error()
  59. return
  60. }
  61. // 同步角色缓存
  62. _ = utils.Rc.LPush(utils.CACHE_SYNC_SYS_ROLE_FROM_CRM, item.RoleName)
  63. br.Ret = 200
  64. br.Success = true
  65. br.Msg = "新增成功"
  66. }
  67. // @Title 修改角色
  68. // @Description 修改角色接口
  69. // @Param request body system.SysRoleEditReq true "type json string"
  70. // @Success 200 修改成功
  71. // @router /role/edit [post]
  72. func (this *SysRoleController) Edit() {
  73. br := new(models.BaseResponse).Init()
  74. defer func() {
  75. this.Data["json"] = br
  76. this.ServeJSON()
  77. }()
  78. var req system.SysRoleEditReq
  79. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  80. if err != nil {
  81. br.Msg = "参数解析异常!"
  82. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  83. return
  84. }
  85. if req.RoleId <= 0 {
  86. br.Msg = "参数错误"
  87. br.ErrMsg = "参数错误,GroupId 小于等于0 "
  88. return
  89. }
  90. if req.RoleName == "" {
  91. br.Msg = "分组名称不能为空"
  92. return
  93. }
  94. item, err := system.GetSysRoleByName(req.RoleName)
  95. if err != nil && err.Error() != utils.ErrNoRow() {
  96. br.Msg = "获取数据失败"
  97. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  98. return
  99. }
  100. if item != nil {
  101. if item.RoleId != req.RoleId {
  102. br.Msg = "名称已存在,请重新输入"
  103. return
  104. }
  105. }
  106. roleTypeCode := services.GetRoleTypeCode(req.RoleType)
  107. err = system.ModifySysRole(req.RoleName, req.RoleType, roleTypeCode, req.RoleId)
  108. if err != nil {
  109. br.Msg = "修改失败"
  110. br.ErrMsg = "修改失败,Err:" + err.Error()
  111. return
  112. }
  113. // 同步角色缓存
  114. _ = utils.Rc.LPush(utils.CACHE_SYNC_SYS_ROLE_FROM_CRM, item.RoleName)
  115. br.Ret = 200
  116. br.Success = true
  117. br.IsAddLog = true
  118. br.Msg = "修改成功"
  119. }
  120. // @Title 删除角色
  121. // @Description 删除角色接口
  122. // @Param request body system.SysRoleDeleteReq true "type json string"
  123. // @Success 200 删除成功
  124. // @router /role/delete [post]
  125. func (this *SysRoleController) Delete() {
  126. br := new(models.BaseResponse).Init()
  127. defer func() {
  128. this.Data["json"] = br
  129. this.ServeJSON()
  130. }()
  131. var req system.SysRoleDeleteReq
  132. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  133. if err != nil {
  134. br.Msg = "参数解析异常!"
  135. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  136. return
  137. }
  138. if req.RoleId <= 0 {
  139. br.Msg = "参数错误"
  140. br.ErrMsg = "参数错误,GroupId 小于等于0 "
  141. return
  142. }
  143. role, e := system.GetSysRoleById(req.RoleId)
  144. if e != nil {
  145. if err.Error() == utils.ErrNoRow() {
  146. br.Msg = "角色不存在, 请刷新页面"
  147. return
  148. }
  149. br.Msg = "删除失败"
  150. br.ErrMsg = "获取角色信息失败, Err: " + e.Error()
  151. return
  152. }
  153. err = system.DeleteSysRole(req.RoleId)
  154. if err != nil {
  155. br.Msg = "删除失败"
  156. br.ErrMsg = "删除失败,Err:" + err.Error()
  157. return
  158. }
  159. // 同步角色缓存
  160. _ = utils.Rc.LPush(utils.CACHE_SYNC_SYS_ROLE_FROM_CRM, role.RoleName)
  161. br.Ret = 200
  162. br.Success = true
  163. br.IsAddLog = true
  164. br.Msg = "删除成功"
  165. }
  166. // @Title 获取角色列表
  167. // @Description 获取角色列表接口
  168. // @Param PageSize query int true "每页数据条数"
  169. // @Param CurrentIndex query int true "当前页页码,从1开始"
  170. // @Param KeyWord query string true "搜索关键词"
  171. // @Success 200 {object} system.SysRoleListResp
  172. // @router /role/list [get]
  173. func (this *SysRoleController) ListSysRole() {
  174. br := new(models.BaseResponse).Init()
  175. defer func() {
  176. this.Data["json"] = br
  177. this.ServeJSON()
  178. }()
  179. sysUser := this.SysUser
  180. if sysUser == nil {
  181. br.Msg = "请登录"
  182. br.ErrMsg = "请登录,SysUser Is Empty"
  183. return
  184. }
  185. pageSize, _ := this.GetInt("PageSize")
  186. currentIndex, _ := this.GetInt("CurrentIndex")
  187. keyWord := this.GetString("KeyWord")
  188. var startSize int
  189. if pageSize <= 0 {
  190. pageSize = utils.PageSize20
  191. }
  192. if currentIndex <= 0 {
  193. currentIndex = 1
  194. }
  195. startSize = utils.StartIndex(currentIndex, pageSize)
  196. var condition string
  197. var pars []interface{}
  198. if keyWord != "" {
  199. condition += ` AND role_name LIKE '%` + keyWord + `%' `
  200. }
  201. total, err := system.GetSysRoleListCount(condition, pars)
  202. if err != nil {
  203. br.Msg = "获取失败"
  204. br.ErrMsg = "获取失败,Err:" + err.Error()
  205. return
  206. }
  207. list, err := system.GetSysRoleList(condition, pars, startSize, pageSize)
  208. if err != nil {
  209. br.Msg = "获取失败"
  210. br.ErrMsg = "获取失败,Err:" + err.Error()
  211. return
  212. }
  213. page := paging.GetPaging(currentIndex, pageSize, total)
  214. resp := new(system.SysRoleListResp)
  215. resp.List = list
  216. resp.Paging = page
  217. br.Ret = 200
  218. br.Success = true
  219. br.Msg = "获取成功"
  220. br.Data = resp
  221. }
  222. // @Title 角色设置权限-菜单列表
  223. // @Description 角色设置权限-菜单列表
  224. // @Param RoleId query int true "角色Id"
  225. // @Success 200 {object} system.SysRoleListResp
  226. // @router /role/menu/list [get]
  227. func (this *SysRoleController) SysRoleMenusList() {
  228. br := new(models.BaseResponse).Init()
  229. defer func() {
  230. this.Data["json"] = br
  231. this.ServeJSON()
  232. }()
  233. roleId, err := this.GetInt("RoleId")
  234. if err != nil {
  235. br.Msg = "获取角色失败"
  236. br.ErrMsg = "获取角色失败,Err:" + err.Error()
  237. return
  238. }
  239. fmt.Println("roleId", roleId)
  240. list := make([]*system.RoleMenuList, 0)
  241. sysUser := this.SysUser
  242. if sysUser == nil {
  243. br.Msg = "请登录"
  244. br.ErrMsg = "请登录,SysUser Is Empty"
  245. return
  246. }
  247. list, err = system.GetRoleMenuList()
  248. if err != nil {
  249. br.Msg = "获取失败"
  250. br.ErrMsg = "获取失败,Err:" + err.Error()
  251. return
  252. }
  253. lenList := len(list)
  254. for i := 0; i < lenList; i++ {
  255. item := list[i]
  256. child, err := system.GetRoleMenuByParentId(item.MenuId)
  257. if err != nil {
  258. br.Msg = "获取失败"
  259. br.ErrMsg = "获取子菜单数据失败,Err:" + err.Error()
  260. return
  261. }
  262. list[i].Child = child
  263. checkList := make([]int, 0)
  264. if roleId > 0 {
  265. checkItem, err := system.GetCheckListRoleMenu(roleId, item.MenuId)
  266. if err != nil {
  267. br.Msg = "获取失败"
  268. br.ErrMsg = "获取选择数据失败,Err:" + err.Error()
  269. return
  270. }
  271. for _, v := range checkItem {
  272. checkList = append(checkList, v.MenuId)
  273. }
  274. }
  275. list[i].CheckList = checkList
  276. }
  277. resp := new(system.RoleMenuListResp)
  278. resp.List = list
  279. br.Ret = 200
  280. br.Success = true
  281. br.Msg = "获取成功"
  282. br.Data = resp
  283. }
  284. // @Title 角色设置权限
  285. // @Description 角色设置权限
  286. // @Param request body system.RoleMenusAddReq true "type json string"
  287. // @Success 200 {object} system.SysRoleListResp
  288. // @router /role/menu/add [post]
  289. func (this *SysRoleController) SysRoleMenusAdd() {
  290. br := new(models.BaseResponse).Init()
  291. defer func() {
  292. this.Data["json"] = br
  293. this.ServeJSON()
  294. }()
  295. var req system.RoleMenusAddReq
  296. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  297. if err != nil {
  298. br.Msg = "参数解析异常!"
  299. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  300. return
  301. }
  302. roleId := req.RoleId
  303. if roleId <= 0 {
  304. br.Msg = "参数错误"
  305. br.ErrMsg = "参数错误,RoleId 小于等于0 "
  306. return
  307. }
  308. if req.MenuIdStr == "" {
  309. br.Msg = "请选择菜单"
  310. br.ErrMsg = "请选择菜单,MenuIdStr IS Empty "
  311. return
  312. }
  313. sysUser := this.SysUser
  314. if sysUser == nil {
  315. br.Msg = "请登录"
  316. br.ErrMsg = "请登录,SysUser Is Empty"
  317. return
  318. }
  319. err = system.DeleteRoleMenuByRoleId(roleId)
  320. if err != nil {
  321. br.Msg = "设置失败"
  322. br.ErrMsg = "清空原有设置失败,Err:" + err.Error()
  323. return
  324. }
  325. menuArr := strings.Split(req.MenuIdStr, ",")
  326. for _, v := range menuArr {
  327. menuId, err := strconv.Atoi(v)
  328. if err != nil {
  329. br.Msg = "设置失败"
  330. br.ErrMsg = "menuId 解析失败,Err:" + err.Error()
  331. return
  332. }
  333. //item := new(system.SysRoleMenu)
  334. item := new(system.SysRoleMenuCrm)
  335. item.RoleId = roleId
  336. item.MenuId = menuId
  337. _, err = system.AddSysRoleMenuCrm(item)
  338. if err != nil {
  339. br.Msg = "设置失败"
  340. br.ErrMsg = "新增设置失败,Err:" + err.Error()
  341. return
  342. }
  343. }
  344. if req.MenuButtonIdStr != "" {
  345. err = system.DeleteSysRoleButton(roleId)
  346. if err != nil {
  347. br.Msg = "设置失败"
  348. br.ErrMsg = "删除已设置数据失败,Err:" + err.Error()
  349. return
  350. }
  351. buttonMap := make(map[string]string)
  352. buttonArr := strings.Split(req.MenuButtonIdStr, ",")
  353. for _, v := range buttonArr {
  354. if _, ok := buttonMap[v]; !ok {
  355. buttonId, err := strconv.Atoi(v)
  356. count, err := system.GetSysRoleButtonCount(roleId, buttonId)
  357. if err != nil {
  358. br.Msg = "判断设置失败存在失败"
  359. br.ErrMsg = "判断设置失败存在失败,Err:" + err.Error()
  360. return
  361. }
  362. if count <= 0 {
  363. button := new(system.SysRoleButton)
  364. button.RoleId = roleId
  365. button.MenuButtonId = buttonId
  366. button.CreateTime = time.Now()
  367. _, err = system.AddSysRoleButton(button)
  368. if err != nil {
  369. br.Msg = "设置失败"
  370. br.ErrMsg = "按钮权限设置失败,Err:" + err.Error()
  371. return
  372. }
  373. }
  374. }
  375. buttonMap[v] = v
  376. }
  377. } else {
  378. err = system.DeleteSysRoleButton(roleId)
  379. if err != nil {
  380. br.Msg = "设置失败"
  381. br.ErrMsg = "删除已设置数据失败,Err:" + err.Error()
  382. return
  383. }
  384. }
  385. br.Ret = 200
  386. br.Success = true
  387. br.IsAddLog = true
  388. br.Msg = "设置成功"
  389. }
  390. // @Title 获取所有角色
  391. // @Description 获取所有角色
  392. // @Success 200 {object} system.SysRoleListResp
  393. // @router /role/all [get]
  394. func (this *SysRoleController) AllSysRole() {
  395. br := new(models.BaseResponse).Init()
  396. defer func() {
  397. this.Data["json"] = br
  398. this.ServeJSON()
  399. }()
  400. sysUser := this.SysUser
  401. if sysUser == nil {
  402. br.Msg = "请登录"
  403. br.ErrMsg = "请登录,SysUser Is Empty"
  404. return
  405. }
  406. levelFlag := false
  407. roleLevel := this.GetString("RoleLevel")
  408. if roleLevel != "" {
  409. levelFlag = true
  410. }
  411. list, err := system.GetSysRoleAll(levelFlag)
  412. if err != nil {
  413. br.Msg = "获取失败"
  414. br.ErrMsg = "获取失败,Err:" + err.Error()
  415. return
  416. }
  417. resp := new(system.SysRoleAllResp)
  418. resp.List = list
  419. br.Ret = 200
  420. br.Success = true
  421. br.Msg = "获取成功"
  422. br.Data = resp
  423. }