Procházet zdrojové kódy

Merge remote-tracking branch 'origin/master'

# Conflicts:
#	initialize/timer.go
#	service/dataStatistics/wechat_scanner_detailed.go
wangbin před 3 roky
rodič
revize
df0d34aa2f
49 změnil soubory, kde provedl 913 přidání a 164 odebrání
  1. 4 3
      api/v1/fileManager/enter.go
  2. 45 24
      api/v1/fileManager/file_folder.go
  3. 77 0
      api/v1/fileManager/file_qiniu.go
  4. 24 0
      api/v1/fileManager/file_type.go
  5. 67 10
      api/v1/task/upload_file.go
  6. 1 0
      config.yaml
  7. 1 0
      config/oss_local.go
  8. 2 2
      go.mod
  9. 2 0
      go.sum
  10. 2 0
      initialize/router.go
  11. 3 3
      initialize/timer.go
  12. 3 0
      model/dataStatistics/response/data_abnormal_rate.go
  13. 1 1
      model/fileManager/file_folder.go
  14. 61 0
      model/fileManager/file_type.go
  15. 7 6
      model/fileManager/request/file_folder.go
  16. 5 3
      model/fileManager/request/file_qiniu.go
  17. 8 0
      model/fileManager/response/file_folder.go
  18. 14 0
      model/fileManager/response/file_qiniu.go
  19. 32 0
      model/task/game_script.go
  20. 5 0
      model/task/request/download_file.go
  21. 3 1
      model/task/response/upload_file.go
  22. 11 0
      model/task/search_script_params.go
  23. binární
      resource/excel/2022-11-12-pc.xlsx
  24. binární
      resource/excel/2023-02-12-扫码消耗明细.xlsx
  25. binární
      resource/excel/2023-02-13-pc.xlsx
  26. binární
      resource/excel/2023-02-13-扫码消耗明细.xlsx
  27. binární
      resource/excel/2023-02-18-租机台账.xlsx
  28. binární
      resource/excel/2023-02-19-租机台账.xlsx
  29. binární
      resource/excel/2023-02-20-扫码消耗明细.xlsx
  30. binární
      resource/excel/2023-02-20-租机台账.xlsx
  31. binární
      resource/excel/2023-2-28/1677551871.xlsx
  32. 2 0
      router/fileManager/enter.go
  33. 3 1
      router/fileManager/file_folder.go
  34. 23 0
      router/fileManager/file_qiniu.go
  35. 17 0
      router/fileManager/file_type.go
  36. 2 0
      router/task/upload_file.go
  37. 87 22
      service/dataStatistics/data_abnormal_rate.go
  38. 10 4
      service/dataStatistics/wechat_scanner_api.go
  39. 29 11
      service/dataStatistics/wechat_scanner_detailed.go
  40. 12 6
      service/dataStatistics/wechat_scanner_ledger.go
  41. 2 0
      service/fileManager/enter.go
  42. 67 44
      service/fileManager/file_folder.go
  43. 162 0
      service/fileManager/file_qiniu.go
  44. 17 0
      service/fileManager/file_type.go
  45. 8 5
      service/rentComputer/rent_computer.go
  46. 10 5
      service/rentComputer/rent_computer_ledger.go
  47. 84 13
      service/task/upload_file.go
  48. binární
      uploads/file/f3fec2e20827e0864de04b7efacf5f6c_20230228152241.dll
  49. binární
      uploads/file/scriptFile/10d3279ef8b9a19d712844c66812a079_20230308150102.dll

+ 4 - 3
api/v1/fileManager/enter.go

@@ -5,6 +5,8 @@ import "log-server/service"
 type ApiGroup struct {
 	// Code generated by log-server Begin; DO NOT EDIT.
 	ApiFileFolder
+	ApiFileType
+	ApiFileQiniu
 	//ApiRentComputerShop
 	//ApiRentSetMeal
 	//ApiRentComputerLedger
@@ -13,7 +15,6 @@ type ApiGroup struct {
 
 var (
 	ServiceFileFolder = service.ServiceGroupApp.FileManagerServiceGroup.ServiceFileFolder
-	// ServiceRentComputerLedger = service.ServiceGroupApp.RentComputerServiceGroup.ServiceRentComputerLedger
-	// ServiceRentComputerShop   = service.ServiceGroupApp.RentComputerServiceGroup.ServiceRentComputerShop
-	// ServiceRentSetMeal        = service.ServiceGroupApp.RentComputerServiceGroup.ServiceRentSetMeal
+	ServiceFileType   = service.ServiceGroupApp.FileManagerServiceGroup.ServiceFileType
+	ServiceFileQiniu  = service.ServiceGroupApp.FileManagerServiceGroup.ServiceFileQiniu
 )

+ 45 - 24
api/v1/fileManager/file_folder.go

@@ -6,14 +6,11 @@ import (
 	"log-server/global"
 	"log-server/model/common/response"
 	"log-server/model/fileManager/request"
+	"strconv"
 )
 
 type ApiFileFolder struct {
 }
-type IdName struct {
-	id   int
-	name string
-}
 
 func (v *ApiFileFolder) AddFileFolder(c *gin.Context) {
 	var api request.FileFolderRequest
@@ -27,11 +24,8 @@ func (v *ApiFileFolder) AddFileFolder(c *gin.Context) {
 		global.GVA_LOG.Error("文件夹创建失败!", zap.Error(err))
 		response.FailWithMessage("文件夹创建失败,"+err.Error(), c)
 	} else {
-		idName := IdName{
-			parentId,
-			parentName,
-		}
-		response.OkWithDetailed(idName, "文件夹创建成功", c)
+		global.GVA_LOG.Info(parentName)
+		response.OkWithDetailed(map[string]string{"id": strconv.Itoa(parentId), "name": parentName}, "文件夹创建成功", c)
 	}
 }
 
@@ -49,25 +43,52 @@ func (api *ApiFileFolder) GetAllTaskSimple(c *gin.Context) {
 	}
 }
 
+// SelectFolderMsg 查询目录信息
+func (api *ApiFileFolder) SelectFolderMsg(c *gin.Context) {
+	var info request.FileFolderRequest
+	_ = c.ShouldBindJSON(&info)
+	if data, err := ServiceFileFolder.SelectFolderMsg(info); err != nil {
+		response.OkWithDetailed(map[string]interface{}{"data": data}, "获取失败", c)
+	} else {
+		response.OkWithDetailed(map[string]interface{}{"data": data}, "获取成功", c)
+	}
+}
+
 // GetFolderFileList 获取当前父文件夹下所有的子文件夹和文件
 func (v *ApiFileFolder) GetFolderFileList(c *gin.Context) {
-	//global.GVA_LOG.Info("api----GetComputerList----strat")
 	var paramsInfo request.FileFolderPageRequest
 	_ = c.ShouldBindJSON(&paramsInfo)
-	/*if err := utils.Verify(paramsInfo.PageInfo, utils.PageInfoVerify); err != nil {
-		response.FailWithMessage(err.Error(), c)
-		return
-	}*/
-	list, total, err := ServiceFileFolder.FileList(c, paramsInfo.FileFolder, paramsInfo.PageInfo, paramsInfo.OrderKey, paramsInfo.Desc)
+	//开始查询当前父文件夹下的所有文件夹
+	folderList, err := ServiceFileFolder.FileFolderList(c, paramsInfo.FileFolder)
 	if err != nil {
-		global.GVA_LOG.Error("获取失败!", zap.Error(err))
-		response.FailWithMessage("获取失败", c)
-	} else {
-		response.OkWithDetailed(response.PageResult{
-			List:     list,
-			Total:    total,
-			Page:     paramsInfo.Page,
-			PageSize: paramsInfo.PageSize,
-		}, "获取成功", c)
+		global.GVA_LOG.Error("FileFolderList获取失败!", zap.Error(err))
+		response.FailWithMessage("FileFolderList获取失败", c)
+	}
+	//===============================
+	//开始查询当前父文件夹下的所有文件
+	fileList, err := ServiceFileQiniu.QueryFilesByParentId(paramsInfo.FileFolder.ParentId)
+	if err != nil {
+		global.GVA_LOG.Error("QueryFilesByParentId获取失败!", zap.Error(err))
+		response.FailWithMessage("QueryFilesByParentId获取失败", c)
+	}
+	//===============================
+	response.OkWithDetailed(map[string]interface{}{
+		"folderList": folderList,
+		"fileList":   fileList,
+	}, "获取成功", c)
+}
+
+// QueryFolder 条件查询文件夹
+func (v *ApiFileFolder) QueryFolder(c *gin.Context) {
+	var paramsInfo request.FileFolderRequest
+	_ = c.ShouldBindJSON(&paramsInfo)
+	//开始查询当前父文件夹下的所有文件夹
+	folderList, err := ServiceFileFolder.QueryFolder(c, paramsInfo)
+	if err != nil {
+		global.GVA_LOG.Error("QueryFolder获取失败!", zap.Error(err))
+		response.FailWithMessage("QueryFolder获取失败", c)
 	}
+	response.OkWithDetailed(map[string]interface{}{
+		"folderList": folderList,
+	}, "获取成功", c)
 }

+ 77 - 0
api/v1/fileManager/file_qiniu.go

@@ -1,4 +1,81 @@
 package fileManager
 
+import (
+	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
+	"log-server/global"
+	"log-server/model/common/response"
+	"log-server/model/fileManager/request"
+)
+
 type ApiFileQiniu struct {
 }
+
+// QueryVersionByType 查询某task_id下某一类型文件最新一个渠道号
+func (r *ApiFileQiniu) QueryVersionByType(c *gin.Context) {
+	var paramsInfo request.FileQiniuRequest
+	_ = c.ShouldBindJSON(&paramsInfo)
+
+	if fileVersion, err := ServiceFileQiniu.QueryVersionByType(paramsInfo); err != nil {
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		response.OkWithDetailed(map[string]int64{"fileVersion": fileVersion}, "获取成功", c)
+	}
+}
+
+// AddQiniuFile 新增文件
+func (r *ApiFileQiniu) AddQiniuFile(c *gin.Context) {
+	var paramsInfo request.FileQiniuRequest
+	_ = c.ShouldBindJSON(&paramsInfo)
+
+	if err := ServiceFileQiniu.AddQiniuFile(paramsInfo); err != nil {
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		response.OkWithMessage("文件上传成功", c)
+	}
+}
+
+// GetQiniuToken 获取七牛上传token
+func (v *ApiFileQiniu) GetQiniuToken(c *gin.Context) {
+
+	data := ServiceFileQiniu.GetQiniuToken()
+	response.OkWithDetailed(data, "获取七牛上传TOKEN成功", c)
+}
+
+// DeleteQiniuFile 删除单个文件
+func (v *ApiFileQiniu) DeleteQiniuFile(c *gin.Context) {
+	var paramsInfo request.FileQiniuRequest
+	_ = c.ShouldBindJSON(&paramsInfo)
+	if err := ServiceFileQiniu.DeleteQiniuFile(paramsInfo); err != nil {
+		global.GVA_LOG.Error("文件删除失败!", zap.Error(err))
+		response.FailWithMessage("文件删除失败,"+err.Error(), c)
+	} else {
+		response.OkWithMessage("文件删除成功", c)
+	}
+}
+
+// DeleteQiniuFileAndRecord 从七牛云删除文件并且清除数据库记录
+func (v *ApiFileQiniu) DeleteQiniuFileAndRecord(c *gin.Context) {
+	var paramsInfo request.FileQiniuRequest
+	_ = c.ShouldBindJSON(&paramsInfo)
+	if err := ServiceFileQiniu.DeleteQiniuFileAndRecord(paramsInfo); err != nil {
+		global.GVA_LOG.Error("文件删除失败!", zap.Error(err))
+		response.FailWithMessage("文件删除失败, "+err.Error(), c)
+	} else {
+		response.OkWithMessage("文件删除成功", c)
+	}
+}
+
+// RenameQiniuFileAndRecord 重命名七牛云文件和数据库记录
+func (v *ApiFileQiniu) RenameQiniuFileAndRecord(c *gin.Context) {
+	var paramsInfo request.FileQiniuRequest
+	_ = c.ShouldBindJSON(&paramsInfo)
+	if err := ServiceFileQiniu.RenameQiniuFileAndRecord(paramsInfo); err != nil {
+		global.GVA_LOG.Error("文件重命名失败!", zap.Error(err))
+		response.FailWithMessage("文件重命名失败, "+err.Error(), c)
+	} else {
+		response.OkWithMessage("文件重命名成功", c)
+	}
+}

+ 24 - 0
api/v1/fileManager/file_type.go

@@ -0,0 +1,24 @@
+package fileManager
+
+import (
+	"github.com/gin-gonic/gin"
+	"go.uber.org/zap"
+	"log-server/global"
+	"log-server/model/common/response"
+)
+
+type ApiFileType struct {
+}
+
+func (r *ApiFileType) GetAllFileType(c *gin.Context) {
+
+	if list, err := ServiceFileType.GetAllFileType(); err != nil {
+		global.GVA_LOG.Error("获取失败!", zap.Error(err))
+		response.FailWithMessage("获取失败", c)
+	} else {
+		//响应结果
+		response.OkWithDetailed(response.PageResult{
+			List: list,
+		}, "获取成功", c)
+	}
+}

+ 67 - 10
api/v1/task/upload_file.go

@@ -1,12 +1,14 @@
 package task
 
 import (
-	"fmt"
 	"github.com/gin-gonic/gin"
 	"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"
 )
 
@@ -22,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)
@@ -35,17 +46,63 @@ func (b *UploadFileApi) UploadFile(c *gin.Context) {
 }
 
 func (b *UploadFileApi) DownloadFile(c *gin.Context) {
-	gameIdStr := c.Query("gameId")
+	taskIdStr := c.Query("taskId")
 	md5String := c.Query("md5String")
-
-	fmt.Println(gameIdStr)
-	gameId, _ := strconv.Atoi(gameIdStr)
-	downloadFile, err := uploadFileService.DownloadFile(gameId, md5String)
+	if taskIdStr == "" {
+		response.FailWithMessage("taskId不能为空", 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)
+		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)
+	}
+}

+ 1 - 0
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"

+ 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"` //本地脚本存储路径
 }

+ 2 - 2
go.mod

@@ -7,7 +7,8 @@ require (
 	github.com/aliyun/aliyun-oss-go-sdk v2.1.6+incompatible
 	github.com/aws/aws-sdk-go v1.42.27
 	github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
-	github.com/bitly/go-simplejson v0.5.0 // indirect
+	github.com/bitly/go-simplejson v0.5.0
+	github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
 	github.com/casbin/casbin/v2 v2.11.0
 	github.com/casbin/gorm-adapter/v3 v3.0.2
 	github.com/flipped-aurora/ws v1.0.2
@@ -19,7 +20,6 @@ require (
 	github.com/go-redis/redis/v8 v8.11.0
 	github.com/go-sql-driver/mysql v1.5.0
 	github.com/golang-jwt/jwt/v4 v4.3.0
-	github.com/google/uuid v1.1.2 // indirect
 	github.com/gookit/color v1.3.1
 	github.com/huaweicloud/huaweicloud-sdk-go-obs v3.21.8+incompatible
 	github.com/jackc/pgx/v4 v4.15.0 // indirect

+ 2 - 0
go.sum

@@ -47,6 +47,8 @@ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kB
 github.com/bitly/go-simplejson v0.5.0 h1:6IH+V8/tVMab511d5bn4M7EwGXZf9Hj6i2xSwkNEM+Y=
 github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
 github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 h1:DDGfHa7BWjL4YnC6+E63dPcxHo2sUxDIu8g3QgEJdRY=
+github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
 github.com/casbin/casbin/v2 v2.2.2/go.mod h1:XXtYGrs/0zlOsJMeRteEdVi/FsB0ph7KgNfjoCoJUD8=
 github.com/casbin/casbin/v2 v2.11.0 h1:6M/sWT9gh2pUcL541be/rllWEVxcEV6wdg1t7MN6fHQ=
 github.com/casbin/casbin/v2 v2.11.0/go.mod h1:XXtYGrs/0zlOsJMeRteEdVi/FsB0ph7KgNfjoCoJUD8=

+ 2 - 0
initialize/router.go

@@ -76,6 +76,8 @@ func Routers() *gin.Engine {
 		dataStatisticsRouter.InitWeChatScannerDetailedRouter(PublicGroup) //数据统计
 		dataStatisticsRouter.InitWeChatScannerLedgerRouter(PublicGroup)   //数据统计
 		fileManagerRouter.InitFileFolderRouter(PublicGroup)
+		fileManagerRouter.InitFileTypeRouter(PublicGroup)
+		fileManagerRouter.InitFileQiniuRouter(PublicGroup)
 
 	}
 	PrivateGroup := Router.Group("")

+ 3 - 3
initialize/timer.go

@@ -88,7 +88,7 @@ func Timer() {
 	//	fmt.Println("add EveryDaySyncTaskData timer error:", err)
 	//}
 	////同步任务数据
-	////_, err = global.GVA_Timer.AddTaskByFunc("SyncTaskData", "35 0/3 1-23 * * *", syncData.SyncTaskData)
+	//_, err = global.GVA_Timer.AddTaskByFunc("SyncTaskData", "2 0/3 1-23 * * *", syncData.SyncTaskData)
 	//if err != nil {
 	//	fmt.Println("add SyncTaskData timer error:", err)
 	//}
@@ -97,7 +97,7 @@ func Timer() {
 	//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 {
@@ -113,7 +113,7 @@ func Timer() {
 	////_, 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)
+	//	fmt.Println("add UpdateGameVersion timer error:", err)
 	//}
 	////定时更新异常率
 	//_, err = global.GVA_Timer.AddTaskByFunc("SyncAbnormalRateByBatch", "0 1,31 * * * *", serviceDataAbnormalRate.SyncAbnormalRateByBatch)

+ 3 - 0
model/dataStatistics/response/data_abnormal_rate.go

@@ -27,4 +27,7 @@ type DataAbnormalRateResponse struct {
 	NumOrderPay       int    `json:"num_order_pay"`       // 付费订单数
 	NumPay            int    `json:"num_pay"`             //付费成功数
 	RatePaySuccess    string `json:"rate_pay_success"`    //付费成功率
+	NewTarget         int    `json:"new_target"`
+	PayTarget         int    `json:"pay_target"`
+	RetainedTarget    int    `json:"retained_target"`
 }

+ 1 - 1
model/fileManager/file_folder.go

@@ -5,7 +5,7 @@ type FileFolder struct {
 	Id         int    `json:"id"`
 	CreateTime string `json:"create_time"` // 创建时间
 	UpdateTime string `json:"update_time"` // 更新时间
-	Name       string `json:""`            //文件夹名称,通常为'任务ID_任务名称'
+	Name       string `json:"name"`        //文件夹名称,通常为'任务ID_任务名称'
 	ParentId   int    `json:"parent_id"`   //父文件夹id,默认为0,表示跟目录
 	TaskId     int    `json:"task_id"`     //关联任务id,默认为0,表示无关联
 }

+ 61 - 0
model/fileManager/file_type.go

@@ -0,0 +1,61 @@
+package fileManager
+
+// FileType 文件类型
+type FileType struct {
+	Id         uint   `json:"id"`
+	CreateTime string `json:"create_time"` // 创建时间
+	UpdateTime string `json:"update_time"` // 更新时间
+	Name       string `json:"name"`        //文件类型
+	Describe   string `json:"describe"`    //补充描述,文件后缀
+	//文件类型
+	/**
+	  {
+	    value: "0",
+	    label: "游戏包.apk"
+	  },
+	  {
+	    value: "1",
+	    label: "雷电镜像.ldbk"
+	  },
+	  {
+	    value: "2",
+	    label: "夜神镜像.npbk"
+	  },
+	  {
+	    value: "3",
+	    label: "易脚本.dll"
+	  },
+	  {
+	    value: "4",
+	    label: "易语言中控.exe"
+	  },
+	  {
+	    value: "5",
+	    label: "小精灵.apk"
+	  },
+	  {
+	    value: "6",
+	    label: "Tar包更新.tar"
+	  },
+	  {
+	    value: "7",
+	    label: "Bat.bat"
+	  },
+	  {
+	    value: "8",
+	    label: "shell脚本.sh"
+	  },
+	  {
+	    value: "9",
+	    label: "小绵羊.apk"
+	  },
+	  {
+	    value: "10",
+	    label: "其他文件.*"
+	  }
+	*/
+}
+
+func (FileType) TableName() string {
+	return "file_type"
+}

+ 7 - 6
model/fileManager/request/file_folder.go

@@ -5,12 +5,13 @@ import (
 )
 
 type FileFolderRequest struct {
-	Id         uint   `json:"id"`
-	CreateTime string `json:"create_time"` // 创建时间
-	UpdateTime string `json:"update_time"` // 更新时间
-	Name       string `json:"name"`        //文件夹名称,通常为'任务ID_任务名称'
-	ParentId   int    `json:"parent_id"`   //父文件夹id,默认为0,表示跟目录
-	TaskId     int    `json:"task_id"`     //关联任务id,默认为0,表示无关联
+	Id           uint   `json:"id"`
+	CreateTime   string `json:"create_time"` // 创建时间
+	UpdateTime   string `json:"update_time"` // 更新时间
+	Name         string `json:"name"`        //文件夹名称,通常为'任务ID_任务名称'
+	ParentId     int    `json:"parent_id"`   //父文件夹id,默认为0,表示跟目录
+	TaskId       int    `json:"task_id"`     //关联任务id,默认为0,表示无关联
+	DirectorName string `json:"director_name"`
 }
 
 type FileFolderPageRequest struct {

+ 5 - 3
model/fileManager/request/file_qiniu.go

@@ -7,10 +7,12 @@ type FileQiniuRequest struct {
 	ParentId     int    `json:"parent_id"`     //父文件夹id
 	TaskId       int    `json:"task_id"`       //关联任务id,默认为0
 	FileName     string `json:"file_name"`     //文件名称
+	FileNameNew  string `json:"file_name_new"` //文件新名称
 	FileVersion  int64  `json:"file_version"`  //文件版本
 	QiniuAddress string `json:"qiniu_address"` //七牛云文件地址
 	QiniuKey     string `json:"qiniu_key"`     //七牛云key,方便删除文件
-	QiniuHash    string `json:"qiniu_hash"`    //七牛云hash
-	FileType     int    `json:"file_type"`     //文件类型
-
+	//QiniuKeyNew  string `json:"qiniu_key_new"`  //七牛云新key,用于重命名
+	QiniuHash    string `json:"qiniu_hash"`     //七牛云hash
+	FileType     int    `json:"file_type"`      //文件类型
+	FileTypeName string `json:"file_type_name"` //类型名
 }

+ 8 - 0
model/fileManager/response/file_folder.go

@@ -8,3 +8,11 @@ type FileFolderResponse struct {
 	ParentId   int    `json:"parent_id"`   //父文件夹id,默认为0,表示跟目录
 	TaskId     int    `json:"task_id"`     //关联任务id,默认为0,表示无关联
 }
+
+type FileFolderResponse2 struct {
+	Id       int    `json:"id"`
+	Name     string `json:"name"`      //文件夹名称,通常为'任务ID_任务名称'
+	ParentId int    `json:"parent_id"` //父文件夹id,默认为0,表示跟目录
+	TaskId   int    `json:"task_id"`   //关联任务id,默认为0,表示无关联
+	TaskName string `json:"task_name"`
+}

+ 14 - 0
model/fileManager/response/file_qiniu.go

@@ -1 +1,15 @@
 package response
+
+type FileQiniuResponse struct {
+	Id           uint   `json:"id"`
+	CreateTime   string `json:"create_time"`   // 创建时间
+	UpdateTime   string `json:"update_time"`   // 更新时间
+	ParentId     int    `json:"parent_id"`     //父文件夹id
+	TaskId       int    `json:"task_id"`       //关联任务id,默认为0
+	FileName     string `json:"file_name"`     //文件名称
+	FileVersion  int64  `json:"file_version"`  //文件版本
+	QiniuAddress string `json:"qiniu_address"` //七牛云文件地址
+	QiniuKey     string `json:"qiniu_key"`     //七牛云key,方便删除文件
+	QiniuHash    string `json:"qiniu_hash"`    //七牛云hash
+	FileType     int    `json:"file_type"`     //文件类型
+}

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

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

@@ -4,3 +4,8 @@ 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"`
+}

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

@@ -1,13 +1,15 @@
 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 {

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

binární
resource/excel/2022-11-12-pc.xlsx


binární
resource/excel/2023-02-12-扫码消耗明细.xlsx


binární
resource/excel/2023-02-13-pc.xlsx


binární
resource/excel/2023-02-13-扫码消耗明细.xlsx


binární
resource/excel/2023-02-18-租机台账.xlsx


binární
resource/excel/2023-02-19-租机台账.xlsx


binární
resource/excel/2023-02-20-扫码消耗明细.xlsx


binární
resource/excel/2023-02-20-租机台账.xlsx


binární
resource/excel/2023-2-28/1677551871.xlsx


+ 2 - 0
router/fileManager/enter.go

@@ -3,5 +3,7 @@ package fileManager
 type RouterGroup struct {
 	// Code generated by log-server Begin; DO NOT EDIT.
 	FileFolderRouter
+	FileTypeRouter
+	FileQiniuRouter
 	// Code generated by log-server End; DO NOT EDIT.
 }

+ 3 - 1
router/fileManager/file_folder.go

@@ -14,6 +14,8 @@ func (e *FileFolderRouter) InitFileFolderRouter(Router *gin.RouterGroup) {
 	{
 		excelRouter.POST("getAllTaskSimple", api.GetAllTaskSimple)   //查询记录
 		excelRouter.POST("addFileFolder", api.AddFileFolder)         //新建文件夹
-		excelRouter.POST("getFolderFileList", api.GetFolderFileList) //新建文件夹
+		excelRouter.POST("getFolderFileList", api.GetFolderFileList) //
+		excelRouter.POST("queryFolder", api.QueryFolder)             //
+		excelRouter.POST("selectFolderMsg", api.SelectFolderMsg)     //
 	}
 }

+ 23 - 0
router/fileManager/file_qiniu.go

@@ -0,0 +1,23 @@
+package fileManager
+
+import (
+	"github.com/gin-gonic/gin"
+	v1 "log-server/api/v1"
+)
+
+type FileQiniuRouter struct {
+}
+
+func (e *FileQiniuRouter) InitFileQiniuRouter(Router *gin.RouterGroup) {
+	excelRouter := Router.Group("fileManager")
+	api := v1.ApiGroupApp.FileManagerGroup.ApiFileQiniu
+	{
+		excelRouter.POST("queryVersionByType", api.QueryVersionByType)             //查询
+		excelRouter.POST("addQiniuFile", api.AddQiniuFile)                         //addQiniuFile
+		excelRouter.POST("getQiniuToken", api.GetQiniuToken)                       //获取七牛token
+		excelRouter.POST("deleteQiniuFile", api.DeleteQiniuFile)                   //删除单个文件
+		excelRouter.POST("deleteQiniuFileAndRecord", api.DeleteQiniuFileAndRecord) //删除单个文件
+		excelRouter.POST("renameQiniuFileAndRecord", api.RenameQiniuFileAndRecord) //删除单个文件
+
+	}
+}

+ 17 - 0
router/fileManager/file_type.go

@@ -0,0 +1,17 @@
+package fileManager
+
+import (
+	"github.com/gin-gonic/gin"
+	v1 "log-server/api/v1"
+)
+
+type FileTypeRouter struct {
+}
+
+func (e *FileTypeRouter) InitFileTypeRouter(Router *gin.RouterGroup) {
+	excelRouter := Router.Group("fileManager")
+	api := v1.ApiGroupApp.FileManagerGroup.ApiFileType
+	{
+		excelRouter.POST("getAllFileType", api.GetAllFileType) //查询
+	}
+}

+ 2 - 0
router/task/upload_file.go

@@ -15,6 +15,8 @@ func (e *UploadFileRouter) InitUploadFileRouter(Router *gin.RouterGroup) {
 	{
 		GameTaskRouter.POST("addFileUpdate", UploadFileApi.UploadFile)
 		GameTaskRouter.GET("downloadFile", UploadFileApi.DownloadFile)
+		GameTaskRouter.POST("getScriptList", UploadFileApi.GetScriptList)
+		GameTaskRouter.POST("statusChange", UploadFileApi.StatusChange)
 
 	}
 }

+ 87 - 22
service/dataStatistics/data_abnormal_rate.go

@@ -107,13 +107,31 @@ func (s *ServiceDataAbnormalRate) QueryAbnormalRate(ctx context.Context, api req
 		return nil, 0, err
 	}
 	var responseDataList []*response.DataAbnormalRateResponse
-
+	//查询游戏目标
+	var dataTarget []*task.GameTargetComplete
+	db2 := global.GVA_DB.Model(&task.GameTargetComplete{})
+	db2 = db2.Select("task_id", "create_date", "new_target", "pay_target", "retained_target")
+	db2 = db2.Where("create_date >= ? and create_date <= ?", api.Date[0], api.Date[1])
+	err = db2.Order("create_date,task_id").Find(&dataTarget).Error
+	if err != nil {
+		return nil, 0, err
+	}
 	for _, one := range dataList {
-
 		temp := new(response.DataAbnormalRateResponse)
 		//temp.Id = one.Id
 		//temp.UpdateTime = one.UpdateTime
 		//temp.CreateTime = one.CreateTime
+		temp.NewTarget = 0
+		temp.RetainedTarget = 0
+		temp.PayTarget = 0
+		for _, target := range dataTarget {
+			if target.CreateDate.Format("2006-01-02") == one.NewDate && target.TaskId == one.TaskId {
+				temp.NewTarget = target.NewTarget
+				temp.RetainedTarget = target.RetainedTarget
+				temp.PayTarget = target.PayTarget
+				break
+			}
+		}
 		temp.TaskId = one.TaskId
 		temp.TaskName = one.TaskName
 		temp.DirectorName = one.DirectorName
@@ -183,8 +201,14 @@ func (s *ServiceDataAbnormalRate) SyncAbnormalRateByBatch() {
 		global.GVA_LOG.Error("获取机房数据失败RequestXjfTaskData", zap.Error(err))
 		return
 	}
-	xjfJson, _ := simplejson.NewJson(dataXjf)
-	xjfArr, _ := xjfJson.Array()
+	xjfJson, err := simplejson.NewJson(dataXjf)
+	if err != nil {
+		return
+	}
+	xjfArr, err := xjfJson.Array()
+	if err != nil {
+		return
+	}
 	//查询微信扫码订单数
 
 	//var num map[string]map[int]int /*创建集合,存储机房查询日志接口返回值 */
@@ -198,10 +222,19 @@ func (s *ServiceDataAbnormalRate) SyncAbnormalRateByBatch() {
 		if k == "登陆_成功" {
 			arrNum6 := make(map[int]int)
 			for _, ss := range action6 {
-				result = s.QueryXjfLogByBatch(ss, actionResult)
+				result, err = s.QueryXjfLogByBatch(ss, actionResult)
+				if err != nil {
+					return
+				}
 				if string(result) != "null" {
-					dataJson, _ := simplejson.NewJson(result)
-					dataArr, _ := dataJson.Array()
+					dataJson, err := simplejson.NewJson(result)
+					if err != nil {
+						return
+					}
+					dataArr, err := dataJson.Array()
+					if err != nil {
+						return
+					}
 					for iii, _ := range dataArr {
 						info := dataJson.GetIndex(iii)
 						gameId, _ := info.Get("game_id").Int()
@@ -220,17 +253,32 @@ func (s *ServiceDataAbnormalRate) SyncAbnormalRateByBatch() {
 			}
 			num[k] = arrNum6
 		} else {
-			result = s.QueryXjfLogByBatch(action, actionResult)
+			result, err = s.QueryXjfLogByBatch(action, actionResult)
+			if err != nil {
+				return
+			}
 			if string(result) == "null" {
 				continue
 			}
-			dataJson, _ := simplejson.NewJson(result)
-			dataArr, _ := dataJson.Array()
+			dataJson, err := simplejson.NewJson(result)
+			if err != nil {
+				return
+			}
+			dataArr, err := dataJson.Array()
+			if err != nil {
+				return
+			}
 			arrTemp := make(map[int]int)
 			for iii, _ := range dataArr {
 				info := dataJson.GetIndex(iii)
-				gameId, _ := info.Get("game_id").Int()
-				total, _ := info.Get("total").Int()
+				gameId, err := info.Get("game_id").Int()
+				if err != nil {
+					return
+				}
+				total, err := info.Get("total").Int()
+				if err != nil {
+					return
+				}
 				//global.GVA_LOG.Info(strconv.Itoa(gameId))
 				//global.GVA_LOG.Info(strconv.Itoa(total))
 				//var arr = XjfTotal{GameId: gameId, Total: total}
@@ -314,16 +362,27 @@ func (s *ServiceDataAbnormalRate) SyncAbnormalRateByBatch() {
 
 		for iii, _ := range xjfArr {
 			info := xjfJson.GetIndex(iii)
-			gameId, _ := info.Get("game_id").Int()
+			gameId, err := info.Get("game_id").Int()
+			if err != nil {
+				return
+			}
 			if gameId == task.TaskId {
-				orderSuccessRate, _ = info.Get("order_success_rate").String()
+				orderSuccessRate, err = info.Get("order_success_rate").String()
+				if err != nil {
+					return
+				}
 				break
 			}
 		}
 		orderSuccessRateArr := strings.Split(orderSuccessRate, "/")
-		numOrderPay, _ = strconv.Atoi(orderSuccessRateArr[0]) // 付费订单数
-		numPay, _ = strconv.Atoi(orderSuccessRateArr[1])      // 付费成功数
-		ratePaySuccess = orderSuccessRateArr[2]               //付费成功率
+		if len(orderSuccessRateArr) == 3 {
+			numOrderPay, err = strconv.Atoi(orderSuccessRateArr[0]) // 付费订单数
+			numPay, err = strconv.Atoi(orderSuccessRateArr[1])      // 付费成功数
+			if err != nil {
+				return
+			}
+			ratePaySuccess = orderSuccessRateArr[2] //付费成功率
+		}
 
 		var data dataStatistics.DataAbnormalRate
 		data.CreateTime = time.Now().Format("2006-01-02 15:04:05")
@@ -352,16 +411,22 @@ func (s *ServiceDataAbnormalRate) SyncAbnormalRateByBatch() {
 		data.NumPay = numPay
 		data.RatePaySuccess = ratePaySuccess
 
-		global.GVA_LOG.Info(data.TaskName)
+		//global.GVA_LOG.Info(data.TaskName)
 
 		if !errors.Is(global.GVA_DB.Model(&dataStatistics.DataAbnormalRate{}).Where("new_date = ? and task_id = ? and hour = ?", newDate, taskId, hour).First(&dataStatistics.DataAbnormalRate{}).Error, gorm.ErrRecordNotFound) {
 			//已存在,更新
 			//global.GVA_LOG.Info("已存在,更新")
-			_ = global.GVA_DB.Model(&dataStatistics.DataAbnormalRate{}).Where("new_date = ? and task_id = ? and hour = ?", newDate, taskId, hour).Updates(data).Error
+			err = global.GVA_DB.Model(&dataStatistics.DataAbnormalRate{}).Where("new_date = ? and task_id = ? and hour = ?", newDate, taskId, hour).Updates(data).Error
+			if err != nil {
+				return
+			}
 		} else {
 			//不存在,新建
 			//global.GVA_LOG.Info("不存在,新建")
-			_ = global.GVA_DB.Create(&data).Error
+			err = global.GVA_DB.Create(&data).Error
+			if err != nil {
+				return
+			}
 		}
 	}
 
@@ -369,7 +434,7 @@ func (s *ServiceDataAbnormalRate) SyncAbnormalRateByBatch() {
 }
 
 // QueryXjfLogByBatch 请求机房任务数据
-func (s *ServiceDataAbnormalRate) QueryXjfLogByBatch(action string, actionResult string) (result []byte) {
+func (s *ServiceDataAbnormalRate) QueryXjfLogByBatch(action string, actionResult string) (result []byte, err error) {
 	today := time.Now().Format("2006-01-02")
 	jfUrl := "http://xjf.lianyou.fun:8099/v1/device/get_log_by_game"
 	jfParams := map[string]string{
@@ -377,7 +442,7 @@ func (s *ServiceDataAbnormalRate) QueryXjfLogByBatch(action string, actionResult
 		"action":        action,
 		"action_result": actionResult,
 	}
-	result, _ = utils.HttpGet(jfUrl, jfParams)
+	result, err = utils.HttpGet(jfUrl, jfParams)
 	return
 }
 

+ 10 - 4
service/dataStatistics/wechat_scanner_api.go

@@ -128,10 +128,16 @@ func (s *ServiceWeChatScannerApi) SyncGetWeChatScannerBalance() {
 	//hm2 := strings.Trim(string(hm), "")
 	hm2 := strings.Replace(string(hm), string(ZWNBSP), empty, -1)
 	hm = []byte(hm2)
-	dataHm, _ := simplejson.NewJson(hm)
-	//global.GVA_LOG.Info("2:" + dataHm)
-	code, _ := dataHm.Get("code").Int()
-
+	dataHm, err := simplejson.NewJson(hm)
+	if err != nil {
+		global.GVA_LOG.Error("NewJson,请注意排查!!!")
+		return
+	}
+	code, err := dataHm.Get("code").Int()
+	if err != nil {
+		global.GVA_LOG.Error("Int,请注意排查!!!")
+		return
+	}
 	balanceHm := "0"
 	if code == 1 {
 		balanceHm, _ = dataHm.Get("data").String()

+ 29 - 11
service/dataStatistics/wechat_scanner_detailed.go

@@ -131,16 +131,27 @@ func (s *ServiceWeChatScannerDetailed) SyncWeChatScannerDetailed(today string) {
 		888811:   {GameName: "热血合击tx-10360903 ", LcPriceNew: 0.35, LcPriceRetained: 0.01, HmPriceNew: 0.4, HmPriceRetained: 0.01},
 	}
 	for k, v := range tencentTasks {
-		result := s.getJfWechatOrder(k, today)
-		dataJson, _ := simplejson.NewJson(result)
-		dataArr, _ := dataJson.Array()
-
+		result, err := s.getJfWechatOrder(k, today)
+		if err != nil {
+			return
+		}
+		dataJson, err := simplejson.NewJson(result)
+		if err != nil {
+			return
+		}
+		dataArr, err := dataJson.Array()
+		if err != nil {
+			return
+		}
 		for index, _ := range dataArr {
 			info := dataJson.GetIndex(index)
 			//GameId, _ := info.Get("GameId").Int()
-			WeChatOrder, _ := info.Get("WeChatOrder").String()
-			Retained, _ := info.Get("Retained").Int()
-			Time, _ := info.Get("Time").String()
+			WeChatOrder, err := info.Get("WeChatOrder").String()
+			Retained, err := info.Get("Retained").Int()
+			Time, err := info.Get("Time").String()
+			if err != nil {
+				return
+			}
 
 			orderArr := strings.Split(WeChatOrder, "|")
 			orderId := ""
@@ -149,6 +160,7 @@ func (s *ServiceWeChatScannerDetailed) SyncWeChatScannerDetailed(today string) {
 				orderId = orderArr[0]
 				platform = orderArr[1]
 			}
+
 			var data dataStatistics.WeChatScannerDetailed
 			data.NewDate = today
 			data.TaskId = k
@@ -175,7 +187,10 @@ func (s *ServiceWeChatScannerDetailed) SyncWeChatScannerDetailed(today string) {
 			PriceRetained := 0.00
 			UnitPriceNew := 0.00
 			UnitPriceRetained := 0.00
-			_ = global.GVA_DB.Model(&dataStatistics.WeChatScannerDetailed{}).Select("platform", "COUNT(*) AS count").Where("new_date = ? and task_id = ? and platform = ? and new_retained = 1", today, k, platform).First(&listNum).Error
+			err = global.GVA_DB.Model(&dataStatistics.WeChatScannerDetailed{}).Select("platform", "COUNT(*) AS count").Where("new_date = ? and task_id = ? and platform = ? and new_retained = 1", today, k, platform).First(&listNum).Error
+			if err != nil {
+				return
+			}
 			for _, e := range listNum {
 				if e.Platform == "海马" {
 					PriceNew = v.HmPriceNew * float64(e.Count)
@@ -188,7 +203,10 @@ func (s *ServiceWeChatScannerDetailed) SyncWeChatScannerDetailed(today string) {
 				}
 			}
 			var listNum2 []PlatformNum
-			_ = global.GVA_DB.Model(&dataStatistics.WeChatScannerDetailed{}).Select("platform", "COUNT(*) AS count").Where("new_date = ? and task_id = ? and platform = ? and new_retained >= 2", today, k, platform).First(&listNum2).Error
+			err = global.GVA_DB.Model(&dataStatistics.WeChatScannerDetailed{}).Select("platform", "COUNT(*) AS count").Where("new_date = ? and task_id = ? and platform = ? and new_retained >= 2", today, k, platform).First(&listNum2).Error
+			if err != nil {
+				return
+			}
 			for _, e := range listNum2 {
 				if e.Platform == "海马" {
 					PriceRetained = v.HmPriceRetained * float64(e.Count)
@@ -222,12 +240,12 @@ func (s *ServiceWeChatScannerDetailed) SyncWeChatScannerDetailed(today string) {
 // SyncGetWeChatScannerBalance 定时获取扫码平台余额
 //
 // getJfWechatOrder 获取机房后台微信订单列表信息
-func (s *ServiceWeChatScannerDetailed) getJfWechatOrder(gameId int, date string) (result []byte) {
+func (s *ServiceWeChatScannerDetailed) getJfWechatOrder(gameId int, date string) (result []byte, err error) {
 	jfUrl := "http://xjf.lianyou.fun:8099/v1/account/get_wechat_order"
 	jfParams := map[string]string{
 		"game_id": strconv.Itoa(gameId),
 		"date":    date,
 	}
-	result, _ = utils.HttpGet(jfUrl, jfParams)
+	result, err = utils.HttpGet(jfUrl, jfParams)
 	return
 }

+ 12 - 6
service/dataStatistics/wechat_scanner_ledger.go

@@ -36,9 +36,9 @@ func (s *ServiceWeChatScannerLedger) WeChatScannerLedgerList(ctx context.Context
 	}
 	var total int64
 	err := db.Count(&total).Error
-	//if err != nil {
-	//	return nil, 0, err
-	//}
+	if err != nil {
+		return nil, 0, err
+	}
 	limit := info.PageSize
 	offset := info.PageSize * (info.Page - 1)
 	//var statisticsLogs []*log.LogComputer
@@ -90,11 +90,14 @@ func (s *ServiceWeChatScannerLedger) WeChatScannerLedgerList(ctx context.Context
 
 func (exa *ServiceWeChatScannerLedger) ParseInfoList2Excel(infoList []*response.WeChatScannerLedgerResponse, filePath string) error {
 	excel := excelize.NewFile()
-	_ = excel.SetSheetRow("Sheet1", "A1", &[]string{"日期", "任务ID", "任务名称", "平台", "新增单价", "留存单价", "总消耗", "新增消耗", "留存消耗"})
+	err := excel.SetSheetRow("Sheet1", "A1", &[]string{"日期", "任务ID", "任务名称", "平台", "新增单价", "留存单价", "总消耗", "新增消耗", "留存消耗"})
+	if err != nil {
+		return err
+	}
 
 	for i, one := range infoList {
 		axis := fmt.Sprintf("A%d", i+2)
-		_ = excel.SetSheetRow("Sheet1", axis, &[]interface{}{
+		err = excel.SetSheetRow("Sheet1", axis, &[]interface{}{
 			one.NewDate,
 			one.TaskId,
 			one.TaskName,
@@ -105,7 +108,10 @@ func (exa *ServiceWeChatScannerLedger) ParseInfoList2Excel(infoList []*response.
 			one.LedgerNew,
 			one.LedgerRetained,
 		})
+		if err != nil {
+			return err
+		}
 	}
-	err := excel.SaveAs(filePath)
+	err = excel.SaveAs(filePath)
 	return err
 }

+ 2 - 0
service/fileManager/enter.go

@@ -4,6 +4,8 @@ type ServiceGroup struct {
 	// Code generated by log-server Begin; DO NOT EDIT.
 	ServiceFileFolder
 	ServiceDownLoadUrl
+	ServiceFileType
+	ServiceFileQiniu
 	//ServiceRentComputerShop
 	//ServiceRentSetMeal
 	//ServiceRentComputerLedger

+ 67 - 44
service/fileManager/file_folder.go

@@ -3,7 +3,6 @@ package fileManager
 import (
 	"context"
 	"errors"
-	"go.uber.org/zap"
 	"gorm.io/gorm"
 	"log-server/global"
 	"log-server/model/fileManager"
@@ -16,50 +15,19 @@ import (
 type ServiceFileFolder struct {
 }
 
-// FileList 获取当前父文件夹下所有的子文件夹和文件
-func (s *ServiceFileFolder) FileList(ctx context.Context, api fileManager.FileFolder, info request.PageInfo, order string, desc bool) (interface{}, int64, error) {
+// FileFolderList 获取当前父文件夹下所有的子文件夹
+func (s *ServiceFileFolder) FileFolderList(ctx context.Context, api fileManager.FileFolder) (interface{}, error) {
 	//开始查询当前父文件夹下的所有文件夹(目录)
 	db := global.GVA_DB.Model(&fileManager.FileFolder{})
 	db = db.Where("parent_id = ?", api.ParentId)
-	var total int64
-	err := db.Count(&total).Error
-	if err != nil {
-		return nil, 0, err
-	}
-	limit := info.PageSize
-	offset := info.PageSize * (info.Page - 1)
 	//var statisticsLogs []*log.LogComputer
 	var folderListRes []*response.FileFolderResponse
-	db = db.Limit(limit).Offset(offset)
-	if order != "" {
-		var OrderStr string
-		// 设置有效排序key 防止sql注入
-		// 感谢 Tom4t0 提交漏洞信息
-		orderMap := make(map[string]bool, 3)
-		orderMap["name"] = true
-		//orderMap["game_id"] = true
-		//orderMap["operator"] = true
-		if orderMap[order] {
-			if desc {
-				OrderStr = order + " desc"
-			} else {
-				OrderStr = order
-			}
-		} else { // didn't matched any order key in `orderMap`
-			global.GVA_LOG.Error("获取失败!", zap.Error(err))
-			return folderListRes, total, err
-		}
-		err = db.Order(OrderStr).Find(&folderListRes).Error
-	} else {
-		err = db.Order("name").Find(&folderListRes).Error
-	}
+	err := db.Order("name").Find(&folderListRes).Error
 	if err != nil {
-		return nil, 0, err
+		return nil, err
 	}
 	var folderList []*response.FileFolderResponse
-
 	for _, one := range folderListRes {
-
 		folder := new(response.FileFolderResponse)
 		folder.Id = one.Id
 		folder.UpdateTime = one.UpdateTime
@@ -69,10 +37,38 @@ func (s *ServiceFileFolder) FileList(ctx context.Context, api fileManager.FileFo
 		folder.TaskId = one.TaskId
 		folderList = append(folderList, folder)
 	}
-	//开始查询当前父文件夹下的所有文件
+	return folderList, err
+}
 
-	//===============================
-	return folderList, total, err
+// QueryFolder 条件查询文件夹
+func (s *ServiceFileFolder) QueryFolder(ctx context.Context, api request.FileFolderRequest) (interface{}, error) {
+	db := global.GVA_DB.Model(&fileManager.FileFolder{})
+	db = db.Joins("LEFT JOIN game_task t ON t.task_id = file_folder.task_id")
+	db = db.Where("parent_id = 0")
+	if api.DirectorName != "" {
+		db = db.Where("t.user = ?", api.DirectorName)
+	}
+	if api.Name != "" {
+		db = db.Where("name = ?", api.Name)
+	}
+	//var statisticsLogs []*log.LogComputer
+	var folderListRes []*response.FileFolderResponse
+	err := db.Order("name").Find(&folderListRes).Error
+	if err != nil {
+		return nil, err
+	}
+	//var folderList []*response.FileFolderResponse
+	//for _, one := range folderListRes {
+	//	folder := new(response.FileFolderResponse)
+	//	folder.Id = one.Id
+	//	folder.UpdateTime = one.UpdateTime
+	//	folder.CreateTime = one.CreateTime
+	//	folder.Name = one.Name
+	//	folder.ParentId = one.ParentId
+	//	folder.TaskId = one.TaskId
+	//	folderList = append(folderList, folder)
+	//}
+	return folderListRes, err
 }
 
 //
@@ -125,14 +121,17 @@ func (s *ServiceFileFolder) AddFileFolder(requestFolder request.FileFolderReques
 	if err != nil {
 		return requestFolder.ParentId, requestFolder.Name, err
 	}
-	//判断如果是与任务相关联,则默认创建脚本、镜像、游戏包三个文件夹
-	folderDefaultList := []string{"脚本", "镜像", "apk"}
+	//判断如果是与任务相关联,则默认创建几个文件夹
+	serviceFileType := new(ServiceFileType)
+	typeList, _ := serviceFileType.GetAllFileType()
+
+	//folderDefaultList := []string{"易语言脚本", "雷电镜像", "游戏包", "夜神镜像", "其他文件"}
 	if requestFolder.TaskId != 0 {
-		for _, name := range folderDefaultList {
+		for _, v := range typeList {
 			one := new(fileManager.FileFolder)
-			one.Name = name
+			one.Name = v.Name
 			one.ParentId = insertFolder.Id
-			one.TaskId = 0
+			one.TaskId = insertFolder.TaskId
 			one.CreateTime = time.Now().Format("2006-01-02 15:04:05")
 			one.UpdateTime = time.Now().Format("2006-01-02 15:04:05")
 			err = global.GVA_DB.Create(&one).Error
@@ -151,3 +150,27 @@ func (s *ServiceFileFolder) GetAllTaskSimple() (list interface{}, err error) {
 	err = db.Order("id").Find(&taskList).Error
 	return taskList, err
 }
+
+// SelectFolderMsg 查询目录信息
+func (s *ServiceFileFolder) SelectFolderMsg(requestFolder request.FileFolderRequest) (interface{}, error) {
+	var folder fileManager.FileFolder
+	err := global.GVA_DB.Where("id = ?", requestFolder.Id).First(&folder).Error
+	if err != nil {
+		return nil, errors.New("目录不存在")
+	} else {
+		//if folder.TaskId == 0 {
+		//	return nil, errors.New("不是上层目录")
+		//}
+		var taskInfo task.GameTask
+		db := global.GVA_DB.Model(&task.GameTask{})
+		db.Where("task_id", folder.TaskId)
+		err := db.Find(&taskInfo).Error
+		var res response.FileFolderResponse2
+		res.Id = folder.Id
+		res.Name = folder.Name
+		res.ParentId = folder.ParentId
+		res.TaskId = folder.TaskId
+		res.TaskName = taskInfo.TaskName
+		return res, err
+	}
+}

+ 162 - 0
service/fileManager/file_qiniu.go

@@ -0,0 +1,162 @@
+package fileManager
+
+import (
+	"errors"
+	"fmt"
+	"github.com/qiniu/api.v7/v7/auth/qbox"
+	"github.com/qiniu/api.v7/v7/storage"
+	"gorm.io/gorm"
+	"log-server/global"
+	"log-server/model/fileManager"
+	"log-server/model/fileManager/request"
+	"log-server/model/fileManager/response"
+	"strings"
+	"time"
+)
+
+type ServiceFileQiniu struct {
+}
+
+// 公司七牛信息
+const accessKey = "B81Gsvry2StqKVE3txS-7v9GBBfqykC9zhebmxnW" //七牛云ak,sk,bucket
+const secretKey = "YEZJuYcdeF7vRvzffxpopAVR-jMPZg9pZ-4IKTVW"
+const bucket0 = "pinaishop"
+const CName = "http://cdn.pinaishop.kfzs.com/" //七牛云外链
+
+// QueryVersionByType 查询某一类文件最新的版本号
+func (s *ServiceFileQiniu) QueryVersionByType(req request.FileQiniuRequest) (int64, error) {
+	file := fileManager.FileQiniu{}
+	if errors.Is(global.GVA_DB.Model(&fileManager.FileQiniu{}).Where("task_id = ? and file_type = ?", req.TaskId, req.FileType).Order("file_version desc").First(&file).Error, gorm.ErrRecordNotFound) {
+		return 0, nil
+	}
+	return file.FileVersion, nil
+}
+
+// AddQiniuFile 新增文件
+func (s *ServiceFileQiniu) AddQiniuFile(requestCoding request.FileQiniuRequest) (err error) {
+	//查询真实的父文件夹ID
+	parentFolder := fileManager.FileFolder{}
+	if errors.Is(global.GVA_DB.Where("task_id = ? and name = ?", requestCoding.TaskId, requestCoding.FileTypeName).First(&parentFolder).Error, gorm.ErrRecordNotFound) {
+		return errors.New("父文件夹不存在")
+	}
+	//==================================
+	if !errors.Is(global.GVA_DB.Where("parent_id = ? and file_name = ?", requestCoding.ParentId, requestCoding.FileName).First(&fileManager.FileQiniu{}).Error, gorm.ErrRecordNotFound) {
+		return errors.New("该目录下已存在同名文件")
+	}
+	file := new(fileManager.FileQiniu)
+	file.ParentId = parentFolder.Id
+	file.TaskId = requestCoding.TaskId
+	file.FileName = requestCoding.FileName
+	file.FileVersion = requestCoding.FileVersion
+	file.QiniuAddress = requestCoding.QiniuAddress
+	file.QiniuKey = requestCoding.QiniuKey
+	file.QiniuHash = requestCoding.QiniuHash
+	file.FileType = requestCoding.FileType
+	file.CreateTime = time.Now().Format("2006-01-02 15:04:05")
+	file.UpdateTime = time.Now().Format("2006-01-02 15:04:05")
+	return global.GVA_DB.Create(&file).Error
+}
+
+// QueryFilesByParentId 查询当前目录下的文件
+func (s *ServiceFileQiniu) QueryFilesByParentId(parentId int) (interface{}, error) {
+	db := global.GVA_DB.Model(&fileManager.FileQiniu{})
+	db = db.Where("parent_id = ?", parentId)
+	var fileList []*response.FileQiniuResponse
+	err := db.Order("create_time desc").Find(&fileList).Error
+	if err != nil {
+		return nil, err
+	}
+	return fileList, err
+}
+
+// GetQiniuToken 获取七牛上传token
+func (s *ServiceFileQiniu) GetQiniuToken() interface{} {
+	putPolicy := storage.PutPolicy{
+		Scope:      bucket0,
+		ReturnBody: `{"key":"$(key)","hash":"$(etag)","fsize":$(fsize),"bucket":"$(bucket)","name":"$(x:name)"}`,
+	}
+	putPolicy.Expires = 3600 * 5 //设置有效期时长为5小时
+	mac := qbox.NewMac(accessKey, secretKey)
+	uploadToken := putPolicy.UploadToken(mac)
+	date := map[string]string{
+		"token": uploadToken,
+		"cName": CName,
+	}
+	return date
+}
+
+// DeleteQiniuFile 删除单个文件
+func (s *ServiceFileQiniu) DeleteQiniuFile(requestCoding request.FileQiniuRequest) (err error) {
+	mac := qbox.NewMac(accessKey, secretKey)
+	cfg := storage.Config{
+		// 是否使用https域名进行资源管理
+		UseHTTPS: true,
+	}
+	// 指定空间所在的区域,如果不指定将自动探测
+	// 如果没有特殊需求,默认不需要指定
+	//cfg.Region=&storage.ZoneHuabei
+	bucketManager := storage.NewBucketManager(mac, &cfg)
+	bucket := bucket0
+	key := requestCoding.QiniuKey
+	//
+	err = bucketManager.Delete(bucket, key)
+	if err != nil {
+		fmt.Println(err)
+		return err
+	}
+	return err
+}
+
+// DeleteQiniuFileAndRecord 从七牛云删除文件并且清除数据库记录
+func (s *ServiceFileQiniu) DeleteQiniuFileAndRecord(requestCoding request.FileQiniuRequest) (err error) {
+	mac := qbox.NewMac(accessKey, secretKey)
+	cfg := storage.Config{
+		// 是否使用https域名进行资源管理
+		UseHTTPS: true,
+	}
+	// 指定空间所在的区域,如果不指定将自动探测
+	// 如果没有特殊需求,默认不需要指定
+	//cfg.Region=&storage.ZoneHuabei
+	bucketManager := storage.NewBucketManager(mac, &cfg)
+	bucket := bucket0
+	key := requestCoding.QiniuKey
+	//
+	err = bucketManager.Delete(bucket, key)
+	if err != nil {
+		fmt.Println(err)
+		return err
+	}
+	err = global.GVA_DB.Delete(&fileManager.FileQiniu{}, "id = ?", requestCoding.Id).Error
+	return err
+}
+
+// RenameQiniuFileAndRecord 重命名七牛云文件和数据库记录
+func (s *ServiceFileQiniu) RenameQiniuFileAndRecord(requestCoding request.FileQiniuRequest) (err error) {
+	file := fileManager.FileQiniu{}
+	if errors.Is(global.GVA_DB.Where("id = ?", requestCoding.Id).First(&file).Error, gorm.ErrRecordNotFound) {
+		return errors.New("数据库中未找到该记录")
+	}
+	mac := qbox.NewMac(accessKey, secretKey)
+	cfg := storage.Config{
+		// 是否使用https域名进行资源管理
+		UseHTTPS: true,
+	}
+	bucketManager := storage.NewBucketManager(mac, &cfg)
+	bucket := bucket0
+	srcKey := requestCoding.QiniuKey
+	//处理字段
+	s2 := file.QiniuKey[0:strings.Index(file.QiniuKey, file.FileName)]
+	//global.GVA_LOG.Info(s2)
+	destKey := s2 + requestCoding.FileNameNew
+	//如果目标文件存在,是否强制覆盖,如果不覆盖,默认返回614 file exists
+	err = bucketManager.Move(bucket, srcKey, bucket, destKey, false)
+	if err != nil {
+		return err
+	}
+	s3 := file.QiniuAddress[0:strings.Index(file.QiniuAddress, file.FileName)]
+	file.QiniuAddress = s3 + requestCoding.FileNameNew
+	file.FileName = requestCoding.FileNameNew
+	file.QiniuKey = destKey
+	err = global.GVA_DB.Save(file).Error
+	return err
+}

+ 17 - 0
service/fileManager/file_type.go

@@ -0,0 +1,17 @@
+package fileManager
+
+import (
+	"log-server/global"
+	"log-server/model/fileManager"
+)
+
+type ServiceFileType struct {
+}
+
+// GetAllFileType 查询所有
+func (s *ServiceFileType) GetAllFileType() ([]fileManager.FileType, error) {
+	var typeList []fileManager.FileType
+	db := global.GVA_DB.Model(&fileManager.FileType{})
+	err := db.Order("id").Find(&typeList).Error
+	return typeList, err
+}

+ 8 - 5
service/rentComputer/rent_computer.go

@@ -57,9 +57,9 @@ func (s *ServiceRentComputer) RentComputerList(ctx context.Context, api rentComp
 
 	var total int64
 	err := db.Count(&total).Error
-	//if err != nil {
-	//	return nil, 0, err
-	//}
+	if err != nil {
+		return nil, 0, err
+	}
 	limit := info.PageSize
 	offset := info.PageSize * (info.Page - 1)
 	//var statisticsLogs []*log.LogComputer
@@ -85,7 +85,7 @@ func (s *ServiceRentComputer) RentComputerList(ctx context.Context, api rentComp
 		}
 		err = db.Order(OrderStr).Find(&statisticscomputers).Error
 	} else {
-		err = db.Order("id").Find(&statisticscomputers).Error
+		err = db.Order("pc_num").Find(&statisticscomputers).Error
 	}
 	if err != nil {
 		return nil, 0, err
@@ -427,7 +427,10 @@ func (exa *ServiceRentComputer) ParseExcel2InfoList(filePath string) (err error)
 				return errors.New("Excel格式错误")
 			}
 		}
-
+		if len(row) == 0 {
+			//global.GVA_LOG.Info("数组为空")
+			continue
+		}
 		c := new(rentComputer.RentComputer)
 		c.PcNum = row[0]
 		c.PcName = row[0]

+ 10 - 5
service/rentComputer/rent_computer_ledger.go

@@ -130,13 +130,15 @@ func (service *ServiceRentComputerLedger) GetRentComputerLedgerNum(ctx context.C
 	return total
 }
 
-func (service *ServiceRentComputerLedger) ParseInfoList2Excel(infoList []*response.RentComputerLedgerResponse, filePath string) error {
+func (service *ServiceRentComputerLedger) ParseInfoList2Excel(infoList []*response.RentComputerLedgerResponse, filePath string) (err error) {
 	excel := excelize.NewFile()
-	_ = excel.SetSheetRow("Sheet1", "A1", &[]string{"日期", "供应商", "编号", "起租日期", "到期日期", "租期", "套餐", "价格", "天租金", "已产生租金", "备注"})
-
+	err = excel.SetSheetRow("Sheet1", "A1", &[]string{"日期", "供应商", "编号", "起租日期", "到期日期", "租期", "套餐", "价格", "天租金", "已产生租金", "备注"})
+	if err != nil {
+		return err
+	}
 	for i, one := range infoList {
 		axis := fmt.Sprintf("A%d", i+2)
-		_ = excel.SetSheetRow("Sheet1", axis, &[]interface{}{
+		err = excel.SetSheetRow("Sheet1", axis, &[]interface{}{
 			one.NewDate,
 			one.ShopName,
 			one.PcNum,
@@ -149,7 +151,10 @@ func (service *ServiceRentComputerLedger) ParseInfoList2Excel(infoList []*respon
 			one.RentPriceUsedThen,
 			one.Remark,
 		})
+		if err != nil {
+			return err
+		}
 	}
-	err := excel.SaveAs(filePath)
+	err = excel.SaveAs(filePath)
 	return err
 }

+ 84 - 13
service/task/upload_file.go

@@ -4,10 +4,14 @@ 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"
 	"mime/multipart"
@@ -35,14 +39,15 @@ func (e *UploadFileService) UploadFileFunc(file *multipart.FileHeader) (string,
 	// 拼接新文件名
 	filename := name + "_" + time.Now().Format("20060102150405") + ext
 	// 尝试创建此路径
-	mkdirErr := os.MkdirAll(global.GVA_CONFIG.Local.StorePath, os.ModePerm)
+	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.StorePath + "/" + filename
-	filepath := global.GVA_CONFIG.Local.Path + "/" + filename
+	p := global.GVA_CONFIG.Local.ScriptPath + "/" + filename
+	filepath := global.GVA_CONFIG.Local.ScriptPath + "/" + filename
+
 
 	f, openError := file.Open() // 读取文件
 	f1, openErr := file.Open()	//	读取文件生成MD5值
@@ -67,6 +72,7 @@ func (e *UploadFileService) UploadFileFunc(file *multipart.FileHeader) (string,
 	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())
@@ -77,51 +83,56 @@ func (e *UploadFileService) UploadFileFunc(file *multipart.FileHeader) (string,
 
 
 //上传文件
-func (e *UploadFileService) UploadFile(gameId int, header *multipart.FileHeader) (file response.UploadFileResponse, err error) {
+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
+	//定义下载前缀
+	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").Where("game_id = ?", gameId).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").Where("game_id = ?", gameId).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(gameId int, md5String string) (info response.DownloadFile, err error) {
+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
+	//改由存储至数据库的时候拼接前缀
+	//var prefix string = global.GVA_CONFIG.PrefixUrl.PrefixLocal
 	//数据库中无记录,即不需要更新
-	err = global.GVA_DB.Table("upload_file").Where("game_id = ?", gameId).Last(&file).Error
+	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("无对应game_id")
+		return info, errors.New("无对应脚本")
 	}
 
 	if file.Md5String == md5String {
@@ -131,7 +142,7 @@ func (e *UploadFileService) DownloadFile(gameId int, md5String string) (info res
 			Flag: false,
 		}
 	} else {
-		fullUrl := prefix + file.Url
+		fullUrl := file.Url
 		info = response.DownloadFile{
 			Url: fullUrl,
 			Md5String: file.Md5String,
@@ -141,5 +152,65 @@ func (e *UploadFileService) DownloadFile(gameId int, md5String string) (info res
 
 	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ární
uploads/file/f3fec2e20827e0864de04b7efacf5f6c_20230228152241.dll


binární
uploads/file/scriptFile/10d3279ef8b9a19d712844c66812a079_20230308150102.dll