tm_gameChannel.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. package typeManage
  2. import (
  3. "context"
  4. "encoding/json"
  5. "errors"
  6. "fmt"
  7. "gorm.io/gorm"
  8. "log-server/global"
  9. "log-server/model/common/request"
  10. "log-server/model/typeManage"
  11. "strconv"
  12. )
  13. type GameChannelService struct {
  14. }
  15. //添加游戏渠道
  16. func (g *GameChannelService) CreateGameChannel(channel typeManage.GameChannel) (err error) {
  17. if !errors.Is(global.GVA_DB.Table("game_channel").Where("channel_name = ?",channel.ChannelName).First(&typeManage.GameChannel{}).Error, gorm.ErrRecordNotFound) {
  18. return errors.New("已存在相同渠道,请勿重复添加")
  19. }
  20. //添加数据库记录
  21. err = global.GVA_DB.Table("game_channel").Omit("create_time", "update_time").Create(&channel).Error
  22. //更新redis记录
  23. UpdateChannelRedis(channel)
  24. return
  25. }
  26. //删除游戏渠道
  27. func (g *GameChannelService) DeleteGameChannel(channel typeManage.GameChannel) (err error) {
  28. var entity typeManage.GameChannel
  29. err = global.GVA_DB.Table("game_channel").Where("id = ?", channel.Id).First(&entity).Error
  30. if errors.Is(err, gorm.ErrRecordNotFound) {
  31. return err
  32. }
  33. //先删除数据库记录
  34. err = global.GVA_DB.Table("game_channel").Delete(&entity).Error
  35. //删除redis
  36. DeleteChannelRedis(entity)
  37. return
  38. }
  39. //批量删除
  40. func (g *GameChannelService) DeleteGameChannelsByIds(ids request.IdsReq) (err error) {
  41. err = global.GVA_DB.Table("game_channel").Delete(&[]typeManage.GameChannel{}, "id in ?", ids.Ids).Error
  42. BulkDeletionChannel(ids.Ids)
  43. return err
  44. }
  45. //更改渠道信息
  46. func (g *GameChannelService) UpdateGameChannel(channel typeManage.GameChannel) (err error) {
  47. if !errors.Is(global.GVA_DB.Table("game_channel").Where("channel_name = ? and id != ?", channel.ChannelName, channel.Id).First(&typeManage.GameChannel{}).Error,gorm.ErrRecordNotFound) {
  48. return errors.New("已存在相同渠道,无法更新")
  49. }
  50. //进行数据更新
  51. err = global.GVA_DB.Table("game_channel").Updates(&channel).Error
  52. //更新redis记录
  53. UpdateChannelRedis(channel)
  54. return
  55. }
  56. //通过id查询
  57. func (g *GameChannelService) GetGameChannelById(id int) (channel typeManage.GameChannel, err error) {
  58. err = global.GVA_DB.Table("game_channel").Where("id = ?", id).First(&channel).Error
  59. //更新redis
  60. UpdateChannelRedis(channel)
  61. return
  62. }
  63. //条件查询
  64. func (g *GameChannelService) GetGameChannelInfoList(channel typeManage.GameChannel, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
  65. limit := info.PageSize
  66. offset := (info.Page - 1) * info.PageSize
  67. //先更新游戏数量的值
  68. global.GVA_DB.Exec("update `game_channel` gc set game_counts = (SELECT COUNT(gl.game_port) FROM game_list gl WHERE gc.channel_name = gl.game_port);")
  69. //对结构体进行操作
  70. db := global.GVA_DB.Table("game_channel").Model(&typeManage.GameChannel{})
  71. var channelList []typeManage.GameChannel
  72. if channel.ChannelName != "" {
  73. db = db.Where("channel_name like ?", "%" + channel.ChannelName + "%")
  74. }
  75. //查询是否有错误
  76. err = db.Count(&total).Error
  77. if err != nil {
  78. return channelList, total, err
  79. } else {
  80. //如果没有出错,先分页,再排序
  81. db = db.Limit(limit).Offset(offset)
  82. //对字段进行排序,要求是页面显示出来的所有字段,否则默认按照厂商名称来进行排序
  83. //首先新建一个集合,用来防止恶意注入
  84. if order != "" {
  85. var orderStr string
  86. orderMap := make(map[string]bool, 6)
  87. orderMap["channel_name"] = true
  88. orderMap["channel_desc"] = true
  89. orderMap["display_sequence"] = true
  90. orderMap["game_counts"] = true
  91. orderMap["create_time"] = true
  92. orderMap["update_time"] = true
  93. //传入的排序字段在合法范围内
  94. if orderMap[order] {
  95. if desc {
  96. orderStr = order + " desc"
  97. } else {
  98. orderStr = order
  99. }
  100. } else {
  101. //传入排序字段非法
  102. err = fmt.Errorf("传入非法字段 %v", order)
  103. return channelList, total, err
  104. }
  105. //按照给定的排序字段以及排序规则来进行排序
  106. err = db.Order(orderStr).Find(&channelList).Error
  107. } else {
  108. //没有传入排序字段,直接按照厂商名称默认排序
  109. err = db.Order("channel_name").Find(&channelList).Error
  110. }
  111. }
  112. return channelList, total, err
  113. }
  114. //更改redis记录
  115. func UpdateChannelRedis(channel typeManage.GameChannel) {
  116. ctx := context.Background()
  117. key := "typeManage:gameChannel"
  118. field := strconv.FormatInt(channel.Id, 10)
  119. //序列化
  120. datas, _ := json.Marshal(channel)
  121. global.GVA_REDIS.HSet(ctx, key, field, datas)
  122. }
  123. //删除redis记录
  124. func DeleteChannelRedis(channel typeManage.GameChannel) {
  125. //删除redis记录
  126. ctx := context.Background()
  127. key := "typeManage:gameChannel"
  128. field := strconv.FormatInt(channel.Id, 10)
  129. global.GVA_REDIS.HDel(ctx, key, field)
  130. }
  131. //批量删除命令
  132. func BulkDeletionChannel(ids []int) {
  133. //批量删除redis
  134. ctx := context.Background()
  135. key := "typeManage:gameChannel"
  136. for i := range ids{
  137. delKey := strconv.Itoa(ids[i])
  138. global.GVA_REDIS.HDel(ctx, key, delKey)
  139. }
  140. }