Преглед изворни кода

Merge branch 'master' of http://10.8.230.114:3000/wangbin/log-server

# Conflicts:
#	initialize/timer.go
倚楼听风雨 пре 3 година
родитељ
комит
c283174dd3

+ 1 - 1
README.md

@@ -52,7 +52,7 @@
 | `--timer` | timer | 定时器接口封装 |
 | `--upload`      | oss                  | oss接口封装        |
 
-## 在项目目录下运行
+## 在项目目录下运行1
 go mod tidy
 
 go run main.go

+ 81 - 3
api/v1/task/upload_file.go

@@ -5,7 +5,10 @@ import (
 	"go.uber.org/zap"
 	"log-server/global"
 	"log-server/model/common/response"
+	"log-server/model/task"
+	"log-server/model/task/request"
 	taskRes "log-server/model/task/response"
+	"log-server/utils"
 	"strconv"
 )
 
@@ -21,10 +24,19 @@ func (b *UploadFileApi) UploadFile(c *gin.Context) {
 		response.FailWithMessage("接收文件失败", c)
 		return
 	}
-	gameID := c.PostForm("game_id")
+	taskID := c.PostForm("task_id")
+	user   := c.PostForm("responsible_person")
+	if taskID == "" {
+		response.FailWithMessage("taskId不能为空", c)
+		return
+	}
+	if user == "" {
+		response.FailWithMessage("负责人不能为空", c)
+		return
+	}
 	var fileRes taskRes.UploadFileResponse
-	gameId, _ := strconv.Atoi(gameID)
-	fileRes, err = uploadFileService.UploadFile(gameId,  header) // 文件上传后拿到文件路径
+	taskId, _ := strconv.Atoi(taskID)
+	fileRes, err = uploadFileService.UploadFile(taskId, user,  header) // 文件上传后拿到文件路径
 	if err != nil {
 		global.GVA_LOG.Error("修改数据库链接失败!", zap.Error(err))
 		response.FailWithMessage("修改数据库链接失败", c)
@@ -32,3 +44,69 @@ func (b *UploadFileApi) UploadFile(c *gin.Context) {
 	}
 	response.OkWithDetailed(taskRes.InfoResponse{fileRes}, "上传成功", c)
 }
+
+func (b *UploadFileApi) DownloadFile(c *gin.Context) {
+	taskIdStr := c.Query("taskId")
+	md5String := c.Query("md5String")
+	if taskIdStr == "" {
+		response.FailWithMessage("taskId不能为空", c)
+		return
+	}
+	if md5String == "" {
+		response.FailWithMessage("md5值不能为空", c)
+		return
+	}
+	taskId, _ := strconv.Atoi(taskIdStr)
+	downloadFile, err := uploadFileService.DownloadFile(taskId, md5String)
+	if err != nil {
+		global.GVA_LOG.Error("查询失败!", zap.Error(err))
+		response.FailWithMessage("查询失败,无对应脚本", c)
+	} else {
+		response.OkWithDetailed(taskRes.DownloadInfoResponse{downloadFile}, "查询成功", c)
+	}
+
+}
+
+
+//获取所有游戏脚本列表
+func (b *UploadFileApi) GetScriptList(c *gin.Context)  {
+	//获取前端传值并校验
+	var pageInfo task.SearchAccountTypeParams
+	_ = c.ShouldBindJSON(&pageInfo)
+	//页面信息校验
+	if err := utils.Verify(pageInfo.PageInfo, utils.PageInfoVerify); err != nil{
+		response.FailWithMessage(err.Error(), c)
+		return
+	}
+	if list, total, err := uploadFileService.GetScriptList(pageInfo.GameScriptResponse, pageInfo.PageInfo, pageInfo.OrderKey, pageInfo.Desc); err != nil{
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		response.OkWithDetailed(response.PageResult{
+			List:     list,
+			Total:    total,
+			Page:     pageInfo.Page,
+			PageSize: pageInfo.PageSize,
+		}, "获取成功", c)
+	}
+}
+
+//更改脚本状态
+func (b *UploadFileApi) StatusChange(c *gin.Context) {
+	var paramsInfo request.UpdateScriptStatusRequest
+	_ = c.ShouldBindJSON(&paramsInfo)
+	if paramsInfo.State == 0 {
+		response.FailWithMessage("状态值不能为空", c)
+		return
+	}
+	if paramsInfo.Id == 0 {
+		response.FailWithMessage("Id不能为空", c)
+		return
+	}
+	if err := uploadFileService.UpdateScriptStatus(paramsInfo); err != nil {
+		global.GVA_LOG.Error("修改失败!", zap.Error(err))
+		response.FailWithMessage(err.Error(), c)
+	} else {
+		response.OkWithMessage("修改成功", c)
+	}
+}

+ 4 - 1
config.yaml

@@ -87,6 +87,7 @@ jwt:
 local:
   path: uploads/file
   store-path: uploads/file
+  script-path: uploads/file/scriptFile
 mysql:
   path: 120.92.140.20
   port: "3306"
@@ -161,4 +162,6 @@ send-url:
   computer-send-url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=7d095d5b-8240-45fd-a68c-baff3628d83b111"
   keyword-send-url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=34cbfa5a-c31d-464f-baf8-8363d6f4ac6a"
 #extranet-domain:
-#  control: "http://192.168.50.35:8099"
+#  control: "http://192.168.50.35:8099"
+prefix-url:
+  prefix-local: "http://192.168.50.17:8080/api/"

+ 1 - 1
config/config.go

@@ -23,7 +23,7 @@ type Server struct {
 
 	Excel Excel `mapstructure:"excel" json:"excel" yaml:"excel"`
 	Timer Timer `mapstructure:"timer" json:"timer" yaml:"timer"`
-
+	PrefixUrl PrefixUrl `mapstructure:"prefix-url" json:"prefix-url" yaml:"prefix-url"`
 	// 跨域配置
 	Cors           CORS           `mapstructure:"cors" json:"cors" yaml:"cors"`
 	SendUrl        SendUrl        `mapstructure:"send-url" json:"send-url" yaml:"send-url"`

+ 1 - 0
config/oss_local.go

@@ -3,4 +3,5 @@ package config
 type Local struct {
 	Path      string `mapstructure:"path" json:"path" yaml:"path"`                   // 本地文件访问路径
 	StorePath string `mapstructure:"store-path" json:"store-path" yaml:"store-path"` // 本地文件存储路径
+	ScriptPath string `mapstructure:"script-path" json:"script-path" yaml:"script-path"` //本地脚本存储路径
 }

+ 5 - 0
config/prefix_url.go

@@ -0,0 +1,5 @@
+package config
+
+type PrefixUrl struct {
+	PrefixLocal string `mapstructure:"prefix-local" json:"prefix-local" yaml:"prefix-local"`
+}

+ 126 - 9
initialize/timer.go

@@ -100,20 +100,83 @@ func Timer() {
 
 	//// 定时检查是否有电脑到期,修改租机状态@every 1s
 	//_, err = global.GVA_Timer.AddTaskByFunc("CheckIsExpire", "0 0/5 * * * *", serviceRentComputer.CheckIsExpire)
+	//// 定时更新前一天的统计数据
+	//_, err := global.GVA_Timer.AddTaskByFunc("StatisticsLog", "2 8 5 * * * ", serviceStatisticsLog.CreateStatisticsLog)
 	//if err != nil {
-	//	fmt.Println("add CheckIsExpire timer error:", err)
+	//	fmt.Println("add taskCode timer error:", err)
 	//}
-	//// 定时生成租机每日台账@every 1s
-	//_, err = global.GVA_Timer.AddTaskByFunc("CreateRentComputerLedger", "0 30 23 * * *", serviceRentComputer.CreateRentComputerLedger)
+	//
+	////定时同步电脑相关的统计数据
+	//_, err = global.GVA_Timer.AddTaskByFunc("CreateComputerStatisticsData", "40 9,19,29,39,49,59 7-23 * * * ", serviceStatisticsLog.CreateComputerStatisticsData)
 	//if err != nil {
-	//	fmt.Println("add CreateRentComputerLedger timer error:", err)
+	//	fmt.Println("add CreateComputerStatisticsData timer error:", err)
+	//}
+
+	//// 同步游戏相关的统计数据
+	//_, err = global.GVA_Timer.AddTaskByFunc("TodayCreateStatisticsGameInfoLog", "2 8,18,28,38,48,58 6-23 * * * ", serviceStatisticsLog.TodayCreateStatisticsGameInfoLog)
+	//if err != nil {
+	//	fmt.Println("add TodayCreateStatisticsGameInfoLog timer error:", err)
+	//}
+	//// 同步任务统计数据
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskStatisticsDataCache", "20 0/3 6-23 * * * ", serviceStatisticsLog.TaskStatisticsDataCache)
+	//if err != nil {
+	//	fmt.Println("add TaskStatisticsDataCache timer error:", err)
+	//}
+	//// 重试失败数据
+	//_, err = global.GVA_Timer.AddTaskByFunc("createFailLog", "2 5,15,25,35,45,55 6-23 * * * ", ServiceLogList.CreateFailLog)
+	//if err != nil {
+	//	fmt.Println("everyDayResetStatisticsCache timer error:", err)
+	//}
+	//// 定时检查电脑上报
+	//_, err = global.GVA_Timer.AddTaskByFunc("RegularCheckPc", "2 57 8-23 * * * ", serviceStatisticsLog.RegularCheckPc)
+	//if err != nil {
+	//	fmt.Println("RegularCheckPc timer error:", err)
+	//}
+	//// 新建日志表
+	//_, err = global.GVA_Timer.AddTaskByFunc("RegularCreateLogingTable", "2 1 19 20 * * ", ServiceLogList.RegularCreateLogingTable)
+	//if err != nil {
+	//	fmt.Println("add RegularCreateLogingTable timer error:", err)
+	//}
+	//// 定时删缓存
+	//_, err = global.GVA_Timer.AddTaskByFunc("RegularDelCheckData", "2 33 11 * * *", serviceStatisticsLog.RegularDelCheckData)
+	//if err != nil {
+	//	fmt.Println("add RegularDelCheckData timer error:", err)
+	//}
+	////定时添加任务
+	//_, err = global.GVA_Timer.AddTaskByFunc("EveryDaySyncTaskData", "30 22 21 * * *", syncData.EveryDaySyncTaskData)
+	//if err != nil {
+	//	fmt.Println("add EveryDaySyncTaskData timer error:", err)
+	//}
+	////同步任务数据
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncTaskData", "2 0/3 1-23 * * *", syncData.SyncTaskData)
+	//if err != nil {
+	//	fmt.Println("add SyncTaskData timer error:", err)
+	//}
+	//// 数优任务统计
+	//_, err = global.GVA_Timer.AddTaskByFunc("DayTargetDataStatistics", "40 2 5 * * *", syncData.DayTargetDataStatistics)
+	//if err != nil {
+	//	fmt.Println("add DayTargetDataStatistics timer error:", err)
+	//}
+	//
+	////// 定时检查是否有电脑到期,修改租机状态@every 1s
+	////_, err = global.GVA_Timer.AddTaskByFunc("CheckIsExpire", "0 0/5 * * * *", serviceRentComputer.CheckIsExpire)
+	////if err != nil {
+	////	fmt.Println("add CheckIsExpire timer error:", err)
+	////}
+	////// 定时生成租机每日台账@every 1s
+	////_, err = global.GVA_Timer.AddTaskByFunc("CreateRentComputerLedger", "0 30 23 * * *", serviceRentComputer.CreateRentComputerLedger)
+	////if err != nil {
+	////	fmt.Println("add CreateRentComputerLedger timer error:", err)
+	////}
+	//
+	////定时获取扫码平台余额,每小时执行一次
+	////_, err = global.GVA_Timer.AddTaskByFunc("SyncGetWeChatScannerBalance", "0 58 * * * *", serviceWeChatScannerApi.SyncGetWeChatScannerBalance)
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncGetWeChatScannerBalance", "0 58 * * * *", serviceWeChatScannerApi.SyncGetWeChatScannerBalance)
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncGetWeChatScannerBalance", "0 58 * * * *", serviceWeChatScannerApi.SyncGetWeChatScannerBalance)
+	//if err != nil {
+	//	fmt.Println("add SyncGetWeChatScannerBalance timer error:", err)
 	//}
 
-	//定时获取扫码平台余额,每小时执行一次
-	_, err := global.GVA_Timer.AddTaskByFunc("SyncGetWeChatScannerBalance", "0 26 * * * *", serviceWeChatScannerApi.SyncGetWeChatScannerBalance)
-	if err != nil {
-		fmt.Println("add SyncGetWeChatScannerBalance timer error:", err)
-	}
 	////定时更新异常率
 	//_, err = global.GVA_Timer.AddTaskByFunc("SyncAbnormalRateByBatch", "0 1,31 * * * *", serviceDataAbnormalRate.SyncAbnormalRateByBatch)
 	//if err != nil {
@@ -173,4 +236,58 @@ func Timer() {
 	//if err != nil {
 	//	fmt.Println("add UpdateGameVersion timer error:", err)
 	//}
+
+	////定时更新异常率
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncAbnormalRateByBatch", "0 1,31 * * * *", serviceDataAbnormalRate.SyncAbnormalRateByBatch)
+	//if err != nil {
+	//	fmt.Println("add SyncAbnormalRateByBatch timer error:", err)
+	//}
+	//
+	////定时更新当日微信扫码订单列表
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncTodayWeChatScannerDetailed", "0 3,33 * * * *", serviceWeChatScannerDetailed.SyncTodayWeChatScannerDetailed)
+	//if err != nil {
+	//	fmt.Println("add SyncTodayWeChatScannerDetailed timer error:", err)
+	//}
+	//
+	////0点更新昨日微信扫码订单列表
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncYesterdayWeChatScannerDetailed", "1 1 0 * * *", serviceWeChatScannerDetailed.SyncYesterdayWeChatScannerDetailed)
+	//if err != nil {
+	//	fmt.Println("add SyncYesterdayWeChatScannerDetailed timer error:", err)
+	//}
+	//
+	////半小时同步一次机房设备信息,播报是否有异常
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncJfDevicesMessage", "0 0,30 * * * *", robotService.SyncJfDevicesMessage)
+	//if err != nil {
+	//	fmt.Println("add SyncJfDevicesMessage timer error:", err)
+	//}
+	//
+	//// 活跃定时推送消息
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 29,59 8-21 * * *", syncData.TaskMsgSend)
+	//if err != nil {
+	//	fmt.Println("add TaskMsgSend timer error:", err)
+	//}
+	//
+	//// 活跃定时推送消息
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "20 0/10 22-23 * * *", syncData.TaskMsgSend)
+	//if err != nil {
+	//	fmt.Println("add TaskMsgSend timer error:", err)
+	//}
+	//
+	//// 付费定时推送消息
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "40 15,30,45,59 8-21 * * *", syncData.TaskFreeMsgSend)
+	//if err != nil {
+	//	fmt.Println("add TaskFreeMsgSend timer error:", err)
+	//}
+	//
+	//// 付费定时推送消息
+	//_, err = global.GVA_Timer.AddTaskByFunc("TaskMsgSend", "40 0/5 22-23 * * *", syncData.TaskFreeMsgSend)
+	//if err != nil {
+	//	fmt.Println("add TaskFreeMsgSend timer error:", err)
+	//}
+	//
+	//// 23起检测任务完成情况
+	//_, err = global.GVA_Timer.AddTaskByFunc("CheckTaskCompletedInfo", "10 0/4 23 * * *", syncData.CheckTaskCompletedInfo)
+	//if err != nil {
+	//	fmt.Println("add CheckTaskCompletedInfo timer error:", err)
+	//}
 }

+ 32 - 0
model/task/game_script.go

@@ -0,0 +1,32 @@
+package task
+
+import "log-server/model/typeManage"
+
+type GameScript struct {
+	TaskID int `json:"task_id"`	//游戏Id
+	ResponsiblePerson string `json:"responsible_person"`	//负责人名称
+	Name string `json:"name" gorm:"comment:文件名"` // 文件名
+	Url  string `json:"url" gorm:"comment:文件地址"` // 文件地址
+	Tag  string `json:"tag" gorm:"comment:文件标签"` // 文件标签
+	Key  string `json:"key" gorm:"comment:编号"`   // 编号
+	Version int `json:"version"`	//版本号
+	Md5String string `json:"md5_string"`	//md5值
+	State int8 `json:"state"`	//脚本启用状态
+	CreateTime typeManage.LocalTime `json:"create_time"`
+	UpdateTime typeManage.LocalTime `json:"update_time"`
+}
+
+type GameScriptResponse struct {
+	Id int `json:"id"`	//id
+	TaskID int `json:"task_id"`	//游戏Id
+	ResponsiblePerson string `json:"responsible_person"`	//负责人名称
+	Name string `json:"name" gorm:"comment:文件名"` // 文件名
+	Url  string `json:"url" gorm:"comment:文件地址"` // 文件地址
+	Tag  string `json:"tag" gorm:"comment:文件标签"` // 文件标签
+	Key  string `json:"key" gorm:"comment:编号"`   // 编号
+	Version int `json:"version"`	//版本号
+	Md5String string `json:"md5_string"`	//md5值
+	State int8 `json:"state"`	//脚本启用状态
+	CreateTime typeManage.LocalTime `json:"create_time"`
+	UpdateTime typeManage.LocalTime `json:"update_time"`
+}

+ 11 - 0
model/task/request/download_file.go

@@ -0,0 +1,11 @@
+package request
+
+type DownloadRequest struct {
+	GameId int `json:"game_id"`
+	Md5String string `json:"md5_string"`
+}
+
+type UpdateScriptStatusRequest struct {
+	State int `json:"state"` // 状态-1关闭,1开启
+	Id int `json:"id"`
+}

+ 7 - 0
model/task/response/download_file.go

@@ -0,0 +1,7 @@
+package response
+
+type DownloadFile struct {
+	Url string `json:"url"`
+	Md5String string `json:"md5_string"`
+	Flag bool `json:"flag"`
+}

+ 8 - 1
model/task/response/upload_file.go

@@ -1,14 +1,21 @@
 package response
 
 type UploadFileResponse struct {
-	GameID int `json:"game_id"`	//游戏Id
+	TaskID int `json:"task_id"`	//游戏Id
+	ResponsiblePerson string `json:"responsible_person"`	//负责人名称
 	Name string `json:"name" gorm:"comment:文件名"` // 文件名
 	Url  string `json:"url" gorm:"comment:文件地址"` // 文件地址
 	Tag  string `json:"tag" gorm:"comment:文件标签"` // 文件标签
 	Key  string `json:"key" gorm:"comment:编号"`   // 编号
 	Version int `json:"version"`	//版本号
+	Md5String string `json:"md5_string"`	//md5值
+	State int8 `json:"state"`	//脚本启用状态
 }
 
 type InfoResponse struct {
 	File UploadFileResponse `json:"file"`
+}
+
+type DownloadInfoResponse struct {
+	Info DownloadFile `json:"info"`
 }

+ 11 - 0
model/task/search_script_params.go

@@ -0,0 +1,11 @@
+package task
+
+import "log-server/model/common/request"
+
+// script分页条件查询及排序结构体
+type SearchAccountTypeParams struct {
+	GameScriptResponse
+	request.PageInfo
+	OrderKey string `json:"orderKey"` // 排序
+	Desc     bool   `json:"desc"`     // 排序方式:升序false(默认)|降序true
+}

+ 3 - 0
router/task/upload_file.go

@@ -14,6 +14,9 @@ func (e *UploadFileRouter) InitUploadFileRouter(Router *gin.RouterGroup) {
 	UploadFileApi := v1.ApiGroupApp.GroupTask.UploadFileApi
 	{
 		GameTaskRouter.POST("addFileUpdate", UploadFileApi.UploadFile)
+		GameTaskRouter.GET("downloadFile", UploadFileApi.DownloadFile)
+		GameTaskRouter.POST("getScriptList", UploadFileApi.GetScriptList)
+		GameTaskRouter.POST("statusChange", UploadFileApi.StatusChange)
 
 	}
 }

+ 174 - 8
service/task/upload_file.go

@@ -1,11 +1,24 @@
 package task
 
 import (
+	"crypto/md5"
+	"encoding/hex"
+	"errors"
+	"fmt"
+	"go.uber.org/zap"
+	"gorm.io/gorm"
+	"io"
 	"log-server/global"
+	"log-server/model/common/request"
+	"log-server/model/task"
+	taskReq "log-server/model/task/request"
 	"log-server/model/task/response"
-	"log-server/utils/upload"
+	"log-server/utils"
 	"mime/multipart"
+	"os"
+	"path"
 	"strings"
+	"time"
 )
 
 type UploadFileService struct {
@@ -16,35 +29,188 @@ func (e *UploadFileService) Upload(file response.UploadFileResponse) error {
 	return global.GVA_DB.Table("upload_file").Create(&file).Error
 }
 
-func (e *UploadFileService) UploadFile(gameId int, header *multipart.FileHeader) (file response.UploadFileResponse, err error) {
+//更改的上传文件函数
+func (e *UploadFileService) UploadFileFunc(file *multipart.FileHeader) (string, string, string, error) {
+	// 读取文件后缀
+	ext := path.Ext(file.Filename)
+	// 读取文件名并加密
+	name := strings.TrimSuffix(file.Filename, ext)
+	name = utils.MD5V([]byte(name))
+	// 拼接新文件名
+	filename := name + "_" + time.Now().Format("20060102150405") + ext
+	// 尝试创建此路径
+	mkdirErr := os.MkdirAll(global.GVA_CONFIG.Local.ScriptPath, os.ModePerm)
+	if mkdirErr != nil {
+		global.GVA_LOG.Error("function os.MkdirAll() Filed", zap.Any("err", mkdirErr.Error()))
+		return "", "", "", errors.New("function os.MkdirAll() Filed, err:" + mkdirErr.Error())
+	}
+	// 拼接路径和文件名
+	p := global.GVA_CONFIG.Local.ScriptPath + "/" + filename
+	filepath := global.GVA_CONFIG.Local.ScriptPath + "/" + filename
+
+
+	f, openError := file.Open() // 读取文件
+	f1, openErr := file.Open()	//	读取文件生成MD5值
+	if openError != nil || openErr != nil {
+		global.GVA_LOG.Error("function file.Open() Filed", zap.Any("err", openError.Error()))
+		return "", "", "", errors.New("function file.Open() Filed, err:" + openError.Error())
+	}
+	defer f.Close() // 创建文件 defer 关闭
+	defer f1.Close()
+	//生成md5值
+	md5h := md5.New()
+	io.Copy(md5h, f1)
+	md5String := hex.EncodeToString(md5h.Sum(nil))
+
+	//
+	out, createErr := os.Create(p)
+	if createErr != nil {
+		global.GVA_LOG.Error("function os.Create() Filed", zap.Any("err", createErr.Error()))
+
+		return "", "", "", errors.New("function os.Create() Filed, err:" + createErr.Error())
+	}
+	defer out.Close() // 创建文件 defer 关闭
+
+	_, copyErr := io.Copy(out, f) // 传输(拷贝)文件
+	fmt.Println("拷贝文件")
+	if copyErr != nil {
+		global.GVA_LOG.Error("function io.Copy() Filed", zap.Any("err", copyErr.Error()))
+		return "", "", "",  errors.New("function io.Copy() Filed, err:" + copyErr.Error())
+	}
+	return filepath, filename, md5String, nil
+}
+
+
+
+//上传文件
+func (e *UploadFileService) UploadFile(taskId int, user string, header *multipart.FileHeader) (file response.UploadFileResponse, err error) {
 	//查询数据库记录数
 	var count int64
 	//获取最后一条记录
 	var lastRecord response.UploadFileResponse
 	var version int
-	oss := upload.NewOss()
-	filePath, key, uploadErr := oss.UploadFile(header)
+	//定义下载前缀
+	var prefix string = global.GVA_CONFIG.PrefixUrl.PrefixLocal
+	filePath, key, md5String, uploadErr := e.UploadFileFunc(header)
 	if uploadErr != nil {
 		panic(err)
 	}
 
-	global.GVA_DB.Table("upload_file").Count(&count)
+	global.GVA_DB.Table("upload_file").Where("task_id = ?", taskId).Count(&count)
 	if count == 0 {
 		version = 1
 	} else {
-		global.GVA_DB.Table("upload_file").Last(&lastRecord)
+		global.GVA_DB.Table("upload_file").Where("task_id = ?", taskId).Last(&lastRecord)
 		version = lastRecord.Version + 1
 	}
 
 	s := strings.Split(header.Filename, ".")
 	f := response.UploadFileResponse{
-		GameID: gameId,
-		Url:  filePath,
+		TaskID: taskId,
+		ResponsiblePerson: user,
+		Url:  prefix + filePath,
 		Name: header.Filename,
 		Tag:  s[len(s)-1],
 		Key:  key,
 		Version: version,
+		Md5String: md5String,
+		State : 1,
 	}
 	return f, e.Upload(f)
+}
+
+//下载文件
+func (e *UploadFileService) DownloadFile(taskId int, md5String string) (info response.DownloadFile, err error) {
+	var file response.UploadFileResponse
+	//改由存储至数据库的时候拼接前缀
+	//var prefix string = global.GVA_CONFIG.PrefixUrl.PrefixLocal
+	//数据库中无记录,即不需要更新
+	err = global.GVA_DB.Table("upload_file").Where("task_id = ? and state = 1", taskId).Last(&file).Error
+	if errors.Is(err, gorm.ErrRecordNotFound) {
+		info = response.DownloadFile{
+			Url: "",
+			Md5String: "",
+			Flag: false,
+		}
+		return info, errors.New("无对应脚本")
+	}
+
+	if file.Md5String == md5String {
+		info = response.DownloadFile{
+			Url: "",
+			Md5String: "",
+			Flag: false,
+		}
+	} else {
+		fullUrl := file.Url
+		info = response.DownloadFile{
+			Url: fullUrl,
+			Md5String: file.Md5String,
+			Flag: true,
+		}
+	}
 
+	return info, err
+
+}
+
+//条件查询脚本列表
+func (e *UploadFileService) GetScriptList(script task.GameScriptResponse, info request.PageInfo, order string, desc bool) (list interface{}, total int64, err error) {
+	//获取分页数据
+	limit := info.PageSize
+	offset := (info.Page - 1) * info.PageSize
+	//绑定操作结构体
+	db := global.GVA_DB.Table("upload_file").Model(&task.GameScriptResponse{})
+	var scriptList []task.GameScriptResponse
+	//条件查询
+	if script.ResponsiblePerson != "" {
+		db = db.Where("responsible_person = ?", script.ResponsiblePerson)
+	}
+	if script.TaskID != 0 {
+		db = db.Where("task_id = ?", script.TaskID)
+	}
+
+	//先过滤在排序
+	if err = db.Count(&total).Error; err != nil {
+		return scriptList, total, err
+	} else {
+		//分页
+		db.Limit(limit).Offset(offset)
+		//判断是否有排序字段
+		if order != "" {
+			var orderStr string
+			orderMap := make(map[string]bool, 1)
+			orderMap["create_time"] = true
+			orderMap["task_id"] = true
+			orderMap["name"] = true
+			orderMap["responsible_person"] = true
+			if orderMap[order] {
+				//合法排序字符
+				if desc {
+					orderStr = order + " desc"
+				} else {
+					orderStr = order
+				}
+			} else {
+				//传入排序字段非法
+				err = fmt.Errorf("传入非法字段 %v", order)
+				return scriptList, total, err
+			}
+			err = db.Order(orderStr).Find(&scriptList).Error
+		} else {
+			//默认按照名字升序排序
+			err = db.Order("name").Find(&scriptList).Error
+		}
+	}
+	return scriptList, total, err
+}
+
+//更改脚本状态
+func (e *UploadFileService) UpdateScriptStatus(c taskReq.UpdateScriptStatusRequest) (err error) {
+	err = global.GVA_DB.Table("upload_file").Where("id = ?", c.Id).Error
+	if errors.Is(err, gorm.ErrRecordNotFound) {
+		return errors.New("请传入正确的Id")
+	}
+	err = global.GVA_DB.Table("upload_file").Where("id = ?", c.Id).Update("state", c.State).Error
+	return err
 }

BIN
uploads/file/f3fec2e20827e0864de04b7efacf5f6c_20230224153010.dll


BIN
uploads/file/f3fec2e20827e0864de04b7efacf5f6c_20230224154304.dll


BIN
uploads/file/f3fec2e20827e0864de04b7efacf5f6c_20230224155919.dll


BIN
uploads/file/f3fec2e20827e0864de04b7efacf5f6c_20230224160026.dll


BIN
uploads/file/f3fec2e20827e0864de04b7efacf5f6c_20230224160750.dll


BIN
uploads/file/f3fec2e20827e0864de04b7efacf5f6c_20230224165651.dll