login_service.go 7.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. package service
  2. import (
  3. "XT_New/models"
  4. "XT_New/utils"
  5. "encoding/json"
  6. "github.com/jinzhu/gorm"
  7. "strconv"
  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 GetAdminUserPassWord(admin_user_id int64) (models.SgjUserAdmin, error) {
  167. userAdmin := models.SgjUserAdmin{}
  168. err = XTReadDB().Where("id = ?", admin_user_id).Find(&userAdmin).Error
  169. return userAdmin, err
  170. }
  171. func GetAppById(appID int64) (*models.OrgApp, error) {
  172. var app models.OrgApp
  173. err := readUserDb.Model(&models.OrgApp{}).Where("id = ?", appID).First(&app).Error
  174. if err != nil {
  175. if err == gorm.ErrRecordNotFound {
  176. return nil, nil
  177. } else {
  178. return nil, err
  179. }
  180. }
  181. return &app, nil
  182. }
  183. func GetOrgServeSubscibe(orgID int64) (*models.ServeSubscibe, error) {
  184. var model models.ServeSubscibe
  185. err := readUserDb.Model(&models.ServeSubscibe{}).Where("org_id = ? AND status = 1", orgID).First(&model).Error
  186. if err != nil {
  187. if err == gorm.ErrRecordNotFound {
  188. return nil, nil
  189. } else {
  190. return nil, err
  191. }
  192. }
  193. return &model, nil
  194. }
  195. func GetAppRoleById(id int64) (*models.App_Role, error) {
  196. var model models.App_Role
  197. err := readUserDb.Model(&models.App_Role{}).Where("id = ? AND status = 1", id).First(&model).Error
  198. if err != nil {
  199. if err == gorm.ErrRecordNotFound {
  200. return nil, nil
  201. } else {
  202. return nil, err
  203. }
  204. }
  205. return &model, nil
  206. }
  207. func IsMobileRegister(mobile string) bool {
  208. var count int
  209. err := readUserDb.
  210. Model(&models.AdminUser{}).
  211. Where("mobile = ?", mobile).
  212. Count(&count).
  213. Error
  214. if err != nil {
  215. utils.ErrorLog("判断手机号是否被注册时失败: %v", err)
  216. return true
  217. }
  218. return count > 0
  219. }
  220. func FindAppRoleById(id int64) (*models.App_Role, error) {
  221. var model models.App_Role
  222. redis := RedisClient()
  223. defer redis.Close()
  224. // cur_date := time.Now().Format("2006-01-02")
  225. key := "user_admin_role:" + strconv.FormatInt(id, 10)
  226. role_str, _ := redis.Get(key).Result()
  227. if len(role_str) == 0 { //没有到缓存数据,从数据库中获取数据,进行缓存到redis
  228. err := readUserDb.Model(&models.App_Role{}).Where("id = ? ", id).First(&model).Error
  229. if err != nil {
  230. if err == gorm.ErrRecordNotFound {
  231. return nil, nil
  232. } else {
  233. return nil, err
  234. }
  235. } else {
  236. if model.Id > 0 {
  237. //缓存数据
  238. role_json, err := json.Marshal(model)
  239. if err == nil {
  240. redis.Set(key, role_json, time.Second*60*60*18)
  241. }
  242. }
  243. return &model, nil
  244. }
  245. } else { //缓存数据了数据,将redis缓存的json字符串转为map
  246. if err := json.Unmarshal([]byte(role_str), &model); err == nil {
  247. } else {
  248. }
  249. return &model, nil
  250. }
  251. }