Переглянути джерело

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	service/task/central_control_conf.go
www 2 роки тому
батько
коміт
4344fd939f

+ 14 - 0
api/v1/task/task_conf.go

@@ -63,6 +63,20 @@ func (b *TaskConfApi) DownloadFile(c *gin.Context) {
 
 }
 
+//批量删除脚本
+func (b *TaskConfApi) BulkDeleteScript(c *gin.Context)  {
+	var ids request.IdsReq
+	_ = c.ShouldBindJSON(&ids)
+	err := taskConfService.BulkDeleteScript(ids.Ids)
+	if err != nil {
+		global.GVA_LOG.Error("删除失败!", zap.Error(err))
+		response.FailWithMessage("删除失败", c)
+	} else {
+		response.OkWithMessage("删除成功", c)
+	}
+
+}
+
 //删除上传脚本
 func (b *TaskConfApi) DeleteScript(c *gin.Context)  {
 	//获取前端传值校验

+ 25 - 0
model/task/central_control_conf.go

@@ -26,6 +26,31 @@ type CentralControlConf struct {
 	UpdateTime    typeManage.LocalTime `json:"update_time"`
 }
 
+type CentralControlTaskConf struct {
+	Id            int                  `json:"id"`
+	TaskName      string               `json:"task_name"`      //任务名称
+	Mirror        string               `json:"mirror"`         //镜像
+	Script        string               `json:"script"`         //脚本
+	CloneMode     int                  `json:"clone_mode"`     //克隆模式
+	SimulatorType int                  `json:"simulator_type"` //模拟器类型
+	Resolution    string               `json:"resolution"`     //分辨率
+	Zoom          string               `json:"zoom"`           //缩放
+	Timeout       int                  `json:"timeout"`        //超时时间
+	Cpu           int                  `json:"cpu"`            //cpu
+	MemorySize    int                  `json:"memory_size"`    //内存
+	TaskId        int                  `json:"task_id"`        //任务id
+	GameId        int                  `json:"game_id"`        //游戏id
+	Priority      string               `json:"priority"`       //优先级
+	GameType      int                  `json:"game_type"`      //任务类型
+	TxChannel     string               `json:"tx_channel"`     //'腾讯渠道号',
+	TxGameId      string               `json:"tx_game_id"`     //'腾讯游戏id',
+	MzChannel     string               `json:"mz_channel"`     //'魅族渠道号',
+	MzGameId      string               `json:"mz_game_id"`     //'魅族游戏id',
+	PayPrice      int                  `json:"pay_price"`      //'付费单价',
+	CreateTime    typeManage.LocalTime `json:"create_time"`
+	UpdateTime    typeManage.LocalTime `json:"update_time"`
+}
+
 func (CentralControlConf) TableName() string {
 	return "central_control_conf"
 }

+ 4 - 0
model/task/game_script.go

@@ -29,4 +29,8 @@ type GameScriptResponse struct {
 	State int8 `json:"state"`	//脚本启用状态
 	CreateTime typeManage.LocalTime `json:"create_time"`
 	UpdateTime typeManage.LocalTime `json:"update_time"`
+}
+
+func (GameScriptResponse) TableName() string {
+	return "upload_file"
 }

+ 1 - 0
router/task/task_conf.go

@@ -16,6 +16,7 @@ func (e *UploadFileRouter) InitUploadFileRouter(Router *gin.RouterGroup) {
 		GameTaskRouter.GET("downloadFile", TaskConfApi.DownloadFile)
 		GameTaskRouter.POST("getScriptList", TaskConfApi.GetScriptList)
 		GameTaskRouter.POST("deleteScript", TaskConfApi.DeleteScript)
+		GameTaskRouter.DELETE("bulkDeleteScript", TaskConfApi.BulkDeleteScript)
 		GameTaskRouter.POST("statusChange", TaskConfApi.StatusChange)
 		GameTaskRouter.POST("addFeeNotice", TaskConfApi.AddFeeNotice)
 	}

+ 16 - 18
service/task/central_control_conf.go

@@ -10,6 +10,7 @@ import (
 )
 
 type CentralControlService struct {
+
 }
 
 //创建配置记录
@@ -26,7 +27,7 @@ func (s *CentralControlService) CreateCentralControlConf(conf task.CentralContro
 }
 
 //删除中控配置记录
-func (s *CentralControlService) DeleteCentralControlConf(conf task.CentralControlConf) (err error) {
+func (s *CentralControlService) DeleteCentralControlConf(conf task.CentralControlConf) (err error)  {
 	var entity task.CentralControlConf
 	err = global.GVA_DB.Model(&task.CentralControlConf{}).Where("id", conf.Id).First(&entity).Error
 	if errors.Is(err, gorm.ErrRecordNotFound) {
@@ -58,36 +59,30 @@ func (s *CentralControlService) GetCentralControlConfById(id int) (conf task.Cen
 }
 
 //获取配置列表
-func (s *CentralControlService) GetCentralControlConfList(conf task.CentralControlConfList, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
+func (s *CentralControlService) GetCentralControlConfList(conf task.CentralControlConf, 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(&task.CentralControlConf{})
-	var confList []task.CentralControlConfList
+	var confList []task.CentralControlConf
 
-	db = db.Select("central_control_conf.*, game_task.user")
-	db = db.Joins("left join game_task on central_control_conf.task_id = game_task.task_id")
 	//先条件过滤
 	if conf.TaskId != 0 {
 		//条件过滤记录数
-		db = db.Where("central_control_conf.task_id", conf.TaskId)
-	}
-
-	if conf.User != "" {
-		db = db.Where("game_task.user LIKE ?", "%"+conf.User+"%")
+		db = db.Where("task_id", conf.TaskId)
 	}
 
 	err = db.Count(&total).Error
-	if err != nil {
+	if err != nil{
 		//如果出错直接返回
 		return confList, total, err
 	} else {
 		//先分页再排序
 		db = db.Limit(limit).Offset(offset)
-		if order != "" {
+		if order != ""{
 			//传入排序字段,进行排序
 			//定义orderStr存储完整的排序字段
-			var orderStr string
+			var  orderStr string
 			//为了避免sql注入,自己创建数组匹配
 			orderMap := make(map[string]bool, 3)
 			orderMap["task_id"] = true
@@ -95,7 +90,7 @@ func (s *CentralControlService) GetCentralControlConfList(conf task.CentralContr
 			orderMap["update_time"] = true
 			if orderMap[order] {
 				if desc {
-					orderStr = "central_control_conf." + order + " desc"
+					orderStr = order + " desc"
 				} else {
 					orderStr = order
 				}
@@ -108,7 +103,7 @@ func (s *CentralControlService) GetCentralControlConfList(conf task.CentralContr
 			err = db.Order(orderStr).Find(&confList).Error
 		} else {
 			//没有传入排序字段,默认按照类型名称降序排序
-			err = db.Order("central_control_conf.id desc").Find(&confList).Error
+			err = db.Order("id desc").Find(&confList).Error
 		}
 	}
 	//是因为只有切片能排序,model没办法排序;还是说为了将数组返回至前端才find扫描至切片呢?
@@ -116,8 +111,11 @@ func (s *CentralControlService) GetCentralControlConfList(conf task.CentralContr
 }
 
 //获取云配置列表
-func (s *CentralControlService) GetCloudConfList() (dataList []task.CentralControlConf, err error) {
+func (s *CentralControlService) GetCloudConfList() (dataList []task.CentralControlTaskConf, err error)  {
 	//获取所有的中控配置列表
-	err = global.GVA_DB.Model(&task.CentralControlConf{}).Find(&dataList).Error
+	db := global.GVA_DB.Model(&task.CentralControlConf{})
+	db = db.Select("central_control_conf.*,game_task.task_name").Joins("left join game_task on central_control_conf.task_id = game_task.task_id")
+	err = db.Find(&dataList).Error
+	//err = global.GVA_DB.Model(&task.CentralControlConf{}).Find(&dataList).Error
 	return
-}
+}

+ 113 - 0
service/task/task_conf.go

@@ -383,12 +383,72 @@ func (e *TaskConfService) DeleteScript(file task.GameScriptResponse) (err error)
 	}
 
 	//删除七牛云的记录
+
+	//删除七牛云之前先做判断
+	if key == "" {
+		return errors.New("请传入正确的key!")
+	}
+	if key[:13] != "shuyou/script" {
+		return errors.New("请传入正确的key!")
+	}
+
 	err = bucketManager.Delete(BUCKET, key)
 	fmt.Println(err)
 	return err
 
 }
 
+//批量删除脚本
+func (e *TaskConfService) BulkDeleteScript(ids []int) (err error)  {
+	var total int64
+	var scriptList []task.GameScriptResponse
+
+	taskIdMap := make(map[int]int)
+	db := global.GVA_DB.Table("upload_file").Where("id in ?", ids)
+	err = db.Count(&total).Error
+	if err != nil {
+		return err
+	}
+	err = db.Find(&scriptList).Error
+	if err != nil {
+		return
+	}
+
+	keys := make([]string, len(scriptList))
+
+	//获取key数组 及task_id的map
+	for k,_ := range scriptList {
+		fmt.Println(scriptList[k].Url[30:])
+		keys[k] = scriptList[k].Url[30:]
+		if taskIdMap[scriptList[k].TaskID] != 0 {
+			taskIdMap[scriptList[k].TaskID]++
+		} else {
+			taskIdMap[scriptList[k].TaskID] = 1
+		}
+	}
+	fmt.Println(keys)
+	//批量删除脚本数据库记录
+	err = global.GVA_DB.Model(&task.GameScriptResponse{}).Delete("id in ?", ids).Error
+	if err != nil {
+		return err
+	}
+
+	//遍历taskIdMap 更新缓存状态
+	for k,_ := range taskIdMap {
+		err := e.UpdateRedisCache(k)
+		if err != nil {
+			global.GVA_LOG.Info("更新脚本md5值缓存失败:" + err.Error() + time.Now().Format("2006-01-02 15:04:05"))
+			return err
+		}
+	}
+
+	return
+	//批量删除七牛云脚本记录
+
+
+
+}
+
 //更新缓存状态
 func (e *TaskConfService) UpdateRedisCache (taskId int) (err error) {
 	var file response.UploadFileResponse
@@ -416,4 +476,57 @@ func (e *TaskConfService) UpdateRedisCache (taskId int) (err error) {
 		}
 	}
 	return err
+}
+
+func (e *TaskConfService) BulkDeleteQiNiuYunScript(keys []string) (err error)  {
+	//七牛云删除所需要的条件
+	mac := qbox.NewMac(ACCESSKEY, SECRETKEY)
+	cfg := storage.Config{
+		// 是否使用https域名进行资源管理
+		UseHTTPS: true,
+	}
+	// 指定空间所在的区域,如果不指定将自动探测
+	// 如果没有特殊需求,默认不需要指定
+	//cfg.Region=&storage.ZoneHuabei
+	bucketManager := storage.NewBucketManager(mac, &cfg)
+
+	//每个batch的操作数量不可以超过1000个,如果总数量超过1000,需要分批发送
+	bucket := BUCKET
+
+	//验证keys安全性
+	for _,v := range keys {
+		//删除七牛云之前先做判断
+		if v == "" {
+			return errors.New("请传入正确的key!")
+		}
+		if v[:13] != "shuyou/script" {
+			return errors.New("请传入正确的key!")
+		}
+	}
+
+	deleteOps := make([]string, 0, len(keys))
+	for _, key := range keys {
+		deleteOps = append(deleteOps, storage.URIDelete(bucket, key))
+	}
+	rets, err := bucketManager.Batch(deleteOps)
+	if len(rets) == 0 {
+		// 处理错误
+		if e, ok := err.(*storage.ErrorInfo); ok {
+			fmt.Printf("batch error, code:%s", e.Code)
+		} else {
+			fmt.Printf("batch error, %s", err)
+		}
+		return
+	}
+	// 返回 rets,先判断 rets 是否
+	for _, ret := range rets {
+		// 200 为成功
+		if ret.Code == 200 {
+			fmt.Printf("%d\n", ret.Code)
+		} else {
+			err = errors.New(ret.Data.Error)
+			fmt.Printf("%s\n", ret.Data.Error)
+		}
+	}
+	return err
 }