login_service.go 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. package service
  2. import (
  3. "XT_New/models"
  4. "XT_New/utils"
  5. "strconv"
  6. "github.com/jinzhu/gorm"
  7. "encoding/json"
  8. "time"
  9. )
  10. func IsSuperAdmin(mobile string) bool {
  11. var count int
  12. readUserDb.Model(&models.AdminUser{}).Where("mobile = ? AND is_super_admin = 1 AND status = 1", mobile).Count(&count)
  13. return count == 1
  14. }
  15. func GetValidAdminUserByMobileReturnErr(mobile string) (*models.AdminUser, error) {
  16. var user models.AdminUser
  17. err := readUserDb.Where("mobile = ? AND status = 1", mobile).First(&user).Error
  18. if err != nil {
  19. if err == gorm.ErrRecordNotFound {
  20. return nil, nil
  21. } else {
  22. return nil, err
  23. }
  24. }
  25. return &user, nil
  26. }
  27. func DidAdminUserCreateOrg(adminUserID int64) (bool, error) {
  28. var count int
  29. err := readUserDb.Model(&models.Org{}).Where("creator = ? AND status <> 0", adminUserID).Count(&count).Error
  30. return count > 0, err
  31. }
  32. func DidAdminUserOrgCreateApp(adminUserID int, appType int) (bool, error) {
  33. var count int
  34. db := readUserDb.Model(&models.OrgApp{}).Where("creator = ? AND status = 1 AND open_status = 1", adminUserID)
  35. if appType != 0 {
  36. db = db.Where("app_type = ?", appType)
  37. }
  38. err := db.Count(&count).Error
  39. return count > 0, err
  40. }
  41. func GetAdminUserLastLoginLog(adminUserID int, appType int) (*models.AdminUserLoginLog, error) {
  42. var record models.AdminUserLoginLog
  43. var err error
  44. if appType > 0 {
  45. err = readUserDb.Last(&record, "admin_user_id = ? AND operate_type <> 2 AND app_type = ?", adminUserID, appType).Error
  46. } else {
  47. err = readUserDb.Last(&record, "admin_user_id = ? AND operate_type <> 2", adminUserID).Error
  48. }
  49. if err == gorm.ErrRecordNotFound {
  50. return nil, nil
  51. }
  52. return &record, err
  53. }
  54. func GetAdminUserPrioritizedAppType(adminUserID int) (int8, error) {
  55. rows, err := readUserDb.Raw("SELECT app.app_type FROM sgj_user_org_app AS app, sgj_user_admin_role AS r WHERE r.admin_user_id = ? AND r.app_id = app.id AND app.status = 1 AND app.open_status = 1 AND r.status = 1 ORDER BY app.org_id ASC, app.app_type ASC LIMIT 1;", adminUserID).Rows()
  56. defer rows.Close()
  57. if err != nil {
  58. return 0, err
  59. } else {
  60. if rows.Next() {
  61. var appType int8
  62. rows.Scan(&appType)
  63. return appType, nil
  64. } else {
  65. return 0, nil
  66. }
  67. }
  68. }
  69. func GetAdminUserAllOrgWithUID(adminUserID int, isSuperAdmin bool) ([]*models.Org, error) {
  70. if isSuperAdmin {
  71. var org models.Org
  72. err := readUserDb.Preload("OrgGallery", "status = 1").Where("creator = ? AND status <> 0", adminUserID).First(&org).Error
  73. if err != nil {
  74. return nil, err
  75. }
  76. return []*models.Org{&org}, nil
  77. } else {
  78. rows, err := readUserDb.Raw("SELECT org.*, COUNT(DISTINCT org.id) FROM sgj_user_admin_role AS u_r, sgj_user_org AS org WHERE u_r.admin_user_id = ? AND u_r.org_id = org.id AND u_r.status = 1 AND org.status <> 0 GROUP BY org.id ORDER BY org.id;", adminUserID).Rows()
  79. defer rows.Close()
  80. if err != nil {
  81. return nil, err
  82. } else {
  83. orgs := make([]*models.Org, 0)
  84. for rows.Next() {
  85. var org models.Org
  86. if scanErr := readUserDb.Preload("OrgGallery", "status = 1").ScanRows(rows, &org); scanErr != nil {
  87. return nil, scanErr
  88. } else {
  89. orgs = append(orgs, &org)
  90. }
  91. }
  92. return orgs, nil
  93. }
  94. }
  95. }
  96. func GetAdminUserAllOrgApp(adminUserID int, orgID int) ([]*models.OrgApp, error) {
  97. rows, err := readUserDb.Raw("SELECT app.* from sgj_user_admin_role AS u_r, sgj_user_org_app AS app WHERE u_r.admin_user_id = ? AND u_r.org_id = ? AND u_r.app_id = app.id AND u_r.status = 1 AND app.status = 1 ORDER BY app_type ASC;", adminUserID, orgID).Rows()
  98. defer rows.Close()
  99. if err != nil {
  100. return nil, err
  101. } else {
  102. apps := make([]*models.OrgApp, 0)
  103. for rows.Next() {
  104. var app models.OrgApp
  105. if scanErr := readUserDb.ScanRows(rows, &app); scanErr != nil {
  106. return nil, scanErr
  107. } else {
  108. apps = append(apps, &app)
  109. }
  110. }
  111. return apps, nil
  112. }
  113. }
  114. func InsertLoginLog(loginLog *models.AdminUserLoginLog) error {
  115. tx := writeUserDb.Begin()
  116. if err := tx.Create(loginLog).Error; err != nil {
  117. tx.Rollback()
  118. return err
  119. }
  120. return tx.Commit().Error
  121. }
  122. //func GetAppRole(adminUserID int, orgID int, appID int) (*models.App_Role, error) {
  123. // var appRole models.App_Role
  124. // err := readUserDb.Where("admin_user_id = ? AND org_id = ? AND app_id = ? AND status = 1", adminUserID, orgID, appID).First(&appRole).Error
  125. // if err != nil {
  126. // return nil, err
  127. // }
  128. // return &appRole, nil
  129. //}
  130. // 获取最近被创建的血透系统管理员角色(AppType为3)
  131. func GetLastXTAdminRole(adminUserID int64, appType int) (*models.App_Role, error) {
  132. var appRole models.App_Role
  133. // select a_r.* from sgj_user_admin_role as a_r
  134. // join sgj_user_admin as a on a.id = a_r.admin_user_id
  135. // join sgj_user_org_app as app on app.id = a_r.app_id and app.status = 1 and app.app_type = 3
  136. // where a_r.status = 1 and a_r.admin_user_id = 380
  137. err := readUserDb.Table("sgj_user_admin_role").
  138. Select("sgj_user_admin_role.*").
  139. Joins("join sgj_user_admin as a on a.id = sgj_user_admin_role.admin_user_id").
  140. Joins("join sgj_user_org_app as app on app.id = sgj_user_admin_role.app_id and app.status = 1 and app.app_type = ?", appType).
  141. Where("sgj_user_admin_role.status = 1 and sgj_user_admin_role.admin_user_id = ?", adminUserID).
  142. Order("sgj_user_admin_role.id desc").
  143. First(&appRole).
  144. Error
  145. if err != nil {
  146. if err == gorm.ErrRecordNotFound {
  147. return nil, nil
  148. } else {
  149. return nil, err
  150. }
  151. }
  152. return &appRole, nil
  153. }
  154. func GetOrgById(orgID int64) (*models.Org, error) {
  155. var org models.Org
  156. err := readUserDb.Model(&models.Org{}).Where("id = ?", orgID).First(&org).Error
  157. if err != nil {
  158. if err == gorm.ErrRecordNotFound {
  159. return nil, nil
  160. } else {
  161. return nil, err
  162. }
  163. }
  164. return &org, nil
  165. }
  166. func GetAppById(appID int64) (*models.OrgApp, error) {
  167. var app models.OrgApp
  168. err := readUserDb.Model(&models.OrgApp{}).Where("id = ?", appID).First(&app).Error
  169. if err != nil {
  170. if err == gorm.ErrRecordNotFound {
  171. return nil, nil
  172. } else {
  173. return nil, err
  174. }
  175. }
  176. return &app, nil
  177. }
  178. func GetOrgServeSubscibe(orgID int64) (*models.ServeSubscibe, error) {
  179. var model models.ServeSubscibe
  180. err := readUserDb.Model(&models.ServeSubscibe{}).Where("org_id = ? AND status = 1", orgID).First(&model).Error
  181. if err != nil {
  182. if err == gorm.ErrRecordNotFound {
  183. return nil, nil
  184. } else {
  185. return nil, err
  186. }
  187. }
  188. return &model, nil
  189. }
  190. //
  191. func GetAppRoleById(id int64) (*models.App_Role, error) {
  192. var model models.App_Role
  193. err := readUserDb.Model(&models.App_Role{}).Where("id = ? AND status = 1", id).First(&model).Error
  194. if err != nil {
  195. if err == gorm.ErrRecordNotFound {
  196. return nil, nil
  197. } else {
  198. return nil, err
  199. }
  200. }
  201. return &model, nil
  202. }
  203. func IsMobileRegister(mobile string) bool {
  204. var count int
  205. err := readUserDb.
  206. Model(&models.AdminUser{}).
  207. Where("mobile = ?", mobile).
  208. Count(&count).
  209. Error
  210. if err != nil {
  211. utils.ErrorLog("判断手机号是否被注册时失败: %v", err)
  212. return true
  213. }
  214. return count > 0
  215. }
  216. func FindAppRoleById(id int64) (*models.App_Role, error) {
  217. var model models.App_Role
  218. redis := RedisClient()
  219. defer redis.Close()
  220. // cur_date := time.Now().Format("2006-01-02")
  221. key := "user_admin_role:" + strconv.FormatInt(id, 10)
  222. role_str, _ := redis.Get(key).Result()
  223. if len(role_str) == 0 { //没有到缓存数据,从数据库中获取数据,进行缓存到redis
  224. err := readUserDb.Model(&models.App_Role{}).Where("id = ? ", id).First(&model).Error
  225. if err != nil {
  226. if err == gorm.ErrRecordNotFound {
  227. return nil, nil
  228. } else {
  229. return nil, err
  230. }
  231. } else {
  232. if model.Id > 0 {
  233. //缓存数据
  234. role_json, err := json.Marshal(model)
  235. if err == nil {
  236. redis.Set(key, role_json, time.Second*60*60*18)
  237. }
  238. }
  239. return &model, nil
  240. }
  241. } else { //缓存数据了数据,将redis缓存的json字符串转为map
  242. if err := json.Unmarshal([]byte(role_str), &model); err == nil {
  243. } else {
  244. }
  245. return &model, nil
  246. }
  247. }