urgent_task_conf.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. package task
  2. import (
  3. "errors"
  4. "go.uber.org/zap"
  5. "gorm.io/gorm"
  6. "log-server/global"
  7. "log-server/model/common/request"
  8. "log-server/model/task"
  9. "time"
  10. )
  11. type UrgentTaskService struct {
  12. }
  13. func (s *UrgentTaskService) CreateUrgentTask(task1 task.UrgentTaskConf) (err error) {
  14. //根据平均期望,将故障较大的放前面可以减少查询次数。那么需要先查是否有task_id以及create_date相等的
  15. var urgentEntity task.UrgentTaskConf
  16. var centralEntity task.CentralControlConf
  17. date := time.Now().Format("2006-01-02")
  18. task1.CreateDate = date
  19. err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("task_id = ? and create_date = ?", task1.TaskId, date).First(&urgentEntity).Error
  20. if !errors.Is(err, gorm.ErrRecordNotFound) {
  21. return errors.New("任务已存在,请勿重复添加")
  22. }
  23. //查找中控配置是否存在
  24. err = global.GVA_DB.Model(&task.CentralControlConf{}).Where("task_id", task1.TaskId).First(&centralEntity).Error
  25. //若记录不存在,则报错返回
  26. if errors.Is(err, gorm.ErrRecordNotFound) {
  27. return errors.New("请先添加此任务中控配置")
  28. }
  29. //创建紧急任务
  30. return global.GVA_DB.Model(&task.UrgentTaskConf{}).Omit("create_time", "update_time").Create(&task1).Error
  31. }
  32. func (s *UrgentTaskService) DeleteUrgentTask(task1 task.UrgentTaskConf) (err error) {
  33. //查找此任务是否存在
  34. var entity task.UrgentTaskConf
  35. err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("id", task1.Id).First(&entity).Error
  36. if errors.Is(err, gorm.ErrRecordNotFound) {
  37. return errors.New("此任务不存在")
  38. }
  39. return global.GVA_DB.Model(&task.UrgentTaskConf{}).Delete(&entity).Error
  40. }
  41. //批量删除
  42. func (s *UrgentTaskService) DeleteUrgentTaskByIds(ids []int) (err error){
  43. err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Delete("id in ?", ids).Error
  44. return err
  45. }
  46. func (s *UrgentTaskService) UpdateUrgentTask(task1 task.UrgentTaskConf) (err error) {
  47. //查找此task_id是否存在,如果存在不更新,否则更新
  48. var entity task.UrgentTaskConf
  49. err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("task_id = ? and id != ? and create_date = ?", task1.TaskId, task1.Id, task1.CreateDate).First(&entity).Error
  50. if !errors.Is(err , gorm.ErrRecordNotFound) {
  51. return errors.New("已存在此task_id的任务,更新失败")
  52. }
  53. return global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("id", task1.Id).Updates(&task1).Error
  54. }
  55. func (s *UrgentTaskService) GetUrgentTaskById(id int) (task1 task.UrgentTaskConf, err error) {
  56. err = global.GVA_DB.Model(&task.UrgentTaskConf{}).Where("id", id).First(&task1).Error
  57. return task1, err
  58. }
  59. //查询空闲租机
  60. func (s *UrgentTaskService) GetUnusedPc() (unusedPcList []task.UnusedPc, err error) {
  61. //获取当日日期
  62. date := time.Now().Format("2006-01-02")
  63. err = global.GVA_DB.Table("computer_status").Where("status = ? and create_date = ?", -1, date).Order("pc_code").Find(&unusedPcList).Error
  64. return unusedPcList, err
  65. }
  66. //获取紧急任务列表
  67. func (s *UrgentTaskService) GetUrgentTaskList(conf task.UrgentTaskConfRequest, info request.PageInfo, order string, desc bool) (confList []task.UrgentTaskConf, total int64, err error){
  68. limit := info.PageSize
  69. offset := info.PageSize * (info.Page - 1)
  70. db := global.GVA_DB.Model(&task.UrgentTaskConf{})
  71. startDate := time.Now().Format("2006-01-02")
  72. endDate := time.Now().Format("2006-01-02")
  73. if len(conf.Date) == 2 {
  74. startDate = conf.Date[0]
  75. endDate = conf.Date[1]
  76. }
  77. //筛选日期
  78. db = db.Where("create_date >= ? and create_date <= ?", startDate, endDate)
  79. if conf.TaskId != 0 {
  80. db = db.Where("task_id = ?", conf.TaskId)
  81. }
  82. err = db.Count(&total).Error
  83. if err != nil {
  84. return confList, total, err
  85. } else {
  86. db = db.Limit(limit).Offset(offset)
  87. if order != "" {
  88. var OrderStr string
  89. // 设置有效排序key 防止sql注入
  90. // 感谢 Tom4t0 提交漏洞信息
  91. orderMap := make(map[string]bool, 4)
  92. orderMap["task_id"] = true
  93. orderMap["create_date"] = true
  94. orderMap["create_time"] = true
  95. orderMap["update_time"] = true
  96. if orderMap[order] {
  97. if desc {
  98. OrderStr = order + " desc"
  99. } else {
  100. OrderStr = order
  101. }
  102. } else { // didn't matched any order key in `orderMap`
  103. global.GVA_LOG.Error("获取失败!", zap.Error(err))
  104. return confList, total, err
  105. }
  106. err = db.Order(OrderStr).Find(&confList).Error
  107. } else {
  108. err = db.Order("id desc").Find(&confList).Error
  109. }
  110. }
  111. //遍历更改日期格式
  112. for i, _ := range confList {
  113. confList[i].CreateDate = confList[i].CreateDate[:10]
  114. }
  115. return confList, total, err
  116. }