computer_task.go 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package newCentralControl
  2. import (
  3. "errors"
  4. "fmt"
  5. "gorm.io/gorm"
  6. "log-server/global"
  7. "log-server/model/common/request"
  8. "log-server/model/newCentralControl"
  9. newCentralControlRequest "log-server/model/newCentralControl/request"
  10. )
  11. type ComputerTaskService struct {
  12. }
  13. //创建电脑任务
  14. func (s *ComputerTaskService) CreateComputerTask(task newCentralControl.ComputerTask) (err error) {
  15. var entity newCentralControl.ComputerTask
  16. //查找此电脑编号和此配置id是否存在
  17. err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("pc_code = ? and conf_id = ?", task.PcCode, task.ConfId).First(&entity).Error
  18. if !errors.Is(err, gorm.ErrRecordNotFound) {
  19. return errors.New("此电脑已添加此任务配置,请勿重复添加")
  20. }
  21. return global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Omit("create_time", "update_time").Create(&task).Error
  22. }
  23. //删除电脑任务
  24. func (s *ComputerTaskService) DeleteComputerTask(task newCentralControl.ComputerTask) (err error) {
  25. var entity newCentralControl.ComputerTask
  26. err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", task.Id).First(&entity).Error
  27. if errors.Is(err, gorm.ErrRecordNotFound) {
  28. return errors.New("此配置不存在,无法删除")
  29. }
  30. return global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Delete(&entity).Error
  31. }
  32. //更新电脑任务
  33. func (s *ComputerTaskService) UpdateComputerTask(task newCentralControl.ComputerTask) (err error) {
  34. var entity newCentralControl.ComputerTask
  35. err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id != ? and pc_code = ? and task_id = ?", task.Id, task.PcCode, task.TaskId).First(&entity).Error
  36. if !errors.Is(err, gorm.ErrRecordNotFound){
  37. return errors.New("已存在相同的任务,无法更改")
  38. }
  39. return global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", task.Id).Omit("create_time", "update_time").Updates(&task).Error
  40. }
  41. //单个获取电脑任务
  42. func (s *ComputerTaskService) GetComputerTaskById(id int) (task newCentralControl.ComputerTask, err error) {
  43. err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", id).First(&task).Error
  44. return task, err
  45. }
  46. //更新任务状态
  47. func (s *ComputerTaskService) UpdateTaskStatus (req newCentralControlRequest.UpdateTaskStatus) (err error) {
  48. var entity newCentralControl.ComputerTask
  49. err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", req.Id).First(&entity).Error
  50. if errors.Is(err, gorm.ErrRecordNotFound) {
  51. return errors.New("请传入正确的Id")
  52. }
  53. //更新状态
  54. return global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", req.Id).Update("status", req.Status).Error
  55. }
  56. //中控获取下发电脑任务
  57. func (s *ComputerTaskService) GetRunningTasks(pcCode string) (err error, confList []newCentralControl.GameConf) {
  58. //根据电脑编号查询出配置id,根据配置id查询出具体配置
  59. var taskList []newCentralControl.ComputerTask
  60. var confIdList []int
  61. err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("pc_code = ? and status = 1", pcCode).Find(&taskList).Error
  62. //fmt.Println(taskList)
  63. if err != nil {
  64. return err,confList
  65. }
  66. for k,_ := range taskList {
  67. confIdList = append(confIdList, taskList[k].ConfId)
  68. }
  69. //fmt.Println("hahah")
  70. //fmt.Println(confIdList)
  71. err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("id in ?", confIdList).Find(&confList).Error
  72. return err,confList
  73. }
  74. //上传电脑信息
  75. func (s *ComputerTaskService) UploadPcInfo(pcCode string, pcName string, user string) (err error){
  76. var info newCentralControl.PcInfo
  77. var entity newCentralControl.PcInfo
  78. info.PcCode = pcCode
  79. info.PcName = pcName
  80. info.User = user
  81. err = global.GVA_DB.Model(&newCentralControl.PcInfo{}).Where("pc_code = ?", pcCode).First(&entity).Error
  82. if !errors.Is(err, gorm.ErrRecordNotFound) {
  83. return errors.New("此电脑编号已存在,请勿重复添加")
  84. }
  85. return global.GVA_DB.Model(&newCentralControl.PcInfo{}).Omit("create_time", "update_time").Create(&info).Error
  86. }
  87. //获取电脑任务列表
  88. func (s *ComputerTaskService) GetComputerTaskList(task newCentralControl.ComputerTask, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
  89. //获取limit和offset
  90. limit := info.PageSize
  91. offset := (info.Page - 1) * info.PageSize
  92. db := global.GVA_DB.Model(&newCentralControl.ComputerTask{})
  93. var taskList []newCentralControl.ComputerTask
  94. //先条件过滤
  95. if task.TaskId != 0 {
  96. //条件过滤记录数
  97. db = db.Where("task_id", task.TaskId)
  98. }
  99. err = db.Count(&total).Error
  100. if err != nil{
  101. //如果出错直接返回
  102. return taskList, total, err
  103. } else {
  104. //先分页再排序
  105. db = db.Limit(limit).Offset(offset)
  106. if order != ""{
  107. //传入排序字段,进行排序
  108. //定义orderStr存储完整的排序字段
  109. var orderStr string
  110. //为了避免sql注入,自己创建数组匹配
  111. orderMap := make(map[string]bool, 3)
  112. orderMap["task_id"] = true
  113. orderMap["create_time"] = true
  114. orderMap["update_time"] = true
  115. if orderMap[order] {
  116. if desc {
  117. orderStr = order + " desc"
  118. } else {
  119. orderStr = order
  120. }
  121. } else {
  122. //传入非法字段,不能排序
  123. err = fmt.Errorf("传入非法字段 %v", order)
  124. return taskList, total, err
  125. }
  126. //排序
  127. err = db.Order(orderStr).Find(&taskList).Error
  128. } else {
  129. //没有传入排序字段,默认按照类型名称降序排序
  130. err = db.Order("id desc").Find(&taskList).Error
  131. }
  132. }
  133. //是因为只有切片能排序,model没办法排序;还是说为了将数组返回至前端才find扫描至切片呢?
  134. return taskList, total, err
  135. }
  136. //获取游戏配置信息
  137. func (s *ComputerTaskService) GetGameConfInfo () (list interface{}, err error) {
  138. var infoList []newCentralControl.GameConfInfo
  139. db := global.GVA_DB.Model(&newCentralControl.GameConf{}).Select("game_conf.task_id, game_conf.id as conf_id, game_conf.conf_name, game_task.task_name")
  140. err = db.Joins("left join game_task on game_conf.task_id = game_task.task_id").Find(&infoList).Error
  141. return infoList, err
  142. }