tm_loginType.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. package typeManage
  2. import (
  3. "errors"
  4. "fmt"
  5. "gorm.io/gorm"
  6. "log-server/global"
  7. "log-server/model/common/request"
  8. "log-server/model/typeManage"
  9. )
  10. type LoginTypeService struct {}
  11. //创建登录类型
  12. func (l *LoginTypeService) CreateLoginType(login typeManage.LoginType) (err error) {
  13. //查找是否有同名登录名称
  14. err = global.GVA_DB.Table("login_type").Where("login_name = ?", login.LoginName).First(&typeManage.LoginType{}).Error
  15. if !errors.Is(err, gorm.ErrRecordNotFound){
  16. //找到同名登录名称
  17. return errors.New("已存在相同登录方式,请勿重复添加")
  18. }
  19. return global.GVA_DB.Table("login_type").Omit("create_time", "update_time").Create(&login).Error
  20. }
  21. //单个删除
  22. func (l *LoginTypeService) DeleteLoginType(login typeManage.LoginType) (err error) {
  23. //单个删除的时候实例化一个实体
  24. //为什么实例化一个实体,推测是以求保险
  25. //先用这个实体接收合适的id值所对应的记录,再直接删除这个实体,防止误操作
  26. var entity typeManage.LoginType
  27. //查询是否有这条记录存在
  28. err = global.GVA_DB.Table("login_type").Where("id = ?", login.Id).First(&entity).Error
  29. if errors.Is(err, gorm.ErrRecordNotFound) {
  30. return err
  31. }
  32. return global.GVA_DB.Table("login_type").Delete(&entity).Error
  33. }
  34. //批量删除
  35. func (l *LoginTypeService) DeleteLoginTypesByIds(ids request.IdsReq) (err error) {
  36. err = global.GVA_DB.Table("login_type").Delete(&[]typeManage.LoginType{}, "id in ?", ids.Ids).Error
  37. return err
  38. }
  39. //更改登录类型
  40. func (l *LoginTypeService) UpdateLoginType(login typeManage.LoginType) (err error) {
  41. err = global.GVA_DB.Table("login_type").Where("id != ? and login_name = ?", login.Id, login.LoginName).First(&typeManage.LoginType{}).Error
  42. if !errors.Is(err, gorm.ErrRecordNotFound) {
  43. return errors.New("已存在同名登录方式,修改失败")
  44. }
  45. return global.GVA_DB.Table("login_type").Updates(&login).Error
  46. }
  47. //通过id查询单个登录类型
  48. func (l *LoginTypeService) GetLoginTypeById(id int) (loginType typeManage.LoginType, err error) {
  49. err = global.GVA_DB.Table("login_type").Where("id = ?", id).First(&loginType).Error
  50. return
  51. }
  52. //条件查询
  53. func (l *LoginTypeService) GetLoginType(loginType typeManage.LoginType, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
  54. //先求offset和limit
  55. limit := info.PageSize
  56. offset := (info.Page - 1) * info.PageSize
  57. //先更新游戏数量的值
  58. global.GVA_DB.Exec("update `login_type` lt set game_counts = (SELECT COUNT(gl.login_type) FROM game_list gl WHERE lt.login_name = gl.login_type);")
  59. //确定操作的model
  60. db := global.GVA_DB.Table("login_type").Model(&typeManage.LoginType{})
  61. var loginList []typeManage.LoginType
  62. //先过滤(查询条件)再排序
  63. if loginType.LoginName != "" {
  64. db.Where("login_name like ?", "%"+loginType.LoginName+"%")
  65. }
  66. //记录总数
  67. if err = db.Count(&total).Error;err != nil {
  68. //没有复合条件,直接返回
  69. return loginList, total, err
  70. } else {
  71. //如果有符合条件的,先分页,再排序
  72. db.Limit(limit).Offset(offset)
  73. if order != "" {
  74. //传入排序字段,为避免sql注入,需要一个数组
  75. var orderStr string
  76. orderMap := make(map[string]bool, 5)
  77. orderMap["login_name"] = true
  78. orderMap["display_sequence"] = true
  79. orderMap["game_counts"] = true
  80. orderMap["create_time"] = true
  81. orderMap["update_time"] = true
  82. //传入字符串在合法范围内
  83. if orderMap[order] {
  84. if desc {
  85. orderStr = order + " desc"
  86. } else {
  87. orderStr = order
  88. }
  89. } else {
  90. //传入排序字段非法
  91. err = fmt.Errorf("传入非法字段 %v", order)
  92. return loginList, total, err
  93. }
  94. err = db.Order(orderStr).Find(&loginList).Error
  95. } else {
  96. //未传入排序字段,默认按登录名称降序
  97. err = db.Order("login_name desc").Find(&loginList).Error
  98. }
  99. }
  100. return loginList, total, err
  101. }