role_service.go 23KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738
  1. package service
  2. import (
  3. "database/sql"
  4. "strconv"
  5. "strings"
  6. "time"
  7. "XT_New/models"
  8. "XT_New/utils"
  9. "github.com/jinzhu/gorm"
  10. )
  11. func GetRoles(orgID int64, appID int64, page int, count int) ([]*models.Role, int, error) {
  12. var roles []*models.Role
  13. var totalCount int
  14. err := readUserDb.Model(&models.Role{}).
  15. Where("org_id = ? AND app_id = ?", orgID, appID).
  16. Count(&totalCount).
  17. Order("ctime asc").Limit(count).Offset((page - 1) * count).
  18. Find(&roles).
  19. Error
  20. if err != nil {
  21. if err == gorm.ErrRecordNotFound {
  22. return make([]*models.Role, 0), 0, nil
  23. } else {
  24. return nil, 0, err
  25. }
  26. }
  27. return roles, totalCount, nil
  28. }
  29. func GetAppRole(orgID int64, appID int64, adminUserID int64) (*models.App_Role, error) {
  30. var appRole models.App_Role
  31. err := readUserDb.Model(models.App_Role{}).Preload("AdminUser", "status = 1").Where("org_id = ? and app_id = ? and admin_user_id = ?", orgID, appID, adminUserID).First(&appRole).Error
  32. if err != nil {
  33. if err == gorm.ErrRecordNotFound {
  34. return nil, nil
  35. } else {
  36. return nil, err
  37. }
  38. }
  39. if len(appRole.RoleIds) > 0 {
  40. role_ids := strings.Split(appRole.RoleIds, ",")
  41. for _, item := range role_ids {
  42. id, _ := strconv.ParseInt(item, 10, 64)
  43. role, _ := GetRoleByRoleID(id)
  44. if role.IsSystem == 1 && role.RoleName == "子管理员" {
  45. appRole.IsSubSuperAdmin = true
  46. }
  47. }
  48. }
  49. return &appRole, nil
  50. }
  51. func CreateRole(adminUserID int64, orgID int64, appID int64, name string, intro string) (*models.Role, error) {
  52. role := models.Role{
  53. RoleName: name,
  54. RoleIntro: intro,
  55. Creator: adminUserID,
  56. OrgId: orgID,
  57. AppId: appID,
  58. IsSuperAdmin: false,
  59. Status: 1,
  60. CreateTime: time.Now().Unix(),
  61. ModifyTime: time.Now().Unix(),
  62. }
  63. tx := writeUserDb.Begin()
  64. if err := tx.Create(&role).Error; err != nil {
  65. tx.Rollback()
  66. return nil, err
  67. }
  68. tx.Commit()
  69. return &role, nil
  70. }
  71. func GetRoleByRoleID(roleID int64) (*models.Role, error) {
  72. var role models.Role
  73. err := readUserDb.Model(&models.Role{}).Where("id = ?", roleID).First(&role).Error
  74. if err != nil {
  75. if err == gorm.ErrRecordNotFound {
  76. return nil, nil
  77. }
  78. return nil, err
  79. } else {
  80. return &role, nil
  81. }
  82. }
  83. func ModifyRole(role *models.Role) error {
  84. tx := writeUserDb.Begin()
  85. if err := tx.Save(role).Error; err != nil {
  86. tx.Rollback()
  87. return err
  88. }
  89. return tx.Commit().Error
  90. }
  91. // 拥有xx角色的管理员的数量
  92. func RoleAdminUserCount(orgID int64, appID int64, roleID int64) (int, error) {
  93. var count int
  94. err := readUserDb.Model(models.App_Role{}).
  95. Where("org_id = ? AND app_id = ? AND role_id = ? AND status = 1", orgID, appID, roleID).
  96. Count(&count).
  97. Error
  98. if err != nil {
  99. return 0, err
  100. } else {
  101. return count, nil
  102. }
  103. }
  104. type AdminUserManageViewModel struct {
  105. AdminUserId int `gorm:"admin_user_id" json:"user_id"`
  106. UserName string `gorm:"user_name" json:"user_name"`
  107. RoleName string `gorm:"role_name" json:"role_name"`
  108. UserTitle int `gorm:"user_title" json:"user_title"`
  109. Ip string `gorm:"ip" json:"ip"`
  110. Ctime int64 `gorm:"ctime" json:"last_login_time"`
  111. Status int `gorm:"status" json:"status"`
  112. Avatar string `gorm:"avatar" json:"avatar"`
  113. RoleIds string `gorm:"role_ids" json:"role_ids"`
  114. // LastLoginTimeStr string `gorm:"-" json:"last_login_time_formatted"`
  115. TitleName string `gorm:"-" json:"title_name"`
  116. IsSubSuperAdmin bool `gorm:"-" json:"is_sub_super_admin"`
  117. //mobile string `gorm:"-" json:"mobile"`
  118. }
  119. func GetAdminUsersAndLoginInfo(orgID int64, appID int64, page int, count int) ([]*AdminUserManageViewModel, int, error) {
  120. if count <= 0 {
  121. return []*AdminUserManageViewModel{}, 0, nil
  122. }
  123. if page < 1 {
  124. page = 1
  125. }
  126. var viewModels []*AdminUserManageViewModel = make([]*AdminUserManageViewModel, 0)
  127. rows, err := readUserDb.Raw("SELECT u_a_r.admin_user_id, u_a_r.user_name, u_a_r.user_title, u_l.ip, u_l.ctime, u_a_r.status,u_a_r.avatar,u_a_r.role_ids FROM sgj_user_admin_role AS u_a_r LEFT JOIN (SELECT * FROM (SELECT admin_user_id, org_id, app_id, ip, ctime FROM sgj_user_admin_login_log WHERE org_id = ? AND app_id = ? ORDER BY ctime DESC) AS t GROUP BY admin_user_id) AS u_l ON u_a_r.org_id = u_l.org_id AND u_a_r.app_id = u_l.app_id AND u_a_r.admin_user_id = u_l.admin_user_id WHERE u_a_r.org_id = ? AND u_a_r.app_id = ? GROUP BY u_a_r.admin_user_id LIMIT ? OFFSET ?;", orgID, appID, orgID, appID, count, (page-1)*count).Rows()
  128. defer rows.Close()
  129. if err != nil {
  130. if err == gorm.ErrRecordNotFound {
  131. return viewModels, 0, nil
  132. } else {
  133. return nil, 0, err
  134. }
  135. }
  136. for rows.Next() {
  137. var viewModel AdminUserManageViewModel
  138. readUserDb.ScanRows(rows, &viewModel)
  139. title, _ := models.UserTitle[viewModel.UserTitle]
  140. viewModel.TitleName = title
  141. // if viewModel.Ctime == 0 {
  142. // viewModel.LastLoginTimeStr = ""
  143. // } else {
  144. // loginTime := time.Unix(viewModel.Ctime, 0)
  145. // viewModel.LastLoginTimeStr = loginTime.Format("2006-01-02 15:04")
  146. // }
  147. viewModels = append(viewModels, &viewModel)
  148. }
  149. for _, item := range viewModels {
  150. if len(item.RoleIds) > 0 {
  151. ids := strings.Split(item.RoleIds, ",")
  152. for _, id := range ids {
  153. id, _ := strconv.ParseInt(id, 10, 64)
  154. role, _ := GetRoleByRoleID(id)
  155. if role.IsSystem == 1 && role.RoleName == "子管理员" {
  156. item.IsSubSuperAdmin = true
  157. }
  158. if len(item.RoleName) == 0 {
  159. item.RoleName = role.RoleName
  160. } else {
  161. item.RoleName = item.RoleName + "," + role.RoleName
  162. }
  163. }
  164. }
  165. //admin, _ := GetAdminUserByUserID(int64(item.AdminUserId))
  166. //item.mobile = admin.Mobile
  167. }
  168. total := 0
  169. //readUserDb.Table("sgj_user_admin_role as u_a_r").Joins("join sgj_user_role as u_r on u_r.org_id = u_a_r.org_id AND u_r.app_id = u_a_r.app_id AND u_r.id = u_a_r.role_id").Where("u_a_r.org_id = ? AND u_a_r.app_id = ?", orgID, appID).Count(&total)
  170. return viewModels, total, nil
  171. }
  172. func GetValidRoleCount(orgID int64, appID int64, superAdminUserID int64) (int, error) {
  173. var count int
  174. err := readUserDb.Model(models.Role{}).
  175. Where("org_id = ? AND app_id = ? AND creator = ? AND is_super_admin = 0 AND status = 1", orgID, appID, superAdminUserID).
  176. Count(&count).
  177. Error
  178. if err != nil {
  179. return 0, err
  180. } else {
  181. return count, nil
  182. }
  183. }
  184. func GetAllValidRoles(orgID int64, appID int64) ([]*models.Role, error) {
  185. var roles []*models.Role
  186. err := readUserDb.Model(models.Role{}).
  187. Where("org_id = ? AND app_id = ? AND status = 1", orgID, appID).
  188. Order("number desc,ctime").
  189. Find(&roles).
  190. Error
  191. if err != nil {
  192. if err == gorm.ErrRecordNotFound {
  193. return make([]*models.Role, 0), nil
  194. } else {
  195. return nil, err
  196. }
  197. }
  198. return roles, nil
  199. }
  200. func IsRoleExist(orgID int64, appID int64, roleID int64) (bool, error) {
  201. var count int
  202. err := readUserDb.Model(models.Role{}).Where("org_id = ? AND app_id = ? AND id = ? AND status = 1", orgID, appID, roleID).Count(&count).Error
  203. if err != nil {
  204. return false, err
  205. } else {
  206. return count > 0, nil
  207. }
  208. }
  209. type AdminUserEditViewModel struct {
  210. AdminUserId int64 `gorm:"admin_user_id" json:"user_id"`
  211. UserName string `gorm:"user_name" json:"user_name"`
  212. Mobile string `gorm:"mobile" json:"mobile"`
  213. UserType int `gorm:"user_type" json:"user_type"`
  214. UserTitle int `gorm:"user_title" json:"user_title"`
  215. Intro string `gorm:"intro" json:"intro"`
  216. RoleId int64 `gorm:"role_id" json:"role_id"`
  217. }
  218. func GetGeneralAdminUser(orgID int64, appID int64, user_id int64) (*AdminUserEditViewModel, error) {
  219. rows, err := readUserDb.Raw("SELECT u_a.mobile, u_a_r.admin_user_id, u_a_r.user_name, u_a_r.user_type, u_a_r.user_title, u_a_r.intro, u_a_r.role_id FROM sgj_user_admin AS u_a, sgj_user_admin_role AS u_a_r WHERE u_a.id = u_a_r.admin_user_id AND u_a.id = ? AND u_a_r.status = 1 AND u_a_r.org_id = ? AND u_a_r.app_id = ?;", user_id, orgID, appID).Rows()
  220. defer rows.Close()
  221. if err != nil {
  222. if err == gorm.ErrRecordNotFound {
  223. return nil, nil
  224. } else {
  225. return nil, err
  226. }
  227. }
  228. if rows.Next() {
  229. var viewModel AdminUserEditViewModel
  230. err := readUserDb.ScanRows(rows, &viewModel)
  231. if err != nil {
  232. return nil, err
  233. } else {
  234. return &viewModel, nil
  235. }
  236. }
  237. return nil, nil
  238. }
  239. func SaveAppRole(appRole *models.App_Role) error {
  240. tx := writeUserDb.Begin()
  241. if err := tx.Model(&models.App_Role{}).Save(appRole).Error; err != nil {
  242. tx.Rollback()
  243. return err
  244. }
  245. return tx.Commit().Error
  246. }
  247. func IsMobileDidUsedAtApp(orgID int64, appID int64, mobile string) (bool, error) {
  248. var count int
  249. rows, err := readUserDb.Raw("select count(u_a.id) as count from sgj_user_admin as u_a, sgj_user_admin_role as u_a_r where u_a_r.org_id = ? and u_a_r.app_id = ? and u_a.mobile = ? and u_a.id = u_a_r.admin_user_id;", orgID, appID, mobile).Rows()
  250. defer rows.Close()
  251. if err != nil {
  252. if err == gorm.ErrRecordNotFound {
  253. return false, nil
  254. } else {
  255. return true, err
  256. }
  257. }
  258. if rows.Next() {
  259. rows.Scan(&count)
  260. return count > 0, nil
  261. }
  262. return true, nil
  263. }
  264. func IsUserSuperAdminWithMobile(mobile string) (bool, error) {
  265. var user models.AdminUser
  266. err := readUserDb.Where("mobile = ?", mobile).First(&user).Error
  267. if err != nil {
  268. if err == gorm.ErrRecordNotFound {
  269. return false, nil
  270. } else {
  271. return false, err
  272. }
  273. }
  274. return user.IsSuperAdmin, nil
  275. }
  276. func CreateGeneralAdminUser(orgID int64, appID int64, mobile string, name string, userTitle string, roleIds string, user_type int, user_title int) (*models.AdminUser, string, error) {
  277. now := time.Now().Unix()
  278. tx := writeUserDb.Begin()
  279. var adminUser models.AdminUser
  280. err := readUserDb.Where("mobile = ? AND status = 1", mobile).First(&adminUser).Error
  281. password := ""
  282. if err != nil {
  283. if err != gorm.ErrRecordNotFound {
  284. return nil, "", err
  285. } else {
  286. password = utils.RandomNumberString(6)
  287. adminUser.Mobile = mobile
  288. adminUser.Password = utils.String2md5(password)
  289. adminUser.IsSuperAdmin = false
  290. adminUser.Status = 1
  291. adminUser.CreateTime = now
  292. adminUser.ModifyTime = now
  293. if createErr := tx.Create(&adminUser).Error; createErr != nil {
  294. tx.Rollback()
  295. return nil, "", createErr
  296. }
  297. }
  298. }
  299. app_role := models.App_Role{
  300. AdminUserId: adminUser.Id,
  301. OrgId: orgID,
  302. AppId: appID,
  303. Avatar: "",
  304. UserName: name,
  305. UserTitleName: userTitle,
  306. UserTitle: int8(user_title),
  307. UserType: int8(user_type),
  308. Status: 1,
  309. CreateTime: now,
  310. ModifyTime: now,
  311. RoleIds: roleIds,
  312. }
  313. if createApp_RoleErr := tx.Create(&app_role).Error; createApp_RoleErr != nil {
  314. tx.Rollback()
  315. return nil, "", createApp_RoleErr
  316. }
  317. tx.Commit()
  318. return &adminUser, password, nil
  319. }
  320. type PurviewTreeViewModel struct {
  321. ID int64 `json:"id"`
  322. PID int64 `json:"pid"`
  323. Name string `json:"name"`
  324. Childs []*PurviewTreeViewModel `json:"childs"`
  325. Number int64 `json:"number"`
  326. }
  327. func GetAllGeneralPurviewVMsProcessed(module int) ([]*PurviewTreeViewModel, error) {
  328. var originPurviews []*models.Purview
  329. getPurviewErr := readUserDb.Model(models.Purview{}).Where("module = ? AND status = 1 AND super_admin_exclusive = 0", module).Order("listorder asc").Order("id asc").Find(&originPurviews).Error
  330. if getPurviewErr != nil {
  331. return nil, getPurviewErr
  332. }
  333. // 加工这些规则:树形化
  334. purviewVMs := make([]*PurviewTreeViewModel, 0)
  335. pid_childs := make(map[int64][]*PurviewTreeViewModel)
  336. for _, purview := range originPurviews {
  337. // warning:下面这个算法只适用最多两层树形结构的菜单,对于两层以上的会丢失掉第三层及其以下的节点
  338. // 因为取出 originPurviews 的时候已经排过序了,所以顶级节点肯定最先处理,不需要担心子节点比父节点先处理
  339. pvm := &PurviewTreeViewModel{
  340. ID: purview.Id,
  341. PID: purview.Parentid,
  342. Name: purview.Name,
  343. Number: 2,
  344. }
  345. if purview.Parentid == 0 {
  346. purviewVMs = append(purviewVMs, pvm)
  347. } else {
  348. childs := pid_childs[purview.Parentid]
  349. if childs == nil {
  350. childs = make([]*PurviewTreeViewModel, 0)
  351. }
  352. childs = append(childs, pvm)
  353. pid_childs[purview.Parentid] = childs
  354. }
  355. }
  356. for _, vm := range purviewVMs {
  357. vm.Childs = pid_childs[vm.ID]
  358. }
  359. return purviewVMs, nil
  360. }
  361. func GetAllGeneralFuncPurviewVMsProcessed() ([]*PurviewTreeViewModel, error) {
  362. var originPurviews []*models.SgjUserOperatePurview
  363. getPurviewErr := readUserDb.Model(models.SgjUserOperatePurview{}).Where(" status = 1").Order("id asc").Find(&originPurviews).Error
  364. if getPurviewErr != nil {
  365. return nil, getPurviewErr
  366. }
  367. // 加工这些规则:树形化
  368. purviewVMs := make([]*PurviewTreeViewModel, 0)
  369. for _, purview := range originPurviews {
  370. // warning:下面这个算法只适用最多两层树形结构的菜单,对于两层以上的会丢失掉第三层及其以下的节点
  371. // 因为取出 originPurviews 的时候已经排过序了,所以顶级节点肯定最先处理,不需要担心子节点比父节点先处理
  372. pvm := &PurviewTreeViewModel{
  373. ID: purview.ID,
  374. PID: purview.Parentid,
  375. Name: purview.Name,
  376. }
  377. purviewVMs = append(purviewVMs, pvm)
  378. }
  379. return purviewVMs, nil
  380. }
  381. func GetRolePurviewIds(roleID int64) (string, error) {
  382. var rolePurview models.RolePurview
  383. err := readUserDb.Where("role_id = ?", roleID).First(&rolePurview).Error
  384. if err != nil {
  385. if err == gorm.ErrRecordNotFound {
  386. return "", nil
  387. } else {
  388. return "", err
  389. }
  390. }
  391. return rolePurview.PurviewIds, nil
  392. }
  393. func SaveRolePurviewIds(orgID int64, appID int64, roleID int64, purviewIds string) error {
  394. var rolePurview models.RolePurview
  395. getRPErr := readUserDb.Where("org_id = ? AND app_id = ? AND role_id = ?", orgID, appID, roleID).First(&rolePurview).Error
  396. if getRPErr != nil {
  397. if getRPErr == gorm.ErrRecordNotFound {
  398. rolePurview = models.RolePurview{
  399. RoleId: roleID,
  400. OrgId: orgID,
  401. AppId: appID,
  402. Status: 1,
  403. CreateTime: time.Now().Unix(),
  404. }
  405. } else {
  406. return getRPErr
  407. }
  408. }
  409. rolePurview.PurviewIds = purviewIds
  410. rolePurview.ModifyTime = time.Now().Unix()
  411. tx := writeUserDb.Begin()
  412. if err := tx.Save(&rolePurview).Error; err != nil {
  413. tx.Rollback()
  414. return err
  415. }
  416. return tx.Commit().Error
  417. }
  418. func SaveFuncRolePurviewIds(orgID int64, appID int64, roleID int64, funcPurviewIds string) error {
  419. var rolePurview models.SgjUserRoleFuncPurview
  420. getRPErr := readUserDb.Where("org_id = ? AND app_id = ? AND role_id = ?", orgID, appID, roleID).First(&rolePurview).Error
  421. if getRPErr != nil {
  422. if getRPErr == gorm.ErrRecordNotFound {
  423. rolePurview = models.SgjUserRoleFuncPurview{
  424. RoleId: roleID,
  425. OrgId: orgID,
  426. AppId: appID,
  427. Status: 1,
  428. Ctime: time.Now().Unix(),
  429. }
  430. } else {
  431. return getRPErr
  432. }
  433. }
  434. rolePurview.PurviewIds = funcPurviewIds
  435. rolePurview.Mtime = time.Now().Unix()
  436. tx := writeUserDb.Begin()
  437. if err := tx.Save(&rolePurview).Error; err != nil {
  438. tx.Rollback()
  439. return err
  440. }
  441. return tx.Commit().Error
  442. }
  443. func ModifyAdminUserInfo(adminUserID int64, orgID int64, appID int64, name string, avatar string, newPassword string) error {
  444. tx := writeUserDb.Begin()
  445. editInfoErr := tx.Exec("update sgj_user_admin_role set user_name = ?, avatar = ?, mtime = ? where admin_user_id = ? and org_id = ?", name, avatar, time.Now().Unix(), adminUserID, orgID).Error
  446. if editInfoErr != nil {
  447. tx.Rollback()
  448. return editInfoErr
  449. }
  450. if len(newPassword) > 0 {
  451. editPwdErr := tx.Exec("update sgj_user_admin set password = ?, mtime = ? where id = ?", newPassword, time.Now().Unix(), adminUserID).Error
  452. if editPwdErr != nil {
  453. tx.Rollback()
  454. return editPwdErr
  455. }
  456. }
  457. tx.Commit()
  458. return nil
  459. }
  460. func GetOrgApp(orgID int64, app_type int) (*models.OrgApp, error) {
  461. var apps models.OrgApp
  462. err := readUserDb.Where("app_type = ? AND org_id = ? AND status = 1", app_type, orgID).First(&apps).Error
  463. if err != nil {
  464. return nil, err
  465. }
  466. return &apps, nil
  467. }
  468. func GetAllOrgValidRoles(orgID int64, isSubSuperAdmin bool) ([]*models.Role, error) {
  469. var roles []*models.Role
  470. db := readUserDb.Model(models.Org{})
  471. if isSubSuperAdmin {
  472. db = db.Where("role_name != '子管理员' AND is_system != 1")
  473. }
  474. err := db.Where("org_id = ? AND status = 1", orgID).
  475. Order("number desc,ctime").
  476. Find(&roles).
  477. Error
  478. if err != nil {
  479. if err == gorm.ErrRecordNotFound {
  480. return make([]*models.Role, 0), nil
  481. } else {
  482. return nil, err
  483. }
  484. }
  485. for _, item := range roles {
  486. var total int64
  487. readUserDb.Model(&models.App_Role{}).Where("org_id = ? AND find_in_set(?, role_ids)", orgID, item.Id).Count(&total)
  488. item.StaffNumber = total
  489. }
  490. return roles, nil
  491. }
  492. func CreateUserRole(userRole *models.App_Role) (err error) {
  493. err = writeUserDb.Create(&userRole).Error
  494. return
  495. }
  496. func CreateOrgRole(role *models.Role) (err error) {
  497. err = writeUserDb.Create(&role).Error
  498. return
  499. }
  500. func GetRolePurview(roleID int64) (models.RolePurview, error) {
  501. var rolePurviews models.RolePurview
  502. var err error
  503. err = readUserDb.Where("role_id = ?", roleID).First(&rolePurviews).Error
  504. return rolePurviews, err
  505. }
  506. func GetFuncRolePurview(roleID int64) (models.SgjUserRoleFuncPurview, error) {
  507. var rolePurviews models.SgjUserRoleFuncPurview
  508. var err error
  509. err = readUserDb.Where("role_id = ?", roleID).First(&rolePurviews).Error
  510. return rolePurviews, err
  511. }
  512. func SaveRolePurview(purview *models.RolePurview) (err error) {
  513. err = writeUserDb.Save(&purview).Error
  514. return
  515. }
  516. func CreateRolePurview(purview *models.RolePurview) (err error) {
  517. err = writeUserDb.Create(&purview).Error
  518. return
  519. }
  520. func CreateFuncRolePurview(purview *models.SgjUserRoleFuncPurview) (err error) {
  521. err = writeUserDb.Create(&purview).Error
  522. return
  523. }
  524. func GetAllPurview(module int64, pid int64) ([]*models.Purview, error) {
  525. var originPurviews []*models.Purview
  526. getPurviewErr := readUserDb.Model(models.Purview{}).Preload("Purview", "status = 1").Where("module = ? AND status = 1 AND parentid = ? AND super_admin_exclusive = 0", module, pid).Order("listorder asc").Order("id asc").Find(&originPurviews).Error
  527. return originPurviews, getPurviewErr
  528. }
  529. type NewAdminUserModel struct {
  530. ID int64 `gorm:"id" json:"id"`
  531. AdminUserId int `gorm:"admin_user_id" json:"user_id"`
  532. UserName string `gorm:"user_name" json:"user_name"`
  533. UserTitle int `gorm:"user_title_name" json:"user_title_name"`
  534. Ip string `gorm:"ip" json:"ip"`
  535. Ctime int64 `gorm:"ctime" json:"last_login_time"`
  536. Status int `gorm:"status" json:"status"`
  537. Avatar string `gorm:"avatar" json:"avatar"`
  538. RoleIds string `gorm:"role_ids" json:"role_ids"`
  539. IsSubAdmin bool `gorm:"-" json:"is_sub_admin"`
  540. }
  541. func GetAllAdminUsersAndRole(orgID int64, appID int64, page int, count int) ([]*NewAdminUserModel, int, error) {
  542. var viewModels []*NewAdminUserModel = make([]*NewAdminUserModel, 0)
  543. var rows *sql.Rows
  544. var err error
  545. rows, err = readUserDb.Raw("SELECT u_a_r.id, u_a_r.admin_user_id, u_a_r.user_name, u_a_r.user_title, u_a_r.status,u_a_r.avatar,u_a_r.role_ids FROM sgj_user_admin_role AS u_a_r WHERE org_id = ? AND app_id = ? ORDER BY ctime asc", orgID, appID).Rows()
  546. defer rows.Close()
  547. if err != nil {
  548. if err == gorm.ErrRecordNotFound {
  549. return viewModels, 0, nil
  550. } else {
  551. return nil, 0, err
  552. }
  553. }
  554. for rows.Next() {
  555. var viewModel NewAdminUserModel
  556. readUserDb.ScanRows(rows, &viewModel)
  557. viewModels = append(viewModels, &viewModel)
  558. }
  559. for _, items := range viewModels {
  560. if len(items.RoleIds) > 0 {
  561. ids := strings.Split(items.RoleIds, ",")
  562. for _, ids := range ids {
  563. id, _ := strconv.ParseInt(ids, 10, 64)
  564. role, _ := GetRoleByRoleID(id)
  565. if role.IsSystem == 1 && role.RoleName == "子管理员" {
  566. items.IsSubAdmin = true
  567. }
  568. }
  569. }
  570. }
  571. total := 0
  572. return viewModels, total, nil
  573. }
  574. func FindAdminUserByID(admin_user_id int64, org_id int64) (total int64, err error) {
  575. err = readUserDb.Model(&models.App_Role{}).Where("admin_user_id = ? AND org_id = ?", admin_user_id, org_id).Count(&total).Error
  576. return
  577. }
  578. func GetRoleAndPurviewById(role_id int64, org_id int64, app_id int64) (rolePurview models.RolePurview, err error) {
  579. err = readUserDb.Model(&models.RolePurview{}).Preload("Role", "status = 1").Where("role_id = ? AND status = 1 AND org_id = ? AND app_id = ?", role_id, org_id, app_id).First(&rolePurview).Error
  580. return
  581. }
  582. func SaveRole(role *models.Role) (err error) {
  583. err = writeUserDb.Save(&role).Error
  584. return
  585. }
  586. // 拥有xx角色的管理员的数量
  587. func RoleAdminUserCountTwo(orgID int64, appID int64, roleID int64) (int, error) {
  588. var count int
  589. err := readUserDb.Model(models.App_Role{}).
  590. Where("org_id = ? AND app_id = ? AND find_in_set(?, role_ids)", orgID, appID, roleID).
  591. Count(&count).
  592. Error
  593. if err != nil {
  594. return 0, err
  595. } else {
  596. return count, nil
  597. }
  598. }
  599. func FindAdminUserID(id int64) (role models.App_Role, err error) {
  600. err = readUserDb.Model(&models.App_Role{}).Where("id = ?", id).First(&role).Error
  601. return
  602. }
  603. func SaveAdminUser(role *models.App_Role) (err error) {
  604. err = writeUserDb.Save(&role).Error
  605. return
  606. }
  607. func GetFunctionPurview() (purview []*models.SgjUserOperatePurview, err error) {
  608. err = readUserDb.Model(&models.SgjUserOperatePurview{}).Where("status = 1 ").Find(&purview).Error
  609. return
  610. }
  611. func GetRoleFuncPurviewIds(roleID int64) (string, error) {
  612. var rolePurview models.SgjUserRoleFuncPurview
  613. err := readUserDb.Where("role_id = ?", roleID).First(&rolePurview).Error
  614. if err != nil {
  615. if err == gorm.ErrRecordNotFound {
  616. return "", nil
  617. } else {
  618. return "", err
  619. }
  620. }
  621. return rolePurview.PurviewIds, nil
  622. }
  623. func GetRoleFuncPurview(roleID int64) (rolePurviews models.SgjUserRoleFuncPurview, err error) {
  624. err = readUserDb.Where("role_id = ?", roleID).First(&rolePurviews).Error
  625. return
  626. }
  627. func SaveRoleFuncPurview(purview *models.SgjUserRoleFuncPurview) (err error) {
  628. err = writeUserDb.Save(purview).Error
  629. return
  630. }
  631. func GetUserAllRole(org_id int64, admin_user_id int64) (role models.App_Role, err error) {
  632. err = readUserDb.Model(&models.App_Role{}).Where("status = 1 AND org_id = ? AND admin_user_id = ?", org_id, admin_user_id).First(&role).Error
  633. return
  634. }
  635. func GetAllFunctionPurview() (purview []models.SgjUserOperatePurview, err error) {
  636. err = readUserDb.Model(&models.SgjUserOperatePurview{}).Where("status = 1 ").Find(&purview).Error
  637. return
  638. }
  639. func FindErrorMsgByStr(str string) (string, error) {
  640. var purview models.SgjUserOperatePurview
  641. var err error
  642. err = readUserDb.Model(&models.SgjUserOperatePurview{}).Where("find_in_set(?, urlfor)", str).First(&purview).Error
  643. return purview.ErrorMsg, err
  644. }
  645. func GetNewAllOrgValidRoles(orgID int64) ([]*models.Role, error) {
  646. var roles []*models.Role
  647. db := readUserDb.Model(models.Org{})
  648. err := db.Where("org_id = ? AND status = 1", orgID).
  649. Order("number desc,ctime").
  650. Find(&roles).
  651. Error
  652. if err != nil {
  653. if err == gorm.ErrRecordNotFound {
  654. return make([]*models.Role, 0), nil
  655. } else {
  656. return nil, err
  657. }
  658. }
  659. for _, item := range roles {
  660. var total int64
  661. readUserDb.Model(&models.App_Role{}).Where("org_id = ? AND find_in_set(?, role_ids)", orgID, item.Id).Count(&total)
  662. item.StaffNumber = total
  663. }
  664. return roles, nil
  665. }
  666. func FindRoleRecordByRoleName(name string, org_id int64) (total int64) {
  667. readUserDb.Model(&models.Role{}).Where("status = 1 AND role_name = ? AND org_id = ?", name, org_id).Count(&total)
  668. return
  669. }