SystemController.go 28 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079
  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 ret && 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. defer session.Close()
  344. //1、删除用户角色
  345. _, err = c.Db.SQL(sysmodel.SqlDeleteUserRoles, userInfo.Id).Execute()
  346. if err != nil {
  347. session.Rollback()
  348. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  349. return
  350. }
  351. //2、修改角色
  352. userRoles := []models.SysUserRole{}
  353. roles := []string{}
  354. if userInfo.UserRole != "" {
  355. err = json.Unmarshal([]byte(userInfo.UserRole), &roles)
  356. if err != nil {
  357. session.Rollback()
  358. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  359. return
  360. }
  361. }
  362. for _, role := range roles {
  363. userRole := models.SysUserRole{}
  364. userRole.Id = utils.NewUUID()
  365. userRole.RoleId = role
  366. userRole.UserId = userInfo.Id
  367. userRole.CreateBy = user_id
  368. userRole.LastUpdateBy = user_id
  369. userRole.CreateTime = time.Now()
  370. userRole.LastUpdateDate = time.Now()
  371. userRole.DelFlag = 0
  372. userRoles = append(userRoles, userRole)
  373. }
  374. _, err = c.Db.Insert(userRoles)
  375. if err != nil {
  376. session.Rollback()
  377. c.Ctx.JSON(200, sysmodel.SysReturn{500, err.Error(), nil})
  378. return
  379. }
  380. var updateUser models.SysUser
  381. updateUser.Name = userInfo.Name
  382. updateUser.FullName = userInfo.FullName
  383. updateUser.Mobile = userInfo.Mobile
  384. updateUser.OrgId = userInfo.OrgId
  385. updateUser.Type = userInfo.Type
  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 = c.Db.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. }