Przeglądaj źródła

批量删除脚本提交

maker 2 lat temu
rodzic
commit
4e74515581

+ 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)  {
 	//获取前端传值校验

+ 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)
 	}

+ 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
 }