From 4b63908ad085bc570623f7b0c0fd397b2ae7a80d Mon Sep 17 00:00:00 2001 From: zhangqian <zhangqian@123.com> Date: 星期一, 07 八月 2023 15:41:32 +0800 Subject: [PATCH] 增加文件列表接口,文件上传时间,文件删除时间 --- service/file.go | 4 api/v1/file.go | 73 ++++++------ model/request/file.go | 2 utils/upload/upload.go | 35 +++++ go.mod | 3 docs/swagger.yaml | 50 +++++--- model/file.go | 15 +- docs/docs.go | 73 +++++++---- router/file.go | 1 docs/swagger.json | 73 +++++++---- 10 files changed, 208 insertions(+), 121 deletions(-) diff --git a/api/v1/file.go b/api/v1/file.go index 1edb6b9..9fbdc78 100644 --- a/api/v1/file.go +++ b/api/v1/file.go @@ -8,11 +8,11 @@ "aps_crm/pkg/ecode" "aps_crm/pkg/httpx" "aps_crm/service" - "github.com/flipped-aurora/gin-vue-admin/server/utils/upload" + "aps_crm/utils/upload" "github.com/gin-gonic/gin" + "github.com/spf13/cast" "os" "path/filepath" - "strconv" ) type FileApi struct{} @@ -21,7 +21,8 @@ // @Tags 闄勪欢绠$悊 // @Summary 娣诲姞闄勪欢 // @Produce application/json -// @Param object body request.AddFile true "鏌ヨ鍙傛暟" +// @Param object formData request.AddFile true "鏌ヨ鍙傛暟" +// @Param file formData file true "涓婁紶鏂囦欢" // @Success 200 {object} contextx.Response{} // @Router /api/file/add [post] func (s *FileApi) Add(c *gin.Context) { @@ -44,7 +45,7 @@ return } - _, filename := filepath.Split(filePath) + _, filename := filepath.Split(header.Filename) fileRecord := &model.File{ Name: filename, @@ -80,17 +81,11 @@ return } - id, _ := strconv.Atoi(c.Param("id")) - + idx := c.Param("id") + id := cast.ToUint(idx) file, err := model.NewFileSearch().SetId(id).First() if err != nil { ctx.FailWithMsg(ecode.ParamsErr, "鏌ユ壘鏂囦欢澶辫触") - return - } - - err = os.Remove(file.FilePath) - if err != nil { - ctx.FailWithMsg(ecode.ParamsErr, "鍒犻櫎鏂囦欢澶辫触") return } @@ -100,36 +95,42 @@ return } - ctx.Ok() -} - -// Update -// @Tags 闄勪欢绠$悊 -// @Summary 鏇存柊闄勪欢 -// @Produce application/json -// @Param object body request.UpdateFile true "鏌ヨ鍙傛暟" -// @Success 200 {object} contextx.Response{} -// @Router /api/file/update [put] -func (s *FileApi) Update(c *gin.Context) { - var params request.UpdateFile - ctx, ok := contextx.NewContext(c, ¶ms) - if !ok { - return - } - if params.Id == 0 { - ctx.Fail(ecode.ParamsErr) - } - params.File.Id = params.Id - - errCode := service.NewFileService().UpdateFile(¶ms.File) - if errCode != ecode.OK { - ctx.Fail(errCode) + err = os.Remove(file.FilePath) + if err != nil { + ctx.FailWithMsg(ecode.ParamsErr, "鍒犻櫎鏂囦欢澶辫触") return } ctx.Ok() } +//// Update +//// @Tags 闄勪欢绠$悊 +//// @Summary 鏇存柊闄勪欢 +//// @Produce application/json +//// @Param object body request.UpdateFile true "鏌ヨ鍙傛暟" +//// @Success 200 {object} contextx.Response{} +//// @Router /api/file/update [put] +//func (s *FileApi) Update(c *gin.Context) { +// var params request.UpdateFile +// ctx, ok := contextx.NewContext(c, ¶ms) +// if !ok { +// return +// } +// if params.Id == 0 { +// ctx.Fail(ecode.ParamsErr) +// } +// params.File.ID = params.Id +// +// errCode := service.NewFileService().UpdateFile(¶ms.File) +// if errCode != ecode.OK { +// ctx.Fail(errCode) +// return +// } +// +// ctx.Ok() +//} + // List // @Tags 闄勪欢绠$悊 // @Summary 鑾峰彇闄勪欢鍒楄〃 diff --git a/docs/docs.go b/docs/docs.go index 4364ed1..93d955e 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -2503,13 +2503,25 @@ "summary": "娣诲姞闄勪欢", "parameters": [ { - "description": "鏌ヨ鍙傛暟", - "name": "object", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/request.AddFile" - } + "type": "integer", + "description": "鏉ユ簮id", + "name": "sourceId", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "闄勪欢鏉ユ簮", + "name": "sourceType", + "in": "formData", + "required": true + }, + { + "type": "file", + "description": "涓婁紶鏂囦欢", + "name": "file", + "in": "formData", + "required": true } ], "responses": { @@ -8741,6 +8753,21 @@ "BankAccountQueryClassExpireLessThen60Days" ] }, + "constvar.CollectionStatus": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "x-enum-comments": { + "CollectionStatusCollected": "宸叉敹娆�", + "CollectionStatusUnCollected": "寰呮敹娆�" + }, + "x-enum-varnames": [ + "CollectionStatusUnCollected", + "CollectionStatusCollected" + ] + }, "constvar.FaqKeywordType": { "type": "string", "enum": [ @@ -10454,7 +10481,11 @@ }, "status": { "description": "鐘舵�侊紙1鏈敹2宸叉敹锛�", - "type": "integer" + "allOf": [ + { + "$ref": "#/definitions/constvar.CollectionStatus" + } + ] }, "term": { "description": "鏈熸", @@ -11274,23 +11305,6 @@ } } }, - "request.AddFile": { - "type": "object", - "required": [ - "sourceId", - "sourceType" - ], - "properties": { - "sourceId": { - "description": "鏉ユ簮id", - "type": "integer" - }, - "sourceType": { - "description": "闄勪欢鏉ユ簮", - "type": "string" - } - } - }, "request.AddFollowRecord": { "type": "object", "required": [ @@ -11840,6 +11854,9 @@ }, "request.AddServiceCollectionPlan": { "type": "object", + "required": [ + "list" + ], "properties": { "list": { "type": "array", @@ -14662,7 +14679,11 @@ }, "status": { "description": "鐘舵�侊紙1鏈敹2宸叉敹锛�", - "type": "integer" + "allOf": [ + { + "$ref": "#/definitions/constvar.CollectionStatus" + } + ] }, "term": { "description": "鏈熸", diff --git a/docs/swagger.json b/docs/swagger.json index d5c765e..930c3eb 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -2491,13 +2491,25 @@ "summary": "娣诲姞闄勪欢", "parameters": [ { - "description": "鏌ヨ鍙傛暟", - "name": "object", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/request.AddFile" - } + "type": "integer", + "description": "鏉ユ簮id", + "name": "sourceId", + "in": "formData", + "required": true + }, + { + "type": "string", + "description": "闄勪欢鏉ユ簮", + "name": "sourceType", + "in": "formData", + "required": true + }, + { + "type": "file", + "description": "涓婁紶鏂囦欢", + "name": "file", + "in": "formData", + "required": true } ], "responses": { @@ -8729,6 +8741,21 @@ "BankAccountQueryClassExpireLessThen60Days" ] }, + "constvar.CollectionStatus": { + "type": "integer", + "enum": [ + 1, + 2 + ], + "x-enum-comments": { + "CollectionStatusCollected": "宸叉敹娆�", + "CollectionStatusUnCollected": "寰呮敹娆�" + }, + "x-enum-varnames": [ + "CollectionStatusUnCollected", + "CollectionStatusCollected" + ] + }, "constvar.FaqKeywordType": { "type": "string", "enum": [ @@ -10442,7 +10469,11 @@ }, "status": { "description": "鐘舵�侊紙1鏈敹2宸叉敹锛�", - "type": "integer" + "allOf": [ + { + "$ref": "#/definitions/constvar.CollectionStatus" + } + ] }, "term": { "description": "鏈熸", @@ -11262,23 +11293,6 @@ } } }, - "request.AddFile": { - "type": "object", - "required": [ - "sourceId", - "sourceType" - ], - "properties": { - "sourceId": { - "description": "鏉ユ簮id", - "type": "integer" - }, - "sourceType": { - "description": "闄勪欢鏉ユ簮", - "type": "string" - } - } - }, "request.AddFollowRecord": { "type": "object", "required": [ @@ -11828,6 +11842,9 @@ }, "request.AddServiceCollectionPlan": { "type": "object", + "required": [ + "list" + ], "properties": { "list": { "type": "array", @@ -14650,7 +14667,11 @@ }, "status": { "description": "鐘舵�侊紙1鏈敹2宸叉敹锛�", - "type": "integer" + "allOf": [ + { + "$ref": "#/definitions/constvar.CollectionStatus" + } + ] }, "term": { "description": "鏈熸", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index a70480d..de6c84e 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -11,6 +11,17 @@ type: string x-enum-varnames: - BankAccountQueryClassExpireLessThen60Days + constvar.CollectionStatus: + enum: + - 1 + - 2 + type: integer + x-enum-comments: + CollectionStatusCollected: 宸叉敹娆� + CollectionStatusUnCollected: 寰呮敹娆� + x-enum-varnames: + - CollectionStatusUnCollected + - CollectionStatusCollected constvar.FaqKeywordType: enum: - "" @@ -1173,8 +1184,9 @@ description: 婧愬崟绫诲瀷锛�1閿�鍞槑缁�2鏈嶅姟鍚堝悓3閿�鍞彂绁級 type: integer status: + allOf: + - $ref: '#/definitions/constvar.CollectionStatus' description: 鐘舵�侊紙1鏈敹2宸叉敹锛� - type: integer term: description: 鏈熸 type: integer @@ -1731,18 +1743,6 @@ name: type: string type: object - request.AddFile: - properties: - sourceId: - description: 鏉ユ簮id - type: integer - sourceType: - description: 闄勪欢鏉ユ簮 - type: string - required: - - sourceId - - sourceType - type: object request.AddFollowRecord: properties: follow_record: @@ -2110,6 +2110,8 @@ items: $ref: '#/definitions/model.ServiceCollectionPlan' type: array + required: + - list type: object request.AddServiceContract: properties: @@ -4022,8 +4024,9 @@ description: 婧愬崟绫诲瀷锛�1閿�鍞槑缁�2鏈嶅姟鍚堝悓3閿�鍞彂绁級 type: integer status: + allOf: + - $ref: '#/definitions/constvar.CollectionStatus' description: 鐘舵�侊紙1鏈敹2宸叉敹锛� - type: integer term: description: 鏈熸 type: integer @@ -6518,12 +6521,21 @@ /api/file/add: post: parameters: - - description: 鏌ヨ鍙傛暟 - in: body - name: object + - description: 鏉ユ簮id + in: formData + name: sourceId required: true - schema: - $ref: '#/definitions/request.AddFile' + type: integer + - description: 闄勪欢鏉ユ簮 + in: formData + name: sourceType + required: true + type: string + - description: 涓婁紶鏂囦欢 + in: formData + name: file + required: true + type: file produces: - application/json responses: diff --git a/go.mod b/go.mod index 2d77042..b9fcfe1 100644 --- a/go.mod +++ b/go.mod @@ -16,6 +16,7 @@ github.com/mojocn/base64Captcha v1.3.5 github.com/pkg/errors v0.9.1 github.com/robfig/cron/v3 v3.0.1 + github.com/shopspring/decimal v1.3.1 github.com/songzhibin97/gkit v1.2.11 github.com/spf13/viper v1.16.0 github.com/stretchr/testify v1.8.4 @@ -31,7 +32,6 @@ gorm.io/driver/mysql v1.5.1 gorm.io/gorm v1.25.1 moul.io/zapgorm2 v1.3.0 - github.com/shopspring/decimal v1.3.1 ) require ( @@ -97,7 +97,6 @@ github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rogpeppe/go-internal v1.10.0 // indirect github.com/shirou/gopsutil/v3 v3.22.5 // indirect - github.com/shopspring/decimal v1.3.1 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.1 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect diff --git a/model/file.go b/model/file.go index 3b919f3..bd1c46a 100644 --- a/model/file.go +++ b/model/file.go @@ -11,7 +11,6 @@ type ( // File 闄勪欢 File struct { - Id int `json:"id" gorm:"column:id;primary_key;AUTO_INCREMENT"` Name string `gorm:"name" json:"name"` Size int64 `gorm:"size" json:"size"` // 鏂囦欢澶у皬 FilePath string `gorm:"file_path" json:"filePath"` // 鏂囦欢璺緞 @@ -22,9 +21,7 @@ FileType string `gorm:"file_type" json:"fileType"` // 鏂囦欢绫诲瀷 SourceType string `gorm:"source_type" json:"sourceType"` // 闄勪欢鏉ユ簮 SourceId int `gorm:"source_id" json:"sourceId"` // 鏉ユ簮id - CreateTime string `gorm:"create_time" json:"createTime"` // 鍒涘缓鏃堕棿 - UpdateTime string `gorm:"update_time" json:"updateTime"` - Content string `gorm:"content" json:"content"` // 鏂囦欢鍐呭 + gorm.Model `json:"-"` } // FileSearch 闄勪欢鎼滅储鏉′欢 @@ -51,8 +48,8 @@ func (slf *FileSearch) build() *gorm.DB { var db = slf.Orm.Model(&File{}) - if slf.Id != 0 { - db = db.Where("id = ?", slf.Id) + if slf.ID != 0 { + db = db.Where("id = ?", slf.ID) } return db @@ -85,8 +82,8 @@ return record, err } -func (slf *FileSearch) SetId(id int) *FileSearch { - slf.Id = id +func (slf *FileSearch) SetId(id uint) *FileSearch { + slf.ID = id return slf } @@ -108,7 +105,7 @@ } func (slf *FileSearch) Save(record *File) error { - if record.Id == 0 { + if record.ID == 0 { return errors.New("id涓虹┖") } var db = slf.build() diff --git a/model/request/file.go b/model/request/file.go index 5b17b6b..096675b 100644 --- a/model/request/file.go +++ b/model/request/file.go @@ -11,7 +11,7 @@ } type UpdateFile struct { - Id int `json:"id"` + Id uint `json:"id"` model.File } diff --git a/router/file.go b/router/file.go index 60757b4..3946e5d 100644 --- a/router/file.go +++ b/router/file.go @@ -11,5 +11,6 @@ { FileRouter.POST("add", FileApi.Add) // 娣诲姞闄勪欢 FileRouter.DELETE("delete/:id", FileApi.Delete) // 鍒犻櫎闄勪欢 + FileRouter.GET("list", FileApi.List) // 闄勪欢鍒楄〃 } } diff --git a/service/file.go b/service/file.go index af78875..584aa11 100644 --- a/service/file.go +++ b/service/file.go @@ -22,7 +22,7 @@ return ecode.OK } -func (FileService) DeleteFile(id int) int { +func (FileService) DeleteFile(id uint) int { err := model.NewFileSearch().SetId(id).Delete() if err != nil { return ecode.DBErr @@ -57,7 +57,7 @@ } func (FileService) UpdateFile(file *model.File) int { - err := model.NewFileSearch().SetId(file.Id).Save(file) + err := model.NewFileSearch().SetId(file.ID).Save(file) if err != nil { return ecode.DBErr } diff --git a/utils/upload/upload.go b/utils/upload/upload.go new file mode 100644 index 0000000..a6823ac --- /dev/null +++ b/utils/upload/upload.go @@ -0,0 +1,35 @@ +package upload + +import ( + "mime/multipart" +) + +// OSS 瀵硅薄瀛樺偍鎺ュ彛 +// Author [SliverHorn](https://github.com/SliverHorn) +// Author [ccfish86](https://github.com/ccfish86) +type OSS interface { + UploadFile(file *multipart.FileHeader) (string, string, error) + DeleteFile(key string) error +} + +type ossType string + +const ( + ossTypeLocal ossType = "local" + currentOssType = ossTypeLocal +) + +// NewOss OSS鐨勫疄渚嬪寲鏂规硶 +// Author [SliverHorn](https://github.com/SliverHorn) +// Author [ccfish86](https://github.com/ccfish86) +func NewOss() OSS { + switch currentOssType { + case ossTypeLocal: + return &Local{ + StorePath: "/data/uploads/file", + Path: "/data/uploads/file", + } + default: + return &Local{} + } +} -- Gitblit v1.8.0