central_control_conf.go 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. package task
  2. import (
  3. "errors"
  4. "fmt"
  5. "gorm.io/gorm"
  6. "log-server/global"
  7. "log-server/model/common/request"
  8. "log-server/model/task"
  9. )
  10. type CentralControlService struct {
  11. }
  12. //创建配置记录
  13. func (s *CentralControlService) CreateCentralControlConf(conf task.CentralControlConf) (err error) {
  14. //查找是否有这个taskId的记录
  15. var entity task.CentralControlConf
  16. err = global.GVA_DB.Model(&task.CentralControlConf{}).Where("task_id", conf.TaskId).First(&entity).Error
  17. //如果有,报错返回
  18. if !errors.Is(err, gorm.ErrRecordNotFound) {
  19. return errors.New("已有配置记录,请勿重复添加")
  20. }
  21. //如果没有,直接创建
  22. return global.GVA_DB.Model(&task.CentralControlConf{}).Omit("create_time", "update_time").Create(&conf).Error
  23. }
  24. //删除中控配置记录
  25. func (s *CentralControlService) DeleteCentralControlConf(conf task.CentralControlConf) (err error) {
  26. var entity task.CentralControlConf
  27. err = global.GVA_DB.Model(&task.CentralControlConf{}).Where("id", conf.Id).First(&entity).Error
  28. if errors.Is(err, gorm.ErrRecordNotFound) {
  29. return errors.New("此配置不存在,无法删除")
  30. }
  31. return global.GVA_DB.Model(&task.CentralControlConf{}).Delete(&entity).Error
  32. }
  33. //批量删除中控配置记录
  34. func (s *CentralControlService) DeleteCentralControlConfByIds(ids []int) (err error) {
  35. err = global.GVA_DB.Model(&task.CentralControlConf{}).Delete("id in ?", ids).Error
  36. return err
  37. }
  38. //更新中控配置列表
  39. func (s *CentralControlService) UpdateCentralControlConf(conf task.CentralControlConf) (err error) {
  40. var entity task.CentralControlConf
  41. err = global.GVA_DB.Model(&task.CentralControlConf{}).Where("task_id = ? and id != ?", conf.TaskId, conf.Id).First(&entity).Error
  42. if !errors.Is(err, gorm.ErrRecordNotFound) {
  43. return errors.New("已存在相同的task_id,无法更改")
  44. }
  45. return global.GVA_DB.Model(&task.CentralControlConf{}).Where("id", conf.Id).Save(&conf).Error
  46. }
  47. //通过id获取单条配置
  48. func (s *CentralControlService) GetCentralControlConfById(id int) (conf task.CentralControlConf, err error) {
  49. err = global.GVA_DB.Model(&task.CentralControlConf{}).Where("id", id).First(&conf).Error
  50. return conf, err
  51. }
  52. //获取配置列表
  53. func (s *CentralControlService) GetCentralControlConfList(conf task.CentralControlConfList, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
  54. //获取limit和offset
  55. limit := info.PageSize
  56. offset := (info.Page - 1) * info.PageSize
  57. db := global.GVA_DB.Model(&task.CentralControlConf{})
  58. var confList []task.CentralControlConfList
  59. db = db.Select("central_control_conf.*, game_task.user")
  60. db = db.Joins("left join game_task on central_control_conf.task_id = game_task.task_id")
  61. //先条件过滤
  62. if conf.TaskId != 0 {
  63. //条件过滤记录数
  64. db = db.Where("central_control_conf.task_id", conf.TaskId)
  65. }
  66. if conf.User != "" {
  67. db = db.Where("game_task.user LIKE ?", "%"+conf.User+"%")
  68. }
  69. err = db.Count(&total).Error
  70. if err != nil {
  71. //如果出错直接返回
  72. return confList, total, err
  73. } else {
  74. //先分页再排序
  75. db = db.Limit(limit).Offset(offset)
  76. if order != "" {
  77. //传入排序字段,进行排序
  78. //定义orderStr存储完整的排序字段
  79. var orderStr string
  80. //为了避免sql注入,自己创建数组匹配
  81. orderMap := make(map[string]bool, 3)
  82. orderMap["task_id"] = true
  83. orderMap["create_time"] = true
  84. orderMap["update_time"] = true
  85. if orderMap[order] {
  86. if desc {
  87. orderStr = "central_control_conf." + order + " desc"
  88. } else {
  89. orderStr = order
  90. }
  91. } else {
  92. //传入非法字段,不能排序
  93. err = fmt.Errorf("传入非法字段 %v", order)
  94. return confList, total, err
  95. }
  96. //排序
  97. err = db.Order(orderStr).Find(&confList).Error
  98. } else {
  99. //没有传入排序字段,默认按照类型名称降序排序
  100. err = db.Order("central_control_conf.id desc").Find(&confList).Error
  101. }
  102. }
  103. //是因为只有切片能排序,model没办法排序;还是说为了将数组返回至前端才find扫描至切片呢?
  104. return confList, total, err
  105. }
  106. //获取云配置列表
  107. func (s *CentralControlService) GetCloudConfList() (dataList []task.CentralControlConf, err error) {
  108. //获取所有的中控配置列表
  109. err = global.GVA_DB.Model(&task.CentralControlConf{}).Find(&dataList).Error
  110. return
  111. }