From 995283a2e69b059e3ffb87f0d1ee7acc65e24297 Mon Sep 17 00:00:00 2001 From: luziqi Date: Mon, 17 Apr 2023 18:05:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A3=B0=E9=9F=B3=E8=AF=84=E6=B5=8B=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/docs.go | 102 +++++++++++++++++++--------------------------- docs/swagger.json | 29 +++++++++++++ docs/swagger.yaml | 19 +++++++++ env/env.go | 2 +- main.go | 40 +++++++----------- qatool/voice.go | 93 ++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 200 insertions(+), 85 deletions(-) create mode 100644 qatool/voice.go diff --git a/docs/docs.go b/docs/docs.go index cae93eb..4c29fd8 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1,17 +1,10 @@ -// Package docs GENERATED BY THE COMMAND ABOVE; DO NOT EDIT -// This file was generated by swaggo/swag -package docs +// Code generated by swaggo/swag. DO NOT EDIT. -import ( - "bytes" - "encoding/json" - "strings" - "text/template" +package docs - "github.com/swaggo/swag" -) +import "github.com/swaggo/swag" -var doc = `{ +const docTemplate = `{ "schemes": {{ marshal .Schemes }}, "swagger": "2.0", "info": { @@ -954,6 +947,35 @@ var doc = `{ } } }, + "/api/tool/v1/voice/list": { + "get": { + "description": "根据表单id获取声音评测内容,返回分组和分组文件信息", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "tags": [ + "工具相关 /api/tool/v1/" + ], + "summary": "获取声音评测内容", + "parameters": [ + { + "type": "string", + "description": "表单id", + "name": "form_id", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "返回分组和分组文件信息", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + } + }, "/webdav/monkey/task/:id/:filename": { "put": { "description": "上传Logcat日志", @@ -991,56 +1013,18 @@ var doc = `{ } }` -type swaggerInfo struct { - Version string - Host string - BasePath string - Schemes []string - Title string - Description string -} - // SwaggerInfo holds exported Swagger Info so clients can modify it -var SwaggerInfo = swaggerInfo{ - Version: "", - Host: "", - BasePath: "", - Schemes: []string{}, - Title: "", - Description: "", -} - -type s struct{} - -func (s *s) ReadDoc() string { - sInfo := SwaggerInfo - sInfo.Description = strings.Replace(sInfo.Description, "\n", "\\n", -1) - - t, err := template.New("swagger_info").Funcs(template.FuncMap{ - "marshal": func(v interface{}) string { - a, _ := json.Marshal(v) - return string(a) - }, - "escape": func(v interface{}) string { - // escape tabs - str := strings.Replace(v.(string), "\t", "\\t", -1) - // replace " with \", and if that results in \\", replace that with \\\" - str = strings.Replace(str, "\"", "\\\"", -1) - return strings.Replace(str, "\\\\\"", "\\\\\\\"", -1) - }, - }).Parse(doc) - if err != nil { - return doc - } - - var tpl bytes.Buffer - if err := t.Execute(&tpl, sInfo); err != nil { - return doc - } - - return tpl.String() +var SwaggerInfo = &swag.Spec{ + Version: "", + Host: "", + BasePath: "", + Schemes: []string{}, + Title: "", + Description: "", + InfoInstanceName: "swagger", + SwaggerTemplate: docTemplate, } func init() { - swag.Register("swagger", &s{}) + swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) } diff --git a/docs/swagger.json b/docs/swagger.json index b54e524..8b877d4 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -935,6 +935,35 @@ } } }, + "/api/tool/v1/voice/list": { + "get": { + "description": "根据表单id获取声音评测内容,返回分组和分组文件信息", + "consumes": [ + "application/x-www-form-urlencoded" + ], + "tags": [ + "工具相关 /api/tool/v1/" + ], + "summary": "获取声音评测内容", + "parameters": [ + { + "type": "string", + "description": "表单id", + "name": "form_id", + "in": "query", + "required": true + } + ], + "responses": { + "200": { + "description": "返回分组和分组文件信息", + "schema": { + "$ref": "#/definitions/models.Response" + } + } + } + } + }, "/webdav/monkey/task/:id/:filename": { "put": { "description": "上传Logcat日志", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 84a2874..08ba496 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -627,6 +627,25 @@ paths: summary: 获取应用信息 tags: - Monkey相关 /api/project/v1/ + /api/tool/v1/voice/list: + get: + consumes: + - application/x-www-form-urlencoded + description: 根据表单id获取声音评测内容,返回分组和分组文件信息 + parameters: + - description: 表单id + in: query + name: form_id + required: true + type: string + responses: + "200": + description: 返回分组和分组文件信息 + schema: + $ref: '#/definitions/models.Response' + summary: 获取声音评测内容 + tags: + - 工具相关 /api/tool/v1/ /webdav/monkey/task/:id/:filename: put: consumes: diff --git a/env/env.go b/env/env.go index f3d2aa6..6b8b844 100644 --- a/env/env.go +++ b/env/env.go @@ -7,7 +7,7 @@ import ( ) func InitDB() { - db, err := dbsql.GetConn(dbsql.DSN_local) + db, err := dbsql.GetConn(dbsql.DSN) if err != nil { return } diff --git a/main.go b/main.go index 73d9e05..f3e1022 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "autogo/device" "autogo/env" "autogo/monkey" + "autogo/qatool" "flag" "fmt" "net/http" @@ -24,38 +25,24 @@ var ( ) func init() { - flag.StringVar(&ENV, "env", "test", "测试环境") + flag.StringVar(&ENV, "env", "dev", "测试环境") } func main() { - // dbsql.DSN = dbsql.DSN_local - // db, err := dbsql.GetConn(dbsql.DSN) - // if err != nil { - // fmt.Println(err) - // return - // } - // defer dbsql.Close(db) - // var task models.MonkeyTask - // db.Last(&task) - // common.PushMonkeyResult(task) - // return - go crontask.Run() + flag.Parse() + if ENV == "dev" { + fmt.Println("dev开发模式") + } else if ENV == "prod" { + fmt.Println("prod生产模式") + go crontask.Run() + } + + dbsql.DSN = dbsql.DSN_local env.InitDB() log.SetLevel(log.DebugLevel) log.SetReportCaller(true) - flag.Parse() - if ENV == "test" { - log.Info("[MODE] dev-test config") - fmt.Println("") - dbsql.DSN = dbsql.DSN_local - } else if ENV == "prod" { - log.Info("[MODE] Prod config") - fmt.Println("") - dbsql.DSN = dbsql.DSN_local - } else { - log.Error("param.env error:", ENV) - } + port := ":6364" // 1.创建路由 @@ -95,6 +82,9 @@ func main() { r.POST("/api/device/v1/update_status", device.UpdateDeviceStatus) r.POST("/api/device/v1/opt/install", device.InstallApp) + // 工具接口 + r.GET("/api/tool/v1/voice/list", qatool.GetVoiceTestData) + r.Run(port) } diff --git a/qatool/voice.go b/qatool/voice.go new file mode 100644 index 0000000..68848a1 --- /dev/null +++ b/qatool/voice.go @@ -0,0 +1,93 @@ +package qatool + +import ( + "autogo/controllers" + "autogo/dbsql" + "net/http" + + "github.com/gin-gonic/gin" +) + +type Voice struct { + ID int `json:"id" gorm:"primary_key"` + FormID string `json:"form_id" gorm:"column:form_id"` + GroupID int `json:"group_id" gorm:"column:group_id"` + Filename string `json:"filename" gorm:"column:filename"` + FileURL string `json:"file_url" gorm:"column:file_url"` + IsDel int `json:"-" gorm:"column:is_del"` +} + +func (t *Voice) TableName() string { + return "voice" +} + +type VoiceGroup struct { + ID int `json:"id" gorm:"primary_key"` + List []Voice `json:"list"` +} + +// @Tags 工具相关 /api/tool/v1/ +// @Summary 获取声音评测内容 +// @Description 根据表单id获取声音评测内容,返回分组和分组文件信息 +// @accept x-www-form-urlencoded +// @Param form_id query string true "表单id" +// @Success 200 {object} models.Response "返回分组和分组文件信息" +// @Router /api/tool/v1/voice/list [get] +func GetVoiceTestData(c *gin.Context) { + rsp := controllers.NewResponse() + + form_id := c.DefaultQuery("form_id", "") + if form_id == "" { + c.JSON(http.StatusOK, rsp.Error("form_id error")) + return + } + + db, err := dbsql.GetConn(dbsql.DSN) + if err != nil { + c.JSON(http.StatusOK, rsp.Error(err.Error())) + return + } + defer dbsql.Close(db) + + var list []Voice + db.Table("voice").Model(Voice{}).Where("form_id = ?", form_id).Find(&list) + + if len(list) == 0 { + c.JSON(http.StatusOK, rsp.Error("该表单id下无分组数据")) + return + } + + m := make(map[int]VoiceGroup) + for _, v := range list { + if group, ok := m[v.GroupID]; ok { + group.List = append(group.List, v) + m[v.GroupID] = group + } else { + var _group VoiceGroup + _group.ID = v.GroupID + _group.List = append(_group.List, v) + m[v.GroupID] = _group + } + } + var groups []VoiceGroup + for _, v := range m { + groups = append(groups, v) + } + + bubbleSort(&groups) + + rsp.Success() + rsp.Data = groups + c.JSON(http.StatusOK, rsp) +} + +func bubbleSort(arr *[]VoiceGroup) { + n := len(*arr) + for i := 0; i < n-1; i++ { + for j := 0; j < n-i-1; j++ { + if (*arr)[j].ID > (*arr)[j+1].ID { + (*arr)[j], (*arr)[j+1] = (*arr)[j+1], (*arr)[j] + } + } + } +}