| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- package typeManage
- import (
- "context"
- "encoding/json"
- "errors"
- "fmt"
- "gorm.io/gorm"
- "log-server/global"
- "log-server/model/common/request"
- "log-server/model/typeManage"
- "strconv"
- )
- type GameChannelService struct {
- }
- //添加游戏渠道
- func (g *GameChannelService) CreateGameChannel(channel typeManage.GameChannel) (err error) {
- if !errors.Is(global.GVA_DB.Table("game_channel").Where("channel_name = ?",channel.ChannelName).First(&typeManage.GameChannel{}).Error, gorm.ErrRecordNotFound) {
- return errors.New("已存在相同渠道,请勿重复添加")
- }
- //添加数据库记录
- err = global.GVA_DB.Table("game_channel").Omit("create_time", "update_time").Create(&channel).Error
- //更新redis记录
- UpdateChannelRedis(channel)
- return
- }
- //删除游戏渠道
- func (g *GameChannelService) DeleteGameChannel(channel typeManage.GameChannel) (err error) {
- var entity typeManage.GameChannel
- err = global.GVA_DB.Table("game_channel").Where("id = ?", channel.Id).First(&entity).Error
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return err
- }
- //先删除数据库记录
- err = global.GVA_DB.Table("game_channel").Delete(&entity).Error
- //删除redis
- DeleteChannelRedis(entity)
- return
- }
- //批量删除
- func (g *GameChannelService) DeleteGameChannelsByIds(ids request.IdsReq) (err error) {
- err = global.GVA_DB.Table("game_channel").Delete(&[]typeManage.GameChannel{}, "id in ?", ids.Ids).Error
- BulkDeletionChannel(ids.Ids)
- return err
- }
- //更改渠道信息
- func (g *GameChannelService) UpdateGameChannel(channel typeManage.GameChannel) (err error) {
- if !errors.Is(global.GVA_DB.Table("game_channel").Where("channel_name = ? and id != ?", channel.ChannelName, channel.Id).First(&typeManage.GameChannel{}).Error,gorm.ErrRecordNotFound) {
- return errors.New("已存在相同渠道,无法更新")
- }
- //进行数据更新
- err = global.GVA_DB.Table("game_channel").Updates(&channel).Error
- //更新redis记录
- UpdateChannelRedis(channel)
- return
- }
- //通过id查询
- func (g *GameChannelService) GetGameChannelById(id int) (channel typeManage.GameChannel, err error) {
- err = global.GVA_DB.Table("game_channel").Where("id = ?", id).First(&channel).Error
- //更新redis
- UpdateChannelRedis(channel)
- return
- }
- //条件查询
- func (g *GameChannelService) GetGameChannelInfoList(channel typeManage.GameChannel, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
- limit := info.PageSize
- offset := (info.Page - 1) * info.PageSize
- //先更新游戏数量的值
- 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);")
- //对结构体进行操作
- db := global.GVA_DB.Table("game_channel").Model(&typeManage.GameChannel{})
- var channelList []typeManage.GameChannel
- if channel.ChannelName != "" {
- db = db.Where("channel_name like ?", "%" + channel.ChannelName + "%")
- }
- //查询是否有错误
- err = db.Count(&total).Error
- if err != nil {
- return channelList, total, err
- } else {
- //如果没有出错,先分页,再排序
- db = db.Limit(limit).Offset(offset)
- //对字段进行排序,要求是页面显示出来的所有字段,否则默认按照厂商名称来进行排序
- //首先新建一个集合,用来防止恶意注入
- if order != "" {
- var orderStr string
- orderMap := make(map[string]bool, 6)
- orderMap["channel_name"] = true
- orderMap["channel_desc"] = true
- orderMap["display_sequence"] = true
- orderMap["game_counts"] = true
- orderMap["create_time"] = true
- orderMap["update_time"] = true
- //传入的排序字段在合法范围内
- if orderMap[order] {
- if desc {
- orderStr = order + " desc"
- } else {
- orderStr = order
- }
- } else {
- //传入排序字段非法
- err = fmt.Errorf("传入非法字段 %v", order)
- return channelList, total, err
- }
- //按照给定的排序字段以及排序规则来进行排序
- err = db.Order(orderStr).Find(&channelList).Error
- } else {
- //没有传入排序字段,直接按照厂商名称默认排序
- err = db.Order("channel_name").Find(&channelList).Error
- }
- }
- return channelList, total, err
- }
- //更改redis记录
- func UpdateChannelRedis(channel typeManage.GameChannel) {
- ctx := context.Background()
- key := "typeManage:gameChannel"
- field := strconv.FormatInt(channel.Id, 10)
- //序列化
- datas, _ := json.Marshal(channel)
- global.GVA_REDIS.HSet(ctx, key, field, datas)
- }
- //删除redis记录
- func DeleteChannelRedis(channel typeManage.GameChannel) {
- //删除redis记录
- ctx := context.Background()
- key := "typeManage:gameChannel"
- field := strconv.FormatInt(channel.Id, 10)
- global.GVA_REDIS.HDel(ctx, key, field)
- }
- //批量删除命令
- func BulkDeletionChannel(ids []int) {
- //批量删除redis
- ctx := context.Background()
- key := "typeManage:gameChannel"
- for i := range ids{
- delKey := strconv.Itoa(ids[i])
- global.GVA_REDIS.HDel(ctx, key, delKey)
- }
- }
|