role_service.go 23KB

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