SystemController.go 28 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078
  1. package partial
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. "time"
  8. "git.qianqiusoft.com/qianqiusoft/light-apiengine/db"
  9. "git.qianqiusoft.com/qianqiusoft/light-apiengine/entitys"
  10. "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  11. sysmodel "git.qianqiusoft.com/qianqiusoft/light-apiengine/models"
  12. "git.qianqiusoft.com/qianqiusoft/light-apiengine/utils"
  13. )
  14. //https://www.kancloud.cn/xormplus/xorm/167077
  15. // _Login
  16. // @Title _Login
  17. // @Description 用户登录
  18. // @Param logininfo false "登录信息"
  19. // @Success 200 {object} sysmodel.Account
  20. // @Failure 403 :id is empty
  21. func System_Login(c *entitys.CtrlContext) {
  22. var logininfo sysmodel.LoginInfo
  23. c.Ctx.BindJSON(&logininfo)
  24. __none_func_system__(logininfo)
  25. //fmt.Println(logininfo)
  26. var user sysmodel.SysUser
  27. ret, err := c.Db.SQL(sysmodel.SqlUserLogin, logininfo.Account).Get(&user)
  28. if ret && err == nil {
  29. //TODO check password
  30. timestamp := uint64(time.Now().UnixNano())
  31. md5Pwd := utils.HashPassword(logininfo.Password, "")
  32. //密码错误
  33. if !strings.EqualFold(user.Password, md5Pwd) {
  34. c.Ctx.JSON(200, sysmodel.SysReturn{400, "passowrd incorrect!", nil})
  35. return
  36. }
  37. token := &entitys.Token{}
  38. timestamp_str := strconv.FormatUint(timestamp, 10)
  39. sec_tooken := utils.GenerateToken(logininfo.Account + timestamp_str)
  40. if v := utils.GetGlobalTokenStore().Get(sec_tooken); v == nil {
  41. token.AccessToken = sec_tooken
  42. token.RefreshToken = sec_tooken
  43. token.LoginID = logininfo.Account
  44. token.UserId = user.Id
  45. token.Result = 200
  46. //token.Password = pwd
  47. token.ServerIp = ""
  48. token.Domain = user.Domain
  49. utils.GetGlobalTokenStore().Set(sec_tooken, token)
  50. } else {
  51. token = v
  52. }
  53. data := sysmodel.LoginReturnInfo{}
  54. data.Userid = user.Id
  55. data.Name = user.LoginId
  56. data.Token = token.AccessToken
  57. data.Type = user.Type
  58. data.SysUserInfo = user
  59. data.SysUserInfo.Password = ""
  60. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", data})
  61. } else {
  62. //fmt.Println(err.Error())
  63. c.Ctx.JSON(200, sysmodel.SysReturn{400, "username or passowrd incorrect!", nil})
  64. }
  65. }
  66. // _Logout
  67. // @Title _Logout
  68. // @Description 用户退出
  69. // @Success 200 {object} sysmodel.Account
  70. // @Failure 403 :id is empty
  71. func System_Logout(c *entitys.CtrlContext) {
  72. token := c.Ctx.GetHeader("token")
  73. fmt.Println("delete token: ", token)
  74. utils.GetGlobalTokenStore().Remove(token)
  75. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  76. }
  77. // _GetNavTree
  78. // @Title _GetNavTree
  79. // @Description 获取导航菜单
  80. // @Param user string false "用户id"
  81. // @Success 200 {object} models.Account
  82. // @Failure 403 :id is empty
  83. func System_GetNavTree(c *entitys.CtrlContext) {
  84. // set in the login_ware.go
  85. user_id := c.Ctx.GetString("user_id")
  86. var menus []sysmodel.SysMenuTree
  87. if user_id == "187c50a4-caad-4557-80c8-aca81af9f370" {
  88. c.Db.SQL(sysmodel.Selectall_nav_tree_admin).Find(&menus)
  89. } else {
  90. c.Db.SQL(sysmodel.Selectall_nav_tree, user_id).Find(&menus)
  91. }
  92. var menutree []sysmodel.SysMenuTree
  93. finChildrenMenu(&menus, "", nil, &menutree)
  94. for i := 0; i < len(menutree); i++ {
  95. finChildrenMenu(&menus, menutree[i].Id, &menutree[i], &menutree)
  96. }
  97. fmt.Println(menutree)
  98. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", menutree})
  99. }
  100. // _GetMenuTree
  101. // @Title _GetMenuTree
  102. // @Description 获取系统菜单
  103. // @Param user string false "用户id"
  104. // @Success 200 {object} sysmodel.Account
  105. // @Failure 403 :id is empty
  106. func System_GetMenuTree(c *entitys.CtrlContext) {
  107. user := c.Ctx.Param(":user")
  108. ret := __none_func_system__(user)
  109. var menus []sysmodel.SysMenuTree
  110. c.Db.SQL(sysmodel.Selectall_sys_menu).Find(&menus)
  111. var menutree []sysmodel.SysMenuTree
  112. finChildrenMenu(&menus, "", nil, &menutree)
  113. fmt.Println(menutree)
  114. for i := 0; i < len(menutree); i++ {
  115. finChildrenMenu(&menus, menutree[i].Id, &menutree[i], &menutree)
  116. }
  117. if ret {
  118. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", menutree})
  119. }
  120. }
  121. // _GetOrgTree
  122. // @Title _GetOrgTree
  123. // @Description 获取组织架构树
  124. // @Success 200 {object} sysmodel.Account
  125. // @Failure 403 :id is empty
  126. func System_GetOrgTree(c *entitys.CtrlContext) {
  127. ret := __none_func_system__()
  128. var orgs []sysmodel.SysOrgTree
  129. c.Db.SQL(sysmodel.Selectall_sys_org).Find(&orgs)
  130. var orgtree []sysmodel.SysOrgTree
  131. finChildrenOrg(&orgs, "", nil, &orgtree)
  132. for i := 0; i < len(orgtree); i++ {
  133. finChildrenOrg(&orgs, orgtree[i].Id, &orgtree[i], &orgtree)
  134. }
  135. if ret {
  136. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", orgtree})
  137. } else {
  138. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  139. }
  140. }
  141. func finChildrenOrg(menus *[]sysmodel.SysOrgTree, parent string, parent_menu *sysmodel.SysOrgTree, menutree *[]sysmodel.SysOrgTree) {
  142. for _, m := range *menus {
  143. if m.Parent == parent {
  144. if parent_menu == nil {
  145. *menutree = append(*menutree, m)
  146. //finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree)
  147. } else {
  148. parent_menu.Children = append(parent_menu.Children, m)
  149. finChildrenOrg(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree)
  150. }
  151. }
  152. }
  153. }
  154. func finChildrenMenu(menus *[]sysmodel.SysMenuTree, parent string, parent_menu *sysmodel.SysMenuTree, menutree *[]sysmodel.SysMenuTree) {
  155. for _, m := range *menus {
  156. if m.Parent == parent {
  157. if parent_menu == nil {
  158. m.Level = 0
  159. m.ParentName = ""
  160. *menutree = append(*menutree, m)
  161. //finChildrenMenu(menus, m.Id, menutree[len(*menutree)-1], menutree)
  162. } else {
  163. m.Level = parent_menu.Level + 1
  164. m.ParentName = parent_menu.Name
  165. parent_menu.Children = append(parent_menu.Children, m)
  166. finChildrenMenu(menus, m.Id, &parent_menu.Children[len(parent_menu.Children)-1], menutree)
  167. }
  168. }
  169. }
  170. }
  171. // _FindUserPage
  172. // @Title _FindUserPage
  173. // @Description 获取用户分布数据
  174. // @Param page false "分页参数"
  175. // @Success 200 {object} sysmodel.Account
  176. // @Failure 403 :id is empty
  177. func System_FindUserPage(c *entitys.CtrlContext) {
  178. var getpageinfo sysmodel.GetPageInfo
  179. c.Ctx.BindJSON(&getpageinfo)
  180. __none_func_system__(getpageinfo)
  181. page := sysmodel.PageResult{}
  182. var users []sysmodel.UserInfo
  183. dbSession := c.Db.Table("sys_user")
  184. dbSession.Select("sys_user.*, sys_organization.name org_name")
  185. countSession := c.Db.Table("sys_user")
  186. JoinTables := []models.Join{}
  187. //JoinTables = append(JoinTables, models.Join{TabelName: "sys_user_role", Condition: "sys_user_role.user_id = sys_user.id", JoinOperator: "left"})
  188. //JoinTables = append(JoinTables, models.Join{TabelName: "sys_role", Condition: "sys_user_role.role_id = sys_role.id", JoinOperator: "left"})
  189. JoinTables = append(JoinTables, models.Join{TabelName: "sys_organization", Condition: "sys_organization.id = sys_user.org_id", JoinOperator: "left"})
  190. for _, join := range JoinTables {
  191. dbSession = dbSession.Join(join.JoinOperator, join.TabelName, join.Condition)
  192. countSession = countSession.Join(join.JoinOperator, join.TabelName, join.Condition)
  193. }
  194. whereStr, datas, err := getpageinfo.Filter.Parse("")
  195. dbSession = dbSession.Where(whereStr, datas...)
  196. countSession = countSession.Where(whereStr, datas...)
  197. sidx := strings.Split(getpageinfo.Sidx, ",")
  198. for _, order := range sidx {
  199. order = strings.TrimSpace(order)
  200. if len(order) == 0 {
  201. continue
  202. }
  203. if strings.ToLower(getpageinfo.Sord) == "desc" {
  204. dbSession = dbSession.OrderBy(order + " desc")
  205. } else {
  206. dbSession = dbSession.OrderBy(order + " asc")
  207. }
  208. }
  209. totalPage, _ := countSession.Count()
  210. dbSession.Limit(getpageinfo.PageSize, (getpageinfo.PageNum-1)*getpageinfo.PageSize).Find(&users)
  211. //查找每个用户的角色
  212. for i, user := range users {
  213. roles := []sysmodel.UserInfo{}
  214. err := c.Db.SQL(sysmodel.SqlSelectUserRoles, user.Id).Find(&roles)
  215. if err != nil {
  216. fmt.Println("----", err.Error())
  217. continue
  218. }
  219. users[i].UserRole = roles[0].UserRole
  220. users[i].RoleName = roles[0].RoleName
  221. }
  222. page.Content = users
  223. page.PageSize = getpageinfo.PageSize
  224. page.PageNum = getpageinfo.PageNum
  225. page.TotalSize = int(totalPage)
  226. if err == nil {
  227. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", page})
  228. } else {
  229. fmt.Println(err.Error())
  230. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  231. }
  232. }
  233. // _AddUser
  234. // @Title _AddUser
  235. // @Description 添加用户
  236. // @Param login_id string false "登录ID"
  237. // @Param password string false "密码"
  238. // @Param org_id string false "组织ID"
  239. // @Param email string false "邮箱"
  240. // @Success 200 {object} models.Account
  241. // @Failure 403 :id is empty
  242. func System_AddUser(c *entitys.CtrlContext) {
  243. var user sysmodel.SysUser
  244. err := c.Ctx.ShouldBindJSON(&user)
  245. if err != nil {
  246. c.Ctx.JSON(500, sysmodel.SysReturn{200, "c.Ctx.ShouldBindJSON error " + err.Error(), nil})
  247. return
  248. }
  249. fmt.Println(user.LoginId, "-----add user-----", user.Password, " --- ", user.OrgId)
  250. //查找login_id是否存在
  251. oldUser := new(sysmodel.SysUser)
  252. count, _ := c.Db.SQL("select * from sys_user").Where("login_id = ?", user.LoginId).Count(&oldUser)
  253. if count > 1 {
  254. if oldUser.DelFlag == 1 {
  255. oldUser.DelFlag = 0
  256. _, err := c.Db.Id("id").Cols("del_flag").Update(&oldUser)
  257. if err != nil {
  258. c.Ctx.JSON(500, sysmodel.SysReturn{500, "login_id exit, update err: " + err.Error(), nil})
  259. }
  260. return
  261. } else {
  262. c.Ctx.JSON(200, sysmodel.SysReturn{200, "login_id exit", nil})
  263. return
  264. }
  265. }
  266. user_id := c.Ctx.GetString("user_id")
  267. user.Id = utils.NewUUID()
  268. //when name is null
  269. if user.Name == "" {
  270. user.Name = user.LoginId
  271. }
  272. user.CreateTime = time.Now()
  273. user.LastUpdateDate = time.Now()
  274. user.CreateBy = user_id
  275. user.LastUpdateBy = user_id
  276. user.DelFlag = 0
  277. user.Password = utils.HashPassword(user.Password, "")
  278. _, err = c.Db.Insert(&user)
  279. //ret := __none_func_system__(user.LoginId, user.Password, user.OrgId, user.Email)
  280. if err == nil {
  281. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  282. } else {
  283. c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
  284. }
  285. }
  286. // _DelUser
  287. // @Title _DelUser
  288. // @Description 删除用户
  289. // @Param id string false "用户ID"
  290. // @Success 200 {object} models.Account
  291. // @Failure 403 :id is empty
  292. func System_DelUser(c *entitys.CtrlContext) {
  293. type Param struct {
  294. Id string `json:"id"`
  295. }
  296. var params []Param
  297. c.Ctx.BindJSON(&params)
  298. ids := []string{}
  299. for _, param := range params {
  300. ids = append(ids, param.Id)
  301. }
  302. session := c.Db.NewSession()
  303. defer session.Close()
  304. //_, err := c.Db.Table(new(models.SysUser)).ID(param.Id).Update(map[string]interface{}{"del_flag": 0})
  305. _, err := c.Db.Table(new(models.SysUser)).In("id", ids).Update(map[string]interface{}{"del_flag": 1})
  306. if err != nil {
  307. session.Rollback()
  308. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  309. return
  310. }
  311. _, err = c.Db.Table(new(models.SysUserRole)).In("user_id", ids).Update(map[string]interface{}{"del_flag": 1})
  312. if err != nil {
  313. session.Rollback()
  314. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  315. return
  316. }
  317. session.Commit()
  318. ret := __none_func_system__()
  319. if ret {
  320. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  321. } else {
  322. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  323. }
  324. }
  325. // _UpdateUser
  326. // @Title _UpdateUser
  327. // @Description 修改用户
  328. // @Param login_id string false "登录ID"
  329. // @Param password string false "密码"
  330. // @Param org_id string false "组织ID"
  331. // @Param email string false "邮箱"
  332. // @Success 200 {object} models.Account
  333. // @Failure 403 :id is empty
  334. func System_UpdateUser(c *entitys.CtrlContext) {
  335. user_id := c.Ctx.GetString("user_id")
  336. var userInfo sysmodel.UserInfo
  337. err := c.Ctx.BindJSON(&userInfo)
  338. if err != nil {
  339. c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
  340. return
  341. }
  342. session := c.Db.NewSession()
  343. session.Begin()
  344. defer session.Close()
  345. //1、删除用户角色
  346. _, err = session.SQL(sysmodel.SqlDeleteUserRoles, userInfo.Id).Execute()
  347. if err != nil {
  348. session.Rollback()
  349. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  350. return
  351. }
  352. //2、修改角色
  353. userRoles := make([]interface{}, 0)
  354. roles := []string{}
  355. if userInfo.UserRole != "" {
  356. err = json.Unmarshal([]byte(userInfo.UserRole), &roles)
  357. if err != nil {
  358. roles = append(roles, userInfo.UserRole)
  359. }
  360. }
  361. for _, role := range roles {
  362. userRole := models.SysUserRole{}
  363. userRole.Id = utils.NewUUID()
  364. userRole.RoleId = role
  365. userRole.UserId = userInfo.Id
  366. userRole.CreateBy = user_id
  367. userRole.LastUpdateBy = user_id
  368. userRole.CreateTime = time.Now()
  369. userRole.LastUpdateDate = time.Now()
  370. userRole.DelFlag = 0
  371. userRoles = append(userRoles, userRole)
  372. }
  373. _, err = session.Insert(userRoles...)
  374. if err != nil {
  375. session.Rollback()
  376. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  377. return
  378. }
  379. var updateUser models.SysUser
  380. updateUser.Name = userInfo.Name
  381. updateUser.FullName = userInfo.FullName
  382. updateUser.Mobile = userInfo.Mobile
  383. updateUser.OrgId = userInfo.OrgId
  384. updateUser.Type = userInfo.Type
  385. //updateUser.IsPri = userInfo.IsPri
  386. updateUser.Status = userInfo.Status
  387. updateUser.Domain = userInfo.Domain
  388. updateUser.OptionA = userInfo.OptionA
  389. updateUser.OptionB = userInfo.OptionB
  390. updateUser.LastUpdateBy = user_id
  391. updateUser.LastUpdateDate = time.Now()
  392. //3、更新用户信息
  393. //_, 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": user_id, "last_update_date": time.Now()})
  394. _, err = session.Id(userInfo.Id).Update(&updateUser)
  395. if err != nil {
  396. session.Rollback()
  397. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  398. return
  399. }
  400. session.Commit()
  401. ret := __none_func_system__()
  402. if ret {
  403. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  404. } else {
  405. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  406. }
  407. }
  408. // _AddRole
  409. // @Title _AddRole
  410. // @Description 添加角色
  411. // @Param name string false "角色名称"
  412. // @Param remark string false "备注"
  413. // @Success 200 {object} models.Account
  414. // @Failure 403 :id is empty
  415. func System_AddRole(c *entitys.CtrlContext) {
  416. var role models.SysRole
  417. c.Ctx.BindJSON(&role)
  418. user_id := c.Ctx.GetString("user_id")
  419. role.Id = utils.NewUUID()
  420. role.DelFlag = 0
  421. role.CreateBy = user_id
  422. role.LastUpdateBy = user_id
  423. role.CreateTime = time.Now()
  424. role.LastUpdateDate = time.Now()
  425. _, err := c.Db.Insert(&role)
  426. ret := __none_func_system__()
  427. if ret && err == nil {
  428. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  429. } else {
  430. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  431. }
  432. }
  433. // _DelRole
  434. // @Title _DelRole
  435. // @Description 添加角色
  436. // @Param id string false "角色ID"
  437. // @Success 200 {object} models.Account
  438. // @Failure 403 :id is empty
  439. func System_DelRole(c *entitys.CtrlContext) {
  440. type Param struct {
  441. Id string `json:"id"`
  442. }
  443. var params []Param
  444. c.Ctx.BindJSON(&params)
  445. fmt.Println(params, "-----------")
  446. ids := []string{}
  447. for _, param := range params {
  448. ids = append(ids, param.Id)
  449. }
  450. _, err := c.Db.Table(new(models.SysRole)).In("id", ids).Update(map[string]interface{}{"del_flag": 1})
  451. if err != nil {
  452. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  453. return
  454. }
  455. ret := __none_func_system__()
  456. if ret {
  457. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  458. } else {
  459. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  460. }
  461. }
  462. // _UpdateRole
  463. // @Title _UpdateRole
  464. // @Description 修改角色
  465. // @Param id string false "角色ID"
  466. // @Param name string false "角色名称"
  467. // @Param remark string false "备注"
  468. // @Success 200 {object} models.Account
  469. // @Failure 403 :id is empty
  470. func System_UpdateRole(c *entitys.CtrlContext) {
  471. var role models.SysRole
  472. c.Ctx.BindJSON(&role)
  473. user_id := c.Ctx.GetString("user_id")
  474. role.LastUpdateBy = user_id
  475. role.LastUpdateDate = time.Now()
  476. c.Db.ID(role.Id).Update(&role)
  477. ret := __none_func_system__()
  478. if ret {
  479. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  480. } else {
  481. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  482. }
  483. }
  484. // _FindRolePage
  485. // @Title _FindRolePage
  486. // @Description 角色分页
  487. // @Param page false "分页参数"
  488. // @Success 200 {object} models.Account
  489. // @Failure 403 :id is empty
  490. func System_FindRolePage(c *entitys.CtrlContext) {
  491. var getpageinfo models.GetPageInfo
  492. c.Ctx.BindJSON(&getpageinfo)
  493. page := sysmodel.PageResult{}
  494. var roles []sysmodel.SysRole
  495. err := c.Db.SQL(sysmodel.Selectall_sys_role).Limit(getpageinfo.PageSize, (getpageinfo.PageNum-1)*getpageinfo.PageSize).Find(&roles)
  496. if err != nil {
  497. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  498. return
  499. }
  500. fmt.Println("-----------", len(roles))
  501. page.Content = roles
  502. page.PageSize = getpageinfo.PageSize
  503. page.PageNum = getpageinfo.PageNum
  504. page.TotalSize = 1
  505. ret := __none_func_system__(getpageinfo)
  506. if ret {
  507. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", page})
  508. } else {
  509. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  510. }
  511. }
  512. // _FindRoleMenu
  513. // @Title _FindRoleMenu
  514. // @Description 查找角色权限
  515. // @Param user string false "用户id"
  516. // @Success 200 {object} models.Account
  517. // @Failure 403 :id is empty
  518. func System_FindRoleMenu(c *entitys.CtrlContext) {
  519. role_id, b := c.Ctx.GetQuery("roleId")
  520. if !b {
  521. c.Ctx.JSON(200, sysmodel.SysReturn{500, "roleId is null", nil})
  522. return
  523. }
  524. menus := []models.SysMenu{}
  525. c.Db.SQL(models.SqlFindRoleMenu, role_id).Find(&menus)
  526. ret := __none_func_system__()
  527. if ret {
  528. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", menus})
  529. } else {
  530. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  531. }
  532. }
  533. // _SaveRoleMenu
  534. // @Title _SaveRoleMenu
  535. // @Description 保存角色权限
  536. // @Param role_menu string false "角色权限"
  537. // @Success 200 {object} models.Account
  538. // @Failure 403 :id is empty
  539. func System_SaveRoleMenu(c *entitys.CtrlContext) {
  540. var saverolemenu []models.SysRoleMenu
  541. c.Ctx.BindJSON(&saverolemenu)
  542. if len(saverolemenu) < 1 {
  543. c.Ctx.JSON(200, sysmodel.SysReturn{500, "role menu length is error", nil})
  544. return
  545. }
  546. session := c.Db.NewSession()
  547. defer session.Close()
  548. err := session.Begin()
  549. //删除角色下的menu
  550. _, err = c.Db.Exec("delete from sys_role_menu where role_id = ?", saverolemenu[0].RoleId)
  551. //_, err = c.Db.Exec("delete from sys_role_menu where id = 1")
  552. if err != nil {
  553. session.Rollback()
  554. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  555. return
  556. }
  557. for i, _ := range saverolemenu {
  558. saverolemenu[i].Id = utils.NewUUID()
  559. saverolemenu[i].DelFlag = 1
  560. }
  561. _, err = c.Db.Insert(&saverolemenu)
  562. if err != nil {
  563. session.Rollback()
  564. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  565. return
  566. }
  567. session.Commit()
  568. ret := __none_func_system__(&saverolemenu)
  569. if ret {
  570. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  571. } else {
  572. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  573. }
  574. }
  575. // _RoleAll
  576. // @Title _RoleAll
  577. // @Description 查找所有角色
  578. // @Success 200 {object} models.Account
  579. // @Failure 403 :id is empty
  580. func System_RoleAll(c *entitys.CtrlContext) {
  581. var roles []sysmodel.SysRole
  582. err := c.Db.SQL(sysmodel.Selectall_sys_role).Find(&roles)
  583. ret := __none_func_system__()
  584. if ret && err == nil {
  585. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", roles})
  586. } else {
  587. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  588. }
  589. }
  590. // _FindPermissions
  591. // @Title _FindPermissions
  592. // @Description 查找用户权限
  593. // @Success 200 {object} models.Account
  594. // @Failure 403 :id is empty
  595. func System_FindPermissions(c *entitys.CtrlContext) {
  596. user_id := c.Ctx.GetString("user_id")
  597. //result, err := c.Db.Query(models.SqlFindUserPermissions, op.UserId)
  598. result, err := c.Db.QueryString(models.SqlFindUserPermissions, user_id)
  599. strs := []string{}
  600. for _, v := range result {
  601. strs = append(strs, v["perms"])
  602. }
  603. if err != nil {
  604. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  605. }
  606. ret := __none_func_system__()
  607. //strs = []string{"sys:menu:add", "sys:menu:view", "sys:menu:edit", "sys:menu:delete", "sys:user:edit", "sys:user:delete", "sys:user:add", "sys:role:view", "sys:role:edit", "sys:role:delete", "sys:role:add"}
  608. if ret {
  609. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", strs})
  610. } else {
  611. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  612. }
  613. }
  614. // _AddMenu
  615. // @Title _AddMenu
  616. // @Description 添加菜单
  617. // @Param string false "菜单"
  618. // @Success 200 {object} models.Account
  619. // @Failure 403 :id is empty
  620. func System_AddMenu(c *entitys.CtrlContext) {
  621. var sysmenu models.SysMenu
  622. c.Ctx.BindJSON(&sysmenu)
  623. user_id := c.Ctx.GetString("user_id")
  624. sysmenu.Id = utils.NewUUID()
  625. sysmenu.CreateBy = user_id
  626. sysmenu.LastUpdateBy = user_id
  627. sysmenu.LastUpdateDate = time.Now()
  628. sysmenu.CreateTime = time.Now()
  629. sysmenu.DelFlag = 0
  630. _, err := c.Db.Insert(&sysmenu)
  631. if err != nil {
  632. c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
  633. return
  634. }
  635. ret := __none_func_system__(sysmenu)
  636. if ret {
  637. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  638. } else {
  639. c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
  640. }
  641. }
  642. // _DelMenu
  643. // @Title _DelMenu
  644. // @Description 删除菜单
  645. // @Param id string false "菜单ID"
  646. // @Success 200 {object} models.Account
  647. // @Failure 403 :id is empty
  648. func System_DelMenu(c *entitys.CtrlContext) {
  649. type Param struct {
  650. Id string `json:"id"`
  651. }
  652. var params []Param
  653. c.Ctx.BindJSON(&params)
  654. fmt.Println(params, "-----------")
  655. ids := []string{}
  656. for _, param := range params {
  657. ids = append(ids, param.Id)
  658. }
  659. _, err := c.Db.Table(new(models.SysMenu)).In("id", ids).Update(map[string]interface{}{"del_flag": 0})
  660. if err != nil {
  661. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  662. return
  663. }
  664. ret := __none_func_system__()
  665. if ret {
  666. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  667. } else {
  668. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  669. }
  670. }
  671. // _UpdateMenu
  672. // @Title _UpdateMenu
  673. // @Description 更新菜单
  674. // @Param string false "菜单"
  675. // @Success 200 {object} models.Account
  676. // @Failure 403 :id is empty
  677. func System_UpdateMenu(c *entitys.CtrlContext) {
  678. var sysmenu models.SysMenu
  679. err := c.Ctx.BindJSON(&sysmenu)
  680. if err != nil {
  681. c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
  682. return
  683. }
  684. user_id := c.Ctx.GetString("user_id")
  685. whereMenu := &models.SysMenu{}
  686. whereMenu.Id = sysmenu.Id
  687. sysmenu.LastUpdateBy = user_id
  688. sysmenu.LastUpdateDate = time.Now()
  689. _, err = c.Db.Update(&sysmenu, whereMenu)
  690. if err != nil {
  691. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  692. return
  693. }
  694. ret := __none_func_system__(sysmenu)
  695. if ret {
  696. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  697. } else {
  698. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  699. }
  700. }
  701. // _AddOrg
  702. // @Title _AddOrg
  703. // @Description 添加组织
  704. // @Param string false "组织"
  705. // @Success 200 {object} models.Account
  706. // @Failure 403 :id is empty
  707. func System_AddOrg(c *entitys.CtrlContext) {
  708. var sysorg models.SysOrganization
  709. c.Ctx.BindJSON(&sysorg)
  710. user_id := c.Ctx.GetString("user_id")
  711. sysorg.Id = utils.NewUUID()
  712. sysorg.CreateBy = user_id
  713. sysorg.LastUpdateBy = user_id
  714. sysorg.LastUpdateDate = time.Now()
  715. sysorg.CreateTime = time.Now()
  716. sysorg.DelFlag = 0
  717. _, err := c.Db.Insert(&sysorg)
  718. if err != nil {
  719. c.Ctx.JSON(500, sysmodel.SysReturn{500, err.Error(), nil})
  720. return
  721. }
  722. ret := __none_func_system__(sysorg)
  723. if ret {
  724. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  725. } else {
  726. c.Ctx.JSON(500, sysmodel.SysReturn{500, "", nil})
  727. }
  728. }
  729. // _DelOrg
  730. // @Title _DelOrg
  731. // @Description 删除组织
  732. // @Param id string false "组织ID"
  733. // @Success 200 {object} models.Account
  734. // @Failure 403 :id is empty
  735. func System_DelOrg(c *entitys.CtrlContext) {
  736. type Param struct {
  737. Id string `json:"id"`
  738. }
  739. var params []Param
  740. c.Ctx.BindJSON(&params)
  741. fmt.Println(params, "-----------")
  742. ids := []string{}
  743. for _, param := range params {
  744. ids = append(ids, param.Id)
  745. }
  746. _, err := c.Db.Table(new(models.SysOrganization)).In("id", ids).Update(map[string]interface{}{"del_flag": 0})
  747. if err != nil {
  748. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  749. return
  750. }
  751. ret := __none_func_system__()
  752. if ret {
  753. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  754. } else {
  755. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  756. }
  757. }
  758. // _UpdateOrg
  759. // @Title _UpdateOrg
  760. // @Description 更新组织
  761. // @Param string false "组织"
  762. // @Success 200 {object} models.Account
  763. // @Failure 403 :id is empty
  764. func System_UpdateOrg(c *entitys.CtrlContext) {
  765. var sysorg models.SysOrganization
  766. c.Ctx.BindJSON(&sysorg)
  767. user_id := c.Ctx.GetString("user_id")
  768. sysorg.LastUpdateBy = user_id
  769. sysorg.LastUpdateDate = time.Now()
  770. _, err := c.Db.ID(sysorg.Id).Update(&sysorg)
  771. if err != nil {
  772. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  773. return
  774. }
  775. ret := __none_func_system__(sysorg)
  776. if ret {
  777. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nil})
  778. } else {
  779. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  780. }
  781. }
  782. // _GetOrg
  783. // @Title _GetOrg
  784. // @Description 根据ID获取组织
  785. // @Param string false "组织ID"
  786. // @Success 200 {object} models.Account
  787. // @Failure 403 :id is empty
  788. func System_GetOrg(c *entitys.CtrlContext) {
  789. var param struct {
  790. Id string `json:"id"`
  791. }
  792. c.Ctx.BindJSON(&param)
  793. fmt.Println(param, "-----------")
  794. org := models.SysOrganization{}
  795. err := c.Db.Table(new(sysmodel.SysOrganization)).ID(param.Id).Find(&org)
  796. if err != nil {
  797. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  798. return
  799. }
  800. ret := __none_func_system__()
  801. if ret {
  802. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", org})
  803. } else {
  804. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  805. }
  806. }
  807. // _PageOrg
  808. // @Title _PageOrg
  809. // @Description 分页获取组织
  810. // @Param string false "组织"
  811. // @Success 200 {object} models.Account
  812. // @Failure 403 :id is empty
  813. func System_PageOrg(c *entitys.CtrlContext) {
  814. var getpageinfo models.GetPageInfo
  815. c.Ctx.BindJSON(&getpageinfo)
  816. ret := __none_func_system__(getpageinfo)
  817. page := sysmodel.PageResult{}
  818. var orgs []sysmodel.SysOrganization
  819. dbSession := c.Db.Table("sys_organization")
  820. dbSession = dbSession.Select("sys_organization.*")
  821. countSession := c.Db.Table("sys_organization")
  822. JoinTables := []sysmodel.Join{}
  823. //JoinTables = append(JoinTables, sysmodel.Join{TabelName: "subject", Condition: "lesson.subject_id = subject.id", JoinOperator: "left"})
  824. for _, join := range JoinTables {
  825. dbSession = dbSession.Join(join.JoinOperator, join.TabelName, join.Condition)
  826. countSession = countSession.Join(join.JoinOperator, join.TabelName, join.Condition)
  827. }
  828. whereStr, datas, err := getpageinfo.Filter.Parse("")
  829. if err != nil {
  830. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  831. return
  832. }
  833. dbSession = dbSession.Where(whereStr, datas...)
  834. countSession = countSession.Where(whereStr, datas...)
  835. sidx := strings.Split(getpageinfo.Sidx, ",")
  836. for _, order := range sidx {
  837. order = strings.TrimSpace(order)
  838. if len(order) == 0 {
  839. continue
  840. }
  841. if strings.ToLower(getpageinfo.Sord) == "desc" {
  842. dbSession = dbSession.OrderBy(order + " desc")
  843. } else {
  844. dbSession = dbSession.OrderBy(order + " asc")
  845. }
  846. }
  847. totalPage, _ := countSession.Count()
  848. err = dbSession.Limit(getpageinfo.PageSize, (getpageinfo.PageNum-1)*getpageinfo.PageSize).Find(&orgs)
  849. if err != nil {
  850. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  851. }
  852. page.Content = orgs
  853. page.PageSize = getpageinfo.PageSize
  854. page.PageNum = getpageinfo.PageNum
  855. page.TotalSize = int(totalPage)
  856. if ret {
  857. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", page})
  858. } else {
  859. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  860. }
  861. }
  862. func System_TreeList(c *entitys.CtrlContext) {
  863. tbName := c.Ctx.Query("tb_name")
  864. parentFiled := c.Ctx.Query("parent_filed")
  865. if parentFiled == "" {
  866. parentFiled = c.Ctx.Query("parent_field")
  867. }
  868. parentValue := c.Ctx.Query("parent_value")
  869. textFiled := c.Ctx.Query("text_filed")
  870. if textFiled == "" {
  871. textFiled = c.Ctx.Query("text_field")
  872. if textFiled == "" {
  873. textFiled = c.Ctx.Query("name_field")
  874. }
  875. }
  876. valueFiled := c.Ctx.Query("value_filed")
  877. if valueFiled == "" {
  878. valueFiled = c.Ctx.Query("value_field")
  879. if valueFiled == "" {
  880. valueFiled = c.Ctx.Query("id_field")
  881. }
  882. }
  883. domainchk := c.Ctx.Query("domainchk")
  884. if domainchk == "" {
  885. domainchk = "1" // 默认需要domain过滤
  886. }
  887. cntparent := c.Ctx.Query("cnt_parent")
  888. if cntparent == "" {
  889. cntparent = "0"
  890. }
  891. filter := c.Ctx.Query("filters")
  892. if filter == "" {
  893. filter = c.Ctx.Query("filter")
  894. }
  895. sord := c.Ctx.Query("sord")
  896. user, exists := c.Ctx.Get("token")
  897. if !exists {
  898. c.Ctx.JSON(200, sysmodel.SysReturn{500, "token is not exists", nil})
  899. return
  900. }
  901. nodes, err := sysdb.TreeList(c, user.(*entitys.Token), tbName, parentFiled, parentValue, textFiled, valueFiled, cntparent, domainchk, filter, sord)
  902. if err == nil {
  903. c.Ctx.JSON(200, sysmodel.SysReturn{200, "", nodes})
  904. } else {
  905. c.Ctx.JSON(200, sysmodel.SysReturn{500, "", nil})
  906. }
  907. }
  908. func __none_func_system__(params ...interface{}) bool {
  909. return true
  910. }