package newCentralControl import ( "errors" "fmt" "gorm.io/gorm" "log-server/global" "log-server/model/common/request" "log-server/model/newCentralControl" newCentralControlRequest "log-server/model/newCentralControl/request" ) type ComputerTaskService struct { } //创建电脑任务 func (s *ComputerTaskService) CreateComputerTask(task newCentralControl.ComputerTask) (err error) { var entity newCentralControl.ComputerTask //查找此电脑编号和此配置id是否存在 err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("pc_code = ? and conf_id = ?", task.PcCode, task.ConfId).First(&entity).Error if !errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("此电脑已添加此任务配置,请勿重复添加") } return global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Omit("create_time", "update_time").Create(&task).Error } //删除电脑任务 func (s *ComputerTaskService) DeleteComputerTask(task newCentralControl.ComputerTask) (err error) { var entity newCentralControl.ComputerTask err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", task.Id).First(&entity).Error if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("此配置不存在,无法删除") } return global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Delete(&entity).Error } //更新电脑任务 func (s *ComputerTaskService) UpdateComputerTask(task newCentralControl.ComputerTask) (err error) { var entity newCentralControl.ComputerTask err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id != ? and pc_code = ? and task_id = ?", task.Id, task.PcCode, task.TaskId).First(&entity).Error if !errors.Is(err, gorm.ErrRecordNotFound){ return errors.New("已存在相同的任务,无法更改") } return global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", task.Id).Omit("create_time", "update_time").Updates(&task).Error } //单个获取电脑任务 func (s *ComputerTaskService) GetComputerTaskById(id int) (task newCentralControl.ComputerTask, err error) { err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", id).First(&task).Error return task, err } //更新任务状态 func (s *ComputerTaskService) UpdateTaskStatus (req newCentralControlRequest.UpdateTaskStatus) (err error) { var entity newCentralControl.ComputerTask err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", req.Id).First(&entity).Error if errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("请传入正确的Id") } //更新状态 return global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("id", req.Id).Update("status", req.Status).Error } //中控获取下发电脑任务 func (s *ComputerTaskService) GetRunningTasks(pcCode string) (err error, confList []newCentralControl.GameConf) { //根据电脑编号查询出配置id,根据配置id查询出具体配置 var taskList []newCentralControl.ComputerTask var confIdList []int err = global.GVA_DB.Model(&newCentralControl.ComputerTask{}).Where("pc_code = ? and status = 1", pcCode).Find(&taskList).Error //fmt.Println(taskList) if err != nil { return err,confList } for k,_ := range taskList { confIdList = append(confIdList, taskList[k].ConfId) } //fmt.Println("hahah") //fmt.Println(confIdList) err = global.GVA_DB.Model(&newCentralControl.GameConf{}).Where("id in ?", confIdList).Find(&confList).Error return err,confList } //上传电脑信息 func (s *ComputerTaskService) UploadPcInfo(pcCode string, pcName string, user string) (err error){ var info newCentralControl.PcInfo var entity newCentralControl.PcInfo info.PcCode = pcCode info.PcName = pcName info.User = user err = global.GVA_DB.Model(&newCentralControl.PcInfo{}).Where("pc_code = ?", pcCode).First(&entity).Error if !errors.Is(err, gorm.ErrRecordNotFound) { return errors.New("此电脑编号已存在,请勿重复添加") } return global.GVA_DB.Model(&newCentralControl.PcInfo{}).Omit("create_time", "update_time").Create(&info).Error } //获取电脑任务列表 func (s *ComputerTaskService) GetComputerTaskList(task newCentralControl.ComputerTask, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) { //获取limit和offset limit := info.PageSize offset := (info.Page - 1) * info.PageSize db := global.GVA_DB.Model(&newCentralControl.ComputerTask{}) var taskList []newCentralControl.ComputerTask //先条件过滤 if task.TaskId != 0 { //条件过滤记录数 db = db.Where("task_id", task.TaskId) } err = db.Count(&total).Error if err != nil{ //如果出错直接返回 return taskList, total, err } else { //先分页再排序 db = db.Limit(limit).Offset(offset) if order != ""{ //传入排序字段,进行排序 //定义orderStr存储完整的排序字段 var orderStr string //为了避免sql注入,自己创建数组匹配 orderMap := make(map[string]bool, 3) orderMap["task_id"] = 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 taskList, total, err } //排序 err = db.Order(orderStr).Find(&taskList).Error } else { //没有传入排序字段,默认按照类型名称降序排序 err = db.Order("id desc").Find(&taskList).Error } } //是因为只有切片能排序,model没办法排序;还是说为了将数组返回至前端才find扫描至切片呢? return taskList, total, err } //获取游戏配置信息 func (s *ComputerTaskService) GetGameConfInfo () (list interface{}, err error) { var infoList []newCentralControl.GameConfInfo 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") err = db.Joins("left join game_task on game_conf.task_id = game_task.task_id").Find(&infoList).Error return infoList, err }