SystemController.go 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454
  1. package controllers
  2. import (
  3. "fmt"
  4. "light-apiengine/models"
  5. "strconv"
  6. "strings"
  7. "time"
  8. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  9. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  10. "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  11. )
  12. //https://www.kancloud.cn/xormplus/xorm/167077
  13. // _Login
  14. // @Title _Login
  15. // @Description 用户登录
  16. // @Param logininfo false "登录信息"
  17. // @Success 200 {object} sysmodel.Account
  18. // @Failure 403 :id is empty
  19. func System_Login(c *SystemController) {
  20. var logininfo sysmodel.LoginInfo
  21. c.Ctx.BindJSON(&logininfo)
  22. __none_func_system__(logininfo)
  23. fmt.Println(logininfo)
  24. var user sysmodel.SysUser
  25. ret, err := c.Db.SQL(sysmodel.SqlUserLogin, logininfo.Account).Get(&user)
  26. if ret && err == nil {
  27. //TODO check password
  28. timestamp := uint64(time.Now().UnixNano())
  29. md5Pwd := utils.HashPassword(logininfo.Password, "")
  30. //密码错误
  31. if !strings.EqualFold(user.Password, md5Pwd) {
  32. c.Ctx.JSON(200, sysmodel.SysReturn{400, "passowrd incorrect!", nil})
  33. return
  34. }
  35. token := &entitys.Token{}
  36. if v := utils.GlobalTokenStore.Get(logininfo.Account + user.Domain); v == nil {
  37. timestamp_str := strconv.FormatUint(timestamp, 10)
  38. sec_tooken := utils.GenerateToken(logininfo.Account + timestamp_str)
  39. token.AccessToken = sec_tooken
  40. token.RefreshToken = sec_tooken
  41. token.LoginID = logininfo.Account
  42. token.UserId = user.Id
  43. token.Result = 200
  44. //token.Password = pwd
  45. token.ServerIp = ""
  46. token.Domain = user.Domain
  47. utils.GlobalTokenStore.Set(sec_tooken, token)
  48. //设置session
  49. //fmt.Println("----------set token ----------", token.AccessToken)
  50. //session := sessions.Default(c.Ctx)
  51. //session.Set("token", token.AccessToken)
  52. //session.Save()
  53. } else {
  54. token = v
  55. }
  56. data := sysmodel.LoginReturnInfo{user.Id, user.LoginId, token.AccessToken}
  57. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data})
  58. } else {
  59. //fmt.Println(err.Error())
  60. c.Ctx.JSON(200, sysmodel.SysReturn{400, "username or passowrd incorrect!", nil})
  61. }
  62. }
  63. // _Logout
  64. // @Title _Logout
  65. // @Description 用户退出
  66. // @Success 200 {object} sysmodel.Account
  67. // @Failure 403 :id is empty
  68. func System_Logout(c *SystemController) {
  69. token := c.Ctx.GetHeader("token")
  70. fmt.Println("delete token: ", token)
  71. utils.GlobalTokenStore.Remove(token)
  72. ret := __none_func_system__()
  73. if ret {
  74. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  75. } else {
  76. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  77. }
  78. }
  79. // _GetMenuTree
  80. // @Title _GetMenuTree
  81. // @Description 获取系统菜单
  82. // @Param user string false "用户id"
  83. // @Success 200 {object} sysmodel.Account
  84. // @Failure 403 :id is empty
  85. func System_GetMenuTree(c *SystemController) {
  86. user := c.Ctx.Param(":user")
  87. ret := __none_func_system__(user)
  88. var menus []sysmodel.SysMenuTree
  89. c.Db.SQL(sysmodel.Selectall_sys_menu).Find(&menus)
  90. var menutree []sysmodel.SysMenuTree
  91. finChildrenMenu(&menus, "", nil, &menutree)
  92. for i := 0; i < len(menutree); i++ {
  93. finChildrenMenu(&menus, menutree[i].Id, &menutree[i], &menutree)
  94. }
  95. if ret {
  96. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", menutree})
  97. }
  98. }
  99. // _GetOrgTree
  100. // @Title _GetOrgTree
  101. // @Description 获取组织架构树
  102. // @Success 200 {object} sysmodel.Account
  103. // @Failure 403 :id is empty
  104. func System_GetOrgTree(c *SystemController) {
  105. ret := __none_func_system__()
  106. var orgs []sysmodel.SysOrgTree
  107. c.Db.SQL(sysmodel.Selectall_sys_org).Find(&orgs)
  108. var orgtree []sysmodel.SysOrgTree
  109. finChildrenOrg(&orgs, "", nil, &orgtree)
  110. for i := 0; i < len(orgtree); i++ {
  111. finChildrenOrg(&orgs, orgtree[i].Id, &orgtree[i], &orgtree)
  112. }
  113. if ret {
  114. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", orgtree})
  115. } else {
  116. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  117. }
  118. }
  119. func finChildrenOrg(menus *[]sysmodel.SysOrgTree, parent string, parent_menu *sysmodel.SysOrgTree, menutree *[]sysmodel.SysOrgTree) {
  120. for _, m := range *menus {
  121. if m.Parent == parent {
  122. if parent_menu == nil {
  123. *menutree = append(*menutree, m)
  124. //finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree)
  125. } else {
  126. parent_menu.Children = append(parent_menu.Children, m)
  127. finChildrenOrg(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree)
  128. }
  129. }
  130. }
  131. }
  132. func finChildrenMenu(menus *[]sysmodel.SysMenuTree, parent string, parent_menu *sysmodel.SysMenuTree, menutree *[]sysmodel.SysMenuTree) {
  133. for _, m := range *menus {
  134. if m.Parent == parent {
  135. if parent_menu == nil {
  136. *menutree = append(*menutree, m)
  137. //finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree)
  138. } else {
  139. parent_menu.Children = append(parent_menu.Children, m)
  140. finChildrenMenu(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree)
  141. }
  142. }
  143. }
  144. }
  145. // _FindUserPage
  146. // @Title _FindUserPage
  147. // @Description 获取用户分布数据
  148. // @Param page false "分页参数"
  149. // @Success 200 {object} sysmodel.Account
  150. // @Failure 403 :id is empty
  151. func System_FindUserPage(c *SystemController) {
  152. var getpageinfo sysmodel.GetPageInfo
  153. c.Ctx.BindJSON(&getpageinfo)
  154. __none_func_system__(getpageinfo)
  155. fmt.Println(getpageinfo)
  156. page := sysmodel.SysUserPageInfo{}
  157. var users []sysmodel.UserInfo
  158. err := c.Db.SQL(sysmodel.SqlUserInfoPage).Limit(getpageinfo.PageSize, (getpageinfo.PageNum-1)*getpageinfo.PageSize).Find(&users)
  159. //查找每个用户的角色
  160. for i, user := range users {
  161. roles := []sysmodel.SysUserRole{}
  162. c.Db.SQL(sysmodel.SqlSelectUserRoles, user.Id).Find(&roles)
  163. users[i].UserRole = roles
  164. }
  165. page.Content = users
  166. page.PageSize = getpageinfo.PageSize
  167. page.PageNum = getpageinfo.PageNum
  168. page.TotalSize = 1
  169. if err == nil {
  170. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", page})
  171. } else {
  172. fmt.Println(err.Error())
  173. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  174. }
  175. }
  176. // _AddUser
  177. // @Title _AddUser
  178. // @Description 添加用户
  179. // @Param login_id string false "登录ID"
  180. // @Param password string false "密码"
  181. // @Param org_id string false "组织ID"
  182. // @Param email string false "邮箱"
  183. // @Success 200 {object} models.Account
  184. // @Failure 403 :id is empty
  185. func System_AddUser(c *SystemController) {
  186. var user sysmodel.SysUser
  187. c.Ctx.BindJSON(&user)
  188. fmt.Println(user.LoginId, "-----add user-----", user.Password, " --- ", user.OrgId)
  189. //查找login_id是否存在
  190. oldUser := new(sysmodel.SysUser)
  191. count, _ := c.Db.SQL("select * from sys_user").Where("login_id = ?", user.LoginId).Count(&oldUser)
  192. if count > 1 {
  193. if oldUser.DelFlag == 0 {
  194. oldUser.DelFlag = 1
  195. _, err := c.Db.Id("id").Cols("del_flag").Update(&oldUser)
  196. if err != nil {
  197. c.Ctx.JSON(200, sysmodel.SysReturn{500, "login_id exit, update err: " + err.Error(), nil})
  198. }
  199. } else {
  200. c.Ctx.JSON(200, sysmodel.SysReturn{500, "login_id exit", nil})
  201. return
  202. }
  203. }
  204. tk, _ := c.Ctx.Get("token")
  205. op := tk.(*entitys.Token)
  206. user.Id = utils.NewUUID()
  207. user.Name = user.LoginId
  208. user.CreateTime = time.Now()
  209. user.LastUpdateDate = time.Now()
  210. user.CreateBy = op.UserId
  211. user.LastUpdateBy = op.UserId
  212. user.DelFlag = 1
  213. user.Password = utils.HashPassword(user.Password, "")
  214. _, err := c.Db.Insert(&user)
  215. ret := __none_func_system__(user.LoginId, user.Password, user.OrgId, user.Email)
  216. if ret && err == nil {
  217. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  218. } else {
  219. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  220. }
  221. }
  222. // _DelUser
  223. // @Title _DelUser
  224. // @Description 删除用户
  225. // @Param id string false "用户ID"
  226. // @Success 200 {object} models.Account
  227. // @Failure 403 :id is empty
  228. func System_DelUser(c *SystemController) {
  229. type Param struct {
  230. Id string `json:"id"`
  231. }
  232. var params []Param
  233. c.Ctx.BindJSON(&params)
  234. ids := []string{}
  235. for _, param := range params {
  236. ids = append(ids, param.Id)
  237. }
  238. session := c.Db.NewSession()
  239. defer session.Close()
  240. //_, err := c.Db.Table(new(models.SysUser)).ID(param.Id).Update(map[string]interface{}{"del_flag": 0})
  241. _, err := c.Db.Table(new(models.SysUser)).In("id", ids).Update(map[string]interface{}{"del_flag": 0})
  242. if err != nil {
  243. session.Rollback()
  244. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  245. return
  246. }
  247. _, err = c.Db.Table(new(models.SysUserRole)).In("user_id", ids).Update(map[string]interface{}{"del_flag": 0})
  248. if err != nil {
  249. session.Rollback()
  250. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  251. return
  252. }
  253. session.Commit()
  254. ret := __none_func_system__()
  255. if ret {
  256. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  257. } else {
  258. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  259. }
  260. }
  261. // _UpdateUser
  262. // @Title _UpdateUser
  263. // @Description 修改用户
  264. // @Param login_id string false "登录ID"
  265. // @Param password string false "密码"
  266. // @Param org_id string false "组织ID"
  267. // @Param email string false "邮箱"
  268. // @Success 200 {object} models.Account
  269. // @Failure 403 :id is empty
  270. func System_UpdateUser(c *SystemController) {
  271. tk, _ := c.Ctx.Get("token")
  272. op := tk.(*entitys.Token)
  273. var userInfo sysmodel.UserInfo
  274. c.Ctx.BindJSON(&userInfo)
  275. session := c.Db.NewSession()
  276. defer session.Close()
  277. //1、删除用户角色
  278. _, err := c.Db.SQL(sysmodel.SqlDeleteUserRoles, userInfo.Id).Execute()
  279. if err != nil {
  280. session.Rollback()
  281. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  282. return
  283. }
  284. //2、修改角色
  285. for i, _ := range userInfo.UserRole {
  286. userInfo.UserRole[i].Id = utils.NewUUID()
  287. userInfo.UserRole[i].CreateBy = op.UserId
  288. userInfo.UserRole[i].LastUpdateBy = op.UserId
  289. userInfo.UserRole[i].CreateTime = time.Now()
  290. userInfo.UserRole[i].LastUpdateDate = time.Now()
  291. userInfo.UserRole[i].DelFlag = 1
  292. }
  293. _, err = c.Db.Insert(userInfo.UserRole)
  294. if err != nil {
  295. session.Rollback()
  296. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  297. return
  298. }
  299. //3、更新用户信息
  300. _, err = c.Db.Table(new(models.SysUser)).ID(userInfo.Id).Update(map[string]interface{}{"name": userInfo.Name, "email": userInfo.Email, "org_id": userInfo.OrgId, "last_update_by": op.UserId, "last_update_date": time.Now()})
  301. if err != nil {
  302. session.Rollback()
  303. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  304. return
  305. }
  306. session.Commit()
  307. ret := __none_func_system__()
  308. if ret {
  309. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  310. } else {
  311. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  312. }
  313. }
  314. // _FindRoleMenu
  315. // @Title _FindRoleMenu
  316. // @Description 查找角色权限
  317. // @Param user string false "用户id"
  318. // @Success 200 {object} models.Account
  319. // @Failure 403 :id is empty
  320. func System_FindRoleMenu(c *SystemController) {
  321. user := c.Ctx.Param(":user")
  322. ret := __none_func_system__(user)
  323. if ret {
  324. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  325. } else {
  326. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  327. }
  328. }
  329. // _RoleAll
  330. // @Title _RoleAll
  331. // @Description 查找所有角色
  332. // @Success 200 {object} models.Account
  333. // @Failure 403 :id is empty
  334. func System_RoleAll(c *SystemController) {
  335. var roles []sysmodel.SysRole
  336. err := c.Db.SQL(sysmodel.Selectall_sys_role).Find(&roles)
  337. ret := __none_func_system__()
  338. if ret && err == nil {
  339. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", roles})
  340. } else {
  341. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  342. }
  343. }
  344. // _AddMenu
  345. // @Title _AddMenu
  346. // @Description 增加菜单
  347. // @Param perms string false "权限标识"
  348. // @Param domain string false "域"
  349. // @Success 200 {object} models.Account
  350. // @Failure 403 :id is empty
  351. func System_AddMenu(c *SystemController) {
  352. perms := c.Ctx.Param(":perms")
  353. domain := c.Ctx.Param(":domain")
  354. ret := __none_func_system__(perms, domain)
  355. if ret {
  356. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  357. } else {
  358. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  359. }
  360. }
  361. // _DelMenu
  362. // @Title _DelMenu
  363. // @Description 删除菜单
  364. // @Param id string false "ID"
  365. // @Success 200 {object} models.Account
  366. // @Failure 403 :id is empty
  367. func System_DelMenu(c *SystemController) {
  368. id := c.Ctx.Param(":id")
  369. ret := __none_func_system__(id)
  370. if ret {
  371. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  372. } else {
  373. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  374. }
  375. }
  376. // _FindPermissions
  377. // @Title _FindPermissions
  378. // @Description 查找用户权限
  379. // @Success 200 {object} models.Account
  380. // @Failure 403 :id is empty
  381. func System_FindPermissions(c *SystemController) {
  382. ret := __none_func_system__()
  383. strs := []string{"sys:user:edit", "sys:user:delete", "sys:user:add"}
  384. if ret {
  385. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", strs})
  386. } else {
  387. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  388. }
  389. }
  390. func __none_func_system__(params ...interface{}) bool {
  391. return true
  392. }