tm_gameChannel.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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 GameChannelService struct {
  11. }
  12. //添加游戏渠道
  13. func (g *GameChannelService) CreateGameChannel(channel typeManage.GameChannel) (err error) {
  14. if !errors.Is(global.GVA_DB.Table("game_channel").Where("channel_name = ?",channel.ChannelName).First(&typeManage.GameChannel{}).Error, gorm.ErrRecordNotFound) {
  15. return errors.New("已存在相同渠道,请勿重复添加")
  16. }
  17. return global.GVA_DB.Table("game_channel").Omit("create_time", "update_time").Create(&channel).Error
  18. }
  19. //删除游戏渠道
  20. func (g *GameChannelService) DeleteGameChannel(channel typeManage.GameChannel) (err error) {
  21. var entity typeManage.GameChannel
  22. err = global.GVA_DB.Table("game_channel").Where("id = ?", channel.Id).First(&entity).Error
  23. if errors.Is(err, gorm.ErrRecordNotFound) {
  24. return err
  25. }
  26. return global.GVA_DB.Table("game_channel").Delete(&entity).Error
  27. }
  28. //批量删除
  29. func (g *GameChannelService) DeleteGameChannelsByIds(ids request.IdsReq) (err error) {
  30. err = global.GVA_DB.Table("game_channel").Delete(&[]typeManage.GameChannel{}, "id in ?", ids.Ids).Error
  31. return err
  32. }
  33. //更改渠道信息
  34. func (g *GameChannelService) UpdateGameChannel(channel typeManage.GameChannel) (err error) {
  35. if !errors.Is(global.GVA_DB.Table("game_channel").Where("channel_name = ? and id != ?", channel.ChannelName, channel.Id).First(&typeManage.GameChannel{}).Error,gorm.ErrRecordNotFound) {
  36. return errors.New("已存在相同渠道,无法更新")
  37. }
  38. return global.GVA_DB.Table("game_channel").Updates(&channel).Error
  39. }
  40. //通过id查询
  41. func (g *GameChannelService) GetGameChannelById(id int) (channel typeManage.GameChannel, err error) {
  42. err = global.GVA_DB.Table("game_channel").Where("id = ?", id).First(&channel).Error
  43. return
  44. }
  45. //条件查询
  46. func (g *GameChannelService) GetGameChannelInfoList(channel typeManage.GameChannel, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
  47. limit := info.PageSize
  48. offset := (info.Page - 1) * info.PageSize
  49. //先更新游戏数量的值
  50. 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);")
  51. //对结构体进行操作
  52. db := global.GVA_DB.Table("game_channel").Model(&typeManage.GameChannel{})
  53. var channelList []typeManage.GameChannel
  54. if channel.ChannelName != "" {
  55. db = db.Where("channel_name like ?", "%" + channel.ChannelName + "%")
  56. }
  57. //查询是否有错误
  58. err = db.Count(&total).Error
  59. if err != nil {
  60. return channelList, total, err
  61. } else {
  62. //如果没有出错,先分页,再排序
  63. db = db.Limit(limit).Offset(offset)
  64. //对字段进行排序,要求是页面显示出来的所有字段,否则默认按照厂商名称来进行排序
  65. //首先新建一个集合,用来防止恶意注入
  66. if order != "" {
  67. var orderStr string
  68. orderMap := make(map[string]bool, 6)
  69. orderMap["channel_name"] = true
  70. orderMap["channel_desc"] = true
  71. orderMap["display_sequence"] = true
  72. orderMap["game_counts"] = true
  73. orderMap["create_time"] = true
  74. orderMap["update_time"] = true
  75. //传入的排序字段在合法范围内
  76. if orderMap[order] {
  77. if desc {
  78. orderStr = order + " desc"
  79. } else {
  80. orderStr = order
  81. }
  82. } else {
  83. //传入排序字段非法
  84. err = fmt.Errorf("传入非法字段 %v", order)
  85. return channelList, total, err
  86. }
  87. //按照给定的排序字段以及排序规则来进行排序
  88. err = db.Order(orderStr).Find(&channelList).Error
  89. } else {
  90. //没有传入排序字段,直接按照厂商名称默认排序
  91. err = db.Order("channel_name").Find(&channelList).Error
  92. }
  93. }
  94. return channelList, total, err
  95. }