SystemController.go 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250
  1. package controllers
  2. import (
  3. "fmt"
  4. "strconv"
  5. "strings"
  6. "time"
  7. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  8. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  9. "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  10. )
  11. //https://www.kancloud.cn/xormplus/xorm/167077
  12. // _Login
  13. // @Title _Login
  14. // @Description 用户登录
  15. // @Param logininfo false "登录信息"
  16. // @Success 200 {object} sysmodel.Account
  17. // @Failure 403 :id is empty
  18. func System_Login(c *SystemController) {
  19. var logininfo sysmodel.LoginInfo
  20. c.Ctx.BindJSON(&logininfo)
  21. __none_func_system__(logininfo)
  22. fmt.Println(logininfo)
  23. var user sysmodel.SysUser
  24. ret, err := c.Db.SQL(sysmodel.SqlUserLogin, logininfo.Account).Get(&user)
  25. if ret && err == nil {
  26. //TODO check password
  27. timestamp := uint64(time.Now().UnixNano())
  28. md5Pwd := utils.HashPassword(logininfo.Password, "")
  29. //密码错误
  30. if !strings.EqualFold(user.Password, md5Pwd) {
  31. c.Ctx.JSON(200, sysmodel.SysReturn{400, "passowrd incorrect!", nil})
  32. return
  33. }
  34. token := &entitys.Token{}
  35. if v := utils.GlobalTokenStore.Get(logininfo.Account + user.Domain); v == nil {
  36. timestamp_str := strconv.FormatUint(timestamp, 10)
  37. sec_tooken := utils.GenerateToken(logininfo.Account + timestamp_str)
  38. token.AccessToken = sec_tooken
  39. token.RefreshToken = sec_tooken
  40. token.LoginID = logininfo.Account
  41. token.UserId = user.Id
  42. token.Result = 200
  43. //token.Password = pwd
  44. token.ServerIp = ""
  45. token.Domain = user.Domain
  46. utils.GlobalTokenStore.Set(sec_tooken, token)
  47. //设置session
  48. //fmt.Println("----------set token ----------", token.AccessToken)
  49. //session := sessions.Default(c.Ctx)
  50. //session.Set("token", token.AccessToken)
  51. //session.Save()
  52. } else {
  53. token = v
  54. }
  55. data := sysmodel.LoginReturnInfo{user.Id, user.LoginId, token.AccessToken}
  56. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data})
  57. } else {
  58. //fmt.Println(err.Error())
  59. c.Ctx.JSON(200, sysmodel.SysReturn{400, "username or passowrd incorrect!", nil})
  60. }
  61. }
  62. // _Logout
  63. // @Title _Logout
  64. // @Description 用户退出
  65. // @Success 200 {object} sysmodel.Account
  66. // @Failure 403 :id is empty
  67. func System_Logout(c *SystemController) {
  68. token := c.Ctx.GetHeader("token")
  69. fmt.Println("delete token: ", token)
  70. utils.GlobalTokenStore.Remove(token)
  71. ret := __none_func_system__()
  72. if ret {
  73. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  74. } else {
  75. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  76. }
  77. }
  78. // _GetMenuTree
  79. // @Title _GetMenuTree
  80. // @Description 获取系统菜单
  81. // @Param user string false "用户id"
  82. // @Success 200 {object} sysmodel.Account
  83. // @Failure 403 :id is empty
  84. func System_GetMenuTree(c *SystemController) {
  85. user := c.Ctx.Param(":user")
  86. ret := __none_func_system__(user)
  87. var menus []sysmodel.SysMenuTree
  88. c.Db.SQL(sysmodel.Selectall_sys_menu).Find(&menus)
  89. var menutree []sysmodel.SysMenuTree
  90. finChildrenMenu(&menus, "", nil, &menutree)
  91. for i := 0; i < len(menutree); i++ {
  92. finChildrenMenu(&menus, menutree[i].Id, &menutree[i], &menutree)
  93. }
  94. if ret {
  95. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", menutree})
  96. }
  97. }
  98. // _GetOrgTree
  99. // @Title _GetOrgTree
  100. // @Description 获取组织架构树
  101. // @Success 200 {object} sysmodel.Account
  102. // @Failure 403 :id is empty
  103. func System_GetOrgTree(c *SystemController) {
  104. ret := __none_func_system__()
  105. var orgs []sysmodel.SysOrgTree
  106. c.Db.SQL(sysmodel.Selectall_sys_org).Find(&orgs)
  107. var orgtree []sysmodel.SysOrgTree
  108. finChildrenOrg(&orgs, "", nil, &orgtree)
  109. for i := 0; i < len(orgtree); i++ {
  110. finChildrenOrg(&orgs, orgtree[i].Id, &orgtree[i], &orgtree)
  111. }
  112. if ret {
  113. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", orgtree})
  114. } else {
  115. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  116. }
  117. }
  118. func finChildrenOrg(menus *[]sysmodel.SysOrgTree, parent string, parent_menu *sysmodel.SysOrgTree, menutree *[]sysmodel.SysOrgTree) {
  119. for _, m := range *menus {
  120. if m.Parent == parent {
  121. if parent_menu == nil {
  122. *menutree = append(*menutree, m)
  123. //finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree)
  124. } else {
  125. parent_menu.Children = append(parent_menu.Children, m)
  126. finChildrenOrg(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree)
  127. }
  128. }
  129. }
  130. }
  131. func finChildrenMenu(menus *[]sysmodel.SysMenuTree, parent string, parent_menu *sysmodel.SysMenuTree, menutree *[]sysmodel.SysMenuTree) {
  132. for _, m := range *menus {
  133. if m.Parent == parent {
  134. if parent_menu == nil {
  135. *menutree = append(*menutree, m)
  136. //finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree)
  137. } else {
  138. parent_menu.Children = append(parent_menu.Children, m)
  139. finChildrenMenu(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree)
  140. }
  141. }
  142. }
  143. }
  144. // _FindUserPage
  145. // @Title _FindUserPage
  146. // @Description 获取用户分布数据
  147. // @Param page false "分页参数"
  148. // @Success 200 {object} sysmodel.Account
  149. // @Failure 403 :id is empty
  150. func System_FindUserPage(c *SystemController) {
  151. var getpageinfo sysmodel.GetPageInfo
  152. c.Ctx.BindJSON(&getpageinfo)
  153. __none_func_system__(getpageinfo)
  154. fmt.Println(getpageinfo)
  155. page := sysmodel.SysUserPageInfo{}
  156. var users []sysmodel.SysUser
  157. err := c.Db.SQL(sysmodel.Selectall_sys_user).Limit(getpageinfo.PageSize, (getpageinfo.PageNum-1)*getpageinfo.PageSize).Find(&users)
  158. page.Content = users
  159. page.PageSize = getpageinfo.PageSize
  160. page.PageNum = getpageinfo.PageNum
  161. page.TotalSize = 1
  162. if err == nil {
  163. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", page})
  164. } else {
  165. fmt.Println(err.Error())
  166. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  167. }
  168. }
  169. // _FindPermissions
  170. // @Title _FindPermissions
  171. // @Description 查找用户的菜单权限标识集合
  172. // @Param user string false "用户id"
  173. // @Success 200 {object} sysmodel.Account
  174. // @Failure 403 :id is empty
  175. func System_FindPermissions(c *SystemController) {
  176. //获取用户id
  177. tk, _ := c.Ctx.Get("token")
  178. user := tk.(*entitys.Token)
  179. //user := c.Ctx.Param(":user")
  180. ret := __none_func_system__(user)
  181. if ret {
  182. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  183. } else {
  184. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  185. }
  186. }
  187. // _AddPermission
  188. // @Title _AddPermission
  189. // @Description 查找用户的菜单权限标识集合
  190. // @Param perms string false "权限标识"
  191. // @Param domain string false "域"
  192. // @Success 200 {object} models.Account
  193. // @Failure 403 :id is empty
  194. func System_AddPermission(c *SystemController) {
  195. perms := c.Ctx.Param(":perms")
  196. domain := c.Ctx.Param(":domain")
  197. ret := __none_func_system__(perms, domain)
  198. //查找此权限标识符是否存在
  199. //c.Db.Where().Get()
  200. tk, _ := c.Ctx.Get("token")
  201. user := tk.(*entitys.Token)
  202. permiss := &sysmodel.SysPermission{}
  203. permiss.Id = utils.NewUUID()
  204. permiss.Perms = perms
  205. permiss.Domain = domain
  206. permiss.CreateBy = user.UserId
  207. permiss.CreateTime = time.Now()
  208. _, err := c.Db.Insert(permiss)
  209. if ret && err == nil {
  210. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  211. } else {
  212. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  213. }
  214. }
  215. func __none_func_system__(params ...interface{}) bool {
  216. return true
  217. }